diff --git a/.gitmodules b/.gitmodules index 14670a363..585da846a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -16,6 +16,3 @@ [submodule "examples/ManualModel"] path = examples/ManualModel url = https://github.com/Open-Systems-Pharmacology/Example_ManualModel.git -[submodule "simmodel.schema"] - path = simmodel.schema - url = https://github.com/Open-Systems-Pharmacology/OSPSuite.SimModel.Schema.git diff --git a/SolutionInfo.cs b/SolutionInfo.cs index 7ec89c8ed..fe8f7bc44 100644 --- a/SolutionInfo.cs +++ b/SolutionInfo.cs @@ -6,9 +6,6 @@ [assembly: AssemblyProduct("MoBi")] [assembly: AssemblyCopyright("Copyright © 2002-2019 - Open Systems Pharmacology Community")] [assembly: ComVisible(false)] -[assembly: AssemblyVersion("8.0.0")] -[assembly: AssemblyFileVersion("8.0.0")] -[assembly: AssemblyInformationalVersion("8.0.0")] [assembly: InternalsVisibleTo("MoBi.Tests")] [assembly: InternalsVisibleTo("MoBi.UI.Tests")] diff --git a/appveyor-coverage.yml b/appveyor-coverage.yml index 0af9529c1..be60d478b 100644 --- a/appveyor-coverage.yml +++ b/appveyor-coverage.yml @@ -1,9 +1,10 @@ configuration: Debug -image: Visual Studio 2017 +image: Visual Studio 2019 environment: + app_version: '9.0' MIK_TEX_INSTALL_DIR: 'C:\MikTex\' - app_version: '8.0' + APPVEYOR_BLOCK_DOTNETCORE_TESTS_AUTORUN: true version: '$(app_version).{build}' @@ -15,17 +16,14 @@ assembly_info: clone_depth: 1 -cache: - packages -> **\packages.config - install: -- set PATH=C:\Ruby22\bin;C:\\Python34;C:\\Python34\\Scripts;%PATH%" -- pip install codecov -- git submodule update --init --recursive -- ps: >- - (new-object net.webclient).DownloadFile('https://github.com/Open-Systems-Pharmacology/MiKTeX/releases/download/v2.9.3/MikTex.2.9.3.msi', 'C:\\MikTex.msi') + - set PATH=C:\Ruby22\bin;C:\\Python34;C:\\Python34\\Scripts;%PATH%" + - pip install codecov + - git submodule update --init --recursive + - ps: >- + (new-object net.webclient).DownloadFile('https://github.com/Open-Systems-Pharmacology/MiKTeX/releases/download/v2.9.3/MikTex.2.9.3.msi', 'C:\\MikTex.msi') - Start-Process msiexec.exe -ArgumentList /i, C:\MikTex.msi, /quiet, /qn, /norestart, INSTALLDIR=$env:MIK_TEX_INSTALL_DIR -Wait + Start-Process msiexec.exe -ArgumentList /i, C:\MikTex.msi, /quiet, /qn, /norestart, INSTALLDIR=$env:MIK_TEX_INSTALL_DIR -Wait before_build: - nuget sources add -name bddhelper -source https://ci.appveyor.com/nuget/ospsuite-bddhelper @@ -38,6 +36,7 @@ before_build: - nuget sources add -name simmodel -source https://ci.appveyor.com/nuget/ospsuite-simmodel - nuget sources add -name cvodes -source https://ci.appveyor.com/nuget/ospsuite-simmodel-solver-cvodes - nuget sources add -name core -source https://ci.appveyor.com/nuget/ospsuite-core + - nuget install opencover -OutputDirectory packages - nuget restore build: diff --git a/appveyor-nightly.yml b/appveyor-nightly.yml index d4bda3381..322eae5f3 100644 --- a/appveyor-nightly.yml +++ b/appveyor-nightly.yml @@ -1,23 +1,26 @@ configuration: Debug -image: Visual Studio 2017 +image: Visual Studio 2019 + +# hack until donet patching works with PR +init: + - cmd: if DEFINED APPVEYOR_PULL_REQUEST_NUMBER (Set build_number=1) ELSE (Set build_number=%APPVEYOR_BUILD_NUMBER%) environment: - app_version: '8.0' + app_version: '9.0' + APPVEYOR_BLOCK_DOTNETCORE_TESTS_AUTORUN: true MIK_TEX_INSTALL_DIR: 'C:\MikTex\' version: '$(app_version).{build}' -assembly_info: +dotnet_csproj: patch: true - file: SolutionInfo.* - assembly_version: "{version}" - assembly_file_version: "{version}" - assembly_informational_version: "{version}" + file: '**\*.csproj' + assembly_version: "$(app_version).$(build_number)" + file_version: "$(app_version).$(build_number)" + informational_version: "$(app_version).$(build_number)" -clone_depth: 1 -cache: - packages -> **\packages.config +clone_depth: 1 install: - set PATH=C:\Ruby25\bin;%PATH% diff --git a/appveyor.yml b/appveyor.yml index 048d96bea..aeb08f988 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -1,8 +1,13 @@ configuration: Debug -image: Visual Studio 2017 +image: Visual Studio 2019 + +# hack until donet patching works with PR +init: + - cmd: if DEFINED APPVEYOR_PULL_REQUEST_NUMBER (Set build_number=1) ELSE (Set build_number=%APPVEYOR_BUILD_NUMBER%) environment: - app_version: '8.0' + app_version: '9.0' + APPVEYOR_BLOCK_DOTNETCORE_TESTS_AUTORUN: true version: '$(app_version).{build}' @@ -11,14 +16,12 @@ clone_depth: 1 install: - git submodule update --init --recursive -assembly_info: +dotnet_csproj: patch: true - file: SolutionInfo.* - assembly_version: "{version}" - assembly_file_version: "{version}" - -cache: - packages -> **\packages.config # preserve "packages" directory in the root of build folder but will reset it if packages.config is modified + file: '**\*.csproj' + assembly_version: "$(app_version).$(build_number)" + file_version: "$(app_version).$(build_number)" + informational_version: "$(app_version).$(build_number)" before_build: - nuget sources add -name bddhelper -source https://ci.appveyor.com/nuget/ospsuite-bddhelper diff --git a/dimensions b/dimensions index da34d25c9..067cccc17 160000 --- a/dimensions +++ b/dimensions @@ -1 +1 @@ -Subproject commit da34d25c9fd0df82fd5353cd12c8d9852a65e847 +Subproject commit 067cccc17df5677782f3c292d0fa0ae4e4295ef1 diff --git a/pkparameters b/pkparameters index 647082d99..18940312f 160000 --- a/pkparameters +++ b/pkparameters @@ -1 +1 @@ -Subproject commit 647082d99ba28f76eac84ce8b91330de6e39d401 +Subproject commit 18940312f97b3b2a3b690d3f83b88db7393d0260 diff --git a/rakefile.rb b/rakefile.rb index 3e92f497c..ac1a1cc8f 100644 --- a/rakefile.rb +++ b/rakefile.rb @@ -9,23 +9,29 @@ filter << "+[MoBi.Assets]*" filter << "+[MoBi.Presentation]*" - Coverage.cover(filter , "MoBi.Tests.csproj") + targetProjects = [ + "MoBi.Tests.csproj", + "MoBi.UI.Tests.csproj", + ]; + + Coverage.cover(filter , targetProjects) end task :create_setup, [:product_version, :configuration, :smart_xls_package, :smart_xls_version] do |t, args| update_smart_xls args + src_dir = src_dir_for(args.configuration) + relative_src_dir = relative_src_dir_for(args.configuration) + #Ignore files from automatic harvesting that will be installed specifically harvest_ignored_files = [ - 'MoBi.exe', - 'Standard Molecule.pkml' + 'MoBi.exe' ] #Files required for setup creation only setup_files = [ - 'packages/**/OSPSuite.Core/**/*.xml', - 'packages/**/OSPSuite.Presentation/**/*.{wxs,xml}', - 'packages/**/OSPSuite.TeXReporting/**/*.*', + "#{relative_src_dir}/ChartLayouts/**/*.{wxs,xml}", + "#{relative_src_dir}/TeXTemplates/**/*.*", 'examples/**/*.{wxs,pkml,mbp3}', 'src/Data/**/*.*', 'src/MoBi.Assets/Resources/*.ico', @@ -39,7 +45,7 @@ Rake::Task['setup:create'].execute(OpenStruct.new( solution_dir: solution_dir, - src_dir: src_dir_for(args.configuration), + src_dir: src_dir, setup_dir: setup_dir, product_name: product_name, product_version: args.product_version, @@ -51,25 +57,28 @@ end task :create_portable_setup, [:product_version, :configuration, :package_name] do |t, args| + src_dir = src_dir_for(args.configuration) + relative_src_dir = relative_src_dir_for(args.configuration) + + copy_templates_files src_dir + #Files required for setup creation only and that will not be harvested automatically setup_files = [ 'Open Systems Pharmacology Suite License.pdf', 'documentation/*.pdf', 'dimensions/*.xml', 'pkparameters/*.xml', - 'src/Data/*.xml', + 'src/Data/**/*.*', 'setup/**/*.{rtf}', ] setup_folders = [ + "#{setup_temp_dir}/**/*.*", 'examples/**/*.{pkml,mbp3}', - 'packages/**/OSPSuite.Presentation/**/*.{xml}', - 'packages/**/OSPSuite.TeXReporting/**/*.{json,sty,tex}', ] - Rake::Task['setup:create_portable'].execute(OpenStruct.new( solution_dir: solution_dir, - src_dir: src_dir_for(args.configuration), + src_dir: src_dir, setup_dir: setup_dir, product_name: product_name, product_version: args.product_version, @@ -85,8 +94,18 @@ Utils.update_go_diagram_license args.file_path, args.license end +def copy_templates_files(source_dir) + FileUtils.mkdir_p setup_temp_dir + FileUtils.copy_entry File.join(source_dir, 'TeXTemplates'), File.join(setup_temp_dir, 'TeXTemplates') + FileUtils.copy_entry File.join(source_dir, 'ChartLayouts'), File.join(setup_temp_dir, 'ChartLayouts') +end + +def relative_src_dir_for(configuration) + File.join('src', 'MoBi', 'bin', configuration, 'net472') +end + def src_dir_for(configuration) - File.join(solution_dir, 'src', 'MoBi', 'bin', configuration) + File.join(solution_dir, relative_src_dir_for(configuration)) end def update_smart_xls(args) @@ -101,27 +120,27 @@ def update_smart_xls(args) end task :postclean do |t, args| - packages_dir = File.join(solution_dir, 'packages') + packages_dir = src_dir_for("Debug") all_users_dir = ENV['ALLUSERSPROFILE'] - all_users_application_dir = File.join(all_users_dir, manufacturer, product_name, '8.0') + all_users_application_dir = File.join(all_users_dir, manufacturer, product_name, '9.0') - copy_depdencies solution_dir, all_users_application_dir do + copy_dependencies solution_dir, all_users_application_dir do copy_files 'Data', ['xml', 'mbdt'] copy_file 'src/Data/AllCalculationMethods.pkml' copy_dimensions_xml copy_pkparameters_xml end - copy_depdencies solution_dir, File.join(all_users_application_dir, 'Templates') do + copy_dependencies solution_dir, File.join(all_users_application_dir, 'Templates') do copy_templates_pkml end - copy_depdencies packages_dir, File.join(all_users_application_dir, 'ChartLayouts') do - copy_files 'OSPSuite.Presentation', 'xml' + copy_dependencies packages_dir, File.join(all_users_application_dir, 'ChartLayouts') do + copy_files 'ChartLayouts', 'xml' end - copy_depdencies packages_dir, File.join(all_users_application_dir, 'TeXTemplates', 'StandardTemplate') do + copy_dependencies packages_dir, File.join(all_users_application_dir, 'TeXTemplates', 'StandardTemplate') do copy_files 'StandardTemplate', '*' end end @@ -146,4 +165,8 @@ def suite_name def setup_dir File.join(solution_dir, 'setup') +end + +def setup_temp_dir + File.join(setup_dir, 'temp') end \ No newline at end of file diff --git a/scripts b/scripts index 1533da91c..8a4929193 160000 --- a/scripts +++ b/scripts @@ -1 +1 @@ -Subproject commit 1533da91c69e9d4fe53c49479f57f11bf458a438 +Subproject commit 8a49291933a14f17f25a6112507ce466bb2805da diff --git a/simmodel.schema b/simmodel.schema deleted file mode 160000 index ba10b251d..000000000 --- a/simmodel.schema +++ /dev/null @@ -1 +0,0 @@ -Subproject commit ba10b251d111d6370d04904da2b261acdc7279dd diff --git a/src/Data/AllCalculationMethods.pkml b/src/Data/AllCalculationMethods.pkml index 53689f292..894f6dcb6 100644 --- a/src/Data/AllCalculationMethods.pkml +++ b/src/Data/AllCalculationMethods.pkml @@ -1,8 +1,8 @@  - + - + @@ -72,7 +72,7 @@ - + @@ -82,7 +82,7 @@ - + @@ -92,7 +92,7 @@ - + @@ -102,7 +102,7 @@ - + @@ -112,7 +112,7 @@ - + @@ -122,7 +122,7 @@ - + @@ -132,7 +132,7 @@ - + @@ -142,7 +142,7 @@ - + @@ -152,7 +152,7 @@ - + @@ -162,7 +162,7 @@ - + @@ -172,7 +172,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -192,7 +192,7 @@ - + @@ -397,7 +397,7 @@ - + @@ -465,7 +465,7 @@ - + @@ -535,7 +535,7 @@ - + @@ -545,7 +545,7 @@ - + @@ -555,7 +555,7 @@ - + @@ -565,7 +565,7 @@ - + @@ -575,7 +575,7 @@ - + @@ -585,7 +585,7 @@ - + @@ -595,7 +595,7 @@ - + @@ -605,7 +605,7 @@ - + @@ -615,7 +615,7 @@ - + @@ -625,7 +625,7 @@ - + @@ -635,7 +635,7 @@ - + @@ -645,7 +645,7 @@ - + @@ -655,7 +655,7 @@ - + @@ -860,7 +860,7 @@ - + @@ -914,9 +914,9 @@ - + @@ -938,7 +938,7 @@ - + @@ -948,7 +948,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -968,7 +968,7 @@ - + @@ -978,7 +978,7 @@ - + @@ -988,7 +988,7 @@ - + @@ -998,7 +998,7 @@ - + @@ -1008,7 +1008,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1028,7 +1028,7 @@ - + @@ -1038,7 +1038,7 @@ - + @@ -1048,7 +1048,7 @@ - + @@ -1058,7 +1058,7 @@ - + @@ -1068,7 +1068,7 @@ - + @@ -1078,7 +1078,7 @@ - + @@ -1088,7 +1088,7 @@ - + @@ -1098,7 +1098,7 @@ - + @@ -1108,7 +1108,7 @@ - + @@ -1118,7 +1118,7 @@ - + @@ -1128,7 +1128,7 @@ - + @@ -1138,7 +1138,7 @@ - + @@ -1148,7 +1148,7 @@ - + @@ -1158,7 +1158,7 @@ - + @@ -1168,7 +1168,7 @@ - + @@ -1178,7 +1178,7 @@ - + @@ -1188,7 +1188,7 @@ - + @@ -1198,7 +1198,7 @@ - + @@ -1208,7 +1208,7 @@ - + @@ -1218,7 +1218,7 @@ - + @@ -1228,7 +1228,7 @@ - + @@ -1238,7 +1238,7 @@ - + @@ -1248,7 +1248,7 @@ - + @@ -1258,7 +1258,7 @@ - + @@ -1268,7 +1268,7 @@ - + @@ -1278,7 +1278,7 @@ - + @@ -1288,7 +1288,7 @@ - + @@ -1298,7 +1298,7 @@ - + @@ -1763,7 +1763,7 @@ - + @@ -1817,7 +1817,7 @@ - + @@ -1827,7 +1827,7 @@ - + @@ -1837,7 +1837,7 @@ - + @@ -1847,7 +1847,7 @@ - + @@ -1857,7 +1857,7 @@ - + @@ -1867,7 +1867,7 @@ - + @@ -1877,7 +1877,7 @@ - + @@ -1887,7 +1887,7 @@ - + @@ -1897,7 +1897,7 @@ - + @@ -1907,7 +1907,7 @@ - + @@ -1917,7 +1917,7 @@ - + @@ -1927,7 +1927,7 @@ - + @@ -1937,7 +1937,7 @@ - + @@ -1947,7 +1947,7 @@ - + @@ -1957,7 +1957,7 @@ - + @@ -1967,7 +1967,7 @@ - + @@ -1977,7 +1977,7 @@ - + @@ -1987,7 +1987,7 @@ - + @@ -1997,7 +1997,7 @@ - + @@ -2007,7 +2007,7 @@ - + @@ -2017,7 +2017,7 @@ - + @@ -2027,7 +2027,7 @@ - + @@ -2037,7 +2037,7 @@ - + @@ -2047,7 +2047,7 @@ - + @@ -2057,7 +2057,7 @@ - + @@ -2067,7 +2067,7 @@ - + @@ -2077,7 +2077,7 @@ - + @@ -2087,7 +2087,7 @@ - + @@ -2097,7 +2097,7 @@ - + @@ -2107,7 +2107,7 @@ - + @@ -2117,7 +2117,7 @@ - + @@ -2127,7 +2127,7 @@ - + @@ -2137,7 +2137,7 @@ - + @@ -2147,7 +2147,7 @@ - + @@ -2187,10 +2187,10 @@ - + - + @@ -2223,24 +2223,24 @@ - + - + - + @@ -2337,10 +2337,10 @@ - + - + @@ -2366,24 +2366,24 @@ - + - + - + @@ -2482,14 +2482,14 @@ - - - - - - - - + + + + + + + + @@ -2542,10 +2542,10 @@ - - - - + + + + @@ -2559,10 +2559,10 @@ - + - + @@ -2572,7 +2572,7 @@ - + @@ -2582,7 +2582,7 @@ - + @@ -2592,7 +2592,7 @@ - + @@ -2605,7 +2605,7 @@ - + @@ -2710,7 +2710,7 @@ - + @@ -2720,7 +2720,7 @@ - + @@ -2730,7 +2730,7 @@ - + @@ -2740,7 +2740,7 @@ - + @@ -2750,7 +2750,7 @@ - + @@ -2760,7 +2760,7 @@ - + @@ -2770,7 +2770,7 @@ - + @@ -2780,7 +2780,7 @@ - + @@ -2790,7 +2790,7 @@ - + @@ -2800,7 +2800,7 @@ - + @@ -2810,7 +2810,7 @@ - + @@ -2820,7 +2820,7 @@ - + @@ -2830,7 +2830,7 @@ - + @@ -2840,7 +2840,7 @@ - + @@ -2850,7 +2850,7 @@ - + @@ -2860,7 +2860,7 @@ - + @@ -2870,7 +2870,7 @@ - + @@ -2880,7 +2880,7 @@ - + @@ -2890,7 +2890,7 @@ - + @@ -2900,7 +2900,7 @@ - + @@ -2910,7 +2910,7 @@ - + @@ -2920,7 +2920,7 @@ - + @@ -2930,7 +2930,7 @@ - + @@ -2940,7 +2940,7 @@ - + @@ -2950,7 +2950,7 @@ - + @@ -2960,7 +2960,7 @@ - + @@ -2970,7 +2970,7 @@ - + @@ -2980,7 +2980,7 @@ - + @@ -2990,7 +2990,7 @@ - + @@ -3000,7 +3000,7 @@ - + @@ -3010,7 +3010,7 @@ - + @@ -3020,7 +3020,7 @@ - + @@ -3030,7 +3030,7 @@ - + @@ -3040,7 +3040,7 @@ - + @@ -3050,7 +3050,7 @@ - + @@ -3060,7 +3060,7 @@ - + @@ -3070,7 +3070,7 @@ - + @@ -3080,7 +3080,7 @@ - + @@ -3090,7 +3090,7 @@ - + @@ -3100,7 +3100,7 @@ - + @@ -3110,7 +3110,7 @@ - + @@ -3120,7 +3120,7 @@ - + @@ -3130,7 +3130,7 @@ - + @@ -3140,7 +3140,7 @@ - + @@ -3154,24 +3154,24 @@ - + - + - + @@ -3234,24 +3234,24 @@ - + - + - + @@ -3315,24 +3315,24 @@ - + - + - + @@ -3395,24 +3395,24 @@ - + - + - + @@ -3474,14 +3474,14 @@ - - - - - - - - + + + + + + + + @@ -3514,10 +3514,10 @@ - - - - + + + + @@ -3562,7 +3562,7 @@ - + @@ -3667,7 +3667,7 @@ - + @@ -3677,7 +3677,7 @@ - + @@ -3687,7 +3687,7 @@ - + @@ -3697,7 +3697,7 @@ - + @@ -3707,7 +3707,7 @@ - + @@ -3717,7 +3717,7 @@ - + @@ -3727,7 +3727,7 @@ - + @@ -3737,7 +3737,7 @@ - + @@ -3747,7 +3747,7 @@ - + @@ -3757,7 +3757,7 @@ - + @@ -3767,7 +3767,7 @@ - + @@ -3777,7 +3777,7 @@ - + @@ -3787,7 +3787,7 @@ - + @@ -3797,7 +3797,7 @@ - + @@ -3807,7 +3807,7 @@ - + @@ -3817,7 +3817,7 @@ - + @@ -3827,7 +3827,7 @@ - + @@ -3837,7 +3837,7 @@ - + @@ -3847,7 +3847,7 @@ - + @@ -3857,7 +3857,7 @@ - + @@ -3867,7 +3867,7 @@ - + @@ -3877,7 +3877,7 @@ - + @@ -3887,7 +3887,7 @@ - + @@ -3897,7 +3897,7 @@ - + @@ -3907,7 +3907,7 @@ - + @@ -3917,7 +3917,7 @@ - + @@ -3927,7 +3927,7 @@ - + @@ -3937,7 +3937,7 @@ - + @@ -3947,7 +3947,7 @@ - + @@ -3957,7 +3957,7 @@ - + @@ -3967,7 +3967,7 @@ - + @@ -3977,7 +3977,7 @@ - + @@ -3987,7 +3987,7 @@ - + @@ -3997,7 +3997,7 @@ - + @@ -4007,7 +4007,7 @@ - + @@ -4017,7 +4017,7 @@ - + @@ -4027,7 +4027,7 @@ - + @@ -4037,7 +4037,7 @@ - + @@ -4047,7 +4047,7 @@ - + @@ -4057,7 +4057,7 @@ - + @@ -4067,7 +4067,7 @@ - + @@ -4077,7 +4077,7 @@ - + @@ -4087,7 +4087,7 @@ - + @@ -4097,7 +4097,7 @@ - + @@ -4111,24 +4111,24 @@ - + - + - + @@ -4191,24 +4191,24 @@ - + - + - + @@ -4272,24 +4272,24 @@ - + - + - + @@ -4352,24 +4352,24 @@ - + - + - + @@ -4431,14 +4431,14 @@ - - - - - - - - + + + + + + + + @@ -4471,10 +4471,10 @@ - - - - + + + + @@ -4519,7 +4519,7 @@ - + @@ -4541,7 +4541,7 @@ - + @@ -4551,7 +4551,7 @@ - + @@ -4561,7 +4561,7 @@ - + @@ -4571,7 +4571,7 @@ - + @@ -4581,7 +4581,7 @@ - + @@ -4591,7 +4591,7 @@ - + @@ -4602,7 +4602,7 @@ - + @@ -4612,7 +4612,7 @@ - + @@ -4622,7 +4622,7 @@ - + @@ -4632,7 +4632,7 @@ - + @@ -4642,7 +4642,7 @@ - + @@ -4653,7 +4653,7 @@ - + @@ -4663,7 +4663,7 @@ - + @@ -4673,7 +4673,7 @@ - + @@ -4683,7 +4683,7 @@ - + @@ -4693,7 +4693,7 @@ - + @@ -4703,7 +4703,7 @@ - + @@ -4850,11 +4850,11 @@ - + - + @@ -4864,7 +4864,7 @@ - + diff --git a/src/Data/Templates/2 Pores Passive Transports.pkml b/src/Data/Templates/2 Pores Passive Transports.pkml index c20b3a2d2..1b6039a82 100644 --- a/src/Data/Templates/2 Pores Passive Transports.pkml +++ b/src/Data/Templates/2 Pores Passive Transports.pkml @@ -1,8 +1,8 @@  - - + + - + @@ -17,7 +17,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -49,7 +49,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -83,7 +83,7 @@ - + @@ -98,7 +98,7 @@ - + @@ -113,7 +113,7 @@ - + @@ -128,7 +128,7 @@ - + @@ -143,7 +143,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -173,7 +173,7 @@ - + @@ -188,7 +188,7 @@ - + @@ -203,7 +203,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -233,7 +233,7 @@ - + @@ -248,45 +248,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Standard Molecule-FcRn_Complex - - - - + @@ -307,7 +269,7 @@ - + @@ -327,7 +289,7 @@ - + @@ -347,7 +309,7 @@ - + @@ -363,7 +325,7 @@ - + @@ -378,7 +340,7 @@ - + @@ -393,28 +355,7 @@ - - - - - - - - - - - - - - - - - FcRn - Standard Molecule-FcRn_Complex - - - - + @@ -425,28 +366,33 @@ - + - + - + - + - + + + FcRn + Standard Molecule-FcRn_Complex + + - + @@ -456,8 +402,8 @@ - + @@ -467,7 +413,23 @@ - + + + + + + + + + + + + + + + + + @@ -486,7 +448,7 @@ - + @@ -505,7 +467,7 @@ - + @@ -520,7 +482,7 @@ - + @@ -540,7 +502,7 @@ - + @@ -562,7 +524,7 @@ - + @@ -583,7 +545,7 @@ - + @@ -604,7 +566,7 @@ - + @@ -624,7 +586,7 @@ - + @@ -647,7 +609,7 @@ - + @@ -664,7 +626,7 @@ - + @@ -680,7 +642,7 @@ - + @@ -696,7 +658,7 @@ - + @@ -711,7 +673,7 @@ - + @@ -730,7 +692,44 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FcRn + Standard Molecule-FcRn_Complex + + + + @@ -751,7 +750,7 @@ - + @@ -767,44 +766,45 @@ - + - - + + - + + - + - + + - - + + - FcRn Standard Molecule-FcRn_Complex - + @@ -822,7 +822,7 @@ - + @@ -840,7 +840,7 @@ - + @@ -861,7 +861,7 @@ - + @@ -880,7 +880,7 @@ - + @@ -899,7 +899,7 @@ - + @@ -920,7 +920,7 @@ - + @@ -939,7 +939,7 @@ - + @@ -958,7 +958,7 @@ - + @@ -976,7 +976,7 @@ - + @@ -1000,7 +1000,7 @@ - + @@ -1018,7 +1018,7 @@ - + @@ -1033,7 +1033,7 @@ - + @@ -1057,7 +1057,7 @@ - + @@ -1077,7 +1077,7 @@ - + @@ -1094,29 +1094,29 @@ - + - + - + - + - + @@ -1125,212 +1125,212 @@ - + - + - - - + - + - - - - - - - + + + + - + - - - + + + + - + - - + - + - + - - + - + - + - - - + + + - + - - - + - + - - - + - + - - - - - + + + + + - + - - - - + + + + - + - + + - + - + + - + - - + - + - - + - + - + + + + - + - + + + + + + + - + - - - - + + + + + + + + - + - - - - - - - + + + - + - - - - - - - - + + + + - + - + - + - + - - + - + + + - + - - - + + + + + - + - - - - - + + + - + - - - - - + + + - + - - - + + + + + - + - + - + + + + + - + @@ -1338,7 +1338,7 @@ - + @@ -1346,82 +1346,82 @@ - + - + - + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - - + + - + - - + + @@ -1429,7 +1429,7 @@ - + @@ -1438,12 +1438,12 @@ - + - - + + @@ -1456,23 +1456,23 @@ - + - + - + - + @@ -1507,38 +1507,38 @@ - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Data/Templates/Human 2 Pores.pkml b/src/Data/Templates/Human 2 Pores.pkml index aaee7dfd9..c745e7241 100644 --- a/src/Data/Templates/Human 2 Pores.pkml +++ b/src/Data/Templates/Human 2 Pores.pkml @@ -1,364 +1,367 @@  - - - + + + - + - - + + + - - + + - - + + - + - + - - - + + - - + + - - + + - + - + - + - + - - + + + - + - - - + + - + - + - + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - + - + - + - + - + - + - + - - - + + - - - + + - - - + + - - + + + - + - + - - + + - - + + - - + + - - + + - - - + + - + - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - + - + - - - + + + - + - - - - - + - + - + - + - + - + - + - + - + - + + - + - + - + - + + - - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -367,113 +370,114 @@ - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - - - - + - + + + + - - + + - + - + - + - + - + - + - + @@ -482,481 +486,483 @@ - + - + - + - - - - - - - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - + - + - + + - + - + - + - + - + - + - + - + - + - + - + + - + - - - - - - - - + - - + - + - + - + + - + - - + + - + - + - + - + - + - + - - + + + + + + + + - + - + - + - + - - - - - - - + - + - + - + - + + + + + + + - + - + - + - + - + + - + - + - + - + + - + - - - - + - + + + + - + - - + + + - - + + - + - - - + + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -965,503 +971,505 @@ - + - + - + - + - + - + - + - + - + - + - - - - - - - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - - - - - - - - + - - + - + - + - - + + - + - - + + - + - + + - + - + - + - - + + - + - - + - + - + + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + + - + - + - + - + + - + - + - + - + - + - - - - - - - + - + + + + + + + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - - + + + - + - - + + - - - + + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -1470,247 +1478,248 @@ - + - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - - + - + - + - + - + + - + - - + + - - + + - + + - + - - + + - - + + - - + - + - + - + @@ -1719,26 +1728,27 @@ - + - + - + + - + - + - + @@ -1748,12 +1758,12 @@ - + - + - + @@ -1762,12 +1772,12 @@ - + - + - + @@ -1776,12 +1786,12 @@ - + - + - + @@ -1790,12 +1800,12 @@ - + - + - + @@ -1804,12 +1814,12 @@ - + - + - + @@ -1818,12 +1828,12 @@ - + - + - + @@ -1832,12 +1842,12 @@ - + - + - + @@ -1846,12 +1856,12 @@ - + - + - + @@ -1860,190 +1870,191 @@ - + - + - + - + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -2052,470 +2063,472 @@ - + - + - + - + + + + + - + - + - - - - - + - + + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - - + - + - + - + - + + - + - + - + - + - + - - + - + - + - + - + - - - - - - - + - + - + - + - + - + - + - + + + + + + + - + - + - + + - + - + - + - + + - + - - - - + - + + + + - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -2524,475 +2537,477 @@ - + - + - - - - - + + + - + - + - + - - - + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - - + - + - + - + + + + + + + + - + - + - + - + - + - - + + - + - - - - - - - - + - + - + - + - + - + + - + - - + - + - + - + - + - + - + + - + - + - + - + + - + - + - + - + - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - - + + @@ -3000,397 +3015,395 @@ - + - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - - + - + - + - + + - + - - + + - + - - + + - + - + - + - - + + - + - + - - + + - + - - - - - - - - + - + - + - + - - - - - - - + - + - + - + - + + + + + + + - + - + - + - + + - + - + - - + + - + - + - + - - - - - + + - - + + - + - + - - + + + + + - - + + - + - + - - - - - + + - - + + - + - + - + - + @@ -3400,343 +3413,354 @@ - + - + - - + + - + - + - + - - + + + + + - - + + - + - + - + - + + - + - - - - + - + + + + - + - - - - - - - + - + + + + + + + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - - - - + - + + + + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3744,19 +3768,12 @@ - - - - - - - - + - + - + @@ -3766,30 +3783,33 @@ - + - - + + - - + + + + + - + - + - + - + - + @@ -3799,15 +3819,15 @@ - + - + - - + + - + @@ -3815,32 +3835,29 @@ - + - + - - - - - + + - - + + - + - + - + - + @@ -3850,231 +3867,234 @@ - + - - - - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - + + - - + + + + + + - + - + + - + - - + + - + - + - + - + - + - + - + + + + - + - - + + - + - - - - + - - + + - + - + + + + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + - + - + - + @@ -4082,12 +4102,12 @@ - + - + - + @@ -4097,234 +4117,237 @@ - + - - - - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - + + - + - + - - - - - - - + - + + + + + - + - + - - - - + - - + + - + - + - + + + + + + + - + - - + + - + - + + + + - + - - - - - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4332,12 +4355,12 @@ - + - + - + @@ -4347,234 +4370,237 @@ - + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - + - - + + - + - - + + + + + - + - - + + - - + + - + - + + + + - - - - + - + + - - + + + + + - + - + + + + - + - - - - - - - + - - + + - + - + + + + - - - - - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4582,12 +4608,12 @@ - + - + - + @@ -4597,90 +4623,86 @@ - + - - - - + - + - + - + + + + - + - + - + - + - + - + - + - + - + + + + - + - + - + - - + + - + - - - - - - + + - + - - - - + @@ -4688,143 +4710,150 @@ - + - + - + - + - + - - - - + - + - + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4832,12 +4861,12 @@ - + - + - + @@ -4847,99 +4876,86 @@ - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + + + + - + - - - - - - - - - + + - + - - - - - - - - - - + - + @@ -4947,147 +4963,163 @@ - + - + + + + - + - + - + - + - + - + - + - + - + + + + - + - + + + + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - - + + + + + + + + - + - + - + - + @@ -5097,99 +5129,86 @@ - + - - - - - - - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + + + + + + + + + + - + - - - - - + + - + - - - - + - - - - - - - - - - - + @@ -5197,134 +5216,150 @@ - + + + + - + - + + + + - + - + - + - + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5332,12 +5367,12 @@ - + - + - + @@ -5347,96 +5382,86 @@ - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + + + + - + - + - + - - + + - + - - - - - - - - - - - - - - + - + - + @@ -5444,150 +5469,163 @@ - + - + - + - + + + + - + + + + - + - + - + - + - - + + + + + + + + + - + - + - + - + - + - + - - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5597,87 +5635,86 @@ - + - - - - - - - - - - - - - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - + - + - + - + - + + + + + + + + + + + + + + + + - + - - - - - - + + - + - + @@ -5685,159 +5722,163 @@ - + - + - + - + - + - + + + + - + + + + + + + + - + - + - + - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + - + - + - + @@ -5847,247 +5888,250 @@ - + - - + + - - + + + + + - + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + + + + - - - - - + - + - + + - + - + - + - + - + - + - + - - - - - - - + - + - - + + - + - + + + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6097,247 +6141,250 @@ - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - - + + - + + + + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - - - - - - - - - + - + - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + + - + - - - - - - - - + - + - + - - + - + - + - + - + - + - + - + - + @@ -6347,83 +6394,86 @@ - + - - + + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - - + + - + - + - + - + @@ -6431,163 +6481,163 @@ - + - + - - - - - - - - + - + + + + - + - + - + - + - + - + - - - - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - - + - + + + + + + + + - + - + @@ -6597,123 +6647,127 @@ - + - - - - - - - - - - - - - - - - + - + - + - + - - + + + + + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + + - + @@ -6721,111 +6775,111 @@ - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + @@ -6833,37 +6887,37 @@ - + - - + - + - - + - + - + + - + - + + - + @@ -6871,7 +6925,7 @@ - + @@ -6879,7 +6933,7 @@ - + @@ -6887,7 +6941,7 @@ - + @@ -6895,15 +6949,14 @@ - + - - + - + @@ -6911,14 +6964,14 @@ - + - + @@ -6926,14 +6979,14 @@ - + - + @@ -6941,14 +6994,14 @@ - + - + @@ -6956,37 +7009,37 @@ - + - + - + + - + - - + - + - + - + - + @@ -6994,17 +7047,18 @@ + - + - + - + - + @@ -7012,181 +7066,182 @@ + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -7195,47 +7250,47 @@ - + - + - + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - + - + @@ -7243,123 +7298,123 @@ - + - + + - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7367,23 +7422,23 @@ - + - + - + - + - + @@ -7391,37 +7446,37 @@ - + - - + + - + - + + - + - - + - + - + @@ -7429,54 +7484,54 @@ - + - - + + - + - + - + - - + + - + - + + - + - - + + - + - - + - + @@ -7484,14 +7539,14 @@ - + - + @@ -7499,29 +7554,29 @@ - + - + - + + - + - - + - + @@ -7529,14 +7584,14 @@ - + - + @@ -7544,22 +7599,22 @@ - + - + - + - + - + @@ -7569,15 +7624,15 @@ - + - + - + - + @@ -7585,17 +7640,18 @@ + - + - + - + - + @@ -7603,423 +7659,424 @@ + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - - - - - - - + - + + + + + + + - + - + - + - + - + - - + + - + - - + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - - - - + - + - + - + - + - + - + + + + - + + + + + - + - - - - - + - + - + - - + + - - + + - + - + - + - + - + - + + + + - + - - - - + - + - + + + + + + + + - + - - - - - + - + - - - - - - - + - + + + + - + - - - - + - + + + + - + - - - - + - + + + + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -8027,26 +8084,26 @@ - + - + - + - + - + - + @@ -8054,14 +8111,14 @@ - + - + - + @@ -8071,296 +8128,296 @@ - + - + + + + - + - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - - - + - + + + + - + - + - - + + - - + + - + - + + + + + - + - + - - - - - - + + - + - - - - - - + + - + - - - - + - + + + + - + - + - + - - + + + + + + - + - + - - - - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8368,26 +8425,26 @@ - + - + - + - + - + - + @@ -8395,14 +8452,14 @@ - + - + - + @@ -8412,296 +8469,296 @@ - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - - - - + - + - + - + - + + + + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - - + + + + + - + - - + + - + - - - + + + - + - - - - - - - - - + + + - - + + - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + @@ -8709,26 +8766,26 @@ - + - + - + - + - + - + @@ -8736,14 +8793,14 @@ - + - + - + @@ -8753,296 +8810,296 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + - + - + - + - - - - - + - - - - + - + - + + + + - + - + - - + + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - - - - + + - - - + + + - + - + - + - - + + + - - + + - + - - + + - + - + + + + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + @@ -9050,26 +9107,26 @@ - + - + - + - + - + - + @@ -9077,14 +9134,14 @@ - + - + - + @@ -9094,296 +9151,296 @@ - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - - + + - + - - + + - - - - - + - + - - - - + - - - + + - + - + - - + + + - - + + + + + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -9391,26 +9448,26 @@ - + - + - + - + - + - + @@ -9418,14 +9475,14 @@ - + - + - + @@ -9435,129 +9492,130 @@ - + - + - + - + - + - - - - + - + + + + - + - + - + - - - - + + + + - + - + - + - + - + - - - - - - - - + - + - + - + - + - + + + + + + + + - + - + - + - + + - + @@ -9565,7 +9623,7 @@ - + @@ -9573,155 +9631,154 @@ - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + + - + - - + - + - + @@ -9729,7 +9786,15 @@ - + + + + + + + + + @@ -9737,7 +9802,7 @@ - + @@ -9745,7 +9810,7 @@ - + @@ -9753,7 +9818,7 @@ - + @@ -9761,22 +9826,14 @@ - + - - - - - - - - - + @@ -9784,21 +9841,14 @@ - + - - - - - - - - + @@ -9806,14 +9856,14 @@ - + - + - + @@ -9821,14 +9871,14 @@ - + - + - + @@ -9836,14 +9886,14 @@ - + - + - + @@ -9851,12 +9901,19 @@ - + + + + + + + + - + - + @@ -9866,15 +9923,15 @@ - + - + - + - + @@ -9882,17 +9939,18 @@ + - + - + - + - + @@ -9900,423 +9958,424 @@ + - + - + - + - + - + - - - - + - + + + + - - + + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - - - - + + + + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + + + + + + + + - + - - - - - + - + - - - - + - + - + - + - + - + - - - - + - - + + - + - + + + + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -10324,26 +10383,26 @@ - + - + - + - + - + - + @@ -10351,14 +10410,14 @@ - + - + - + @@ -10368,296 +10427,296 @@ - + - + - + - + - + - + - + - + - + - - - - + - + - + + + + - + - + - + - + - + - + - - - - + - + + + + - - + + + - + - - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - + + - - - + + + - + - + - - - - - - + + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + @@ -10665,26 +10724,26 @@ - + - + - + - + - + - + @@ -10692,14 +10751,14 @@ - + - + - + @@ -10709,296 +10768,296 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - - - - + + - + - - - - - + - - + + + + + + + + + + - + - + - - - - + - - + + - + - + + + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11006,26 +11065,26 @@ - + - - - - + - + - + + + + - + @@ -11033,14 +11092,14 @@ - + - + - + @@ -11050,296 +11109,296 @@ - + - + + + + - + - - - - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + + + + - + - - - - + - + - + + + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + + + + - + - + - + - - - - + - + - - - - - + + - + - - + + - + - + + + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -11347,26 +11406,26 @@ - + - - - - - + + + - + - - - + + + + + - + @@ -11374,14 +11433,14 @@ - + - + - + @@ -11391,296 +11450,296 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + - + - + + + + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - + + - + - + - + - + + + + + - + - - - - - - - + - + + + + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11688,26 +11747,26 @@ - + - + - + - + - + - + @@ -11715,14 +11774,14 @@ - + - + - + @@ -11732,296 +11791,296 @@ - + - + - + - + - + - + - + - + - + - + - - - - + - + - + - + + + + - + - + - + - - - - + - + - + - + - + + + + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - - - - - - - - + + - + - + - - + + + + + + + + + + - + - + - - - - + - - + + - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + @@ -12029,26 +12088,26 @@ - + - - + + + - + - - + + - - - + + - + @@ -12056,14 +12115,14 @@ - + - + - + @@ -12073,1116 +12132,1118 @@ - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - - - - + - + - + - + + + + + + + + - + - - - + + - + - - - - + - - + + - + + + + + + + - + - + - - - - - - - + - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + + + + + + + - + - + - + - + - - - - - - - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + + - + - + - + - + + - + - + - - + + + + + - - - - - - - + - + - + - + - + - - - - - + + + + + + + + - + - + - + - + - + - + + - + - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + + + + - + - - - - + - + - + - + - + - + - + + + + + - + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - - - + - + - + + + + - + - + - + - + - - + + - + - - + + - + - - - - + - + + + + - + - + - + - + - - - - + + + + - + - + - + - + - + - + + + + - + - - - - + - - - - + - + + + + - + - + - + - + - + @@ -13191,38 +13252,38 @@ - + - + - + - + - + - + - + @@ -13230,16 +13291,16 @@ - + - + - + @@ -13248,12 +13309,12 @@ - + - + @@ -13261,463 +13322,465 @@ - + - + - + + + + + - + - + - + - + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + - + - + + - + - - + + - + - + - + - - + + - + - - + - + - + + - + - + - + - + - + - + - + - + + + + + + + - + - + - + + - + - - + - + - + - + - + + - + - + - + + - + - + - + - + - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - - - + - + + + + - + @@ -13726,234 +13789,235 @@ - + - + - + - - - - - - - + - + - + - + - + - + - - + - + - + + - + - + + + + + + + - + - + - + - + - + - + - + - + - - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + + - + - - + - + - + - + - + + - + - - + + - - + + - + + - + - - + + - - + + - - + - + - + - + @@ -13962,12 +14026,12 @@ - + - + - + @@ -13977,12 +14041,12 @@ - + - + - + @@ -13992,12 +14056,12 @@ - + - + - + @@ -14006,40 +14070,27 @@ - + - + - + + - - - - - - - - - - - - - - - + - + - + @@ -14049,26 +14100,26 @@ - + - + - + - + - + - + - + @@ -14078,12 +14129,26 @@ - + + + + + + + + + + + + + + + - + - + @@ -14092,12 +14157,12 @@ - + - + - + @@ -14106,12 +14171,12 @@ - + - + - + @@ -14120,12 +14185,12 @@ - + - + - + @@ -14134,190 +14199,191 @@ - + - + - + - + + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - - - - + + + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -14326,47 +14392,40 @@ - + - + - - - - - - - - + - + - + - + - + - + - + - + - + @@ -14374,7 +14433,7 @@ - + @@ -14382,64 +14441,71 @@ - + + + + + + + + - + - + - + - + - + - + - + - + - + @@ -14447,7 +14513,7 @@ - + @@ -14455,7 +14521,7 @@ - + @@ -14463,7 +14529,7 @@ - + @@ -14471,7 +14537,7 @@ - + @@ -14479,68 +14545,68 @@ - + - + - - + - + - + + - + - + + - + - - + + - + - + - + - - + + - + - - + - + @@ -14548,7 +14614,7 @@ - + @@ -14556,7 +14622,7 @@ - + @@ -14564,29 +14630,29 @@ - + - + - + + - + - - + - + @@ -14594,29 +14660,29 @@ - + - + - + + - + - - + - + @@ -14624,22 +14690,22 @@ - + - + - + - + - + @@ -14647,17 +14713,18 @@ + - + - + - + - + @@ -14665,181 +14732,182 @@ + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -14848,119 +14916,120 @@ - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -14969,482 +15038,484 @@ - + - + - - - - - + - - - - - + + + - + - + - + - - + - + - + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + + - + - - + + - + - - + - + - + - + - - - - - - - + - + - + - + - + + + + + + + - + - + - + - + - + - + - + + - + - + - + - + + - + - - - - + - + + + + - + - - + + + - + - + - - - + + - + - + - + - + - - + + - + - - + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - - - + - + + + + - - + + @@ -15452,40 +15523,40 @@ - + - + - + + + + + + + + + - + - + - - - - - - - - - + @@ -15493,7 +15564,7 @@ - + @@ -15501,103 +15572,103 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -15605,45 +15676,45 @@ - + - + - + + - + - - + - + - - + + - + - - + + - + @@ -15651,30 +15722,30 @@ - + - + + - + - - + + - + - - + - + @@ -15682,7 +15753,7 @@ - + @@ -15690,29 +15761,29 @@ - + - + - + + - + - - + - + @@ -15720,52 +15791,52 @@ - + - + - + + - + - - + - + - + + - + - - + - + - + - + - + @@ -15773,17 +15844,18 @@ + - + - + - + - + @@ -15791,129 +15863,130 @@ + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + @@ -15921,52 +15994,52 @@ - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + @@ -15975,258 +16048,258 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -16234,56 +16307,56 @@ - + - + - + - + + + + - - - - + - + - + - + - + - + - + - + - + @@ -16291,25 +16364,33 @@ - + - + - + - + + + + + + + + + - + - - + + @@ -16317,21 +16398,13 @@ - - - - - - - - - + - - + + @@ -16339,85 +16412,150 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - + - + - + - + - + - + - + @@ -16426,136 +16564,158 @@ - + - + - + - + - + + + + + + + + + + + + + + + + + - + - + - + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - + + - + - + - - + + + - + - + - + - + - + - + - + @@ -16564,318 +16724,318 @@ - + - + - + - + - + - - - - - - - + - + - - - - - - - - - + - + - + - + - + - + - - + + - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - + - + + + + + + + - + - + - + - + - + - + - - + + + - - + + + - - + + + - - + + - - + + + - - + + + - - + + + - - + + + + + + + + + + + - + - + - + + - + - + - + - + - + + + + + + + + + + + + + + + + + - + + + + + + + + + - - - - - - - - - - - + + - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - - - + + - + - + - - + - + - + - - - - - - - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + + + + - + - + - + - + - + - - - - + - + - + - + - + - + @@ -16884,158 +17044,158 @@ - + - + - + - + - + - - - - - - - + - + - + + + + + + + + + - + - + - + - - + + - - + + - + - + - + - + - - + + - - + + - + - + - - - - - - - - - + - + - + - + - + - + + + + + + + - + - + - + - + - + - - - - - + - + - + + + + + - + - + + + + + - + - + - + - - - - - + @@ -17044,715 +17204,652 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - + - - - - - - - - - - + - + - + - + - - - - - - - + - + - + - + + + + + + + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - - + + - + - - + + + + + + + + + + + + + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - - + + - - - - - - - - - - - - - + + - + - + - + - + - + - - + + - - - - - - - - - + - + - + - - + + + - - - - - - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - + + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - + - + - - - - - - - - - - - - - - + + - - + + - - + + - - + + - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + - - - - + - + - - - - - - - + - - + + - + - + - + - + - - - - + + - - - - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + - + - + - - - - - - - - + - + - + - + - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - + - + - + + + + - + - + - + - + - + @@ -17760,193 +17857,93 @@ - - - - - - - - - - - - - - - - - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + + + + + + + - + - + - + - + - + - - - - - + - + - + - + - + - + + + + + - + - + - + - + - + - + - + @@ -17955,234 +17952,147 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - - + - - - - - - - - - - - - - + + - - + + - - + + - - - - - - - - - - - - - + + - + - + - + - + - + - - - - - - - + - + - - - - + - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + + + - + - + - + - - + + - + - + - + @@ -18190,211 +18100,67 @@ - - - - - - - - - - - - - - - - + - - - - - - - - + - + - + + - - - - - - - - + - + - + + - - - - - - - - + - + - + + - + - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + @@ -18403,319 +18169,159 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - + + - + - + - + - + - + - + - + - + - - - - - + - + - + - + - + - + - + - + + + + + - + - + - + - + - + - + - - - - - - - - - + - - + + - + - + - + - - + + - + - + - + - - + + - + - + - + @@ -18723,14 +18329,14 @@ - + - + - + @@ -18738,14 +18344,14 @@ - + - + - + @@ -18753,14 +18359,14 @@ - + - + - + @@ -18768,14 +18374,14 @@ - + - + - + @@ -18783,44 +18389,132 @@ - + - + - + - - + + + + + + + - + - + - + - - + - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + @@ -18828,14 +18522,14 @@ - + - + - + @@ -18843,448 +18537,764 @@ - - - - - - - - - - - - - - - - - + - + - + + + + + + + + - + - + - - - - - - - - + + + + + + + + - + - + - - - - - - - + - + - + + - - - - - - - + - + + - + - + + - + - - + + - - + + - + - + - + - + - - + + - - + + - + + - + - + + + + + + + + + + - - + + + - + - + + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + + - + + - + - + - + - + - + - + - + - + - - - + + + + + + + + + + + + + + - + + + + + + + + + + + + - + - - - + + + + + + + + + + + + + + - + + + + + + + + + + + + - + - - - + + + + + + + + + + + + + + - + + + + + + + + + + + + - + - - + + + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + - + + + + + + + + + + + + - + + + + + + + + + + + + + + + + - - - - - - - + - + + + + + + + + + + + + + + + - + - - + + - + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + - + - + - - - - + - + - - - - + - - + + - + + + + + + + - + - + - + - + - + + + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + - + + + + + + + + + + + + + + + + + + + + + - + - - - + + - + - + - - - - - - - + - + - + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -19292,134 +19302,159 @@ - + - + - + - + - + - + - + - + - + + + + + + + - + - - - - - - - - - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - - + + - + - + + + + - + - + - + - + - - - - + @@ -19427,200 +19462,159 @@ - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - + - - + - + + + + + + + + + - + - + - + - + - + - + - + - - - + + - + - + - + - + - + - + - - + + + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - - - - + - + - + + + + + + + - + - + - + - - - - + @@ -19628,177 +19622,256 @@ - + - + - + - + - + + + + + + + + + + + + + + + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + + + + + + - + - + - - - - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + + - - - - - + + + + + + + + + + + + + + - + - - + + @@ -19806,48 +19879,64 @@ - + - + + + + + + + + + - + + + + + + + + + - + - - - - + - + - + - + - + - - - - + + + + + + + - + @@ -19855,63 +19944,85 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - + - + - + - + - + - + - + - + - + - + + + + + - + @@ -19920,110 +20031,72 @@ - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - + - - - - - - - - - + - + - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - + - - - - - - - - - - + @@ -20031,21 +20104,29 @@ - + + + + + + + + + - + - + - - + + @@ -20053,63 +20134,63 @@ - + - + - + - + - + - - - - + - + + + + + - + + + + - + - + - + - + - + - - - - - + @@ -20118,198 +20199,124 @@ - - - - - - - - - + - + - - - - - - - - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - - - - - - - - + - + - + - - - - + - + - + + + + - + - + - + - - + + - + @@ -20318,134 +20325,143 @@ - - - - - - - - - - - - - - - - - - - + - - + + - + - + + + + + + + + + + - + - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - + - - - - + - + - + + + + + + + - + - + - + - - - - + @@ -20454,152 +20470,143 @@ - - - - - - - - - - + - + - + + + + + + + + - + - + - + - + - + - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + - + - + - + - + - + - + - + - - - - - - - - + - + - + - + - + - + - + - + - + - - - - + + + + - + @@ -20608,723 +20615,723 @@ - - - - - - - - - - - - - - - - - - - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + - + - + - + - + - + - + - - - - - - - + - + + + + + + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - - - + + - + - + - + - + - + - - + + + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - - - - + - + - + - + - + + + + + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - + - - - - + - + + + + + + + - + - + - + - + - - - - + - + + + + + + + + + + + + + + + + + - + + + + + + + + + + - + - + + + + + + + + + - + - + - + - + - + - + - + - - - - - - - - - + - + - + - + - - - - - - - - + - + - - - - - - - - - - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - + - + - + - - - - - + - + - + + + + + - + - + + + + + - + - + - + - - - - - + - + - + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - - + + - + - - + + - - + + - + @@ -21333,152 +21340,143 @@ - - - - - - - - - - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - + + - + - + - + - + - + - + - + - + - - + + + - + - + - + - + - + - + - + - + - + - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + @@ -21487,68 +21485,143 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - - + + - + - + - - + + - + - + - + - + - + @@ -21557,202 +21630,143 @@ - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - + - + - + - + + + + + - + - + - + - + - + - + - + - - - - - + - + - + - + - + - + - + - + - - + + - - + + - + - - - - - - - - + + - + - + + + + + + + - + @@ -21761,14 +21775,14 @@ - + - - + + @@ -21777,432 +21791,556 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + + - - - - - - - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + @@ -22210,14 +22348,14 @@ - + - + - + @@ -22225,147 +22363,147 @@ - + - + - + - - + + + + + + + - + - + - + - - + + - + - + - - + + - - + + - + - - - - - - - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + + - - - - - - - + - + - + @@ -22373,210 +22511,295 @@ - + + + + + + + + + + + + + + + + + + + + + - + - + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + - - + + + + + + + + + + + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + + + + - - + + - - + + + + + + + + + + + + + + - + - + - + @@ -22584,162 +22807,132 @@ - + - + - + - - + + + + + + + - + - + - + - - + + - + - + - - + + - - + + - + - - - - - - - + - + - + - - - - + - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - + + + + + + + + + + + - + - + - + @@ -22747,399 +22940,279 @@ - + - + - + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - - - - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - + - + - + - + - + + - - - + + - + - + - - - + + - + - - - + + - + + + @@ -23162,54 +23235,46 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - @@ -23224,6 +23289,14 @@ + + + + + + + + @@ -23245,18 +23318,18 @@ - + - + - + @@ -23282,7 +23355,7 @@ - + @@ -23302,19 +23375,19 @@ - + - + - + - + - + @@ -23328,8 +23401,8 @@ - - + + @@ -23360,14 +23433,14 @@ - + - + @@ -23379,7 +23452,7 @@ - + @@ -23394,13 +23467,13 @@ - + - + @@ -23529,30 +23602,30 @@ - + - - - - - + + - + - - + + + + + + + - + - - - - - - - + + + + + @@ -23579,8 +23652,8 @@ - - + + @@ -23598,7 +23671,7 @@ - + @@ -23611,16 +23684,21 @@ - - + + + + + + + - - + + @@ -23633,98 +23711,93 @@ - - - - - - - - - - - - - - + + - + + + + - - - - + - - + + + + + + + + + + + - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + @@ -23738,7 +23811,7 @@ - + @@ -23751,9 +23824,9 @@ - - - + + + @@ -23762,1760 +23835,1760 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - + - - + + - + - - - + + + - - - + + + - + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + + - + - - + + + + + + + - + - + + - + - - + + - + - - - + + + - + - + - - - - - - - + - - - - - - - - - + + + + - + - + + + + + + + - + - - - + + - + - - + + - + - + - - - - - - - + + + - + + + + + + - - + - - - - + + + + - - - - - - - + + + + + + + - - + + - + - - + + - + - + - + + + - + - - - + - + - - - - - - - - - + + + + - - - - - - - + + + + + + + - - + + - + - - + + - + - - - + + + - + - + - - - - + - + - + + + + - + - - + + + + + + + - + - - - - - - - + + - + - - + + - + - - - + + + - + + + + + + - - - - + + + + - + + + + + + + + + + + + - + + - + - - + + - + - - - - - - - - - - - - - - + + + - + - + - - + - - - - + + + + - + - - + + + + + + + - + - - - + + - + - + + + + + + + - + - + + + - + - - - - - - - + - + - - - - - - - + - - - - + + + + - - - - - - - + + + + + + + - - + + - + - - + + - + - - - + + + - + - + - - - - + + + + + + + + + + + + + + + - - + + - + - - + + - + - - - + + + - + - - - - - - - - - - - - + - - - - + + + + - - - - - - - + + + + + + + - + - + + - + - + - - + + - + - + - - + - - - - + + + + - + - + - + - + - + - - - + + + - - - - - + + + + + - + - - + + + + + + - + - - - - - - + + - - - - - + + + + + - - + + - - + + - - + + - + - - + + - - + + - + - + - - + + - + - - - + + + - + - - + + + - + - - - + + - - - + + + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - - - - - - + + + - + - - - + + + + + + - + - - + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - + - + - + + + - + - - + - - - + + + - + - + - + - - - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - - - + + + - + - - - + + + - + - + - + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - + + + + + + + + + + - + - + - + - + - + - + - + - + - + - - - - + + - + - - - - + + - + - - + + + + - + - - + + + + - + - + + + + + - + - + - + - - + + + + + - + - - - - - - - + + - + - - - + + + - + - + + + - - - + + + - + - - - + + + + + + + + + + + + + + - + - - - + + + - + - - + + + + + + + - + - - - - - - - - - - - - - - + + + + + + + - + - + - - - - - - - - - + + + - + - + - - - + + + - + - - - - - - - + + - + - - - - - + + - + - - - - - + - + - - + + + + + @@ -25527,134 +25600,136 @@ + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -25664,162 +25739,175 @@ - + - + - + - + - - - - + - + - - - + + - + - - - - - - - + + - + - + + - + - - - - - - - + + - + - - - - - - + + - + - - - - - - + + + + - - + - + + + - + - + + + + + + + - + - - + - + - - + + + + + + + - + + - + + + + + + - + - - + + + + + + - + - - + + - + - - + + - + - - + - + - - + - + - + - + - + - + - - - - + + + + + + + + + + + + + + + + + @@ -25832,13 +25920,6 @@ - - - - - - - @@ -25849,1116 +25930,1104 @@ - + - - - - + + + + + + + + + + - + - + + + + + + + + + - - + + + - + - - - + + + + + + + + + + + + + - + - - - + - + - - - + - + - - - + + + + - + - - - + + + + - + - - - + + + + - + - - - + + + - + - - - - + + + - + - + + + - + - - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + + - + - - - + + + + - + - - - + + + + - + - - - + + + - + - - - + + - + - - - - + + + - + - - - - - - - - - - - - - + + + - + - - - - - - - - - - - + - + - + - - - - - - - - - - - + - + - + - + + + - + - - - - - - - - - - + + + - + - - + + + - - - - - - + - + + + - + - + - - - - - - - - - - - + + + + + + + + + + + - + - + - + - + - - - - + + - + - + + + + + - + - + + + + - + - - + + + - + - - + + + - + - - - - - + - + - - - - + - - + + - + - - - + + + - - - + + + - - - + + + - + - - - + + + - - - + + + - + - - - + + + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + + - - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - - - - - - + - + - - + + - + + + + + + - - + + - + - + - + - + + - - + + - - + + - + - - + + - + - + - + - + + - - + + - - + + - + - - + + - + - - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -26991,72 +27060,72 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -27096,10 +27165,10 @@ - - - - + + + + @@ -27160,32 +27229,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -27214,36 +27283,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -27275,795 +27344,781 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Data/Templates/Human Standard.pkml b/src/Data/Templates/Human Standard.pkml index ec35a5436..68d7e6e8f 100644 --- a/src/Data/Templates/Human Standard.pkml +++ b/src/Data/Templates/Human Standard.pkml @@ -1,360 +1,363 @@  - - - + + + - + - - + + + - - + + - - + + - + - + - - - + + - - + + - - + + - + - + - + - + - - + + + - + - - - + + - + - + - + - + - - + + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - - - - + - + - + - + - + - + - + - - - + + - - - + + - - - + + - - + + + - + - + - - + + - - + + - - + + - - + + - - - + + - + - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - - - - + - + - - - + + + - + - - - - - + - + - + - + - + - + - + - + - + - + + - + - + - + - + + - - + + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -363,109 +366,110 @@ - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + @@ -474,438 +478,411 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + - + - + + - + - + - + - + - + - + - + - + - + - + - + + - + - - - - - - - - + - - + - + - + - + + - + - - + + - + - + - + - + - + - + - - + + + + + + + + - + - + - + - + - - - - - - - + - + - + - + - + + + + + + + - + - + - + - + - + + - + - + - + - + + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -914,402 +891,433 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - - - - - - - - + - - + - + - + - - + + - + - - + + - + - + + - + - + - + - - - - + + + + - - + - + - + + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - + - + + - + - + - + - + + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + @@ -1318,227 +1326,228 @@ - + - + - + - + + - + - + - - + - + - + - + - + - + - + - + - + - - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - - + - + - + - + - + + - + - - + + - - + + - + + - + - - + + - - + + - - + - + - + - + @@ -1547,26 +1556,27 @@ - + - + - + + - + - + - + @@ -1576,12 +1586,12 @@ - + - + - + @@ -1590,12 +1600,12 @@ - + - + - + @@ -1604,12 +1614,12 @@ - + - + - + @@ -1618,12 +1628,12 @@ - + - + - + @@ -1632,12 +1642,12 @@ - + - + - + @@ -1646,12 +1656,12 @@ - + - + - + @@ -1660,12 +1670,12 @@ - + - + - + @@ -1674,12 +1684,12 @@ - + - + - + @@ -1688,138 +1698,139 @@ - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -1828,398 +1839,400 @@ - + - + - + - + + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - - + - + - + - + - + + - + - + - + - + - + - - + - + - + - + - + - - - - - - - + - + - + - + - + - + - + - + + + + + + + - + - + - + + - + - + - + - + + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2228,402 +2241,404 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - - + - + - + - + + + + + + + + - + - + - + - + - + - - + + - + - - - - - - - - + - + - + - + - + - + + - + - - + - + - + - + - + - + - + + - + - + - + - + + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2632,377 +2647,375 @@ - + - + - + - + + - + - + - - + - + - + - + - + - + + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - - + - + - + - + + - + - - + + - + - - + + - + - + - + - - + + - + - + - - + + - + - - - - - - - - + - + - + - + - - - - - - - + - + - + - + - + + + + + + + - + - + - + - + + - + - + - - + + - + - + - + - - - - - + + - - + + - + - + - - + + + + + - - + + - + - + - - - - - + + - - + + - + - + - + - + @@ -3012,291 +3025,302 @@ - + - + - - + + - + - + - + - - + + + + + - - + + - + - + - + - + + - + - + - + - + - + + + + - + - - - - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3304,19 +3328,12 @@ - - - - - - - - + - + - + @@ -3326,30 +3343,33 @@ - + - - + + - - + + + + + - + - + - + - + - + @@ -3359,15 +3379,15 @@ - + - + - - + + - + @@ -3375,32 +3395,29 @@ - + - + - - - - - + + - - + + - + - + - + - + @@ -3410,231 +3427,234 @@ - + - - - - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - - + + - + - - - - - - - + - + - + + + + + - + - + - - - - + - + - + - + - - + + + + + - + - + - + - - - - + - + + + + - + - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3642,12 +3662,12 @@ - + - + - + @@ -3657,234 +3677,237 @@ - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + - + - + + + + - + - - - - + - + + + + - + - - + + - + - - - - - - - + - + - + + - + - + + + + - - - - + - - + + - + - + + + + - + + + + - + - - + + - + - + - + + + + - - - - - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -3892,12 +3915,12 @@ - + - + - + @@ -3907,234 +3930,237 @@ - + - - + + - - + + - - + + - + - + - + - + - + - - + + - - + + - + - + - - + + - + - - + + + + + - + - - + + - - + + - + - + + + + - - - - + - + + - - + + + + + - + - + + + + - + - - - - - - - + - - + + - + - + + + + - - - - - + - - + + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4142,12 +4168,12 @@ - + - + - + @@ -4157,90 +4183,86 @@ - + - - - - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + - + - + - + - - + + - + - - - - - - + + - + - - - - + @@ -4248,143 +4270,150 @@ - + - + - + - + - + - - - - + - + - + + + + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4392,12 +4421,12 @@ - + - + - + @@ -4407,99 +4436,86 @@ - + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - - + + - - + + - - + + - - + + + + + - + - - - - - - - - - - - - + + - + - - - - - - - + - + @@ -4507,147 +4523,163 @@ - + + + + - + - + - + - + - + - + - + - + - + + + + - + - + + + + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - - + + + + + + + + - + - + - + - + @@ -4657,96 +4689,86 @@ - + - - - - - - - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - - + + + + + + + + + + + - + - - - - - - - - - - - - - - + - + - + @@ -4754,137 +4776,150 @@ - + + + + - + - + + + + - + - + - + - + - + - - - - + - + - + + + + - + - + - + - + - + - + - + - + + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4892,12 +4927,12 @@ - + - + - + @@ -4907,96 +4942,86 @@ - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - - + + + + + - + - + - + - - + + - + - - - - - - - - - - - - - - + - + - + @@ -5004,150 +5029,163 @@ - + - + - + - + + + + - + + + + - + - + - + - + - - + + + + + + + + + - + - + - + - + - + - + - - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5157,87 +5195,86 @@ - + - - + + - - - - - - - - - - - - - - + + - - + + - + - + - + - - + + - - + + - - + + - + - + - + - + - + + + + + + + + + + + + + + + + - + - - - - - - + + - + - + @@ -5245,159 +5282,163 @@ - + - + - + - + - + - + + + + - + + + + + + + + - + - + - + - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + - + - + - + @@ -5407,247 +5448,250 @@ - + - - + + - - + + + + + - + - + - - + + - - + + - - + + - - + + - + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + + + + - - - - - + - + - + + - + - + - + - + - + - + - + - - - - - - - + - + - - + + - + - + + + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -5657,247 +5701,250 @@ - + - - - - - - - + - + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - - + + - + + + + - + - - + + + + + + + + + + + + + + + + + + + + - + + + + - + - + - + - + - + - + - + - - - - - - - + + - + - + - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + + - + - - - - - - - - + - + - + - - + - + - + - + - + - + - + - + - + @@ -5907,83 +5954,86 @@ - + - - + + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - - + + - + - + - + - + @@ -5991,163 +6041,163 @@ - + - + - - - - - - - - + - + + + + - + - + - + - + - + - + - + - - - - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - - + + + + + + + + - + - + - + @@ -6157,103 +6207,107 @@ - + - - - - - - - - - - - - - - - - + - + - + - + - - + + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + - + - + - + - + - + - + - + + - + @@ -6261,111 +6315,111 @@ - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + @@ -6373,37 +6427,37 @@ - + - - + - + - - + - + - + + - + - + + - + @@ -6411,7 +6465,7 @@ - + @@ -6419,7 +6473,7 @@ - + @@ -6427,7 +6481,7 @@ - + @@ -6435,15 +6489,14 @@ - + - - + - + @@ -6451,14 +6504,14 @@ - + - + @@ -6466,14 +6519,14 @@ - + - + @@ -6481,14 +6534,14 @@ - + - + @@ -6496,37 +6549,37 @@ - + - + - + + - + - - + - + - + - + - + @@ -6534,17 +6587,18 @@ + - + - + - + - + @@ -6552,128 +6606,129 @@ + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + @@ -6682,27 +6737,27 @@ - + - + - + - + - + - + @@ -6710,123 +6765,123 @@ - + - + + - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -6834,23 +6889,23 @@ - + - + - + - + - + @@ -6858,37 +6913,37 @@ - + - - + + - + - + + - + - - + - + - + @@ -6896,54 +6951,54 @@ - + - - + + - + - + - + - - + + - + - + + - + - - + + - + - - + - + @@ -6951,14 +7006,14 @@ - + - + @@ -6966,29 +7021,29 @@ - + - + - + + - + - - + - + @@ -6996,14 +7051,14 @@ - + - + @@ -7011,22 +7066,22 @@ - + - + - + - + - + @@ -7036,15 +7091,15 @@ - + - + - + - + @@ -7052,17 +7107,18 @@ + - + - + - + - + @@ -7070,338 +7126,339 @@ + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + + + + + - + - - - - - + - + - + - - + + - - + + - + - + - + - + - + - + + + + - + - - - - + - + - + + + + + + + + - + - - - - - + - + - - - - - - - + - + + + + - + - - - - + - + + + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + @@ -7409,22 +7466,22 @@ - + - + - + - + - + @@ -7432,14 +7489,14 @@ - + - + - + @@ -7449,226 +7506,226 @@ - + - + + + + - + - - - - + - + - + - + - + - - - - + - + + + + - + - + - - + + - - + + - + - + + + + + - + - + - - - - - - + + - + - - - - - - + + - + - - - - + - + + + + - + - + - + - - + + + + + + - + - + - - - - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7676,22 +7733,22 @@ - + - + - + - + - + @@ -7699,14 +7756,14 @@ - + - + - + @@ -7716,226 +7773,226 @@ - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - - + + - + - - + + + + + - + - - + + - + - - - - - - - - - - - - + - - + + + - - + + + + + + - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -7943,22 +8000,22 @@ - + - + - + - + - + @@ -7966,14 +8023,14 @@ - + - + - + @@ -7983,226 +8040,226 @@ - + - + - + - + - + - + - + - + - - - - + - + - + + + + - + - + - - + + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - - - - + + - - - + + + - + - + - + - - + + + - - + + - + - - + + - + - + + + + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -8210,22 +8267,22 @@ - + - + - + - + - + @@ -8233,14 +8290,14 @@ - + - + - + @@ -8250,226 +8307,226 @@ - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - - + + - + - - - - - - + + - + - + - - - - + - - - + + - + - + - - + + + - - + + + + + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -8477,22 +8534,22 @@ - + - + - + - + - + @@ -8500,14 +8557,14 @@ - + - + - + @@ -8517,71 +8574,72 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + - + @@ -8589,7 +8647,7 @@ - + @@ -8597,155 +8655,154 @@ - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + + - + - - + - + - + @@ -8753,7 +8810,15 @@ - + + + + + + + + + @@ -8761,7 +8826,7 @@ - + @@ -8769,7 +8834,7 @@ - + @@ -8777,7 +8842,7 @@ - + @@ -8785,22 +8850,14 @@ - + - - - - - - - - - + @@ -8808,21 +8865,14 @@ - + - - - - - - - - + @@ -8830,14 +8880,14 @@ - + - + - + @@ -8845,14 +8895,14 @@ - + - + - + @@ -8860,14 +8910,14 @@ - + - + - + @@ -8875,12 +8925,19 @@ - + + + + + + + + - + - + @@ -8890,15 +8947,15 @@ - + - + - + - + @@ -8906,17 +8963,18 @@ + - + - + - + - + @@ -8924,338 +8982,339 @@ + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + + + + + + + + - + - - - - - + - + - - - - + - + - + - + - + - + - - - - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -9263,22 +9322,22 @@ - + - + - + - + - + @@ -9286,14 +9345,14 @@ - + - + - + @@ -9303,226 +9362,226 @@ - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - + + - - - + + + - + - + - - - - - - + + + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -9530,22 +9589,22 @@ - + - + - + - + - + @@ -9553,14 +9612,14 @@ - + - + - + @@ -9570,226 +9629,226 @@ - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - - - - + + - + - + + + + + - - - + + + - - + + - + - + - - - - + - - + + - + - + + + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -9797,22 +9856,22 @@ - + - - - - + - + + + + - + @@ -9820,14 +9879,14 @@ - + - + - + @@ -9837,226 +9896,226 @@ - + - + + + + - + - - - - + - + - + - + - - - - + - + - + + + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + + + + - + - + - + - - - - + - + - - - - - + + - + - - + + - + - + + + + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + @@ -10064,22 +10123,22 @@ - + - + + + + - + - - - - + @@ -10087,14 +10146,14 @@ - + - + - + @@ -10104,226 +10163,226 @@ - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - + + - + - + - + - + + + + + - + - - - - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -10331,22 +10390,22 @@ - + - + - + - + - + @@ -10354,14 +10413,14 @@ - + - + - + @@ -10371,226 +10430,226 @@ - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + + + + - + - + - - - - + - + - - - - - - - - - - + + - + - + - - + + + - + + + + + + + + - + - - - - + - - + + - + - - + + - + - - + + - + - + + + + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + @@ -10598,22 +10657,22 @@ - + - - - - + - + + + + - + @@ -10621,14 +10680,14 @@ - + - + - + @@ -10638,559 +10697,561 @@ - + - + - + - + - + - + - + - + + + + + - + - - - + + - + - - - - + - - + + - + + + + + + + - + - + - - - - - - - + - + - + - + - + - + - + - + - + - - + + + - + - - - + + - + - + - + + + + + + + - + - + - + - + - - - - - - - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + - + - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -11199,401 +11260,401 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + + + + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + + + + - + - - - - + - + - + - + - + - + - + @@ -11601,16 +11662,16 @@ - + - + - + @@ -11621,391 +11682,393 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - + - + - + + - + - - + + - + - + - + - - + + - + - - + - + - + + - + - + - + - + - + - + - + - + + + + + + + - + - + - + + - + - - + - + - + - + - + + - + - + - + + - + - + - + - + - - - - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -12014,214 +12077,215 @@ - + - + - + - + - + + - + - - + - + - + - + - + - + - + - + - + - + - - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + + - + - - + - + - + - + - + + - + - - + + - - + + - + + - + - - + + - - + + - - + - + - + - + @@ -12230,12 +12294,12 @@ - + - + - + @@ -12245,12 +12309,12 @@ - + - + - + @@ -12260,12 +12324,12 @@ - + - + - + @@ -12274,40 +12338,27 @@ - + - + - + + - - - - - - - - - - - - - - - + - + - + @@ -12317,26 +12368,26 @@ - + - + - + - + - + - + - + @@ -12346,12 +12397,26 @@ - + + + + + + + + + + + + + + + - + - + @@ -12360,12 +12425,12 @@ - + - + - + @@ -12374,12 +12439,12 @@ - + - + - + @@ -12388,12 +12453,12 @@ - + - + - + @@ -12402,138 +12467,139 @@ - + - + - + - + + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - - - - + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -12542,100 +12608,100 @@ - + - + - + - + + - + - + - + - - + - + - + - + - + - + - + - + - + - + - + @@ -12643,7 +12709,7 @@ - + @@ -12651,7 +12717,7 @@ - + @@ -12659,7 +12725,7 @@ - + @@ -12667,7 +12733,7 @@ - + @@ -12675,68 +12741,68 @@ - + - + - - + - + - + + - + - + + - + - - + + - + - + - + - - + + - + - - + - + @@ -12744,7 +12810,7 @@ - + @@ -12752,7 +12818,7 @@ - + @@ -12760,29 +12826,29 @@ - + - + - + + - + - - + - + @@ -12790,29 +12856,29 @@ - + - + - + + - + - - + - + @@ -12820,22 +12886,22 @@ - + - + - + - + - + @@ -12843,17 +12909,18 @@ + - + - + - + - + @@ -12861,128 +12928,129 @@ + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -12991,115 +13059,116 @@ - + - + - + - + - + - + - + - + - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -13108,409 +13177,411 @@ - + - + - + - + - + + - + - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + + - + - - + + - + - - + - + - + - + - - - - - - - + - + - + - + - + + + + + + + - + - + - + - + - + - + - + + - + - + - + - + + - + - + - + - + - - - - + - + + + + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -13519,20 +13590,20 @@ - + - + - + @@ -13540,7 +13611,7 @@ - + @@ -13548,103 +13619,103 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -13652,45 +13723,45 @@ - + - + - + + - + - - + - + - - + + - + - - + + - + @@ -13698,30 +13769,30 @@ - + - + + - + - - + + - + - - + - + @@ -13729,7 +13800,7 @@ - + @@ -13737,29 +13808,29 @@ - + - + - + + - + - - + - + @@ -13767,52 +13838,52 @@ - + - + - + + - + - - + - + - + + - + - - + - + - + - + - + @@ -13820,17 +13891,18 @@ + - + - + - + - + @@ -13838,113 +13910,114 @@ + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -13952,15 +14025,15 @@ - + - + - + - + @@ -13969,184 +14042,145 @@ - + - + - + - + + + + - - - - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - + - + - + - + - - + + - + - + - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - + + - - + + - - + + - + - + - - + + - - + + - - + + - + @@ -14154,102 +14188,95 @@ - + - + - + + + + + + + - + - + - - - - + + + + + - + - + - + - + - - - - - - - + - + - - - - - - - - - + - + - + - - + + - - + + - + - + - + - - + + - - + + - + - + @@ -14257,48 +14284,94 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + - + - + - - + + - - + + - + - + - + - + - - + + - - + + - + @@ -14306,23 +14379,37 @@ - + + + + + + + + + + + + + + + - + - - - - - + + + + + - + @@ -14331,53 +14418,94 @@ - + - + - - - - - - - + - + - + - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - - + + - + - + @@ -14386,94 +14514,94 @@ - + - + - - - - - - - + + + + + + + + + - + - + - - + + - - + + - + - + - + - + - - + + - - + + - + - + - - - - - - - - - + - + - + + + + + + + - + - + - - + + - + - + @@ -14482,218 +14610,258 @@ - + + + + + + + + + - + - + - + - + + + + + + + + + + - + - + - + - + - - - - - - - - - - + - + - + + + + + + + + + + + + + + + - - + + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + + + + + + + + + - - + + + + + + + - + - + - - + + - + - - - - + - - + + - - + + - + - + - + - + - + - + - + - - - - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - - + + - - - - - - - - - - - - - + + - + - + - + - + - + - + @@ -14701,400 +14869,313 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - - - - - - - - - - - - - - - - - + + - - + + - - + + - - - - - - - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - + - - + + - + - + - - + + - - + + - + - + - + + + + - + - + - + - - - - + + - - - - + - + - + + + + + + + + - + - + - + - - - - - - - - - + - + - + - + - + - - - - - - - - + - + - + - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + - + - + - - - - + - + - + + + + - + - + - + - + - + @@ -15102,167 +15183,326 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - - - - - - - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + + + + + + + - + - + + + + + + + + - + - + - + - - - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + + - - + - + + + + + + + + + + - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + + + + + + + + + + + + + + + - + - + @@ -15270,14 +15510,14 @@ - + - + - + @@ -15285,34 +15525,74 @@ - + - + - + - + + - - + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + - + - + + + + + + + + + + + + + + + + - + @@ -15320,222 +15600,132 @@ - + - + - + - + - + - + - + - + + + + - + - + + + + + + + - + - + - + - - + + - - + + - + - + - - + + - + - + - - + + - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - - - - - - - - - - - + + - + - + - + @@ -15543,14 +15733,14 @@ - + - + - + @@ -15558,14 +15748,14 @@ - + - + - + @@ -15573,29 +15763,14 @@ - + - - - - - - - - - - - - - - - - + - + @@ -15603,143 +15778,49 @@ - + - + - + + - - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + - - - - + @@ -15748,22 +15829,14 @@ - - - - - - - - - + - - + + @@ -15772,24 +15845,24 @@ - + - + - - + + - + - + @@ -15799,22 +15872,22 @@ - + - + - + - + - + - + @@ -15822,14 +15895,14 @@ - + - + - + - + @@ -15837,14 +15910,14 @@ - + - + - + - + @@ -15852,14 +15925,14 @@ - + - + - + @@ -15867,14 +15940,14 @@ - + - + - + @@ -15882,14 +15955,14 @@ - + - + - + @@ -15897,14 +15970,14 @@ - + - + - + @@ -15912,14 +15985,14 @@ - + - + - + @@ -15927,14 +16000,14 @@ - + - + - + @@ -15942,14 +16015,14 @@ - + - + - + - + @@ -15957,14 +16030,14 @@ - + - + - + @@ -15972,14 +16045,14 @@ - + - + - + @@ -15987,36 +16060,27 @@ - - - - - - - - - + - + - - + + - + - - + - + - - + + @@ -16024,54 +16088,63 @@ - + - + - - + + - + - + + - + + + + + + + + + - + - - + + - - + + - + - + - + - + - - + + - - + + - + @@ -16079,13 +16152,13 @@ - + - - + + @@ -16093,23 +16166,23 @@ - + - + - - + + - + - + @@ -16117,37 +16190,54 @@ - + - + - + - - - + + - - + + + + + + + + + + + + + + + + + + + + - + - + - + - + - - + + @@ -16155,128 +16245,72 @@ - + - + - + - - - - - - - - - - - - - - - - - - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + - + - + - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + @@ -16284,78 +16318,95 @@ - + - + - + - + - + - + + + + + + + - + - + - - + + + + + + + + + + + + - + - + + - + - + - + - + - - + + - + - + + + + - + - + - + - + - - - - + @@ -16363,112 +16414,95 @@ - + - + - - - - - - - - - - - - + + - + - - + - + - + - - + + - + - + - + - + - + - + - + - - - - - - - + - + - + - - - - + - + - + + + + + + + - + - + - + - - - - + @@ -16476,169 +16510,208 @@ - + - + - + + + + + + + - + - + - + - - - + + + + + + + + + + + + + - + - + + + + + + + + + - + - - + + + + + + + - + - + - - - - + - + - + - + - + + + + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + + - - - - - + + + + + + + + + + + + + + - + - - + + @@ -16646,48 +16719,48 @@ - + - + - + - + - - - - + - + - + - + - + - - - - + + + + + + + - + @@ -16695,23 +16768,37 @@ - + + + + + + + + + + + + + + + - + - - + + - + - + @@ -16720,70 +16807,56 @@ - - - - - - - - - - - - - - - + - + - + - + - + - + - + + + + + + + + + + - + - + - + - + - - - - - - - - - - + @@ -16791,21 +16864,21 @@ - + - + - + - - + + @@ -16813,23 +16886,23 @@ - + - + - - - - - + + + + + - + @@ -16838,59 +16911,75 @@ - + - + - + - + - + - + - + - - + + - - - + + + + + + + + + + + + + + + + + + + + - + - + - - + - + - - + + @@ -16899,57 +16988,84 @@ - + - + - + - - + + + + + + - + + + + + + + + + + + + + + + + + + + + + - + - + + + + - + - + - + - - + + - + - + - + - - + + @@ -16958,24 +17074,24 @@ - + - + - - - - - + + + + + - + @@ -16985,196 +17101,169 @@ - + - + - - - - + - + - + + + + - + - + + + + - + - - - - + - + - + - + - - - - - - - - - - - - + + - + - - + - + - + - - + + + + + + + + + + + + - + - + + - + - + - + - + - + - + - + - + - - - - + + + + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + - + - + - + - - + + - + - + @@ -17184,57 +17273,41 @@ - - - - - - - - - - - - - - - - - + - + - + - + - + - + - - - - - - - + - + + + + + + + - + @@ -17243,14 +17316,14 @@ - + - - + + @@ -17259,24 +17332,24 @@ - + - + - - - - - + + + + + - + @@ -17286,41 +17359,41 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -17329,14 +17402,14 @@ - + - - + + @@ -17345,24 +17418,24 @@ - + - + - - + + - + - + @@ -17372,41 +17445,41 @@ - + - + - - - - + - + + + + - + - + - + + + + - + - - - - + @@ -17415,24 +17488,40 @@ - + + + + + + + + + + + + + + + + + - + - - - - - + + + + + - + @@ -17442,30 +17531,57 @@ - + - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - + - + - - + + @@ -17474,24 +17590,24 @@ - + - + - - + + - + - + @@ -17501,67 +17617,83 @@ - + - + - + - + - + - + - - + + - + - - + + - - + + - + - + + + + + + + + + + + + + + + + + - + - + - - + + - + - + @@ -17571,451 +17703,512 @@ - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - + + - + - + - - + + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - - - - - - - + - + - - + - - - - - - - - - - - - - - - - - - - + - + - - + - - - - - - - - - - - - - - - - - - - + - + - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - - + - - - - - - - - + - + - + - + - + - + - + - + - + + + + + + + + + - + - - + + - - + + - - + + - - + + + + + + + + + + + + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - + + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - + - + @@ -18023,34 +18216,14 @@ - - - - - - - - - - - - - - - - - - - - - + - + - + - + @@ -18058,167 +18231,132 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + @@ -18226,14 +18364,14 @@ - + - + - + @@ -18241,358 +18379,428 @@ - + - + - + - - + + + + + + + - + - + - + - - + + - + - + - - + + - - + + - + - - - - - - - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + - + - + - + - + + - - - - - - - + - + - + - - + + + + + + + - + - + - + + + + - + - + + + + + + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - - + + - + - + - + - + + + + + + + + + + + + + + + + + + + - - + + + + + + + + + + + + + + - - + + + + + + + + + + + + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - + - + + + + + + + - + - + - + - + @@ -18600,14 +18808,14 @@ - + - + - + - + @@ -18615,147 +18823,132 @@ - + - + - + - - + + - - + + - - + + - - + + + + + + + + + + + + + - + - + - - + + - - + + - + - + - + - - + + - + - + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - + + - + - + - - - - - - - - - - - - - - - - + - + - + @@ -18763,14 +18956,14 @@ - + - + - + - + @@ -18778,352 +18971,232 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - + - + - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + - + + - - - + + - + - + - - - + + - + - - - + + - + + + @@ -19146,54 +19219,46 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - @@ -19208,6 +19273,14 @@ + + + + + + + + @@ -19229,18 +19302,18 @@ - + - + - + @@ -19261,7 +19334,7 @@ - + @@ -19271,197 +19344,197 @@ - - - - - - - - + + + - - - - - + + + + - - + + - - + + - - + + - + - + - - + + - + - + - + - - + + - + + + + + + + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - + - - + + - + - - - - - + + - + - - + + + + + + + - + - - - - - - - + + + + + - + - + @@ -19471,8 +19544,8 @@ - - + + @@ -19490,29 +19563,34 @@ - + - - + + - - + + + + + + + - - + + @@ -19525,98 +19603,93 @@ - - - - - - - - - - - - - - + + - + + + + - - - - + - - + + + + + + + + + + + - - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + @@ -19630,7 +19703,7 @@ - + @@ -19643,9 +19716,9 @@ - - - + + + @@ -19654,1404 +19727,1406 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + - - - + + + - + - - - + + + - + - - - + + + - - - + + + - + - - - - + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - + + + + - + - - + + + + + + + - + - + + - + - - - - + + + + - - - + + + - + - + - - - - - - - + - - - - - - - - - + + + + - + - + + + + + + + - + - - - + + - + - - - - + + + + - + - - - - - - - + + + - + + + + + + - - + - - - - + + + + - - - - - - - + + + + + + + - - + + - + - - - - + + + + - + - + + + - + - - - + - + - - - - - - - - - + + + + - - - - - - - + + + + + + + - - + + - + - - - - + + + + - - - + + + - + - + - - - - + - + - + + + + - + - - + + + + + + + - + - - - - - - - + + - + - - - - + + + + - - - + + + - + + + + + + - - - - + + + + - + - + + + + + + + - + - - - - - - - + + - + - - - - - - - + + + + + + + - - - + + + - + - + - - + - - - - + + + + - + - - + + + + + + + - + - - - + + - + - + + + + + + + - + - + + + - + - - - - - - - + - + - - - - - - - + - - - - + + + + - - - - - - - + + + + + + + - - + + - + - - - - + + + + - - - + + + - + - + - - - - + + + + + + + + + + + + + + + - - + + - + - - - - + + + + - - - + + + - + - - - - - - - - - - - - + - - - - + + + + - - - - - - - + + + + + + + - + - + + - - - + + + - - + + - + - + - - + - - - - + + + + - + - - + + - + - + - - - + + + - - - - - - + + + + + + - + - - + + + + + + - + - - - - - - + + - - - - - + + + + + - - + + - - + + - - - + + + - + - - + + - - - + + + - + - - + + - + - - - + + + - + - - + + + - + - - - + + - - - + + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - + - - - - - - + + + - + - - - + + + + + + - + - - + + + + + + + - - - - - - - + + + + + + + - + - - - - - - - + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - - + + - + - + - - + + - + - + - + - + - + - - - + + + - + - + - + - + + + - + - - + - - - + + + - + - + - + - - - + - + - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - + + + - + - - - + + + - + - - - + + + - - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + - + - + - - + + - + - + - - + + - + - + - - - - - + + + + + - - - - - + + + + + - - + + - + - + - - + + - + - + @@ -21061,97 +21136,111 @@ - + - + - + - + - - - - + - + - - - + + - - + + + + + + + - + + - - + + - + - + - - + + + + - + - - + + + - + + - - + - - - - - - + - + - + - + - + - - - + + + + + + + + + + + + + + + + + @@ -21164,13 +21253,6 @@ - - - - - - - @@ -21181,1096 +21263,1083 @@ - + - - - - + + + + + + + + + + - + - + + + + + + + + + - - + + + - + - - - + + + + + + + + + + + + + - + - - - + - + - - - + - + - - - + + + + - + - - - + + + + - + - - - + + + + - + - - - + + + - + - - - - + + + - + - + + + - + - - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + + - + - - - + + + + - + - - - + + + + - + - - - + + + - + - - - + + - + - - - - + + + - + - - - - - - - - - - - - - + + + - + - - - - - - - - - - - + - + - + - - - - - - - - - - - + - + - + - + + + - + - - - - - - - - - - + + + - + - - + + - - - - - - + - + + + - + - + - - - - - - - - - - - + + + + + + + + + + + - + - + - + - + - - - + + - + - + + + + + - + - + + + + - + - - + + - + - - + + + - + - - - - - + - + - - - - + - - + + - + - - - + + + - - - + + + - - - + + + - + - - - + + + - - - + + + - + - - - + + + - + - + - + - + - + - + - + - + + - - - - + + + - - + + - - - + + + - - - + + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - - - - - - + - + - - + + - + + + + + + - - + + - + - + - + - + + - - + + - - + + - + - - + + - + - + - + - + + - - + + - - + + - + - - + + - + - - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - + - - + + - - + + - - - - - - - - - - - - - + + + + + + + + + + + + + @@ -22303,72 +22372,72 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -22401,46 +22470,46 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -22454,32 +22523,32 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -22508,36 +22577,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -22569,571 +22638,557 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Data/Templates/IV Bolus (mg).pkml b/src/Data/Templates/IV Bolus (mg).pkml index 918fa1caa..eaf3d98c3 100644 --- a/src/Data/Templates/IV Bolus (mg).pkml +++ b/src/Data/Templates/IV Bolus (mg).pkml @@ -1,56 +1,56 @@  - - + + - + - + - + - + - + - + - + - - - - - + + - + - + - - + + + + + - + @@ -73,25 +73,25 @@ - + - + - + - + diff --git a/src/Data/Templates/IV Bolus.pkml b/src/Data/Templates/IV Bolus.pkml index adaf375bc..1f19c17b5 100644 --- a/src/Data/Templates/IV Bolus.pkml +++ b/src/Data/Templates/IV Bolus.pkml @@ -1,56 +1,56 @@  - - + + - + - + - + - + - + - + - + - - - - - + + - + - + - - + + + + + - + @@ -73,19 +73,19 @@ - + - + - + @@ -97,7 +97,7 @@ - + diff --git a/src/Data/Templates/Standard Molecule.pkml b/src/Data/Templates/Standard Molecule.pkml index cadd90063..a10abadb2 100644 --- a/src/Data/Templates/Standard Molecule.pkml +++ b/src/Data/Templates/Standard Molecule.pkml @@ -1,286 +1,289 @@  - - + + - + - - - - - + + + - - + + + - - + + - - + + - - + + - - + + - - - + + - - + + - + - + - + - + - + - + - + - - + + - - + + + - + - + - + - + - + - + - - + + - - + + - - + + - + - - - + + - - - + + - - + + - - + + - - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + - + - + + + + + + + - + - + - + - + - + - - + + - + - - + + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - + - + - + - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + + + + @@ -294,385 +297,385 @@ - + + + + + + + + - - - - + + - - - - - - - - - + - - - - - - + + + - + - - - - - - - - - - - - + + - + - - - - - - - + + - + - - - - - + + - - + + - + - - - + + - + - - - - + + - + - - + + - + - - + + + - + - - + + + + + + - + - - - - - - - + + - + - - + + - + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + + + + - - - - + + + + - - - - - - - + + + + + + + - - - - - - - + + + + + + + - - - - + + + + - - - - + + + + - - - - + + + + - + - - - + + + - - - + + + - + - - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - + + + - - - - + + + + - - - - - - + + + + + + - - - - + + + + - - - - - - - - - - - - - + + + + + + - - - - - - - - - - - - - + - - - + + + + + + + - + - - - - - - + + + + + + + - + - - + + + + + + + - + - - + + + + + + + - + + + + + + - - - - - - - - - - - - - - - - + + + + + + + + - - - + + + - + - + - + @@ -681,111 +684,111 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Data/Templates/Standard Observer.pkml b/src/Data/Templates/Standard Observer.pkml index f1e12ab45..c91905a29 100644 --- a/src/Data/Templates/Standard Observer.pkml +++ b/src/Data/Templates/Standard Observer.pkml @@ -1,8 +1,8 @@  - - + + - + @@ -14,7 +14,7 @@ - + @@ -27,7 +27,7 @@ - + @@ -42,7 +42,7 @@ - + @@ -57,7 +57,7 @@ - + @@ -72,7 +72,7 @@ - + @@ -87,7 +87,7 @@ - + @@ -100,7 +100,7 @@ - + @@ -113,7 +113,7 @@ - + @@ -126,7 +126,7 @@ - + @@ -139,7 +139,7 @@ - + @@ -153,7 +153,7 @@ - + @@ -165,7 +165,7 @@ - + @@ -185,7 +185,7 @@ - + @@ -197,7 +197,7 @@ - + @@ -217,7 +217,7 @@ - + @@ -229,7 +229,7 @@ - + @@ -242,7 +242,7 @@ - + @@ -254,7 +254,7 @@ - + @@ -268,7 +268,7 @@ - + @@ -290,7 +290,7 @@ - + @@ -303,7 +303,7 @@ - + @@ -316,7 +316,7 @@ - + @@ -330,7 +330,7 @@ - + @@ -342,7 +342,7 @@ - + @@ -354,7 +354,7 @@ - + @@ -366,7 +366,7 @@ - + @@ -381,7 +381,7 @@ - + @@ -395,122 +395,118 @@ - + - - + - + - - - - + + + + - + - - - - + + + + - + - - - - + + + + - + - - - - + + + + - + - - - - + - + - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + - + - - + + - + - - + + - + - - + + - + - - - - - - + + + + + + - + - - + + - + - - - - - - + + + + + + - + + + + + - - - - @@ -518,20 +514,20 @@ - + - - + + - + + + + + - - - - - + @@ -539,129 +535,129 @@ - + - - - + + + - + - - - - - - - - + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + - + - - - + + + - + + + + + - - - - - + - + - - + + - + - - + + - + - - + + @@ -688,226 +684,219 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/Data/Templates/Standard Passive Transports.pkml b/src/Data/Templates/Standard Passive Transports.pkml index 53486a12d..aaefe74f8 100644 --- a/src/Data/Templates/Standard Passive Transports.pkml +++ b/src/Data/Templates/Standard Passive Transports.pkml @@ -1,8 +1,8 @@  - - + + - + @@ -17,7 +17,7 @@ - + @@ -32,7 +32,7 @@ - + @@ -47,7 +47,7 @@ - + @@ -62,7 +62,7 @@ - + @@ -77,7 +77,7 @@ - + @@ -92,7 +92,7 @@ - + @@ -107,7 +107,7 @@ - + @@ -122,7 +122,7 @@ - + @@ -137,7 +137,7 @@ - + @@ -152,7 +152,7 @@ - + @@ -167,7 +167,7 @@ - + @@ -182,7 +182,7 @@ - + @@ -197,7 +197,7 @@ - + @@ -212,41 +212,7 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -262,7 +228,7 @@ - + @@ -277,7 +243,7 @@ - + @@ -292,7 +258,7 @@ - + @@ -308,7 +274,7 @@ - + @@ -323,7 +289,7 @@ - + @@ -338,71 +304,71 @@ - + + - - - + + - + - + - - + + - + - + - - + + - + + - - - + + - + @@ -417,7 +383,7 @@ - + @@ -432,7 +398,7 @@ - + @@ -449,7 +415,7 @@ - + @@ -465,7 +431,7 @@ - + @@ -481,7 +447,7 @@ - + @@ -496,7 +462,7 @@ - + @@ -514,7 +480,7 @@ - + @@ -531,7 +497,7 @@ - + @@ -547,7 +513,7 @@ - + @@ -563,7 +529,7 @@ - + @@ -578,7 +544,7 @@ - + @@ -597,7 +563,39 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -613,7 +611,7 @@ - + @@ -629,39 +627,41 @@ - + - - + + - + + - + - + + - - + + - + @@ -674,7 +674,7 @@ - + @@ -691,7 +691,7 @@ - + @@ -704,7 +704,7 @@ - + @@ -719,7 +719,7 @@ - + @@ -736,17 +736,17 @@ - + - + - + @@ -755,188 +755,188 @@ - + - + - - - + - + - - - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + + + - + - - - + - + - - - + - + - - - - + + + + - + - - - - + + + + - + - + - + - + - + - + + + - + - + + + + + - + - - - + + + + + - + - - - - - + + + - + - - - - - + + + - + - - - + + + - + - - - + + + + + - + - - - + + + + + - + - - - - - + + + - + - - - - - + + + - + - - - + + + + + - + - + - + + + - + @@ -946,20 +946,20 @@ - + - + - + - - + + @@ -967,7 +967,7 @@ - + @@ -976,7 +976,7 @@ - + @@ -1001,32 +1001,32 @@ - - + + - + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/src/MoBi.Assets/AppConstants.cs b/src/MoBi.Assets/AppConstants.cs index d34e6bb63..d2deb44cf 100644 --- a/src/MoBi.Assets/AppConstants.cs +++ b/src/MoBi.Assets/AppConstants.cs @@ -9,6 +9,7 @@ using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Domain.UnitSystem; using OSPSuite.Utility.Extensions; +using static OSPSuite.Assets.MenuNames; namespace MoBi.Assets { @@ -871,7 +872,7 @@ public static string AskForChangedName(string oldName, string typeName) public static string AskForNewName(string name) { - return string.Format("Please enter new name"); + return "Please enter new name"; } public static string AskFileOverride(string fileName) @@ -886,7 +887,9 @@ public static string AskForNewNeighborhoodBuilderName(string container1Name, str public static readonly string ExportSimulationModelToFileTitle = "Export model structure to text file"; public static readonly string ExportSimulationResultsToExcel = "Export simulation results to Excel®"; - public static readonly string ExportSimulationMatlabODE = "Export simulation to Matlab® ODE"; + public static readonly string ExportODEForMatlab = "Export simulation to Matlab® ODE"; + public static readonly string ExportODEForR = "Export simulation to R ODE"; + public static readonly string ExportSimulationToCppCode = "Export simulation to C++ code"; public static readonly string LoadSBMLProject = "Load SBML Project"; public static string Load(string objectType) @@ -982,7 +985,6 @@ public static class MenuNames public static readonly string AbsolutePath = "Absolute Path"; public static readonly string ExportHistory = Captions.ExportHistory; public static readonly string StartPopulationSimulation = "Send Simulation to PK-Sim for Population Simulation..."; - public static readonly string ExportSimModelXml = "Export Simulation for Matlab®/R..."; public static readonly string BuildingBlockExplorer = "Building Blocks"; public static readonly string SimulationExplorer = "Simulations"; public static readonly string New = "New"; @@ -1033,7 +1035,6 @@ public static class MenuNames public static readonly string SearchView = "Search"; public static readonly string NotificationView = "Notifications"; public static readonly string ComparisonView = "Comparison"; - public static readonly string MatlabDifferentialSystemExport = "Export Simulation to Matlab® Differential Equations..."; public static readonly string GoTo = "Go To..."; public static readonly string DiscardResults = "Discard"; public static readonly string KeepResults = "Keep"; @@ -1951,22 +1952,6 @@ public static string MoleculeNodeAlreadyExistsForMolecule(string moleculeName) } } - public static string RHSDefaultUnitName(IDimension dimension) - { - var numerator = string.IsNullOrEmpty(dimension.BaseUnit.Name) ? "1" : dimension.BaseUnit.Name; - if (string.Equals(numerator, "min")) - return string.Empty; - - return $"{numerator}/min"; - } - - public static string RHSDimensionSuffix = " per time"; - - public static string RHSDimensionName(IDimension dimension) - { - return $"{dimension.Name}{RHSDimensionSuffix}"; - } - public static readonly IEnumerable UnallowedNames = new List { string.Empty, @@ -2026,8 +2011,12 @@ public static string CompositeNameFor(string name1, string name2) return $"{name1}-{name2}"; } - public static string ProjectVersionCannotBeLoaded(int projectVersion, int currentVersion, string downloadUrl) + public static string ProjectVersionCannotBeLoaded(int projectVersion, int currentVersion, bool projectIsTooOld, string downloadUrl) { + if (projectIsTooOld) + return $"The project is too old (compatible version {projectVersion}) and cannot be loaded with this version. (compatible version {currentVersion}).\n" + + $"Visit our download page at {downloadUrl} to download an older version of the software compatible with this project."; + if (projectVersion > currentVersion) return $"The application is too old (compatible version {currentVersion}) and cannot load a project created with a newer version (project version {projectVersion}).\nVisit our download page at {downloadUrl}"; diff --git a/src/MoBi.Assets/MoBi.Assets.csproj b/src/MoBi.Assets/MoBi.Assets.csproj index 5c190d0a3..726ecb50d 100644 --- a/src/MoBi.Assets/MoBi.Assets.csproj +++ b/src/MoBi.Assets/MoBi.Assets.csproj @@ -1,119 +1,40 @@ - - + + - Debug - AnyCPU - 9.0.21022 - 2.0 - {3C65FFC2-D9EC-4951-8C35-04854AD34E52} - Library - Properties - MoBi.Assets - MoBi.Assets - v4.6.2 - 512 - - - - - 3.5 - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - 1591 - false - AnyCPU - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + netstandard2.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + false + false + open-systems-pharmacology, ospsuite-components + Open-Systems-Pharmacology + LICENSE + bin\$(Configuration) + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml + 1591, 3246 + - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - - 3.5 - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - - - - 3.5 - - - 3.5 - - - + + - - Properties\SolutionInfo.cs - - - - + + - - Designer - + + + + - - - - - - - - + + True + + - - - \ No newline at end of file + diff --git a/src/MoBi.Assets/Properties/AssemblyInfo.cs b/src/MoBi.Assets/Properties/AssemblyInfo.cs deleted file mode 100644 index 365eeb576..000000000 --- a/src/MoBi.Assets/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("MoBi.Assets")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyCulture("")] diff --git a/src/MoBi.Assets/packages.config b/src/MoBi.Assets/packages.config deleted file mode 100644 index 4d01d30a7..000000000 --- a/src/MoBi.Assets/packages.config +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MoBi.BatchTool/App.config b/src/MoBi.BatchTool/App.config index 08a958531..456471cb5 100644 --- a/src/MoBi.BatchTool/App.config +++ b/src/MoBi.BatchTool/App.config @@ -1,122 +1,14 @@  - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + \ No newline at end of file diff --git a/src/MoBi.BatchTool/MoBi.BatchTool.csproj b/src/MoBi.BatchTool/MoBi.BatchTool.csproj index 7980f513e..b1bb49619 100644 --- a/src/MoBi.BatchTool/MoBi.BatchTool.csproj +++ b/src/MoBi.BatchTool/MoBi.BatchTool.csproj @@ -1,406 +1,77 @@ - - - + + - Debug - AnyCPU - {881D23DB-4A9F-45C8-BA67-58B790537634} + net472 WinExe - Properties - MoBi.BatchTool - MoBi.BatchTool - true - v4.6.2 - 512 - - - + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + false + false + Open-Systems-Pharmacology + LICENSE + bin\$(Configuration) + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml + 1591, 3246 + MoBi.ico + MoBi.BatchTool - + + x64 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + - - ..\..\packages\Antlr3.Runtime.3.5.1\lib\net40-client\Antlr3.Runtime.dll - - - ..\..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\..\packages\Castle.Windsor.4.1.1\lib\net45\Castle.Windsor.dll - - - ..\..\packages\Dapper.1.60.6\lib\net451\Dapper.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.BonusSkins.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Charts.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Images.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Office.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.PivotGrid.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Printing.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.RichEdit.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.RichEdit.v18.2.Export.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraBars.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.UI.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.Wizard.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraEditors.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraGrid.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraLayout.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraNavBar.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraPivotGrid.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraPrinting.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraRichEdit.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraRichEdit.v18.2.Extensions.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraTreeList.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraVerticalGrid.v18.2.dll - - - ..\..\packages\FluentNHibernate.2.1.2\lib\net461\FluentNHibernate.dll - - - ..\..\packages\SharpZipLib.1.1.0\lib\net45\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\Iesi.Collections.4.0.4\lib\net461\Iesi.Collections.dll - - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Logging.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\..\packages\Microsoft.Extensions.Primitives.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - ..\..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll - True - - - ..\..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll - True - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\NHibernate.5.2.5\lib\net461\NHibernate.dll - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Draw.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Instruments.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Layout.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Pdf.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Svg.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Xml.dll - True - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.DataBinding.2.3.0.3\lib\net462\OSPSuite.DataBinding.dll - - - ..\..\packages\OSPSuite.DataBinding.DevExpress.3.0.0.3\lib\net462\OSPSuite.DataBinding.DevExpress.dll - - - ..\..\packages\OSPSuite.FuncParser.3.0.1.14\lib\net45\OSPSuite.FuncParser.dll - - - ..\..\packages\OSPSuite.Infrastructure.8.0.4\lib\net462\OSPSuite.Infrastructure.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.SimModel.3.0.1.27\lib\net45\OSPSuite.SimModel.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.UI.8.0.4\lib\net462\OSPSuite.UI.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - - ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - - ..\..\packages\Remotion.Linq.EagerFetching.2.2.0\lib\net45\Remotion.Linq.EagerFetching.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - ..\..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - - - ..\..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net46\System.Data.SQLite.dll - - - ..\..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - - - - - - - - + + - - Properties\SolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - Form - - - BatchMainView.cs - - - - - - Form - - - FileFromFolderRunnerView.cs - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - BatchMainView.cs - - - FileFromFolderRunnerView.cs - - - Designer - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - + + - - Designer + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + True + + - - {2DBF50BE-A749-421C-B526-8BDA31CFE7B3} - MoBi.Core - - - {15ed932c-edec-407b-91d9-7bcb8e7f95f5} - MoBi.Engine - - - {B4C86DCA-8877-4400-8088-2401EE65B403} - MoBi.Presentation - - - {3C65FFC2-D9EC-4951-8C35-04854AD34E52} - MoBi.Assets - - - {DE743812-F444-42E2-B72D-CF298933E2BA} - MoBi.UI - + + + + + + + - - SQLite.Interop.dll - PreserveNewest - + + + - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - + \ No newline at end of file diff --git a/src/MoBi.BatchTool/MoBi.ico b/src/MoBi.BatchTool/MoBi.ico new file mode 100644 index 000000000..40e6aa14b Binary files /dev/null and b/src/MoBi.BatchTool/MoBi.ico differ diff --git a/src/MoBi.BatchTool/Properties/AssemblyInfo.cs b/src/MoBi.BatchTool/Properties/AssemblyInfo.cs deleted file mode 100644 index 4af0a72c1..000000000 --- a/src/MoBi.BatchTool/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Reflection; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("MoBi.BatchTool")] -[assembly: AssemblyDescription("")] \ No newline at end of file diff --git a/src/MoBi.BatchTool/Properties/Resources.Designer.cs b/src/MoBi.BatchTool/Properties/Resources.Designer.cs deleted file mode 100644 index a76f617f5..000000000 --- a/src/MoBi.BatchTool/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MoBi.BatchTool.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MoBi.BatchTool.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/src/MoBi.BatchTool/Properties/Resources.resx b/src/MoBi.BatchTool/Properties/Resources.resx deleted file mode 100644 index af7dbebba..000000000 --- a/src/MoBi.BatchTool/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/src/MoBi.BatchTool/Properties/Settings.Designer.cs b/src/MoBi.BatchTool/Properties/Settings.Designer.cs deleted file mode 100644 index f6766ee1a..000000000 --- a/src/MoBi.BatchTool/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MoBi.BatchTool.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/src/MoBi.BatchTool/Properties/Settings.settings b/src/MoBi.BatchTool/Properties/Settings.settings deleted file mode 100644 index 39645652a..000000000 --- a/src/MoBi.BatchTool/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/MoBi.BatchTool/Properties/licenses.licx b/src/MoBi.BatchTool/Properties/licenses.licx deleted file mode 100644 index e69de29bb..000000000 diff --git a/src/MoBi.BatchTool/Services/BatchDiagramModelToXmlMapper.cs b/src/MoBi.BatchTool/Services/BatchDiagramModelToXmlMapper.cs index 479487d9e..5fce2a839 100644 --- a/src/MoBi.BatchTool/Services/BatchDiagramModelToXmlMapper.cs +++ b/src/MoBi.BatchTool/Services/BatchDiagramModelToXmlMapper.cs @@ -28,9 +28,6 @@ public void AddElementBaseNodeBindingFor(T node) } - public string ElementName - { - get { return "DiagramModel"; } - } + public string ElementName => "DiagramModel"; } } \ No newline at end of file diff --git a/src/MoBi.BatchTool/packages.config b/src/MoBi.BatchTool/packages.config deleted file mode 100644 index 04a82229e..000000000 --- a/src/MoBi.BatchTool/packages.config +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MoBi.Core/Commands/OutputIntervalInSimulationCommand.cs b/src/MoBi.Core/Commands/OutputIntervalInSimulationCommand.cs index a1bf1b3bf..6cb788a74 100644 --- a/src/MoBi.Core/Commands/OutputIntervalInSimulationCommand.cs +++ b/src/MoBi.Core/Commands/OutputIntervalInSimulationCommand.cs @@ -22,7 +22,7 @@ protected OutputIntervalInSimulationCommand(OutputSchema schema, OutputInterval public override void RestoreExecutionData(IMoBiContext context) { base.RestoreExecutionData(context); - _schema = _simulation.Settings.OutputSchema; + _schema = _simulation.OutputSchema; } protected override void ClearReferences() diff --git a/src/MoBi.Core/Commands/SetParameterDimensionInBuildingBlockCommand.cs b/src/MoBi.Core/Commands/SetParameterDimensionInBuildingBlockCommand.cs index 59ad057da..53279a6d5 100644 --- a/src/MoBi.Core/Commands/SetParameterDimensionInBuildingBlockCommand.cs +++ b/src/MoBi.Core/Commands/SetParameterDimensionInBuildingBlockCommand.cs @@ -1,13 +1,14 @@ -using MoBi.Assets; -using OSPSuite.Core.Commands.Core; +using System; +using MoBi.Assets; using MoBi.Core.Domain.Model; using MoBi.Core.Events; +using OSPSuite.Assets; +using OSPSuite.Core.Commands.Core; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Domain.UnitSystem; using OSPSuite.Core.Services; -using OSPSuite.Assets; namespace MoBi.Core.Commands { @@ -28,7 +29,7 @@ public SetParameterDimensionInBuildingBlockCommand(IParameter parameter, IDimens _oldDimension = parameter.Dimension; _oldDisplayUnit = _parameter.DisplayUnit; _newDisplayUnit = null; - ObjectType =ObjectTypes.Parameter; + ObjectType = ObjectTypes.Parameter; CommandType = AppConstants.Commands.EditCommand; } @@ -39,17 +40,19 @@ protected override void ExecuteWith(IMoBiContext context) _parameter.Dimension = _newDimension; _parameter.DisplayUnit = _newDisplayUnit ?? displayUnitRetriever.PreferredUnitFor(_parameter); - updateFormulaDimension(_parameter.Formula, _newDimension, context); - updateFormulaDimension(_parameter.RHSFormula, context.DimensionFactory.RHSDimensionFor(_newDimension), context); + updateFormulaDimension(_parameter.Formula, () => _newDimension, context); + + updateFormulaDimension(_parameter.RHSFormula, () => context.DimensionFactory.GetOrAddRHSDimensionFor(_newDimension), context); Description = AppConstants.Commands.SetParameterDimension(_parameter.EntityPath(), _oldDimension.Name, _newDimension.Name); context.PublishEvent(new QuantityChangedEvent(_parameter)); } - private void updateFormulaDimension(IFormula formula, IDimension dimension, IMoBiContext context) + // Note": We use a function here to ensure that evaluation of RHSDimension is only performed if there is a RHS + private void updateFormulaDimension(IFormula formula, Func dimensionRetriever, IMoBiContext context) { if (formula == null) return; - formula.Dimension = dimension; + formula.Dimension = dimensionRetriever(); context.PublishEvent(new FormulaChangedEvent(_parameter.Formula)); } diff --git a/src/MoBi.Core/Commands/UpdateOutputSelectionsInSimulationCommand.cs b/src/MoBi.Core/Commands/UpdateOutputSelectionsInSimulationCommand.cs index 13d49c7ea..fe2fa844e 100644 --- a/src/MoBi.Core/Commands/UpdateOutputSelectionsInSimulationCommand.cs +++ b/src/MoBi.Core/Commands/UpdateOutputSelectionsInSimulationCommand.cs @@ -32,7 +32,7 @@ protected override void ClearReferences() protected override void DoExecute(IMoBiContext context) { _oldOutputSelections = _simulation.OutputSelections; - _simulation.Settings.OutputSelections = _outputSelections; + _simulation.SimulationSettings.OutputSelections = _outputSelections; Description = AppConstants.Commands.UpdateOutputSelectionInSimulationDescription(_simulation.Name); } } diff --git a/src/MoBi.Core/CoreRegister.cs b/src/MoBi.Core/CoreRegister.cs index 9faf667d5..40cfb4cee 100644 --- a/src/MoBi.Core/CoreRegister.cs +++ b/src/MoBi.Core/CoreRegister.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using MoBi.Assets; using MoBi.Core.Commands; using MoBi.Core.Domain.Comparison; using MoBi.Core.Domain.Model; @@ -9,7 +8,6 @@ using MoBi.Core.Helper; using MoBi.Core.Reporting; using MoBi.Core.Serialization.Converter; -using MoBi.Core.Serialization.Converter.v3_5; using MoBi.Core.Services; using OSPSuite.Core; using OSPSuite.Core.Commands; @@ -19,11 +17,10 @@ using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Domain.Services.ParameterIdentifications; using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Infrastructure.Reporting; +using OSPSuite.FuncParser; +using OSPSuite.Infrastructure.Export; using OSPSuite.Infrastructure.Serialization.ORM.History; -using OSPSuite.Infrastructure.Services; -using OSPSuite.Utility.Collections; -using OSPSuite.Utility.Compression; +using OSPSuite.Infrastructure.Reporting; using OSPSuite.Utility.Container; using IContainer = OSPSuite.Utility.Container.IContainer; using ReportingRegister = OSPSuite.TeXReporting.ReportingRegister; @@ -59,21 +56,22 @@ public override void RegisterInContainer(IContainer container) container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); - container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); - container.Register(); - container.Register(); container.Register(); container.Register(); container.Register(); container.Register(); container.Register>(); + //Register application specific core objects + container.Register(LifeStyle.Singleton); + container.Register(LifeStyle.Singleton); + + //Register opened types generics - container.Register(typeof(IRepository<>), typeof(ImplementationRepository<>)); container.Register(typeof(IEntitiesInBuildingBlockRetriever<>), typeof(EntitiesInBuildingBlockRetriever<>)); container.Register, List>(LifeStyle.Singleton); @@ -81,6 +79,11 @@ public override void RegisterInContainer(IContainer container) container.RegisterFactory(); container.RegisterFactory(); + + container.Register(); + + registerSerializers(container); + registerReporters(container); registerComparers(container); @@ -90,16 +93,22 @@ public override void RegisterInContainer(IContainer container) registerConverters(container); } + private void registerSerializers(IContainer container) + { + container.AddRegister(x => x.FromType()); + } + private static void registerReporters(IContainer container) { container.AddRegister(x => x.FromType()); - container.AddRegister(x => x.FromType()); + container.AddRegister(x => x.FromType()); + container.AddRegister(x => x.FromType()); container.AddScanner(scan => { scan.AssemblyContainingType(); scan.IncludeNamespaceContainingType(); - scan.WithConvention(); + scan.WithConvention(); }); } @@ -129,8 +138,6 @@ private static void registerConverters(IContainer container) { scan.AssemblyContainingType(); scan.IncludeNamespaceContainingType(); - //this one needs to be global because of required flag during conversion - scan.ExcludeType(); scan.ExcludeType(); scan.ExcludeType(); @@ -140,7 +147,6 @@ private static void registerConverters(IContainer container) //Needs to be registered as singleton container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); - container.Register(LifeStyle.Singleton); } } } \ No newline at end of file diff --git a/src/MoBi.Core/Domain/Model/Diagram/MoBiBaseDiagramManager.cs b/src/MoBi.Core/Domain/Model/Diagram/MoBiBaseDiagramManager.cs deleted file mode 100644 index 3f3c19728..000000000 --- a/src/MoBi.Core/Domain/Model/Diagram/MoBiBaseDiagramManager.cs +++ /dev/null @@ -1,15 +0,0 @@ -using SBSuite.Core.Diagram; -using SBSuite.Core.Domain; -using SBSuite.Presentation.Diagram; - -namespace MoBi.Core.Domain.Model.Diagram -{ - - public interface IMoBiBaseDiagramManager : IBaseDiagramManager - { - void RenameObjectBase(IObjectBase objectBase); - void ApplyLayoutTemplate(IContainerBase containerBase, string diagramTemplateXmlFilePath, bool recursive); - void SaveContainerToXml(IContainerBase containerBase, string diagramTemplateXmlFilePath); - IDiagramModel LoadDiagramTemplate(string diagramTemplateXmlFilePath); - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Domain/Model/MoBiContext.cs b/src/MoBi.Core/Domain/Model/MoBiContext.cs index 041166b11..3e54f9ed0 100644 --- a/src/MoBi.Core/Domain/Model/MoBiContext.cs +++ b/src/MoBi.Core/Domain/Model/MoBiContext.cs @@ -13,8 +13,7 @@ using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Domain.UnitSystem; using OSPSuite.Core.Extensions; -using OSPSuite.Infrastructure; -using OSPSuite.Infrastructure.Journal; +using OSPSuite.Infrastructure.Serialization.Journal; using OSPSuite.Infrastructure.Serialization.ORM.History; using OSPSuite.Utility.Events; using OSPSuite.Utility.Extensions; @@ -64,12 +63,13 @@ public class MoBiContext : Workspace, IMoBiContext private readonly IObjectTypeResolver _objectTypeResolver; private readonly ICloneManagerForBuildingBlock _cloneManager; private readonly ILazyLoadTask _lazyLoadTask; + private readonly IJournalSession _journalSession; public IMoBiHistoryManager HistoryManager { get; set; } public IMoBiDimensionFactory DimensionFactory { get; } public IObjectBaseFactory ObjectBaseFactory { get; } public IObjectPathFactory ObjectPathFactory { get; } - public ICoreCalculationMethodRepository CalculatonMethodRepository { get; set; } + public ICoreCalculationMethodRepository CalculationMethodRepository { get; set; } public IEventPublisher EventPublisher { get; } public IWithIdRepository ObjectRepository { get; } @@ -77,7 +77,7 @@ public MoBiContext(IObjectBaseFactory objectBaseFactory, IMoBiDimensionFactory d IXmlSerializationService serializationService, IObjectPathFactory objectPathFactory, IWithIdRepository objectBaseRepository, IHistoryManagerFactory historyManagerFactory, IRegisterTask registerTask, IUnregisterTask unregisterTask, IClipboardManager clipboardManager, IContainer container, IObjectTypeResolver objectTypeResolver, - ICloneManagerForBuildingBlock cloneManager, IJournalSession journalSession, IFileLocker fileLocker, ILazyLoadTask lazyLoadTask) : base(eventPublisher, journalSession, fileLocker) + ICloneManagerForBuildingBlock cloneManager, IJournalSession journalSession, IFileLocker fileLocker, ILazyLoadTask lazyLoadTask) : base(eventPublisher, fileLocker) { ObjectBaseFactory = objectBaseFactory; ObjectRepository = objectBaseRepository; @@ -93,6 +93,7 @@ public MoBiContext(IObjectBaseFactory objectBaseFactory, IMoBiDimensionFactory d _registerTask = registerTask; _unregisterTask = unregisterTask; _clipboardManager = clipboardManager; + _journalSession = journalSession; } public IMoBiProject CurrentProject @@ -156,10 +157,10 @@ public void NewProject() public override void Clear() { - DimensionFactory.ProjectFactory = null; HistoryManager = null; ObjectRepository.Clear(); _clipboardManager.Clear(); + _journalSession.Close(); base.Clear(); } @@ -195,7 +196,6 @@ public T Resolve() public void LoadFrom(IMoBiProject project) { - DimensionFactory.ProjectFactory = project.DimensionFactory; CurrentProject = project; _registerTask.Register(project); } diff --git a/src/MoBi.Core/Domain/Model/MoBiProject.cs b/src/MoBi.Core/Domain/Model/MoBiProject.cs index d677e1d2a..b673ac95d 100644 --- a/src/MoBi.Core/Domain/Model/MoBiProject.cs +++ b/src/MoBi.Core/Domain/Model/MoBiProject.cs @@ -14,7 +14,6 @@ namespace MoBi.Core.Domain.Model { public interface IMoBiProject : IProject { - IDimensionFactory DimensionFactory { get; set; } IReadOnlyList Simulations { get; } IReadOnlyList MoleculeBlockCollection { get; } IReadOnlyList ReactionBlockCollection { get; } @@ -29,7 +28,7 @@ public interface IMoBiProject : IProject ReactionDimensionMode ReactionDimensionMode { get; set; } void AddSimulation(IMoBiSimulation newSimulation); - void RemoveSimulation(IMoBiSimulation simualtionToRemove); + void RemoveSimulation(IMoBiSimulation simulationToRemove); void AddChart(CurveChart chart); void RemoveChart(CurveChart chartToRemove); @@ -83,7 +82,6 @@ public class MoBiProject : Project, IMoBiProject private readonly List _allSimulations; public string ChartSettings { get; set; } - public IDimensionFactory DimensionFactory { get; set; } public override bool HasChanged { get; set; } @@ -93,7 +91,6 @@ public class MoBiProject : Project, IMoBiProject public MoBiProject() { - DimensionFactory = new MoBiMergedDimensionFactory(); _charts = new List(); _buildingBlocks = new List(); _allSimulations = new List(); @@ -145,10 +142,10 @@ public void AddSimulation(IMoBiSimulation newSimulation) _allSimulations.Add(newSimulation); } - public void RemoveSimulation(IMoBiSimulation simualtionToRemove) + public void RemoveSimulation(IMoBiSimulation simulationToRemove) { - _allSimulations.Remove(simualtionToRemove); - RemoveClassifiableForWrappedObject(simualtionToRemove); + _allSimulations.Remove(simulationToRemove); + RemoveClassifiableForWrappedObject(simulationToRemove); } public void AddChart(CurveChart chart) diff --git a/src/MoBi.Core/Domain/Model/MoBiSimulation.cs b/src/MoBi.Core/Domain/Model/MoBiSimulation.cs index e1b9a3cf3..708ec36d5 100644 --- a/src/MoBi.Core/Domain/Model/MoBiSimulation.cs +++ b/src/MoBi.Core/Domain/Model/MoBiSimulation.cs @@ -11,8 +11,9 @@ namespace MoBi.Core.Domain.Model { - public interface IMoBiSimulation : IModelCoreSimulation, IWithDiagramFor, ISimulation, IWithChartTemplates + public interface IMoBiSimulation : IWithDiagramFor, ISimulation, IWithChartTemplates { + DataRepository Results { get; set; } ICache HistoricResults { get; } CurveChart Chart { get; set; } IMoBiBuildConfiguration MoBiBuildConfiguration { get; } @@ -22,10 +23,9 @@ public interface IMoBiSimulation : IModelCoreSimulation, IWithDiagramFor - /// Returns true if the simulation as created using the otherwise fasle. + /// Returns true if the simulation as created using the otherwise false. /// bool IsCreatedBy(IBuildingBlock templateBuildingBlock); @@ -38,6 +38,7 @@ public class MoBiSimulation : ModelCoreSimulation, IMoBiSimulation { private bool _hasChanged; private readonly IList _allSimulationAnalyses = new List(); + private DataRepository _results; public IDiagramModel DiagramModel { get; set; } public CurveChart Chart { get; set; } public string ParameterIdentificationWorkingDirectory { get; set; } @@ -54,18 +55,16 @@ public bool HasChanged set => _hasChanged = value; } - public ISimulationSettings Settings => MoBiBuildConfiguration.SimulationSettings; - - public OutputSchema OutputSchema => Settings.OutputSchema; + public OutputSchema OutputSchema => SimulationSettings.OutputSchema; public CurveChartTemplate ChartTemplateByName(string chartTemplate) { - return Settings.ChartTemplateByName(chartTemplate); + return SimulationSettings.ChartTemplateByName(chartTemplate); } public void RemoveAllChartTemplates() { - Settings.RemoveAllChartTemplates(); + SimulationSettings.RemoveAllChartTemplates(); } public bool IsCreatedBy(IBuildingBlock templateBuildingBlock) @@ -73,7 +72,7 @@ public bool IsCreatedBy(IBuildingBlock templateBuildingBlock) return MoBiBuildConfiguration.BuildingInfoForTemplate(templateBuildingBlock) != null; } - public SolverSettings Solver => Settings.Solver; + public SolverSettings Solver => SimulationSettings.Solver; public bool UsesObservedData(DataRepository dataRepository) { @@ -85,8 +84,6 @@ private static bool chartUsesObservedData(DataRepository dataRepository, CurveCh return curveChart != null && curveChart.Curves.Any(c => Equals(c.yData.Repository, dataRepository)); } - public OutputSelections OutputSelections => Settings.OutputSelections; - public override void AcceptVisitor(IVisitor visitor) { base.AcceptVisitor(visitor); @@ -122,24 +119,12 @@ public override void UpdatePropertiesFrom(IUpdatable source, ICloneManager clone return null; } - /// - /// Returns the endtime of the simulation in kernel unit - /// - public virtual double? EndTime - { - get { return OutputSchema.Intervals.Select(x => x.EndTime.Value).Max(); } - } - public IEnumerable Charts { get { yield return Chart; } } - public ISimulationSettings SimulationSettings => BuildConfiguration.SimulationSettings; - - public IReadOnlyList CompoundNames => BuildConfiguration.AllPresentMolecules().Select(x => x.Name).ToList(); - - public IReactionBuildingBlock Reactions + public new IReactionBuildingBlock Reactions { get => BuildConfiguration.Reactions; set => BuildConfiguration.Reactions = value; @@ -185,22 +170,16 @@ public void MarkResultsOutOfDate() public bool HasResults => Results != null; - public override DataRepository Results + public DataRepository Results { - get => base.Results; + get => _results; set { - base.Results = value; + _results = value; HasUpToDateResults = true; } } public bool ComesFromPKSim => Creation.Origin == Origins.PKSim; - - public IEnumerable All() where T : class, IEntity - { - var root = Model?.Root; - return root == null ? Enumerable.Empty() : root.GetAllChildren(); - } } } \ No newline at end of file diff --git a/src/MoBi.Core/Domain/Services/DataNamingService.cs b/src/MoBi.Core/Domain/Services/DataNamingService.cs index 3c34a0ad3..c312cad04 100644 --- a/src/MoBi.Core/Domain/Services/DataNamingService.cs +++ b/src/MoBi.Core/Domain/Services/DataNamingService.cs @@ -7,7 +7,7 @@ namespace MoBi.Core.Domain.Services { - internal class DataNamingService : IDataNamingService + public class DataNamingService { private readonly IMoBiContext _context; diff --git a/src/MoBi.Core/Domain/UnitSystem/DimensionConverterFor.cs b/src/MoBi.Core/Domain/UnitSystem/DimensionConverter.cs similarity index 91% rename from src/MoBi.Core/Domain/UnitSystem/DimensionConverterFor.cs rename to src/MoBi.Core/Domain/UnitSystem/DimensionConverter.cs index efeefe6bd..a7adb2441 100644 --- a/src/MoBi.Core/Domain/UnitSystem/DimensionConverterFor.cs +++ b/src/MoBi.Core/Domain/UnitSystem/DimensionConverter.cs @@ -8,23 +8,23 @@ namespace MoBi.Core.Domain.UnitSystem { - public interface IMoBiDimensionConverterFor : IDimensionConverterFor + public interface IMoBiDimensionConverter : IDimensionConverter { bool CanBeUsedFor(object refObject); void SetRefObject(object refObject); } - public interface IMoBiDimensionConverterFor : IMoBiDimensionConverterFor where T : IWithDimension + public interface IMoBiDimensionConverter : IMoBiDimensionConverter where T : IWithDimension { void SetRefObject(T refObject); } - public abstract class DimensionConverterFor : IMoBiDimensionConverterFor where T : IWithDimension + public abstract class DimensionConverter : IMoBiDimensionConverter where T : IWithDimension { private readonly IDimension _sourceDimension; private readonly IDimension _targetDimension; - protected DimensionConverterFor(IDimension sourceDimension, IDimension targetDimension) + protected DimensionConverter(IDimension sourceDimension, IDimension targetDimension) { _sourceDimension = sourceDimension; _targetDimension = targetDimension; @@ -87,7 +87,7 @@ public bool CanConvertFrom(IDimension dimension) protected abstract double? GetFactor(); } - public class MolWeightDimensionConverterForFormulaUsable : DimensionConverterFor + public class MolWeightDimensionConverterForFormulaUsable : DimensionConverter { private IQuantity _formulaUsable; private IObjectPath _useablePath; @@ -131,7 +131,7 @@ public override void SetRefObject(IQuantity refObject) } - public abstract class MolWeightDimensionConverterForDataColumn : DimensionConverterFor + public abstract class MolWeightDimensionConverterForDataColumn : DimensionConverter { protected double? _mw; diff --git a/src/MoBi.Core/Domain/UnitSystem/MoBiDimensionFactory.cs b/src/MoBi.Core/Domain/UnitSystem/MoBiDimensionFactory.cs index 3c1b96df5..1f4c8df33 100644 --- a/src/MoBi.Core/Domain/UnitSystem/MoBiDimensionFactory.cs +++ b/src/MoBi.Core/Domain/UnitSystem/MoBiDimensionFactory.cs @@ -2,100 +2,18 @@ using System.Collections.Generic; using System.Linq; using MoBi.Assets; -using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.UnitSystem; namespace MoBi.Core.Domain.UnitSystem { public interface IMoBiDimensionFactory : IDimensionFactory { - IDimensionFactory BaseFactory { get; } - IDimensionFactory ProjectFactory { get; set; } - - /// - /// Create the RHS Dimension for the given dimension and add it to the project factory - /// if not available yet - /// - IDimension RHSDimensionFor(IDimension dimension); - - /// - /// Retrieve the dimension given a unit string - /// - /// The unit string that will be searched for. For example 'mg' or 's' - /// The dimension associated with the unit name - IDimension DimensionForUnit(string unitName); - - /// - /// Returns the named or the default NO_DIMENSION if - /// not found - /// - IDimension TryGetDimension(string dimensionName); - IDimension TryGetDimensionCaseInsensitive(string dimensionName); } - public class MoBiDimensionFactory : IMoBiDimensionFactory + public class MoBiDimensionFactory : DimensionFactory, IMoBiDimensionFactory { - private IDimensionFactory _projectFactory; - public IDimensionFactory BaseFactory { get; } - - public IDimensionFactory ProjectFactory - { - get => _projectFactory; - set => _projectFactory = value ?? new MoBiMergedDimensionFactory(); - } - - public IDimension DimensionForUnit(string unitName) - { - var matches = Dimensions.Where(dimension => dimension.Units.Any(unit => unitName.Equals(unit.Name, StringComparison.OrdinalIgnoreCase))).ToList(); - - if (!matches.Any()) - return null; - - return matches.Count() > 1 - ? matches.FirstOrDefault(dimension => dimension.Units.Any(unit => unitName.Equals(unit.Name, StringComparison.Ordinal))) - : matches.First(); - } - - public MoBiDimensionFactory() - { - BaseFactory = new MoBiMergedDimensionFactory(); - ProjectFactory = new MoBiMergedDimensionFactory(); - } - - public IDimension AddDimension(BaseDimensionRepresentation baseRepresentation, string dimensionName, string baseUnitName) - { - var newDim = new Dimension(baseRepresentation, dimensionName, baseUnitName); - AddDimension(newDim); - return newDim; - } - - public void AddDimension(IDimension dimension) - { - ProjectFactory.AddDimension(dimension); - } - - public IEnumerable DimensionNames => Dimensions.Select(x => x.Name); - - public IDimension Dimension(string name) - { - return - BaseFactory.TryGetDimension(name) ?? - ProjectFactory.TryGetDimension(name) ?? - rhsDimensionForName(name); - } - - public IDimension TryGetDimension(string dimensionName) - { - try - { - return Dimension(dimensionName); - } - catch (KeyNotFoundException) - { - return NoDimension; - } - } + private IEnumerable mobiDimensionMergingInformationList => AllMergingInformation.Cast(); public IDimension TryGetDimensionCaseInsensitive(string dimensionName) { @@ -103,97 +21,36 @@ public IDimension TryGetDimensionCaseInsensitive(string dimensionName) return dimension ?? NoDimension; } - /// - /// Try to find a dimension that could be the origin dimension for the given name - /// - /// is thrown when match could not be found - private IDimension rhsDimensionForName(string name) - { - if (string.IsNullOrEmpty(name)) - throw new KeyNotFoundException(); - - if (!name.Contains(AppConstants.RHSDimensionSuffix)) - throw new KeyNotFoundException(AppConstants.Exceptions.UnknownDimension(name)); - - var dimensionName = name.Replace(AppConstants.RHSDimensionSuffix, ""); - var originDimension = Dimension(dimensionName); - return RHSDimensionFor(originDimension); - } - - public void Clear() - { - /* nothing to do */ - } - - public void RemoveDimension(string dimensionName) - { - ProjectFactory.RemoveDimension(dimensionName); - } - - public void RemoveDimension(IDimension dimension) + protected override IDimensionConverter CreateConverterFor(IDimension dimension, IDimension dimensionToMerge, T hasDimension) { - RemoveDimension(dimension.Name); - } - - public IDimension RHSDimensionFor(IDimension dimension) - { - var dimensionName = AppConstants.RHSDimensionName(dimension); - if (DimensionNames.Contains(dimensionName)) - return Dimension(dimensionName); - - var unitName = AppConstants.RHSDefaultUnitName(dimension); + var converter = (from mergeInfo in mobiDimensionMergingInformationList + where mergeInfo.Matches(dimension, dimensionToMerge, hasDimension) + select mergeInfo.Converter).SingleOrDefault(); - // RHS is per Time hence -1 - var rhsDimensionRepresentation = new BaseDimensionRepresentation(dimension.BaseRepresentation); - rhsDimensionRepresentation.TimeExponent = rhsDimensionRepresentation.TimeExponent - 1; - - var rhsDimension = new Dimension(rhsDimensionRepresentation, dimensionName, unitName); - var equivalentRHSDimension = findFirstEquivalentDimension(rhsDimension, unitName); - if (equivalentRHSDimension != null) - return equivalentRHSDimension; - - AddDimension(rhsDimension); - return rhsDimension; - } - - private IDimension findFirstEquivalentDimension(Dimension rhsDimension, string unitName) - { - var equivalentRHSDimension = Dimensions.FirstOrDefault(x => x.IsEquivalentTo(rhsDimension)); - if (equivalentRHSDimension != null && equivalentRHSDimension.HasUnit(unitName)) - return equivalentRHSDimension; - - return null; - } + if (converter == null) + return null; - public IEnumerable Dimensions - { - get + var usedConverter = Activator.CreateInstance(converter.GetType(), dimension, dimensionToMerge) as IMoBiDimensionConverter; + if (usedConverter != null) { - var dimensions = BaseFactory.Dimensions - .Union(ProjectFactory.Dimensions); - - return dimensions.OrderBy(dim => dim.DisplayName); + usedConverter.SetRefObject(hasDimension); + return usedConverter; } - } - public IDimension NoDimension => Dimension(Constants.Dimension.DIMENSIONLESS); + return converter; + } - public IDimension MergedDimensionFor(T hasDimension) where T : IWithDimension + public override string MergedDimensionNameFor(IDimension sourceDimension) { - if (hasDimension.Dimension == null) - return null; - - var dim = BaseFactory.MergedDimensionFor(hasDimension); - - if (!Equals(dim, hasDimension.Dimension)) - return dim; + if (isConcentration(sourceDimension)) + return AppConstants.Captions.Concentration; - return ProjectFactory.MergedDimensionFor(hasDimension); + return base.MergedDimensionNameFor(sourceDimension); } - public void AddMergingInformation(IDimensionMergingInformation mergingInforamtion) + private bool isConcentration(IDimension dimension) { - ProjectFactory.AddMergingInformation(mergingInforamtion); + return dimension.Name.Contains(AppConstants.Captions.Concentration); } } } \ No newline at end of file diff --git a/src/MoBi.Core/Domain/UnitSystem/MoBiMergedDimensionFactory.cs b/src/MoBi.Core/Domain/UnitSystem/MoBiMergedDimensionFactory.cs index 3113cc3b1..d533c94d0 100644 --- a/src/MoBi.Core/Domain/UnitSystem/MoBiMergedDimensionFactory.cs +++ b/src/MoBi.Core/Domain/UnitSystem/MoBiMergedDimensionFactory.cs @@ -1,51 +1,11 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using MoBi.Assets; -using OSPSuite.Core.Domain; +using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.UnitSystem; namespace MoBi.Core.Domain.UnitSystem { - public class MoBiMergedDimensionFactory : DimensionFactory - { - private IEnumerable mobiDimensionMergingInformationList => AllMergingInformation.Cast(); - - protected override IDimensionConverterFor CreateConverterFor(IDimension dimension, IDimension dimensionToMerge, T hasDimension) - { - var converter = (from mergeInfo in mobiDimensionMergingInformationList - where mergeInfo.Matches(dimension, dimensionToMerge, hasDimension) - select mergeInfo.Converter).SingleOrDefault(); - - if (converter == null) - return null; - - var usedConverter = Activator.CreateInstance(converter.GetType(), dimension, dimensionToMerge) as IMoBiDimensionConverterFor; - if (usedConverter != null) - { - usedConverter.SetRefObject(hasDimension); - return usedConverter; - } - return converter; - } - - public override string MergedDimensionNameFor(IDimension sourceDimension) - { - if (isConcentration(sourceDimension)) - return AppConstants.Captions.Concentration; - - return base.MergedDimensionNameFor(sourceDimension); - } - - private bool isConcentration(IDimension dimension) - { - return dimension.Name.Contains(AppConstants.Captions.Concentration); - } - } - public interface IMoBiDimensionMergingInformation : IDimensionMergingInformation { - IMoBiDimensionConverterFor Converter { get; } + IMoBiDimensionConverter Converter { get; } bool Matches(IDimension sourceDimension, IDimension targetDimension, IWithDimension withDimension); } @@ -53,16 +13,16 @@ public class MoBiDimensionMergingInformation : IMoBiDimensionMergingInformati { public IDimension SourceDimension { get; private set; } public IDimension TargetDimension { get; private set; } - public IMoBiDimensionConverterFor Converter { get; private set; } + public IMoBiDimensionConverter Converter { get; private set; } + public bool Matches(IDimension sourceDimension, IDimension targetDimension, IWithDimension withDimension) { return SourceDimension.Equals(sourceDimension) && TargetDimension.Equals(targetDimension) && Converter.CanBeUsedFor(withDimension); - } - public MoBiDimensionMergingInformation(IDimension sourceDimension, IDimension targetDimension, IMoBiDimensionConverterFor converter) + public MoBiDimensionMergingInformation(IDimension sourceDimension, IDimension targetDimension, IMoBiDimensionConverter converter) { SourceDimension = sourceDimension; TargetDimension = targetDimension; diff --git a/src/MoBi.Core/Exceptions/MoBiException.cs b/src/MoBi.Core/Exceptions/MoBiException.cs index f2bc0b3a5..429099a0f 100644 --- a/src/MoBi.Core/Exceptions/MoBiException.cs +++ b/src/MoBi.Core/Exceptions/MoBiException.cs @@ -34,7 +34,8 @@ public NotMatchingSerializationFileException(string searchedElement) : base(AppConstants.Exceptions.NoInformationFoundException(searchedElement)) { } - public NotMatchingSerializationFileException(string fileName,string searchedElement, string foundElement) : + + public NotMatchingSerializationFileException(string fileName, string searchedElement, string foundElement) : base(AppConstants.Exceptions.NoInformationFoundException(fileName, searchedElement, foundElement)) { } @@ -43,7 +44,7 @@ public NotMatchingSerializationFileException(string fileName,string searchedElem public class InvalidProjectFileException : MoBiException { public InvalidProjectFileException(int projectVersion) - : base(AppConstants.ProjectVersionCannotBeLoaded(projectVersion, ProjectVersions.Current,AppConstants.ProductSiteDownload)) + : base(AppConstants.ProjectVersionCannotBeLoaded(projectVersion, ProjectVersions.Current, ProjectVersions.ProjectIsTooOld(projectVersion), AppConstants.ProductSiteDownload)) { } } diff --git a/src/MoBi.Core/Extensions/DimensionInfoExtensions.cs b/src/MoBi.Core/Extensions/DimensionInfoExtensions.cs new file mode 100644 index 000000000..720ef11a6 --- /dev/null +++ b/src/MoBi.Core/Extensions/DimensionInfoExtensions.cs @@ -0,0 +1,18 @@ +using OSPSuite.FuncParser; +namespace MoBi.Core.Extensions +{ + + public static class DimensionInfoExtensions + { + public static bool AreEquals(this DimensionInformation left, DimensionInformation right) + { + return (left.LengthExponent == right.LengthExponent + && left.MassExponent == right.MassExponent + && left.TimeExponent == right.TimeExponent + && left.ElectricCurrentExponent == right.ElectricCurrentExponent + && left.TemperatureExponent == right.TemperatureExponent + && left.AmountExponent == right.AmountExponent + && left.LuminousIntensityExponent == right.LuminousIntensityExponent); + } + } +} \ No newline at end of file diff --git a/src/MoBi.Core/MoBi.Core.csproj b/src/MoBi.Core/MoBi.Core.csproj index a4d42b006..dfebf5ef8 100644 --- a/src/MoBi.Core/MoBi.Core.csproj +++ b/src/MoBi.Core/MoBi.Core.csproj @@ -1,678 +1,55 @@ - - + + - Debug - AnyCPU - 9.0.21022 - 2.0 - {2DBF50BE-A749-421C-B526-8BDA31CFE7B3} - Library - Properties - MoBi.Core - MoBi.Core - v4.6.2 - 512 - - - - - - - - - - - - - 3.5 - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\MoBi.Core.XML + net472 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + false + false + open-systems-pharmacology, ospsuite-components + Core functionalities for PK-Sim + Open-Systems-Pharmacology + LICENSE + bin\$(Configuration) + bin\$(Configuration)\$(TargetFramework)\PKSim.Core.xml 1591 - false - AnyCPU - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + + - - ..\..\packages\Antlr3.Runtime.3.5.1\lib\net40-client\Antlr3.Runtime.dll - - - ..\..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\..\packages\Castle.Windsor.4.1.1\lib\net45\Castle.Windsor.dll - - - ..\..\packages\Dapper.1.60.6\lib\net451\Dapper.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - ..\..\packages\FluentNHibernate.2.1.2\lib\net461\FluentNHibernate.dll - - - ..\..\packages\SharpZipLib.1.1.0\lib\net45\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\Iesi.Collections.4.0.4\lib\net461\Iesi.Collections.dll - - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - - ..\..\packages\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Logging.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\..\packages\Microsoft.Extensions.Primitives.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\NHibernate.5.2.5\lib\net461\NHibernate.dll - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.Infrastructure.8.0.4\lib\net462\OSPSuite.Infrastructure.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - - ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - - ..\..\packages\Remotion.Linq.EagerFetching.2.2.0\lib\net45\Remotion.Linq.EagerFetching.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - ..\..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - 3.5 - - - ..\..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net46\System.Data.SQLite.dll - - - - ..\..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - - - - - 3.5 - - - 3.5 - - - - - 3.0 - + + - - Properties\SolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - {3C65FFC2-D9EC-4951-8C35-04854AD34E52} - MoBi.Assets - + + + + + + + + + + + + - + + True + + + - - Designer - - - + - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + + diff --git a/src/MoBi.Core/MoBiConfiguration.cs b/src/MoBi.Core/MoBiConfiguration.cs index 3908858af..a6fc89c7a 100644 --- a/src/MoBi.Core/MoBiConfiguration.cs +++ b/src/MoBi.Core/MoBiConfiguration.cs @@ -4,7 +4,6 @@ using MoBi.Assets; using OSPSuite.Core; using OSPSuite.Core.Domain; -using OSPSuite.Infrastructure.Configuration; using OSPSuite.Assets; namespace MoBi.Core @@ -26,7 +25,7 @@ public class MoBiConfiguration : OSPSuiteConfiguration, IMoBiConfiguration public override string ProductName { get; } = AppConstants.PRODUCT_NAME; public override Origin Product { get; } = Origins.MoBi; public override string ProductNameWithTrademark { get; } = AppConstants.PRODUCT_NAME_WITH_TRADEMARK; - public override ApplicationIcon Icon { get; } = ApplicationIcons.MoBi; + public override string IconName { get; } = ApplicationIcons.MoBi.IconName; protected override string[] LatestVersionWithOtherMajor { get; } = {"7.4", "6.3", "3.6" }; public override string UserSettingsFileName { get; } = "Settings.xml"; public override string ApplicationSettingsFileName { get; } = "ApplicationSettings.xml"; diff --git a/src/MoBi.Core/ProjectVersions.cs b/src/MoBi.Core/ProjectVersions.cs index e1e06eb6d..ac2136101 100644 --- a/src/MoBi.Core/ProjectVersions.cs +++ b/src/MoBi.Core/ProjectVersions.cs @@ -8,23 +8,17 @@ public static class ProjectVersions { private static readonly Cache _knownVersions = new Cache(x => x.Version); - //Version 3.0.1 to 3.0.3 - public static readonly ProjectVersion V3_0_1_to_3 = addVersion(0, "3.0.1"); - - public static readonly ProjectVersion V3_0_4 = addVersion(1, "3.0.4"); - public static readonly ProjectVersion V3_1_3 = addVersion(2, "3.1.3"); - public static readonly ProjectVersion V3_2_1 = addVersion(3, "3.2.1"); - public static readonly ProjectVersion V3_3_1 = addVersion(PKMLVersion.V5_3_1, "3.3.1"); - public static readonly ProjectVersion V3_4_1 = addVersion(PKMLVersion.V5_4_1, "3.4.1"); - public static readonly ProjectVersion V3_5_1 = addVersion(PKMLVersion.V5_5_1, "3.5.1"); - public static readonly ProjectVersion V3_6_1 = addVersion(PKMLVersion.V5_6_1, "3.3.1"); + public const int UNSUPPORTED = PKMLVersion.NON_CONVERTABLE_VERSION; + // older versions not supported anymore starting V9 + public static readonly ProjectVersion V6_0_1 = addVersion(PKMLVersion.V6_0_1, "6.0.1"); public static readonly ProjectVersion V6_1_1 = addVersion(PKMLVersion.V6_1_1, "6.1.1"); public static readonly ProjectVersion V6_2_1 = addVersion(PKMLVersion.V6_2_1, "6.2.1"); public static readonly ProjectVersion V6_3_1 = addVersion(PKMLVersion.V6_3_1, "6.3.1"); public static readonly ProjectVersion V7_1_0 = addVersion(PKMLVersion.V7_1_0, "7.1.0"); public static readonly ProjectVersion V7_3_0 = addVersion(PKMLVersion.V7_3_0, "7.3.0"); - public static readonly ProjectVersion Current = V7_3_0; + public static readonly ProjectVersion V9_0 = addVersion(PKMLVersion.V9_0, "9.0"); + public static readonly ProjectVersion Current = V9_0; private static ProjectVersion addVersion(int versionNumber, string versionDisplay) { @@ -40,9 +34,11 @@ public static bool CanLoadVersion(int projectVersion) return (projectVersion <= Current.Version) && _knownVersions.Contains(projectVersion); } - public static ProjectVersion FindBy(int version) + public static bool ProjectIsTooOld(int projectVersion) { - return _knownVersions[version]; + return projectVersion <= UNSUPPORTED; } + + public static ProjectVersion FindBy(int version) => _knownVersions[version]; } } \ No newline at end of file diff --git a/src/MoBi.Core/Properties/AssemblyInfo.cs b/src/MoBi.Core/Properties/AssemblyInfo.cs deleted file mode 100644 index eec116d75..000000000 --- a/src/MoBi.Core/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Reflection; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("MoBiCore")] -[assembly: AssemblyDescription("")] diff --git a/src/MoBi.Core/Serialization/Converter/v3_1/Converter30To313.cs b/src/MoBi.Core/Serialization/Converter/v3_1/Converter30To313.cs deleted file mode 100644 index 0bfdeb70d..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_1/Converter30To313.cs +++ /dev/null @@ -1,82 +0,0 @@ -using System.Xml.Linq; -using OSPSuite.Utility.Extensions; -using MoBi.Core.Domain.Model; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Formulas; - -namespace MoBi.Core.Serialization.Converter.v3_1 -{ - public class Converter30To313 : IMoBiObjectConverter - { - private readonly IParameterStartValuesUpdater _parameterStartValuesUpdater; - private readonly ISpatialStructureUpdaterTo3_1_3 _spatialStructureUpdater; - private readonly IModelUpdaterTo3_1_3 _modelUpdater; - - public Converter30To313(IParameterStartValuesUpdater parameterStartValuesUpdater, ISpatialStructureUpdaterTo3_1_3 spatialStructureUpdater, IModelUpdaterTo3_1_3 modelUpdater) - { - _parameterStartValuesUpdater = parameterStartValuesUpdater; - _spatialStructureUpdater = spatialStructureUpdater; - _modelUpdater = modelUpdater; - } - - private void updateSimulationTo313(IMoBiSimulation sim) - { - _modelUpdater.UpdateModel(sim.Model); - _spatialStructureUpdater.UpdateSpatialStructre((IMoBiSpatialStructure) sim.MoBiBuildConfiguration.SpatialStructure); - _parameterStartValuesUpdater.UpdateParameterStartvalues(sim.MoBiBuildConfiguration.ParameterStartValues, sim); - sim.HasChanged = true; - } - - public (int convertedToVersion, bool conversionHappened) Convert(object objectToUpdate, IMoBiProject project) - { - if (objectToUpdate.IsAnImplementationOf()) - { - _parameterStartValuesUpdater.UpdateParameterStartvalues((IParameterStartValuesBuildingBlock) objectToUpdate, project); - } - else if (objectToUpdate.IsAnImplementationOf()) - { - _parameterStartValuesUpdater.UpdateParameterStartValue((IParameterStartValue) objectToUpdate, project); - } - else if (objectToUpdate.IsAnImplementationOf()) - { - updateSimulationTo313((IMoBiSimulation) objectToUpdate); - } - else if (objectToUpdate.IsAnImplementationOf()) - { - _spatialStructureUpdater.UpdateSpatialStructre((IMoBiSpatialStructure) objectToUpdate); - } - else if (objectToUpdate.IsAnImplementationOf()) - { - _spatialStructureUpdater.UpdateContainerTo3_1_3((IContainer) objectToUpdate); - } - else if (objectToUpdate.IsAnImplementationOf()) - { - var buidlConfiguratuion = (IMoBiBuildConfiguration) objectToUpdate; - _spatialStructureUpdater.UpdateSpatialStructre((IMoBiSpatialStructure) buidlConfiguratuion.SpatialStructure); - _parameterStartValuesUpdater.UpdateParameterStartvalues(buidlConfiguratuion.ParameterStartValues, project); - } - else if (objectToUpdate.IsAnImplementationOf()) - { - var distributedParameter = (IDistributedParameter) objectToUpdate; - if (distributedParameter.Formula.IsAnImplementationOf()) - { - _spatialStructureUpdater.UpdateDistributedParameterTo3_1_3(distributedParameter); - } - } - - //Almost every single object is being converted here. Returns true for compatibility reasons - return (ProjectVersions.V3_1_3, true); - } - - public (int convertedToVersion, bool conversionHappened) ConvertXml(XElement element, IMoBiProject project) - { - return (ProjectVersions.V3_1_3, false); - } - - public bool IsSatisfiedBy(int version) - { - return version == ProjectVersions.V3_0_1_to_3; - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_1/DimensionRetriever.cs b/src/MoBi.Core/Serialization/Converter/v3_1/DimensionRetriever.cs deleted file mode 100644 index f2f0cd500..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_1/DimensionRetriever.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System.Linq; -using MoBi.Core.Domain.Model; -using SBSuite.Core.Domain; -using SBSuite.Core.Domain.Builder; -using SBSuite.Core.Domain.UnitSystem; - -namespace MoBi.Core.Serialization.Converter.v3_1 -{ - public interface IDimensionRetriever - { - IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiProject project); - IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiSimulation simulation); - } - - internal class DimensionRetriever : IDimensionRetriever - { - public IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiSimulation simulation) - { - var parameter = psv.Path.Resolve(simulation.Model.Root); - return parameter == null ? null : parameter.Dimension; - } - - public IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiProject project) - { - if (project == null) return null; - - var parameter = - searchParameterInSimulations(psv, parameterStartValuesBuildingBlock,project) ?? - searchParamterInSpatialStructures(psv, parameterStartValuesBuildingBlock, project) ?? - searchParameterInMolecules(psv, parameterStartValuesBuildingBlock, project); - - return parameter == null ? null : parameter.Dimension; - } - - private IParameter searchParameterInMolecules(IParameterStartValue psv, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - var parameterName = psv.Path.Last(); - var tmpPath = psv.Path.Clone(); - tmpPath.Remove(tmpPath.Last()); - var moleculeName = tmpPath.Last(); - - var parameter = searchParameterInMoleculeBuildingBlock(project.MoleculeBlockCollection.FirstOrDefault(mb => mb.Id.Equals(parent.MoleculeBuildingBlockId)), moleculeName, parameterName); - - foreach (var moleculeBuildingBlock in project.MoleculeBlockCollection) - { - parameter = searchParameterInMoleculeBuildingBlock(moleculeBuildingBlock, moleculeName, parameterName); - if (parameter != null) break; - } - return parameter; - } - - private static IParameter searchParameterInMoleculeBuildingBlock(IMoleculeBuildingBlock moleculeBuildingBlock, - string moleculeName, string parameterName) - { - IParameter parameter = null; - if (moleculeBuildingBlock != null) - { - var moleculeBuilder = moleculeBuildingBlock[moleculeName]; - if (moleculeBuilder != null) - { - parameter = moleculeBuilder - .GetChildren(p => !p.BuildMode.Equals(ParameterBuildMode.Property)) - .FirstOrDefault(p => p.Name.Equals(parameterName)); - } - } - return parameter; - } - - private IParameter searchParamterInSpatialStructures(IParameterStartValue psv, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - var parameterPath = psv.Path; - IParameter parameter = searchParamterInSpatialStructures(parameterPath, parent,project); - if (parameter == null) - { - parameterPath = psv.Path.Clone(); - var parameterName = parameterPath.Last(); - parameterPath.Remove(parameterName); - var tmp = parameterPath.Last(); - parameterPath.Remove(tmp); - parameterPath.Add(Constants.MOLECULE_PROPERTIES); - parameterPath.Add(parameterName); - parameter = searchParamterInSpatialStructures(parameterPath, parent,project); - } - return parameter; - } - - private IParameter searchParamterInSpatialStructures(IObjectPath parameterPath, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - IParameter parameter = searchParameterInContainers(parameterPath, project.SpatialStructureCollection.FirstOrDefault(ss => ss.Id.Equals(parent.SpatialStructureId))); - - if (parameter == null) - { - foreach (var spatialStructure in project.SpatialStructureCollection) - { - parameter = searchParameterInContainers(parameterPath, spatialStructure); - if (parameter != null) break; - } - } - return parameter; - } - - private static IParameter searchParameterInContainers(IObjectPath parameterPath, IMoBiSpatialStructure spatialStructure) - { - if (spatialStructure == null) return null; - IParameter parameter = null; - foreach (var top in spatialStructure.TopContainers) - { - parameter = parameterPath.Resolve(top); - if (parameter != null) break; - } - if (parameter == null) - { - parameter = parameterPath.Resolve(spatialStructure.NeighborhoodsContainer); - } - return parameter; - } - - private IParameter searchParameterInSimulations(IParameterStartValue psv, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - IParameter parameter = null; - var simulations = project.Simulations.Where(sim => usesParameterStartValuesBB(sim, parent)); - foreach (var simulation in simulations) - { - parameter = psv.Path.Resolve(simulation.Model.Root); - if (parameter != null) break; - } - return parameter; - } - - private bool usesParameterStartValuesBB(IMoBiSimulation moBiSimulation, IParameterStartValuesBuildingBlock parameterStartValueBuildingBlock) - { - var templateBuildingBlock = moBiSimulation.MoBiBuildConfiguration.ParameterStartValuesInfo.TemplateBuildingBlock; - - if (Equals(templateBuildingBlock,parameterStartValueBuildingBlock)) - return true; - - var parameterStartValuesBuildingBlock = moBiSimulation.MoBiBuildConfiguration.ParameterStartValues; - return parameterStartValuesBuildingBlock.Equals(parameterStartValueBuildingBlock) || parameterStartValuesBuildingBlock.Name.Equals(parameterStartValueBuildingBlock.Name); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_1/ModelUpdater.cs b/src/MoBi.Core/Serialization/Converter/v3_1/ModelUpdater.cs deleted file mode 100644 index df21ad127..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_1/ModelUpdater.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using OSPSuite.Utility.Extensions; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Formulas; - -namespace MoBi.Core.Serialization.Converter.v3_1 -{ - public interface IModelUpdaterTo3_1_3 - { - void UpdateModel(IModel model); - } - - internal class ModelUpdaterTo3_1_3 : IModelUpdaterTo3_1_3 - { - public void UpdateModel(IModel model) - { - var distributedParamtersToChange = model.Root.GetAllChildren(dp => dp.Formula.IsAnImplementationOf()); - distributedParamtersToChange.Each(UpdateDistributedParameterTo3_1_3); - } - - public void UpdateDistributedParameterTo3_1_3(IDistributedParameter distributedParameter) - { - var geoSDParameter = distributedParameter.GetSingleChildByName(Constants.Distribution.GEOMETRIC_DEVIATION); - var constantFormula = ((ConstantFormula) geoSDParameter.Formula); - constantFormula.Value = Math.Exp(constantFormula.Value); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_1/ParameterStartValueDimensionRetriever.cs b/src/MoBi.Core/Serialization/Converter/v3_1/ParameterStartValueDimensionRetriever.cs deleted file mode 100644 index dfc04b9f9..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_1/ParameterStartValueDimensionRetriever.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System.Linq; -using MoBi.Core.Domain.Model; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.UnitSystem; - -namespace MoBi.Core.Serialization.Converter.v3_1 -{ - public interface IParameterStartValueDimensionRetriever - { - IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiProject project); - IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiSimulation simulation); - } - - internal class ParameterStartValueDimensionRetriever : IParameterStartValueDimensionRetriever - { - public IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiSimulation simulation) - { - var parameter = psv.Path.TryResolve(simulation.Model.Root); - return parameter == null ? null : parameter.Dimension; - } - - public IDimension GetDimensionFor(IParameterStartValue psv, IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiProject project) - { - if (project == null) return null; - - var parameter = - searchParameterInSimulations(psv, parameterStartValuesBuildingBlock,project) ?? - searchParamterInSpatialStructures(psv, parameterStartValuesBuildingBlock, project) ?? - searchParameterInMolecules(psv, parameterStartValuesBuildingBlock, project); - - return parameter == null ? null : parameter.Dimension; - } - - private IParameter searchParameterInMolecules(IParameterStartValue psv, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - var parameterName = psv.Path.Last(); - var tmpPath = psv.Path.Clone(); - tmpPath.Remove(tmpPath.Last()); - var moleculeName = tmpPath.Last(); - - var parameter = searchParameterInMoleculeBuildingBlock(project.MoleculeBlockCollection.FirstOrDefault(mb => mb.Id.Equals(parent.MoleculeBuildingBlockId)), moleculeName, parameterName); - - foreach (var moleculeBuildingBlock in project.MoleculeBlockCollection) - { - parameter = searchParameterInMoleculeBuildingBlock(moleculeBuildingBlock, moleculeName, parameterName); - if (parameter != null) break; - } - return parameter; - } - - private static IParameter searchParameterInMoleculeBuildingBlock(IMoleculeBuildingBlock moleculeBuildingBlock, - string moleculeName, string parameterName) - { - IParameter parameter = null; - if (moleculeBuildingBlock != null) - { - var moleculeBuilder = moleculeBuildingBlock[moleculeName]; - if (moleculeBuilder != null) - { - parameter = moleculeBuilder - .GetChildren(p => !p.BuildMode.Equals(ParameterBuildMode.Property)) - .FirstOrDefault(p => p.Name.Equals(parameterName)); - } - } - return parameter; - } - - private IParameter searchParamterInSpatialStructures(IParameterStartValue psv, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - var parameterPath = psv.Path; - IParameter parameter = searchParamterInSpatialStructures(parameterPath, parent,project); - if (parameter == null) - { - parameterPath = psv.Path.Clone(); - var parameterName = parameterPath.Last(); - parameterPath.Remove(parameterName); - var tmp = parameterPath.Last(); - parameterPath.Remove(tmp); - parameterPath.Add(Constants.MOLECULE_PROPERTIES); - parameterPath.Add(parameterName); - parameter = searchParamterInSpatialStructures(parameterPath, parent,project); - } - return parameter; - } - - private IParameter searchParamterInSpatialStructures(IObjectPath parameterPath, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - IParameter parameter = searchParameterInContainers(parameterPath, project.SpatialStructureCollection.FirstOrDefault(ss => ss.Id.Equals(parent.SpatialStructureId))); - - if (parameter == null) - { - foreach (var spatialStructure in project.SpatialStructureCollection) - { - parameter = searchParameterInContainers(parameterPath, spatialStructure); - if (parameter != null) break; - } - } - return parameter; - } - - private static IParameter searchParameterInContainers(IObjectPath parameterPath, IMoBiSpatialStructure spatialStructure) - { - if (spatialStructure == null) return null; - IParameter parameter = null; - foreach (var top in spatialStructure.TopContainers) - { - parameter = parameterPath.TryResolve(top); - if (parameter != null) break; - } - if (parameter == null) - { - parameter = parameterPath.TryResolve(spatialStructure.NeighborhoodsContainer); - } - return parameter; - } - - private IParameter searchParameterInSimulations(IParameterStartValue psv, IParameterStartValuesBuildingBlock parent, IMoBiProject project) - { - IParameter parameter = null; - var simulations = project.Simulations.Where(sim => usesParameterStartValuesBB(sim, parent)); - foreach (var simulation in simulations) - { - parameter = psv.Path.TryResolve(simulation.Model.Root); - if (parameter != null) break; - } - return parameter; - } - - private bool usesParameterStartValuesBB(IMoBiSimulation moBiSimulation, IParameterStartValuesBuildingBlock parameterStartValueBuildingBlock) - { - var templateBuildingBlock = moBiSimulation.MoBiBuildConfiguration.ParameterStartValuesInfo.TemplateBuildingBlock; - - if (Equals(templateBuildingBlock,parameterStartValueBuildingBlock)) - return true; - - var parameterStartValuesBuildingBlock = moBiSimulation.MoBiBuildConfiguration.ParameterStartValues; - return parameterStartValuesBuildingBlock.Equals(parameterStartValueBuildingBlock) || parameterStartValuesBuildingBlock.Name.Equals(parameterStartValueBuildingBlock.Name); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_1/ParameterStartValuesUpdater.cs b/src/MoBi.Core/Serialization/Converter/v3_1/ParameterStartValuesUpdater.cs deleted file mode 100644 index 9fd0367e8..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_1/ParameterStartValuesUpdater.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using MoBi.Assets; -using MoBi.Core.Domain.Model; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Utility.Extensions; - -namespace MoBi.Core.Serialization.Converter.v3_1 -{ - public interface IParameterStartValuesUpdater - { - void UpdateParameterStartvalues(IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiProject project); - void UpdateParameterStartValue(IParameterStartValue parameterStartValue, IMoBiProject project); - void UpdateParameterStartvalues(IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiSimulation simulation); - } - - internal class ParameterStartValuesUpdater : IParameterStartValuesUpdater - { - private readonly IParameterStartValueDimensionRetriever _dimensionRetriever; - private IParameterStartValuesBuildingBlock _parameterStartValuesBuildingBlock; - private readonly IDimensionFactory _dimensionFactory; - private readonly IProjectConverterLogger _projectConverterLogger; - - public ParameterStartValuesUpdater(IParameterStartValueDimensionRetriever dimensionRetriever, IDimensionFactory dimensionFactory, IProjectConverterLogger projectConverterLogger) - { - _dimensionRetriever = dimensionRetriever; - _dimensionFactory = dimensionFactory; - _projectConverterLogger = projectConverterLogger; - } - - public void UpdateParameterStartvalues(IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiProject project) - { - _parameterStartValuesBuildingBlock = parameterStartValuesBuildingBlock; - _projectConverterLogger.AddInfo(AppConstants.ProjectUpdateMessages.UpdatePSV(parameterStartValuesBuildingBlock.Name), parameterStartValuesBuildingBlock, parameterStartValuesBuildingBlock); - parameterStartValuesBuildingBlock.Each(psv => UpdateParameterStartValue(psv, project)); - } - - public void UpdateParameterStartvalues(IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, IMoBiSimulation simulation) - { - _parameterStartValuesBuildingBlock = parameterStartValuesBuildingBlock; - _projectConverterLogger.AddInfo(AppConstants.ProjectUpdateMessages.UpdatePSV(parameterStartValuesBuildingBlock.Name), parameterStartValuesBuildingBlock, parameterStartValuesBuildingBlock); - parameterStartValuesBuildingBlock.Each(psv => UpdateParameterStartValue(psv, simulation)); - } - - public void UpdateParameterStartValue(IParameterStartValue parameterStartValue, IMoBiProject project) - { - updateDimension(parameterStartValue, project); - var parameterName = parameterStartValue.ParameterName; - if (parameterName.Equals(Constants.Distribution.GEOMETRIC_DEVIATION)) - { - parameterStartValue.StartValue = Math.Exp(parameterStartValue.StartValue.Value); - } - } - - public void UpdateParameterStartValue(IParameterStartValue parameterStartValue, IMoBiSimulation simulation) - { - updateDimension(parameterStartValue, simulation); - var parameterName = parameterStartValue.ParameterName; - if (parameterName.Equals(Constants.Distribution.GEOMETRIC_DEVIATION)) - { - parameterStartValue.StartValue = Math.Exp(parameterStartValue.StartValue.Value); - } - } - - private void updateDimension(IParameterStartValue psv, IMoBiProject project) - { - var dimension = _dimensionRetriever.GetDimensionFor(psv, _parameterStartValuesBuildingBlock, project); - if (dimension == null) - { - dimension = _dimensionFactory.NoDimension; - _projectConverterLogger.AddSubMessage(AppConstants.ProjectUpdateMessages.UnableToGetDimensionFor(psv, _parameterStartValuesBuildingBlock.Name), _parameterStartValuesBuildingBlock); - } - psv.Dimension = dimension; - } - - private void updateDimension(IParameterStartValue psv, IMoBiSimulation simulation) - { - var dimension = _dimensionRetriever.GetDimensionFor(psv, _parameterStartValuesBuildingBlock, simulation); - if (dimension == null) - { - dimension = _dimensionFactory.NoDimension; - _projectConverterLogger.AddSubMessage(AppConstants.ProjectUpdateMessages.UnableToGetDimensionFor(psv, _parameterStartValuesBuildingBlock.Name), _parameterStartValuesBuildingBlock); - } - psv.Dimension = dimension; - } - } -} diff --git a/src/MoBi.Core/Serialization/Converter/v3_1/SpatialStructureUpdater.cs b/src/MoBi.Core/Serialization/Converter/v3_1/SpatialStructureUpdater.cs deleted file mode 100644 index 536263da0..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_1/SpatialStructureUpdater.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using OSPSuite.Utility.Extensions; -using MoBi.Core.Domain.Model; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Formulas; - -namespace MoBi.Core.Serialization.Converter.v3_1 -{ - public interface ISpatialStructureUpdaterTo3_1_3 - { - void UpdateSpatialStructre(IMoBiSpatialStructure spatialStructure); - void UpdateDistributedParameterTo3_1_3(IDistributedParameter distributedParameter); - void UpdateContainerTo3_1_3(IContainer container); - } - - internal class SpatialStructureUpdaterTo3_1_3 : ISpatialStructureUpdaterTo3_1_3 - { - public void UpdateSpatialStructre(IMoBiSpatialStructure spatialStructure) - { - foreach (var topContainer in spatialStructure.TopContainers) - { - UpdateContainerTo3_1_3(topContainer); - } - } - - public void UpdateContainerTo3_1_3(IContainer container) - { - container.GetAllChildren( - dp => dp.Formula.IsAnImplementationOf()) - .Each(UpdateDistributedParameterTo3_1_3); - } - - public void UpdateDistributedParameterTo3_1_3(IDistributedParameter distributedParameter) - { - var geoSDParameter = distributedParameter.GetSingleChildByName(Constants.Distribution.GEOMETRIC_DEVIATION); - var constantFormula = ((ConstantFormula) geoSDParameter.Formula); - constantFormula.Value = Math.Exp(constantFormula.Value); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_2/Converter313To32.cs b/src/MoBi.Core/Serialization/Converter/v3_2/Converter313To32.cs deleted file mode 100644 index 1a2b47b3e..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_2/Converter313To32.cs +++ /dev/null @@ -1,578 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using MoBi.Assets; -using MoBi.Core.Domain.Model; -using MoBi.Core.Domain.UnitSystem; -using MoBi.Core.Events; -using MoBi.Core.Helper; -using OSPSuite.Core.Converter.v5_2; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Data; -using OSPSuite.Core.Domain.Formulas; -using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Core.Serialization.Exchange; -using OSPSuite.Assets; -using OSPSuite.Serializer.Xml.Extensions; -using OSPSuite.Utility.Events; -using OSPSuite.Utility.Extensions; -using OSPSuite.Utility.Visitor; - -namespace MoBi.Core.Serialization.Converter.v3_2 -{ - public class Converter313To32 : IMoBiObjectConverter, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor - { - private readonly IDimensionConverter _dimensionConverter; - private readonly IMoBiDimensionFactory _dimensionFactory; - private readonly IObjectBaseFactory _objectBaseFactory; - private readonly IFormulaMapper _formulaMapper; - private readonly IDimensionMapper _dimensionMapper; - private readonly IEventPublisher _eventPublisher; - private readonly ObjectTypeResolver _objectTypeResolver; - private bool _suspendWarning; - private bool _converted; - - public Converter313To32(IDimensionConverter dimensionConverter, IMoBiDimensionFactory dimensionFactory, - IObjectBaseFactory objectBaseFactory, IFormulaMapper formulaMapper, IDimensionMapper dimensionMapper, IEventPublisher eventPublisher) - { - _dimensionConverter = dimensionConverter; - _dimensionFactory = dimensionFactory; - _objectBaseFactory = objectBaseFactory; - _formulaMapper = formulaMapper; - _dimensionMapper = dimensionMapper; - _eventPublisher = eventPublisher; - _objectTypeResolver = new ObjectTypeResolver(); - _suspendWarning = false; - } - - public bool IsSatisfiedBy(int version) - { - return version == ProjectVersions.V3_1_3; - } - - public (int convertedToVersion, bool conversionHappened) Convert(object objectToConvert, IMoBiProject project) - { - _converted = false; - this.Visit(objectToConvert); - return (ProjectVersions.V3_2_1, _converted); - } - - public (int convertedToVersion, bool conversionHappened) ConvertXml(XElement element, IMoBiProject project) - { - _dimensionConverter.ConvertDimensionIn(element); - convertOutputSchemaForSimulations(element); - convertParameterContainerToContainer(element); - convertActiveTransportContainersToChildren(element); - convertPassiveTransportsToChildren(element); - convertApplicationTransportsToChildren(element); - convertDimensionFactory(element); - convetSimulation(element); - convertObservers(element); - - return (ProjectVersions.V3_2_1, true); - } - - private void convertPassiveTransportsToChildren(XElement element) - { - var passiveTransports = element.Descendants("AllPassiveTransports"); - foreach (var passiveTransportsElement in passiveTransports) - { - var childList = getOrRetrieveChidrensElementFrom(passiveTransportsElement.Parent); - childList.Add(passiveTransportsElement.Elements("TransportBuilder")); - } - } - - private void convertObservers(XElement element) - { - foreach (var observerBuildingBlock in descendantsAndSelfNamed(element, AppConstants.XmlNames.ObserverBuildingBlock, AppConstants.XmlNames.Observers)) - { - var builders = observerBuildingBlock.Element("Builders"); - if (builders == null) - continue; - - foreach (var observerNode in builders.Elements()) - { - var moleculeList = new XElement(AppConstants.XmlNames.MoleculeList, observerNode.Attribute("forAll")); - var moleculeNamesNodes = observerNode.Descendants("MoleculeNames"); - foreach (var moleculeName in moleculeNamesNodes) - { - moleculeList.Add(moleculeName); - } - observerNode.Add(moleculeList); - } - } - } - - private static IEnumerable descendantsAndSelfNamed(XElement element, params string[] names) - { - return element.DescendantsAndSelf().Where(x => names.Contains(x.Name.ToString())); - } - private void convetSimulation(XElement element) - { - foreach (var settings in element.Descendants(AppConstants.XmlNames.CVODESettings)) - { - var newNode = new XElement(AppConstants.XmlNames.Solver, settings.Attributes(), settings.Nodes()); - settings.Parent.Add(newNode); - } - } - - private void convertDimensionFactory(XElement element) - { - foreach (var dimensionElement in element.DescendantsAndSelf("DimensionFactory").SelectMany(x => x.Descendants("Dimension"))) - { - var oldBaseUnit = dimensionElement.Attribute("BaseUnit"); - if (oldBaseUnit == null) continue; - - dimensionElement.AddAttribute("baseUnit", oldBaseUnit.Value); - - var oldDefaultUnit = dimensionElement.Attribute("DefaultUnit"); - if (oldDefaultUnit == null) continue; - - dimensionElement.AddAttribute("defaultUnit", oldDefaultUnit.Value); - } - } - - private void convertApplicationTransportsToChildren(XElement element) - { - var transports = element.Descendants("Transports"); - foreach (var transport in transports) - { - var childrenList = getOrRetrieveChidrensElementFrom(transport.Parent); - childrenList.Add(transport.Elements("TransportBuilder")); - } - var applicationMolecuBuilderList = element.Descendants("MoleculeNames"); - foreach (var moleculeBuilder in applicationMolecuBuilderList) - { - var childrenList = getOrRetrieveChidrensElementFrom(moleculeBuilder.Parent); - childrenList.Add(moleculeBuilder.Elements("ApplicationMoleculeBuilder")); - } - } - - private void convertActiveTransportContainersToChildren(XElement element) - { - var activeTransoporterList = element.Descendants("ActiveTransportRealizations"); - foreach (var transportList in activeTransoporterList) - { - var childList = getOrRetrieveChidrensElementFrom(transportList.Parent); - childList.Add(transportList.Elements("TransportBuilder")); - } - } - - private void convertParameterContainerToContainer(XElement element) - { - var parametersList = element.Descendants("Parameters"); - foreach (var parametersElement in parametersList) - { - var childrenElement = getOrRetrieveChidrensElementFrom(parametersElement.Parent); - childrenElement.Add(parametersElement.Elements()); - } - } - - private XElement getOrRetrieveChidrensElementFrom(XElement parent) - { - var childrenElment = parent.Element("Children"); - if (childrenElment == null) - { - childrenElment = parent.AddElement(new XElement("Children")); - } - return childrenElment; - } - - private void convertOutputSchemaForSimulations(XElement element) - { - foreach (var outputSchemaElement in element.Descendants("OutputSchema")) - { - var intervals = outputSchemaElement.Descendants("OutputInterval"); - outputSchemaElement.Add(newId()); - outputSchemaElement.AddAttribute("name", Constants.OUTPUT_SCHEMA); - var outputSchemaChildren = new XElement("Children"); - - int i = 0; - foreach (var interval in intervals) - { - var outputIntervalElementChildren = new XElement("Children"); - outputIntervalElementChildren.Add(parameterElement(Constants.Parameters.START_TIME, Constants.Dimension.TIME, interval.GetAttribute("startTime"))); - outputIntervalElementChildren.Add(parameterElement(Constants.Parameters.END_TIME, Constants.Dimension.TIME, interval.GetAttribute("endTime"))); - outputIntervalElementChildren.Add(parameterElement(Constants.Parameters.RESOLUTION, Constants.Dimension.RESOLUTION, interval.GetAttribute("resolution"))); - outputSchemaChildren.Add(new XElement("OutputInterval", new XAttribute("name", string.Format("{0} {1}", Constants.OUTPUT_INTERVAL, i)), outputIntervalElementChildren)); - i++; - } - outputSchemaElement.Add(outputSchemaChildren); - } - } - - private XElement parameterElement(string name, string dimension, string value) - { - return new XElement("Parameter", - newId(), - new XAttribute("name", name), - new XAttribute(Constants.Serialization.Attribute.Dimension, dimension), - new XAttribute(Constants.Serialization.Attribute.VALUE, value) - ); - } - - private XAttribute newId() - { - return new XAttribute("id", Guid.NewGuid().ToString()); - } - - public void Visit(DataRepository dataRepository) - { - _dimensionConverter.ConvertDimensionIn(dataRepository); - _converted = true; - } - - private void convert(IBuildingBlock buildingBlock) where T : class, IObjectBase - { - _dimensionConverter.ConvertDimensionIn(buildingBlock); - createDimensionWarningsForBuildingBlock(buildingBlock); - } - - public void Visit(ISpatialStructure spatialStructure) - { - convert(spatialStructure); - spatialStructure.TopContainers.Each(convertSpecialParametersIn); - updateForPKSimChanges(spatialStructure); - _converted = true; - } - - public void Visit(IMoleculeBuildingBlock moleculeBuildingBlock) - { - convert(moleculeBuildingBlock); - updateForPKSimChanges(moleculeBuildingBlock); - _converted = true; - } - - private void updateForPKSimChanges(IMoleculeBuildingBlock moleculeBuildingBlock) - { - var calculatedSpecificIntestinalPermeabilityTranscellularFormula = - moleculeBuildingBlock.FormulaCache.FindByName("PARAM_P_int_InVitro"); - if (calculatedSpecificIntestinalPermeabilityTranscellularFormula == null) return; - var velocity = _dimensionFactory.Dimension(AppConstants.DimensionNames.VELOCITY); - moleculeBuildingBlock.Each(mb=>addCalculatedSpecificIntestinalPermeabilityTranscellularParameterTo(mb,calculatedSpecificIntestinalPermeabilityTranscellularFormula,velocity)); - } - - private void addCalculatedSpecificIntestinalPermeabilityTranscellularParameterTo(IMoleculeBuilder moleculeBuilder, IFormula formula, IDimension dimension) - { - if (!isPKSimMolecule(moleculeBuilder)) return; - moleculeBuilder.Add(_objectBaseFactory - .Create() - .WithName("Calculated specific intestinal permeability (transcellular)") - .WithFormula(formula) - .WithDimension(dimension) - .WithMode(ParameterBuildMode.Global)); - } - - private bool isPKSimMolecule(IMoleculeBuilder moleculeBuilder) - { - return moleculeBuilder.ContainsName("Effective molecular weight"); - } - - private void updateForPKSimChanges(ISpatialStructure spatialStructure) - { - if (canAddNewParametersTo(spatialStructure)) - { - var blood2PlasmaFormula = createBlood2PlasmaFormula(); - var mucosaPermeabilityScaleFactorTranscellularFormula =createMucosaPermeabilityScaleFactor_transcellularFormula(); - var defaultIntestinalPermeabilityTranscellularFormula =creteDefaultIntestinalPermeabilityTranscellularFormula(); - spatialStructure.AddFormula(blood2PlasmaFormula); - spatialStructure.AddFormula(mucosaPermeabilityScaleFactorTranscellularFormula); - spatialStructure.AddFormula(defaultIntestinalPermeabilityTranscellularFormula); - spatialStructure.GlobalMoleculeDependentProperties.Add(createBlood2PlasmaRatioParameter(blood2PlasmaFormula)); - spatialStructure.GlobalMoleculeDependentProperties.Add(createMucosaPermeabilityScaleFactorTranscellularParameter(mucosaPermeabilityScaleFactorTranscellularFormula)); - spatialStructure.GlobalMoleculeDependentProperties.Add(createDefaultIntestinalPermeabilityTranscellularParameter(defaultIntestinalPermeabilityTranscellularFormula)); - } - if (is2PoreModel(spatialStructure)) - { - var moleculeProperties = spatialStructure.NeighborhoodsContainer.GetSingleChildByName("EndogenousIgG_int_EndogenousIgG_pls").GetSingleChildByName(Constants.MOLECULE_PROPERTIES); - if(moleculeProperties==null) return; - var partitionCoefficient = - moleculeProperties.GetSingleChildByName("Partition coefficient (interstitial/plasma)"); - // Change Formula to Constant - if(partitionCoefficient==null) return; - partitionCoefficient.Formula = _objectBaseFactory.Create().WithValue(1); - } - } - - private bool is2PoreModel(ISpatialStructure spatialStructure) - { - return spatialStructure.NeighborhoodsContainer.ContainsName("EndogenousIgG_int_EndogenousIgG_pls"); - } - - private IParameter createDefaultIntestinalPermeabilityTranscellularParameter(IFormula formula) - { - return _objectBaseFactory.Create().WithName("Default Intestinal permeability (transcellular)") - .WithMode(ParameterBuildMode.Global) - .WithFormula(formula) - .WithDimension(_dimensionFactory.Dimension(AppConstants.DimensionNames.VELOCITY)); - } - - private IParameter createMucosaPermeabilityScaleFactorTranscellularParameter(IFormula mucosaPermeabilityScaleFactorTranscellularFormula) - { - return _objectBaseFactory.Create().WithName("Mucosa permeability scale factor (transcellular)") - .WithMode(ParameterBuildMode.Global) - .WithFormula(mucosaPermeabilityScaleFactorTranscellularFormula) - .WithDimension(Constants.Dimension.NO_DIMENSION); - } - - private IFormula creteDefaultIntestinalPermeabilityTranscellularFormula() - { - var velocity = _dimensionFactory.Dimension(AppConstants.DimensionNames.VELOCITY); - IFormula defaultIntestinalPermeabilityTranscellularFormula = _objectBaseFactory - .Create() - .WithFormulaString("P_int_InVitro") - .WithDimension(velocity) - .WithName("PARAM_P_int_trans_default"); - defaultIntestinalPermeabilityTranscellularFormula.AddObjectPath( - createFormulaUsablePath(new string[]{ ObjectPath.PARENT_CONTAINER,"Calculated specific intestinal permeability (transcellular)"},"P_int_InVitro",velocity) - ); - return defaultIntestinalPermeabilityTranscellularFormula; - } - - private IFormula createMucosaPermeabilityScaleFactor_transcellularFormula() - { - IFormula mucosaPermeabilityScaleFactor_transcellularFormula = _objectBaseFactory - .Create() - .WithFormulaString("P_int_trans_default >0 ? P_int_trans / P_int_trans_default : 0") - .WithDimension(Constants.Dimension.NO_DIMENSION) - .WithName("PARAM_P_int_scalefactor"); - mucosaPermeabilityScaleFactor_transcellularFormula.AddObjectPath( - createFormulaUsablePath(new[] { ObjectPath.PARENT_CONTAINER, "Default Intestinal permeability (transcellular)" },"P_int_trans_default",_dimensionFactory.Dimension(AppConstants.DimensionNames.VELOCITY))); - mucosaPermeabilityScaleFactor_transcellularFormula.AddObjectPath( - createFormulaUsablePath(new[] { ObjectPath.PARENT_CONTAINER, "Intestinal permeability (transcellular)" }, "P_int_trans", _dimensionFactory.Dimension(AppConstants.DimensionNames.VELOCITY))); - return mucosaPermeabilityScaleFactor_transcellularFormula; - } - - /// - /// Creates the blood2 plasma formula. - /// - private IFormula createBlood2PlasmaFormula() - { - IFormula blood2PlasmaFormula = _objectBaseFactory - .Create() - .WithFormulaString( - "(f_water_rbc + f_lipids_rbc * 10 ^ LogP + f_proteins_rbc * KProt) * fu * HCT - HCT + 1") - .WithDimension(Constants.Dimension.NO_DIMENSION) - .WithName("PARAM_Blood2Plasma"); - blood2PlasmaFormula.AddObjectPath( - createFormulaUsablePath(new[] {ObjectPathKeywords.MOLECULE, "Fraction unbound (plasma)"}, "fu", _dimensionFactory.Dimension(AppConstants.DimensionNames.FRACTION))); - blood2PlasmaFormula.AddObjectPath( - createFormulaUsablePath(new[] {ObjectPathKeywords.MOLECULE, "Lipophilicity"}, "LogP", _dimensionFactory.Dimension("Log Units"))); - blood2PlasmaFormula.AddObjectPath( - createFormulaUsablePath(new[] {ObjectPathKeywords.MOLECULE, "Partition coefficient (water/protein)"}, "KProt", Constants.Dimension.NO_DIMENSION)); - blood2PlasmaFormula.AddObjectPath( - createFormulaUsablePath(new[] {"Organism", "Hematocrit"}, "HCT", Constants.Dimension.NO_DIMENSION)); - blood2PlasmaFormula.AddObjectPath( - createFormulaUsablePath(new[] {"Organism", "Vf (lipid, blood cells)"}, "f_lipids_rbc", Constants.Dimension.NO_DIMENSION)); - blood2PlasmaFormula.AddObjectPath( - createFormulaUsablePath(new[] {"Organism", "Vf (protein,blood cells)"}, "f_proteins_rbc", Constants.Dimension.NO_DIMENSION)); - blood2PlasmaFormula.AddObjectPath( - createFormulaUsablePath(new[] {"Organism", "Vf (water,blood cells)"}, "f_water_rbc", Constants.Dimension.NO_DIMENSION)); - return blood2PlasmaFormula; - } - - private FormulaUsablePath createFormulaUsablePath(string[] pathEntries, string paraAlias, IDimension dimension) - { - return new FormulaUsablePath(pathEntries) - .WithAlias(paraAlias) - .WithDimension(dimension); - } - - private IParameter createBlood2PlasmaRatioParameter(IFormula blood2PlasmaFormula) - { - return _objectBaseFactory.Create().WithName("Blood/Plasma concentration ratio") - .WithMode(ParameterBuildMode.Property) - .WithFormula(blood2PlasmaFormula) - .WithDimension(Constants.Dimension.NO_DIMENSION); - } - - private bool canAddNewParametersTo(ISpatialStructure spatialStructure) - { - //spatialStructure has needed parameters, so it is assumed it is original from PK-Sim - var organism = spatialStructure.TopContainers.FirstOrDefault(tc => tc.IsNamed("Organism")); - if (organism == null) return false; - return - organism.ContainsNames(new[] {"Hematocrit", "Vf (lipid, blood cells)", "Vf (protein,blood cells)", "Vf (water,blood cells)"}); - } - - public void Visit(IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock) - { - convert(parameterStartValuesBuildingBlock); - convertSpecialParametersIn(parameterStartValuesBuildingBlock); - _converted = true; - } - - public void Visit(IMoleculeStartValuesBuildingBlock moleculeStartValuesBuildingBlock) - { - - moleculeStartValuesBuildingBlock.Each(msv=>msv.Dimension = _dimensionFactory.Dimension(Constants.Dimension.AMOUNT)); - convert(moleculeStartValuesBuildingBlock); - _converted = true; - } - - public void Visit(IPassiveTransportBuildingBlock passiveTransportBuildingBlock) - { - convert(passiveTransportBuildingBlock); - _converted = true; - } - - public void Visit(IObserverBuildingBlock observerBuildingBlock) - { - convert(observerBuildingBlock); - _converted = true; - } - - public void Visit(IReactionBuildingBlock reactionBuildingBlock) - { - convert(reactionBuildingBlock); - _converted = true; - } - - public void Visit(IEventGroupBuildingBlock eventGroupBuildingBlock) - { - convert(eventGroupBuildingBlock); - var inversedVolume = _dimensionFactory.Dimension(AppConstants.DimensionNames.INVERSED_VOLUME); - eventGroupBuildingBlock.Each(eg => convertSpecialParameter(eg, "Number_Of_Particles_Factor",1000,inversedVolume)); - _converted = true; - } - - public void Visit(IMoBiSimulation simulation) - { - try - { - _suspendWarning = true; - simulation.BuildConfiguration.AcceptVisitor(this); - _dimensionConverter.ConvertDimensionIn(simulation); - if (simulation.Results != null) - _dimensionConverter.ConvertDimensionIn(simulation.Results); - - convertSpecialParametersIn(simulation.Model.Root); - simulation.HasChanged = true; - _converted = true; - } - finally - { - _suspendWarning = false; - } - } - - private void convertSpecialParametersIn(IContainer container) - { - var inversedLength = _dimensionFactory.Dimension(AppConstants.DimensionNames.INVERSED_LENGTH); - convertSpecialParameter(container, "Surface/Volume ratio (blood cells)", 10, inversedLength); - convertSpecialParameter(container, "SA proportionality factor", 1.0 / 100, inversedLength); - } - - private void convertSpecialParameter(IContainer container, string parameterName, double conversionFactor, IDimension newDimension) - { - var surfaceVolumeRatioParameter = - container.GetAllChildren(p => p.IsNamed(parameterName)); - surfaceVolumeRatioParameter.Each(p => convertSpecial(p, conversionFactor, newDimension)); - } - - private void convertSpecial(IParameter parameter, double conversionFactor, IDimension newDimension) - { - if (parameter.Dimension.Equals(Constants.Dimension.NO_DIMENSION)) - { - parameter.Dimension = newDimension; - } - if (parameter.Formula.IsConstant()) - { - ((ConstantFormula) parameter.Formula).Value = parameter.Value * conversionFactor; - if (parameter.IsFixedValue) - { - parameter.Value = parameter.Value * conversionFactor; - } - } - } - - public void Visit(SimulationTransfer simulationTransfer) - { - Visit((IMoBiSimulation) simulationTransfer.Simulation); - simulationTransfer.AllObservedData.Each(_dimensionConverter.ConvertDimensionIn); - _converted = true; - } - - private void createDimensionWarningsForBuildingBlock(IBuildingBlock buildingBlock) - { - if (_suspendWarning) return; - var messages = new List(); - foreach (var formula in buildingBlock.FormulaCache.Where(x => x.IsExplicit())) - { - showWarningsFor(formula.DowncastTo(), buildingBlock, messages); - } - _eventPublisher.PublishEvent(new ShowNotificationsEvent(messages)); - } - - private void showWarningsFor(ExplicitFormula formula, IBuildingBlock buildingBlock, List messages) - { - if (_formulaMapper.FormulaWasConverted(formula.FormulaString)) - return; - - if (formulaUsesOnlyOneDimension(formula)) - return; - - bool warningRequired = - _dimensionMapper.NeededConversion(formula.Dimension) || - formula.ObjectPaths.Any(objectPath => _dimensionMapper.NeededConversion(objectPath.Dimension)); - - if (!warningRequired) - return; - - messages.Add(new NotificationMessage(formula, MessageOrigin.Formula, buildingBlock, NotificationType.Warning) - { - Message = "Dimension check warning", - BuildingBlockType = _objectTypeResolver.TypeFor(buildingBlock), - ObjectType =ObjectTypes.Formula - }); - } - - private bool formulaUsesOnlyOneDimension(ExplicitFormula formula) - { - return formula.ObjectPaths.All(x => x.Dimension == formula.Dimension || x.Dimension == Constants.Dimension.NO_DIMENSION); - } - - private void convertSpecialParametersIn(IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock) - { - var inversedLength = _dimensionFactory.Dimension(AppConstants.DimensionNames.INVERSED_LENGTH); - convertSpecialParameter(parameterStartValuesBuildingBlock, "Organism|Surface/Volume ratio (blood cells)", 10, inversedLength); - convertSpecialParameter(parameterStartValuesBuildingBlock, "Organism|SA proportionality factor", 1.0 / 100, inversedLength); - } - - private void convertSpecialParameter(IParameterStartValuesBuildingBlock parameterStartValuesBuildingBlock, string parameterPath, double conversionFactor, IDimension newDimension) - { - var surfaceVolumeRatioParameter = - parameterStartValuesBuildingBlock.Where(p => p.Path.PathAsString.Equals(parameterPath)); - surfaceVolumeRatioParameter.Each(p => convertSpecial(p, conversionFactor, newDimension)); - } - - private void convertSpecial(IParameterStartValue parameterStartValue, double conversionFactor, IDimension newDimension) - { - if (parameterStartValue.Dimension.Equals(Constants.Dimension.NO_DIMENSION)) - { - parameterStartValue.Dimension = newDimension; - } - parameterStartValue.StartValue = parameterStartValue.StartValue * conversionFactor; - } - - public void Visit(IMoBiProject project) - { - project.AllObservedData.Each(Visit); - _converted = true; - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_3/Converter321To331.cs b/src/MoBi.Core/Serialization/Converter/v3_3/Converter321To331.cs deleted file mode 100644 index 51907a734..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_3/Converter321To331.cs +++ /dev/null @@ -1,366 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using System.Xml.Linq; -using MoBi.Core.Domain.Model; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Descriptors; -using OSPSuite.Core.Domain.Formulas; -using OSPSuite.Core.Domain.Services; -using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Core.Serialization.Exchange; -using OSPSuite.Utility.Extensions; -using OSPSuite.Utility.Visitor; - -namespace MoBi.Core.Serialization.Converter.v3_3 -{ - /// - /// Converter For MoBi Files From Version 3.2 To 3.3 - /// Renaming Elements from Chart To CurveChart - /// Change Entities related to EHC in PK-Sim - /// New Total Drug Mass Parameter - /// - public class Converter321To331 : IMoBiObjectConverter, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor - - { - public static string EHCStartEvent = "EHC_Start_Event"; - public static string EHCStopEvent = "EHC_Stop_Event"; - public static readonly string GallbladderEmptyingRate = "Gallbladder emptying rate"; - public static string GallbladderEmptying = "GallbladderEmptying"; - public static string Gallbladder = "Gallbladder"; - public static string GallbladderEmptyingOldFormula = "GallbladderEmptyingRate"; - public static string GallbladderEmptyingNewFormula = "EHC_Active ? ln(2) / EHC_Halftime * M * EHC_EjectionFraction : 0"; - public static string GallbladderEmptyingActive = "Gallbladder emptying active"; - public static string GallbladderEjectionFraction = "Gallbladder ejection fraction"; - public static string GallbladderEjectionHalfTime = "Gallbladder ejection half-time"; - public static string GallbladderEmptyingActiveAlias = "EHC_Active"; - public static string GallbladderEjectionFractionAlias = "EHC_EjectionFraction"; - public static string GallbladderEjectionHalfTimeAlias = "EHC_Halftime"; - public static ObjectPath GallbladderEmptyingRatePath = new ObjectPath(new[] {"Organism", "Gallbladder", "Gallbladder emptying rate"}); - private readonly IMoBiContext _context; - public static string TotalDrugmassOld = "TotalDrugMass"; - public static string TotalDrugmassNew = "Total drug mass"; - public static string DrugMass = "DrugMass"; - public static string Applications = "Applications"; - private readonly IFormulaTask _formulaTask; - private bool _converted; - - public Converter321To331(IMoBiContext context, IFormulaTask formulaTask) - { - _context = context; - _formulaTask = formulaTask; - } - - public bool IsSatisfiedBy(int version) => version == ProjectVersions.V3_2_1; - - public (int convertedToVersion, bool conversionHappened) Convert(object objectToConvert, IMoBiProject project) - { - _converted = false; - this.Visit(objectToConvert); - return (ProjectVersions.V3_3_1, _converted); - } - - public (int convertedToVersion, bool conversionHappened) ConvertXml(XElement element, IMoBiProject project) - { - _converted = false; - convertChartToCurveChartElement(element); - return (ProjectVersions.V3_3_1, _converted); - } - - private void convertChartToCurveChartElement(XElement element) - { - var charts = element.DescendantsAndSelf("Chart"); - charts.Each(c => - { - c.Name = "CurveChart"; - _converted = true; - }); - } - - public void Visit(IEventGroupBuildingBlock eventGroupBuildingBlock) - { - updateEHCEvents(eventGroupBuildingBlock); - eventGroupBuildingBlock.Each(updateTotalDrugMass); - updateAllParameters(eventGroupBuildingBlock.SelectMany(c => c.GetAllChildren())); - _converted = true; - } - - private void updateTotalDrugMass(IContainer container) - { - if (container == null) return; - var allProtocolSchemaItems = container.GetAllContainersAndSelf(c => c.Name.Equals("ProtocolSchemaItem")); - foreach (var protocolSchemaItem in allProtocolSchemaItems) - { - var drugMassParameter = protocolSchemaItem.GetSingleChildByName(DrugMass); - if (drugMassParameter != null) drugMassParameter.AddTag(ObjectPathKeywords.MOLECULE); - } - var parameter = container.GetSingleChildByName(TotalDrugmassOld); - if (parameter != null) - container.RemoveChild(parameter); - } - - private void updateEHCEvents(IEventGroupBuildingBlock eventGroupBuildingBlock) - { - var startEvents = - eventGroupBuildingBlock.SelectMany(eg => eg.GetAllChildren(eb => eb.Name.Equals(EHCStartEvent))); - startEvents.Each(se => changeAssignments(se, false, 1)); - var stopEvents = - eventGroupBuildingBlock.SelectMany(eg => eg.GetAllChildren(eb => eb.Name.Equals(EHCStopEvent))); - stopEvents.Each(se => changeAssignments(se, true, 0)); - } - - private void changeAssignments(IEventBuilder startEvent, bool useAsValue, double value) - { - var assignment = - startEvent.Assignments.FirstOrDefault( - a => a.ObjectPath.Equals(GallbladderEmptyingRatePath)); - changeAssignment(useAsValue, value, assignment); - } - - private void changeAssignments(IEvent startEvent, bool useAsValue, double value, IObjectPath gallbladderEmptyingRatePath) - { - var assignment = - startEvent.Assignments.FirstOrDefault( - a => a.ObjectPath.Equals(gallbladderEmptyingRatePath)); - - changeAssignment(useAsValue, value, assignment); - } - - private void changeAssignment(bool useAsValue, double value, IAssignment assignment) - { - if (assignment == null) return; - assignment.ObjectPath.Replace(GallbladderEmptyingRate, GallbladderEmptyingActive); - assignment.UseAsValue = useAsValue; - assignment.Formula = _context.Create().WithValue(value); - } - - public void Visit(IPassiveTransportBuildingBlock passiveTransportBuildingBlock) - { - var transpotBuilder = passiveTransportBuildingBlock.FirstOrDefault(isOldGallbladderEmptyingTransport); - - if (transpotBuilder != null) - { - var kinetic = ((ExplicitFormula) transpotBuilder.Formula); - updateEHCKinetic(kinetic, ObjectPathKeywords.MOLECULE); - } - updateAllParameters(passiveTransportBuildingBlock.SelectMany(c => c.GetAllChildren())); - _converted = true; - } - - private void updateEHCKinetic(ExplicitFormula kinetic, string moleculeName) - { - kinetic.FormulaString = GallbladderEmptyingNewFormula; - var amount = _context.DimensionFactory.Dimension(Constants.Dimension.AMOUNT); - var noDimension = _context.DimensionFactory.NoDimension; - var time = _context.DimensionFactory.Dimension(Constants.Dimension.TIME); - kinetic.ClearObjectPaths(); - kinetic.AddObjectPath( - _context.ObjectPathFactory.CreateFormulaUsablePathFrom(Constants.ORGANISM, Gallbladder, - moleculeName) - .WithAlias("M") - .WithDimension(amount)); - kinetic.AddObjectPath( - _context.ObjectPathFactory.CreateFormulaUsablePathFrom(Constants.ORGANISM, Gallbladder, - GallbladderEmptyingActive) - .WithAlias(GallbladderEmptyingActiveAlias) - .WithDimension(noDimension)); - kinetic.AddObjectPath( - _context.ObjectPathFactory.CreateFormulaUsablePathFrom(Constants.ORGANISM, Gallbladder, - GallbladderEjectionFraction) - .WithAlias(GallbladderEjectionFractionAlias) - .WithDimension(amount)); - kinetic.AddObjectPath( - _context.ObjectPathFactory.CreateFormulaUsablePathFrom(Constants.ORGANISM, Gallbladder, - GallbladderEjectionHalfTime) - .WithAlias(GallbladderEjectionHalfTimeAlias) - .WithDimension(time)); - } - - private static bool isOldGallbladderEmptyingTransport(ITransportBuilder transpotBuilder) - { - return transpotBuilder.Name.Equals(GallbladderEmptying) && ((ExplicitFormula) transpotBuilder.Formula).FormulaString.Equals(GallbladderEmptyingOldFormula); - } - - private static bool isOldGallbladderEmptyingTransport(ITransport transport) - { - return transport.Name.Equals(GallbladderEmptying) && ((ExplicitFormula) transport.Formula).FormulaString.Equals(GallbladderEmptyingOldFormula); - } - - public void Visit(IModelCoreSimulation simulation) - { - simulation.BuildConfiguration.AllBuildingBlocks.Each(this.Visit); - - var root = simulation.Model.Root; - var organism = root.GetSingleChildByName(Constants.ORGANISM); - if (organism == null) return; - //Add new parameter gall bladder emptying active - var parameter = addGallBladderEmptyingActiveParameter(organism); - if (parameter == null) return; - - // Genearate EHC_Event assingment path in simulaton - var gallbladderEmptyingRatePathSimulation = GallbladderEmptyingRatePath.Clone(); - gallbladderEmptyingRatePathSimulation.AddAtFront(root.Name); - - // change ehc events - var startEvents = root.GetAllChildren(eb => eb.Name.Equals(EHCStartEvent)); - startEvents.Each(se => changeAssignments(se, false, 1, gallbladderEmptyingRatePathSimulation)); - startEvents.Each(se => (se.Assignments).Each(a => ((EventAssignment) a).ChangedEntity = null)); - - var stopEvents = root.GetAllChildren(eb => eb.Name.Equals(EHCStopEvent)); - stopEvents.Each(se => changeAssignments(se, true, 0, gallbladderEmptyingRatePathSimulation)); - stopEvents.Each(se => se.Assignments.Each(a => ((EventAssignment) a).ChangedEntity = null)); - - // Update gall bladder emptying kinetics - var tranports = simulation.Model.Neighborhoods.GetAllChildren(isOldGallbladderEmptyingTransport); - tranports.Each(t => updateGallBladderEmptyingInSimulation(t, root.Name)); - - updateTotalDrugMassHandling(simulation, root); - - updateAllParameters(root.GetAllChildren()); - _formulaTask.ExpandDynamicFormulaIn(simulation.Model); - _converted = true; - } - - private void updateTotalDrugMassHandling(IModelCoreSimulation simulation, IContainer root) - { - var amountDimension = _context.DimensionFactory.Dimension(Constants.Dimension.AMOUNT); - updateTotalDrugMass(root.GetSingleChildByName(Applications)); - var oldDrugMassPath = new ObjectPath(new[] {simulation.Model.Root.Name, Applications, TotalDrugmassOld}); - var allObserver = root.GetAllChildren().ToList(); - updateTotalDrugMassReferences(allObserver, oldDrugMassPath); - replaceMoleculeKeyword(allObserver); - var allMoleculeNames = simulation.BuildConfiguration.Molecules.Select(mb => mb.Name).ToArray(); - var allMoleculeContainer = root.GetChildren().Where(c => allMoleculeNames.Contains(c.Name)); - allMoleculeContainer.Each(mc => mc.Add(createTotalDrugMassParameter(createTotalDrugMassFormula(amountDimension), amountDimension))); - } - - private void replaceMoleculeKeyword(IEnumerable allObserver) - { - foreach (var observer in allObserver) - { - observer.Formula.ObjectPaths.Each(op => op.Replace(ObjectPathKeywords.MOLECULE, observer.ParentContainer.Name)); - } - } - - private void updateGallBladderEmptyingInSimulation(ITransport transport, string rootName) - { - var kinetic = (ExplicitFormula) transport.Formula; - var moleculeName = transport.ParentContainer.Name; - updateEHCKinetic(kinetic, moleculeName); - //Add Root Name to all Paths - kinetic.ObjectPaths.Each(ob => ob.AddAtFront(rootName)); - } - - public void Visit(ISpatialStructure spatialStructure) - { - var organism = spatialStructure.TopContainers.FirstOrDefault(tc => tc.Name.Equals(Constants.ORGANISM)); - if (organism == null) return; - var param = addGallBladderEmptyingActiveParameter(organism); - if (param != null) - spatialStructure.FormulaCache.Add(param.Formula); - - - updateAllParameters(spatialStructure.SelectMany(c => c.GetAllChildren())); - _converted = true; - } - - private IParameter addGallBladderEmptyingActiveParameter(IContainer organism) - { - var gallbladder = organism.GetSingleChildByName(Gallbladder); - if (gallbladder == null) return null; - var noDimension = _context.DimensionFactory.NoDimension; - - var formula =_context.Create() - .WithName($"PARAM_{GallbladderEmptyingActive}") - .WithFormulaString("0") - .WithDimension(noDimension); - - var parameter =_context.Create() - .WithName(GallbladderEmptyingActive) - .WithFormula(formula) - .WithDimension(noDimension); - gallbladder.Add(parameter); - gallbladder.RemoveChild(gallbladder.GetSingleChildByName(GallbladderEmptyingRate)); - return parameter; - } - - public void Visit(IObserverBuildingBlock objToVisit) - { - var oldDrugMassPath = new ObjectPath(new[] {Applications, TotalDrugmassOld}); - updateTotalDrugMassReferences(objToVisit, oldDrugMassPath); - _converted = true; - } - - private void updateTotalDrugMassReferences(IEnumerable objToVisit, IObjectPath oldDrugMassPath) - { - foreach (var observerBuilder in objToVisit) - { - var pathsToChange = - observerBuilder.Formula.ObjectPaths.Where(op => op.PathAsString.Equals(oldDrugMassPath.PathAsString)) - .ToList(); - pathsToChange.Each(p => p.Replace(Applications, ObjectPathKeywords.MOLECULE)); - pathsToChange.Each(p => p.Replace(TotalDrugmassOld, TotalDrugmassNew)); - } - } - - public void Visit(IMoleculeBuildingBlock moleculeBuildingBlock) - { - var amountDimension = _context.DimensionFactory.Dimension(Constants.Dimension.AMOUNT); - var formula = createTotalDrugMassFormula(amountDimension); - foreach (var moleculeBuilder in moleculeBuildingBlock) - { - moleculeBuilder.Add( - createTotalDrugMassParameter(formula, amountDimension)); - } - updateAllParameters(moleculeBuildingBlock.SelectMany(mb => mb.GetAllChildren())); - moleculeBuildingBlock.AddFormula(formula); - _converted = true; - } - - private SumFormula createTotalDrugMassFormula(IDimension amountDimension) - { - var formula = - _context.Create() - .WithName("PARAM_TotalDrugMass") - .WithDimension(amountDimension); - formula.Criteria.Add(new MatchTagCondition(ObjectPathKeywords.MOLECULE)); - formula.Criteria.Add(new MatchTagCondition(DrugMass)); - return formula; - } - - private IParameter createTotalDrugMassParameter(SumFormula formula, IDimension amountDimension) - { - return _context.Create() - .WithName(TotalDrugmassNew) - .WithMode(ParameterBuildMode.Property) - .WithFormula(formula) - .WithDimension(amountDimension) - .WithGroup(Constants.Groups.MOBI); - } - - private void updateAllParameters(IEnumerable allParameter) - { - allParameter.Each(p => p.GroupName = Constants.Groups.MOBI); - } - - public void Visit(IReactionBuildingBlock reactionBuildingBlock) - { - updateAllParameters(reactionBuildingBlock.SelectMany(c => c.GetAllChildren())); - _converted = true; - } - - public void Visit(SimulationTransfer objToVisit) - { - Visit(objToVisit.Simulation); - _converted = true; - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_4/Converter33To34.cs b/src/MoBi.Core/Serialization/Converter/v3_4/Converter33To34.cs deleted file mode 100644 index b286f75df..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_4/Converter33To34.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Xml.Linq; -using MoBi.Core.Domain.Model; -using OSPSuite.Core.Converter.v5_4; - -namespace MoBi.Core.Serialization.Converter.v3_4 -{ - public class Converter33To34 : Converter531To541, IMoBiObjectConverter - { - public (int convertedToVersion, bool conversionHappened) Convert(object objectToUpdate, IMoBiProject project) - { - return Convert(objectToUpdate); - } - - public (int convertedToVersion, bool conversionHappened) ConvertXml(XElement element, IMoBiProject project) - { - return ConvertXml(element); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v3_5/Converter341To351.cs b/src/MoBi.Core/Serialization/Converter/v3_5/Converter341To351.cs deleted file mode 100644 index 6f473f181..000000000 --- a/src/MoBi.Core/Serialization/Converter/v3_5/Converter341To351.cs +++ /dev/null @@ -1,326 +0,0 @@ -using System.Linq; -using System.Xml.Linq; -using MoBi.Assets; -using MoBi.Core.Domain.Builder; -using MoBi.Core.Domain.Model; -using MoBi.Core.Domain.Services; -using OSPSuite.Assets; -using OSPSuite.Core.Converter.v5_5; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Data; -using OSPSuite.Core.Domain.Formulas; -using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Core.Serialization.Xml.Extensions; -using OSPSuite.Serializer.Xml.Extensions; -using OSPSuite.Utility.Extensions; -using OSPSuite.Utility.Visitor; - -namespace MoBi.Core.Serialization.Converter.v3_5 -{ - public class Converter341To351 : IMoBiObjectConverter, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor, - IVisitor - - { - private readonly Converter541To551 _coreConverter; - private readonly ICloneManagerForSimulation _cloneManager; - private readonly IParameterFactory _parameterFactory; - private readonly ISimulationSettingsFactory _simulationSettingsFactory; - private readonly IObjectBaseFactory _objectBaseFactory; - private readonly IDistributionFormulaFactory _distributionFormulaFactory; - private readonly IMoBiFormulaTask _formulaTask; - private readonly IDimensionFactory _dimensionFactory; - private readonly IObjectPathFactory _objectPathFactory; - private IMoBiProject _project; - - //this fields indicate if a MoBi simulation is being loaded (typically from project) or if a pkml simulation is being loaded. - //in the latter, we do not add the template simulation settings to the project - private bool _loadingMoBiSimulation; - - private bool _converted; - - private const string EFFECTIVE_SURFACE_AREA_VARIABILITY_FACTOR = "Effective surface area variability factor"; - private const string EFFECTIVE_SURFACE_AREA_ENHANCEMENT_FACTOR = "Effective surface area enhancement factor"; - private const string EFFECTIVE_SURFACE_AREA = "Effective surface area"; - private const string GEOMETRIC_SURFACE_AREA = "Geometric surface area"; - - public Converter341To351(Converter541To551 coreConverter, ICloneManagerForSimulation cloneManager, - IParameterFactory parameterFactory, ISimulationSettingsFactory simulationSettingsFactory, - IObjectBaseFactory objectBaseFactory, IDistributionFormulaFactory distributionFormulaFactory, - IMoBiFormulaTask formulaTask, IDimensionFactory dimensionFactory, IObjectPathFactory objectPathFactory) - { - _coreConverter = coreConverter; - _cloneManager = cloneManager; - _parameterFactory = parameterFactory; - _simulationSettingsFactory = simulationSettingsFactory; - _objectBaseFactory = objectBaseFactory; - _distributionFormulaFactory = distributionFormulaFactory; - _formulaTask = formulaTask; - _dimensionFactory = dimensionFactory; - _objectPathFactory = objectPathFactory; - } - - public bool IsSatisfiedBy(int version) => version == ProjectVersions.V3_4_1; - - public (int convertedToVersion, bool conversionHappened) Convert(object objectToUpdate, IMoBiProject project) - { - try - { - _project = project; - _converted = false; - var (_, coreConversionHappened) = _coreConverter.Convert(objectToUpdate); - this.Visit(objectToUpdate); - return (ProjectVersions.V3_5_1, _converted || coreConversionHappened); - } - finally - { - _project = null; - } - } - - public (int convertedToVersion, bool conversionHappened) ConvertXml(XElement element, IMoBiProject project) - { - _coreConverter.ConvertXml(element); - - element.DescendantsAndSelfNamed(AppConstants.XmlNames.BuildConfiguration).Each(convertBuildConfigurationElement); - element.DescendantsAndSelfNamed("Simulation", AppConstants.XmlNames.MoBiSimulation).Each(convertMoBiSimulationElement); - - //only happens when loading an actual MoBiSimulation from a project - _loadingMoBiSimulation = (element.Name == AppConstants.XmlNames.MoBiSimulation); - - //too many conversion happening here! set to true for compatibility - return (ProjectVersions.V3_5_1, true); - } - - private void convertBuildConfigurationElement(XElement buildConfigurationElement) - { - if (buildConfigurationElement == null) return; - //create an empty element. This is enough to instantiate the object - buildConfigurationElement.Add(new XElement(AppConstants.XmlNames.SimulationSettingsInfo)); - _converted = true; - - } - - private void convertMoBiSimulationElement(XElement element) - { - const string oldParameterIdetificationWorkingDirectory = "parameterIdetificationWorkingDirectory"; - const string newParameterIdentificationWorkingDirectory = "parameterIdentificationWorkingDirectory"; - - _coreConverter.ConvertSimuationElement(element); - - var buildConfigurationElement = element.Element(AppConstants.XmlNames.BuildConfiguration); - if (buildConfigurationElement == null) return; - - const string originalBuildingBlockId = "originalBuildingBlockId"; - var query = buildConfigurationElement.Descendants() - .Where(x => x.Attribute(originalBuildingBlockId) != null) - .Select(x => new {Element = x, Attr = x.Attribute(originalBuildingBlockId)}); - - foreach (var buildingBlockInfoElement in query.ToList()) - { - buildingBlockInfoElement.Element.AddAttribute("templateBuildingBlockId", buildingBlockInfoElement.Attr.Value); - buildingBlockInfoElement.Attr.Remove(); - } - - - var oldAttribute = element.Attribute(oldParameterIdetificationWorkingDirectory); - if (oldAttribute == null) - return; - - element.AddAttribute(newParameterIdentificationWorkingDirectory, oldAttribute.Value); - oldAttribute.Remove(); - } - - public void Visit(IModelCoreSimulation simulation) - { - var mobiSimulation = simulation as IMoBiSimulation; - if (mobiSimulation == null) return; - - //historical results will be deserialized in a separate call - Visit(mobiSimulation.Results); - Visit(mobiSimulation.BuildConfiguration); - addSimulationSettingsTemplateToProject(mobiSimulation); - updateGlobalReactionContainerIcon(simulation); - } - - private void updateGlobalReactionContainerIcon(IModelCoreSimulation simulation) - { - simulation.Model.Root.GetChildren(c => c.ContainerType == ContainerType.Reaction) - .Each(c => c.Icon = IconNames.REACTION); - } - - private void addSimulationSettingsTemplateToProject(IMoBiSimulation mobiSimulation) - { - if (!_loadingMoBiSimulation) return; - var simulationSettingsInfo = mobiSimulation.MoBiBuildConfiguration.SimulationSettingsInfo; - var templateSimulationSettings = _cloneManager.CloneBuidingBlock(simulationSettingsInfo.BuildingBlock); - simulationSettingsInfo.TemplateBuildingBlock = templateSimulationSettings; - _project.AddBuildingBlock(templateSimulationSettings); - } - - public void Visit(DataRepository dataRepository) - { - _coreConverter.UpdateQuantityTypeForDataRepository(dataRepository); - } - - public void Visit(IMoleculeBuildingBlock moleculeBuildingBlock) - { - foreach (var moleculeBuilder in moleculeBuildingBlock.Where(x => !x.ContainsName(Constants.Parameters.CONCENTRATION)).ToList()) - { - var concentrationParameter = _parameterFactory.CreateConcentrationParameter(moleculeBuildingBlock.FormulaCache); - moleculeBuilder.AddParameter(concentrationParameter); - } - - convertFormulaReferencingAeffIn(moleculeBuildingBlock); - } - - public void Visit(ISpatialStructure spatialStructure) - { - foreach (var container in spatialStructure.PhysicalContainers.Where(x => !x.ContainsName(Constants.Parameters.VOLUME)).ToList()) - { - container.Add(_parameterFactory.CreateVolumeParameter()); - } - addVariabilityParameterIn(spatialStructure); - addEffectiveSurfaceAreaParameter(spatialStructure); - convertFormulaReferencingAeffIn(spatialStructure); - } - - private static void replaceAgeomXAeffFactorWithAeffIn(ExplicitFormula formula) - { - if (!formula.FormulaString.Contains("Ageom * AeffFactor") && !formula.FormulaString.Contains("Ageom*AeffFactor")) return; - - if (formula.IsNamed("PARAM_EffectiveSurfaceArea")) return; - - formula.FormulaString = formula.FormulaString.Replace("Ageom * AeffFactor", "Aeff").Replace("Ageom*AeffFactor", "Aeff"); - var objectPath = formula.ObjectPaths.Find(x => x.Alias == "Ageom"); - objectPath.Remove(GEOMETRIC_SURFACE_AREA); - objectPath.Add(EFFECTIVE_SURFACE_AREA); - objectPath.Alias = "Aeff"; - - var aeffFactorObjectPath = formula.ObjectPaths.Find(x => x.Alias == "AeffFactor"); - formula.RemoveObjectPath(aeffFactorObjectPath); - } - - public void Visit(IBuildConfiguration buildConfiguration) - { - Visit(buildConfiguration.Molecules); - Visit(buildConfiguration.SpatialStructure); - Visit(buildConfiguration.PassiveTransports); - - if (buildConfiguration.SimulationSettings == null) - buildConfiguration.SimulationSettings = _simulationSettingsFactory.CreateDefault(); - } - - private void addEffectiveSurfaceAreaParameter(ISpatialStructure spatialStructure) - { - var organism = getOrganism(spatialStructure); - if (organism == null) return; - var lumen = organism.EntityAt("Lumen"); - if (lumen == null) return; - - var variabilityFactor = lumen.EntityAt(EFFECTIVE_SURFACE_AREA_VARIABILITY_FACTOR); - var area = _dimensionFactory.Dimension("Area"); - foreach (var containerWithSurfaceArea in organism.GetAllChildren(c => c.ContainsName(EFFECTIVE_SURFACE_AREA_ENHANCEMENT_FACTOR))) - { - var effectiveSurfaceArea = _objectBaseFactory.Create() - .WithName(EFFECTIVE_SURFACE_AREA) - .WithDimension(area) - .WithGroup("GI_ANATOMY_AREA") - .WithDescription("Effective surface area of GI segment"); - - var geometricSurfaceArea = containerWithSurfaceArea.EntityAt(GEOMETRIC_SURFACE_AREA); - if (geometricSurfaceArea == null) - continue; - - var effectiveSurfaceAreaEnahncementFactor = containerWithSurfaceArea.EntityAt(EFFECTIVE_SURFACE_AREA_ENHANCEMENT_FACTOR); - - containerWithSurfaceArea.Add(effectiveSurfaceArea); - - var formula = spatialStructure.FormulaCache.FindByName("PARAM_EffectiveSurfaceArea") as ExplicitFormula; - if (formula == null) - { - formula = _formulaTask.CreateNewFormula(area).WithName("PARAM_EffectiveSurfaceArea"); - formula.AddObjectPath(_objectPathFactory.CreateRelativeFormulaUsablePath(effectiveSurfaceArea, variabilityFactor).WithAlias("AeffVariabilityFactor")); - formula.AddObjectPath(_objectPathFactory.CreateRelativeFormulaUsablePath(effectiveSurfaceArea, geometricSurfaceArea).WithAlias("Ageom")); - formula.AddObjectPath(_objectPathFactory.CreateRelativeFormulaUsablePath(effectiveSurfaceArea, effectiveSurfaceAreaEnahncementFactor).WithAlias("AeffFactor")); - formula.FormulaString = "Ageom * AeffFactor * AeffVariabilityFactor"; - spatialStructure.AddFormula(formula); - } - - effectiveSurfaceArea.Formula = formula; - } - } - - private void addVariabilityParameterIn(ISpatialStructure spatialStructure) - { - var organism = getOrganism(spatialStructure); - if (organism == null) return; - - var lumen = organism.EntityAt("Lumen"); - if (lumen == null) return; - - var parameter = _objectBaseFactory.Create() - .WithName(EFFECTIVE_SURFACE_AREA_VARIABILITY_FACTOR) - .WithDescription("Effective surface area variability factor"); - - parameter.WithGroup("GI_ANATOMY_AEFF_FACTOR"); - - var meanParameter = effectiveSurfaceAreaMeanParameter(); - var deviationParameter = effectiveSurfaceAreaDeviationParameter(); - var percentileParameter = effectiveSurfaceAreaPercentileParameter(); - parameter.Add(meanParameter); - parameter.Add(deviationParameter); - parameter.Add(percentileParameter); - parameter.Formula = _distributionFormulaFactory.CreateLogNormalDistributionFormulaFor(parameter, meanParameter, deviationParameter); - - lumen.Add(parameter); - } - - private static IContainer getOrganism(ISpatialStructure spatialStructure) - { - return spatialStructure.TopContainers.FindByName(Constants.ORGANISM); - } - - private IParameter effectiveSurfaceAreaDeviationParameter() - { - return distributionParameter(Constants.Distribution.GEOMETRIC_DEVIATION, 1.6); - } - - private IParameter effectiveSurfaceAreaMeanParameter() - { - return distributionParameter(Constants.Distribution.MEAN, 1); - } - - private IParameter effectiveSurfaceAreaPercentileParameter() - { - return distributionParameter(Constants.Distribution.PERCENTILE, 0.5); - } - - private IParameter distributionParameter(string name, double value) - { - var dimension = _dimensionFactory.Dimension(Constants.Dimension.DIMENSIONLESS); - var meanFormula = _formulaTask.CreateNewFormula(dimension).WithValue(value); - return _objectBaseFactory.Create() - .WithName(name) - .WithFormula(meanFormula); - } - - public void Visit(IPassiveTransportBuildingBlock passiveTransportBuilding) - { - convertFormulaReferencingAeffIn(passiveTransportBuilding); - } - - private void convertFormulaReferencingAeffIn(IBuildingBlock buildingBlock) - { - foreach (var explicitFormula in buildingBlock.FormulaCache.OfType()) - { - replaceAgeomXAeffFactorWithAeffIn(explicitFormula); - } - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v6_0/Converter36To601.cs b/src/MoBi.Core/Serialization/Converter/v6_0/Converter36To601.cs deleted file mode 100644 index 01104e45e..000000000 --- a/src/MoBi.Core/Serialization/Converter/v6_0/Converter36To601.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System.Xml.Linq; -using MoBi.Assets; -using MoBi.Core.Domain.Model; -using OSPSuite.Core.Converter.v6_0; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Data; -using OSPSuite.Core.Serialization.Xml.Extensions; -using OSPSuite.Utility.Extensions; -using OSPSuite.Utility.Visitor; - -namespace MoBi.Core.Serialization.Converter.v6_0 -{ - public class Converter36To601 : IMoBiObjectConverter, - IVisitor - { - private readonly Converter56To601 _coreConverter56To601; - private static readonly string RHS_DIMENSION_OLD_SUFFIX = " per Time"; - private static readonly string MOL_WEIGHT = "MolWeight"; - private bool _converted; - - public Converter36To601(Converter56To601 coreConverter56To601) - { - _coreConverter56To601 = coreConverter56To601; - } - - public bool IsSatisfiedBy(int version) => version == ProjectVersions.V3_6_1; - - public (int convertedToVersion, bool conversionHappened) Convert(object objectToUpdate, IMoBiProject project) - { - _converted = false; - var (_, coreConversionHappened) = _coreConverter56To601.Convert(objectToUpdate); - this.Visit(objectToUpdate); - return (ProjectVersions.V6_0_1, _converted || coreConversionHappened); - } - - public (int convertedToVersion, bool conversionHappened) ConvertXml(XElement element, IMoBiProject project) - { - _converted = false; - var (_, coreConversionHappened) = _coreConverter56To601.ConvertXml(element); - element.DescendantsAndSelfNamed("DisplayUnitMap").Each(displayUnitMapElement => convertPerTimeDimension(displayUnitMapElement, "dimension")); - element.DescendantsAndSelfNamed("Formula").Each(displayUnitMapElement => convertPerTimeDimension(displayUnitMapElement, "dim")); - element.DescendantsAndSelfNamed("Map").Each(displayUnitMapElement => convertPerTimeDimension(displayUnitMapElement, "s")); - element.DescendantsAndSelfNamed("Parameter").Each(convertParameterQuantityType); - return (ProjectVersions.V6_0_1, _converted || coreConversionHappened); - } - - public void Visit(IMoBiProject project) - { - foreach (var observedData in project.AllObservedData) - { - observedData.ExtendedProperties.Remove(MOL_WEIGHT); - updateObservedDataPaths(observedData); - _converted = true; - } - } - - private void convertParameterQuantityType(XElement parameterElement) - { - var quantityTypeAttribute = parameterElement.Attribute("quantityType"); - if (quantityTypeAttribute == null) - return; - - quantityTypeAttribute.SetValue(QuantityType.Parameter.ToString()); - _converted = true; - } - - private void convertPerTimeDimension(XElement displayUnitMapElement, XName dimensionAttributeName) - { - var dimensionAttribute = displayUnitMapElement.Attribute(dimensionAttributeName); - if (dimensionAttribute == null) - return; - - dimensionAttribute.SetValue(dimensionNameFrom(dimensionAttribute.Value)); - _converted = true; - } - - private string dimensionNameFrom(string dimensionName) - { - if (string.IsNullOrEmpty(dimensionName)) - return dimensionName; - - if (!dimensionName.Contains(RHS_DIMENSION_OLD_SUFFIX)) - return dimensionName; - - return dimensionName.Replace(RHS_DIMENSION_OLD_SUFFIX, AppConstants.RHSDimensionSuffix); - } - - private void updateObservedDataPaths(DataRepository repository) - { - var baseGrid = repository.BaseGrid; - var baseGridName = baseGrid.Name.Replace(ObjectPath.PATH_DELIMITER, "\\"); - baseGrid.QuantityInfo = new QuantityInfo(baseGrid.Name, new[] {repository.Name, baseGridName}, QuantityType.Time); - - foreach (var col in repository.AllButBaseGrid()) - { - var colName = col.Name.Replace(ObjectPath.PATH_DELIMITER, "\\"); - var quantityInfo = new QuantityInfo(col.Name, new[] {repository.Name, colName}, QuantityType.Undefined); - col.QuantityInfo = quantityInfo; - } - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Converter/v6_1/Converter60To61.cs b/src/MoBi.Core/Serialization/Converter/v6_1/Converter60To61.cs index 773537a18..309045d3f 100644 --- a/src/MoBi.Core/Serialization/Converter/v6_1/Converter60To61.cs +++ b/src/MoBi.Core/Serialization/Converter/v6_1/Converter60To61.cs @@ -14,10 +14,10 @@ public class Converter60To61 : IMoBiObjectConverter, IVisitor, IVisitor { - private readonly OSPSuite.Core.Converter.v6_1.Converter60To61 _coreConverter60To61; + private readonly OSPSuite.Core.Converters.v6_1.Converter60To61 _coreConverter60To61; private bool _converted; - public Converter60To61(OSPSuite.Core.Converter.v6_1.Converter60To61 coreConverter60To61) + public Converter60To61(OSPSuite.Core.Converters.v6_1.Converter60To61 coreConverter60To61) { _coreConverter60To61 = coreConverter60To61; } diff --git a/src/MoBi.Core/Serialization/Converter/v6_2/Converter62To63.cs b/src/MoBi.Core/Serialization/Converter/v6_2/Converter62To63.cs index 805c02951..7476af9c1 100644 --- a/src/MoBi.Core/Serialization/Converter/v6_2/Converter62To63.cs +++ b/src/MoBi.Core/Serialization/Converter/v6_2/Converter62To63.cs @@ -5,9 +5,9 @@ namespace MoBi.Core.Serialization.Converter.v6_2 { public class Converter62To63 : IMoBiObjectConverter { - private readonly OSPSuite.Core.Converter.v6_3.Converter62To63 _coreConverter; + private readonly OSPSuite.Core.Converters.v6_3.Converter62To63 _coreConverter; - public Converter62To63(OSPSuite.Core.Converter.v6_3.Converter62To63 coreConverter) + public Converter62To63(OSPSuite.Core.Converters.v6_3.Converter62To63 coreConverter) { _coreConverter = coreConverter; } diff --git a/src/MoBi.Core/Serialization/Converter/v7_1/Converter63To710.cs b/src/MoBi.Core/Serialization/Converter/v7_1/Converter63To710.cs index 1b6fd8cea..002ac29c0 100644 --- a/src/MoBi.Core/Serialization/Converter/v7_1/Converter63To710.cs +++ b/src/MoBi.Core/Serialization/Converter/v7_1/Converter63To710.cs @@ -5,9 +5,9 @@ namespace MoBi.Core.Serialization.Converter.v7_1 { public class Converter63To710 : IMoBiObjectConverter { - private readonly OSPSuite.Core.Converter.v7_1.Converter63To710 _coreConverter; + private readonly OSPSuite.Core.Converters.v7_1.Converter63To710 _coreConverter; - public Converter63To710(OSPSuite.Core.Converter.v7_1.Converter63To710 coreConverter) + public Converter63To710(OSPSuite.Core.Converters.v7_1.Converter63To710 coreConverter) { _coreConverter = coreConverter; } diff --git a/src/MoBi.Core/Serialization/Converter/v7_3/Converter710To730.cs b/src/MoBi.Core/Serialization/Converter/v7_3/Converter710To730.cs index a29f859be..5a5affd4d 100644 --- a/src/MoBi.Core/Serialization/Converter/v7_3/Converter710To730.cs +++ b/src/MoBi.Core/Serialization/Converter/v7_3/Converter710To730.cs @@ -5,9 +5,9 @@ namespace MoBi.Core.Serialization.Converter.v7_3 { public class Converter710To730 : IMoBiObjectConverter { - private readonly OSPSuite.Core.Converter.v7_3.Converter710To730 _coreConverter; + private readonly OSPSuite.Core.Converters.v7_3.Converter710To730 _coreConverter; - public Converter710To730(OSPSuite.Core.Converter.v7_3.Converter710To730 coreConverter) + public Converter710To730(OSPSuite.Core.Converters.v7_3.Converter710To730 coreConverter) { _coreConverter = coreConverter; } diff --git a/src/MoBi.Core/Serialization/Converter/v3_6/Converter351To361.cs b/src/MoBi.Core/Serialization/Converter/v9/Converter730To90.cs similarity index 57% rename from src/MoBi.Core/Serialization/Converter/v3_6/Converter351To361.cs rename to src/MoBi.Core/Serialization/Converter/v9/Converter730To90.cs index 7889264d5..1182c3160 100644 --- a/src/MoBi.Core/Serialization/Converter/v3_6/Converter351To361.cs +++ b/src/MoBi.Core/Serialization/Converter/v9/Converter730To90.cs @@ -1,22 +1,18 @@ using System.Xml.Linq; using MoBi.Core.Domain.Model; -using OSPSuite.Core.Converter.v5_6; -namespace MoBi.Core.Serialization.Converter.v3_6 +namespace MoBi.Core.Serialization.Converter.v9 { - public class Converter351To361 : IMoBiObjectConverter + public class Converter730To90 : IMoBiObjectConverter { - private readonly Converter551To561 _coreConverter; + private readonly OSPSuite.Core.Converters.v9.Converter730To90 _coreConverter; - public Converter351To361(Converter551To561 coreConverter) + public Converter730To90(OSPSuite.Core.Converters.v9.Converter730To90 coreConverter) { _coreConverter = coreConverter; } - public bool IsSatisfiedBy(int item) - { - return _coreConverter.IsSatisfiedBy(item); - } + public bool IsSatisfiedBy(int version) => version == ProjectVersions.V7_3_0; public (int convertedToVersion, bool conversionHappened) Convert(object objectToUpdate, IMoBiProject project) { diff --git a/src/MoBi.Core/Serialization/ORM/ContextPersistor.cs b/src/MoBi.Core/Serialization/ORM/ContextPersistor.cs index 7844f1cac..9f193a235 100644 --- a/src/MoBi.Core/Serialization/ORM/ContextPersistor.cs +++ b/src/MoBi.Core/Serialization/ORM/ContextPersistor.cs @@ -8,7 +8,7 @@ using MoBi.Core.Services; using OSPSuite.Core.Journal; using OSPSuite.Infrastructure.Serialization.ORM.History; -using OSPSuite.Infrastructure.Services; +using OSPSuite.Infrastructure.Serialization.Services; using OSPSuite.Utility; using OSPSuite.Utility.Events; diff --git a/src/MoBi.Core/Serialization/ORM/Mappers/ProjectToProjectMetaDataMapper.cs b/src/MoBi.Core/Serialization/ORM/Mappers/ProjectToProjectMetaDataMapper.cs index a798eaf5b..e9454de48 100644 --- a/src/MoBi.Core/Serialization/ORM/Mappers/ProjectToProjectMetaDataMapper.cs +++ b/src/MoBi.Core/Serialization/ORM/Mappers/ProjectToProjectMetaDataMapper.cs @@ -1,6 +1,4 @@ using System.Linq; -using OSPSuite.Utility; -using OSPSuite.Utility.Extensions; using MoBi.Core.Domain.Extensions; using MoBi.Core.Domain.Model; using MoBi.Core.Serialization.ORM.MetaData; @@ -9,6 +7,8 @@ using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Data; using OSPSuite.Infrastructure.Serialization.ORM.MetaData; +using OSPSuite.Utility; +using OSPSuite.Utility.Extensions; using DataRepositoryMetaData = MoBi.Core.Serialization.ORM.MetaData.DataRepositoryMetaData; namespace MoBi.Core.Serialization.ORM.Mappers diff --git a/src/MoBi.Core/Serialization/ORM/ProjectPersistor.cs b/src/MoBi.Core/Serialization/ORM/ProjectPersistor.cs index 07a041584..79238000f 100644 --- a/src/MoBi.Core/Serialization/ORM/ProjectPersistor.cs +++ b/src/MoBi.Core/Serialization/ORM/ProjectPersistor.cs @@ -3,7 +3,7 @@ using MoBi.Core.Serialization.ORM.Mappers; using MoBi.Core.Serialization.ORM.MetaData; using MoBi.Core.Serialization.Services; -using OSPSuite.Infrastructure.Services; +using OSPSuite.Infrastructure.Serialization.Services; namespace MoBi.Core.Serialization.ORM { diff --git a/src/MoBi.Core/Serialization/ORM/SessionFactoryProvider.cs b/src/MoBi.Core/Serialization/ORM/SessionFactoryProvider.cs index 556de5551..f3cd5f9ae 100644 --- a/src/MoBi.Core/Serialization/ORM/SessionFactoryProvider.cs +++ b/src/MoBi.Core/Serialization/ORM/SessionFactoryProvider.cs @@ -3,7 +3,7 @@ using NHibernate.Cfg; using NHibernate.Tool.hbm2ddl; using OSPSuite.Core.Extensions; -using OSPSuite.Infrastructure.Services; +using OSPSuite.Infrastructure.Serialization.Services; namespace MoBi.Core.Serialization.ORM { diff --git a/src/MoBi.Core/Serialization/Services/PostSerializationStepsMaker.cs b/src/MoBi.Core/Serialization/Services/PostSerializationStepsMaker.cs index 219d995b7..6c7718ebe 100644 --- a/src/MoBi.Core/Serialization/Services/PostSerializationStepsMaker.cs +++ b/src/MoBi.Core/Serialization/Services/PostSerializationStepsMaker.cs @@ -1,9 +1,9 @@ using System.Collections.Generic; -using OSPSuite.Utility.Extensions; using MoBi.Core.Domain.Model; using MoBi.Core.Services; using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Serialization; +using OSPSuite.Utility.Extensions; namespace MoBi.Core.Serialization.Services { @@ -18,33 +18,26 @@ public class PostSerializationStepsMaker : IPostSerializationStepsMaker { private readonly IObjectIdResetter _objectIdResetter; private readonly IAmountToConcentrationConverter _amountToConcentrationConverter; - private readonly IPassiveTransportConverter _passiveTransportConverter; private readonly IProjectClassifiableUpdaterAfterDeserialization _projectClassifiableUpdaterAfterDeserialization; private readonly IProjectClassificationConverter _projectClassificationConverter; public PostSerializationStepsMaker(IObjectIdResetter objectIdResetter, IAmountToConcentrationConverter amountToConcentrationConverter, - IPassiveTransportConverter passiveTransportConverter, IProjectClassifiableUpdaterAfterDeserialization projectClassifiableUpdaterAfterDeserialization, IProjectClassificationConverter projectClassificationConverter) { _objectIdResetter = objectIdResetter; _amountToConcentrationConverter = amountToConcentrationConverter; - _passiveTransportConverter = passiveTransportConverter; _projectClassifiableUpdaterAfterDeserialization = projectClassifiableUpdaterAfterDeserialization; _projectClassificationConverter = projectClassificationConverter; } public void PerformPostDeserializationFor(IMoBiProject project, int originalFileVersion) { - if (originalFileVersion < ProjectVersions.V3_5_1) - _passiveTransportConverter.Convert(project); - - if (originalFileVersion < ProjectVersions.V6_0_1) //this needs to be done after all object were loaded into project _projectClassificationConverter.Convert(project); - + //this needs to be done once the project was loaded into context _projectClassifiableUpdaterAfterDeserialization.Update(project); } @@ -56,11 +49,6 @@ public void PerformPostDeserializationFor(IReadOnlyList deserializedObject //Convert loaded object to concentration if required deserializedObjects.Each(o => _amountToConcentrationConverter.Convert(o)); - - //Move passive transports defined in moelcules in the passive transport building block. This needs to be done after the deserialization - //step as we might need to add new buildging block to project. Required only for project older than 3.5 - if (originalFileVersion < ProjectVersions.V3_5_1) - deserializedObjects.Each(o => _passiveTransportConverter.Convert(o)); } } } \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Services/SerializationContextFactory.cs b/src/MoBi.Core/Serialization/Services/SerializationContextFactory.cs index 117c03a62..1e0328245 100644 --- a/src/MoBi.Core/Serialization/Services/SerializationContextFactory.cs +++ b/src/MoBi.Core/Serialization/Services/SerializationContextFactory.cs @@ -1,10 +1,10 @@ using System.Collections.Generic; using System.Linq; using MoBi.Core.Services; -using OSPSuite.Core.Converter.v5_2; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Data; using OSPSuite.Core.Domain.Services; +using OSPSuite.Core.Domain.UnitSystem; using OSPSuite.Core.Serialization.Xml; using OSPSuite.Utility.Extensions; using IContainer = OSPSuite.Utility.Container.IContainer; @@ -18,13 +18,13 @@ public interface ISerializationContextFactory public class SerializationContextFactory : ISerializationContextFactory { - private readonly ISerializationDimensionFactory _dimensionFactory; + private readonly IDimensionFactory _dimensionFactory; private readonly IObjectBaseFactory _objectBaseFactory; private readonly ICloneManagerForModel _cloneManagerForModel; private readonly IContainer _container; public SerializationContextFactory( - ISerializationDimensionFactory dimensionFactory, + IDimensionFactory dimensionFactory, IObjectBaseFactory objectBaseFactory, ICloneManagerForModel cloneManagerForModel, IContainer container diff --git a/src/MoBi.Core/Serialization/Xml/Serializer/MergedDimensionFactorySerializer.cs b/src/MoBi.Core/Serialization/Xml/Serializer/MergedDimensionFactorySerializer.cs deleted file mode 100644 index 2caecfcfc..000000000 --- a/src/MoBi.Core/Serialization/Xml/Serializer/MergedDimensionFactorySerializer.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Xml.Linq; -using OSPSuite.Serializer.Xml; -using OSPSuite.Utility.Container; -using MoBi.Core.Domain.UnitSystem; -using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Core.Serialization.Xml; - -namespace MoBi.Core.Serialization.Xml.Serializer -{ - public class MergedDimensionFactorySerializer : OSPSuiteXmlSerializer - { - private readonly IXmlSerializer _serializer; - - public MergedDimensionFactorySerializer() - { - var unitSystemRepositoty = IoC.Resolve(); - _serializer = unitSystemRepositoty.SerializerFor(); - } - - public override DimensionFactory CreateObject(XElement element, SerializationContext serializationContext) - { - return new MoBiMergedDimensionFactory(); - } - - public override void PerformMapping() - { - //nothing to do here as the serialization action will be performed in the overload - } - - protected override XElement TypedSerialize(DimensionFactory objectToSerialize, SerializationContext serializationContext) - { - return _serializer.Serialize(objectToSerialize, serializationContext); - } - - protected override void TypedDeserialize(DimensionFactory objectToDeserialize, XElement outputToDeserialize, SerializationContext serializationContext) - { - _serializer.Deserialize(objectToDeserialize, outputToDeserialize, serializationContext); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Serialization/Xml/Serializer/MoBiProjectXmlSerializer.cs b/src/MoBi.Core/Serialization/Xml/Serializer/MoBiProjectXmlSerializer.cs index a19ee4250..ea9cae162 100644 --- a/src/MoBi.Core/Serialization/Xml/Serializer/MoBiProjectXmlSerializer.cs +++ b/src/MoBi.Core/Serialization/Xml/Serializer/MoBiProjectXmlSerializer.cs @@ -10,18 +10,10 @@ public class MoBiProjectXmlSerializer : ProjectXmlSerializer public override void PerformMapping() { base.PerformMapping(); - Map(x => x.DimensionFactory); Map(x => x.ReactionDimensionMode); MapEnumerable(x => x.AllObservedData, x => x.AddObservedData); } - protected override void TypedDeserialize(MoBiProject project, XElement outputToDeserialize, SerializationContext serializationContext) - { - base.TypedDeserialize(project, outputToDeserialize,serializationContext); - var dimFactory = IoC.Resolve().DimensionFactory; - dimFactory.ProjectFactory = project.DimensionFactory; - } - public override MoBiProject CreateObject(XElement element, SerializationContext serializationContext) { return IoC.Resolve() as MoBiProject; diff --git a/src/MoBi.Core/Serialization/Xml/Services/XmlSerializationService.cs b/src/MoBi.Core/Serialization/Xml/Services/XmlSerializationService.cs index 0bc836f42..c53ad7aec 100644 --- a/src/MoBi.Core/Serialization/Xml/Services/XmlSerializationService.cs +++ b/src/MoBi.Core/Serialization/Xml/Services/XmlSerializationService.cs @@ -206,7 +206,7 @@ public int VersionFrom(XElement element) { string versionString = element.GetAttribute(Constants.Serialization.Attribute.VERSION); if (string.IsNullOrEmpty(versionString)) - return ProjectVersions.V3_0_1_to_3; + return ProjectVersions.UNSUPPORTED; return versionString.ConvertedTo(); } diff --git a/src/MoBi.Core/Services/AmountToConcentrationConverter.cs b/src/MoBi.Core/Services/AmountToConcentrationConverter.cs index 1b8837c63..8251dc14c 100644 --- a/src/MoBi.Core/Services/AmountToConcentrationConverter.cs +++ b/src/MoBi.Core/Services/AmountToConcentrationConverter.cs @@ -182,12 +182,12 @@ public void Convert(object objectToConvert) private bool conversionRequired(IMoleculeStartValue moleculeStartValue) { - return conversionRequired(moleculeStartValue, Constants.Dimension.AMOUNT); + return conversionRequired(moleculeStartValue, Constants.Dimension.MOLAR_AMOUNT); } private bool conversionRequired(IMoleculeBuilder moleculeBuilder) { - return conversionRequired(moleculeBuilder, Constants.Dimension.AMOUNT); + return conversionRequired(moleculeBuilder, Constants.Dimension.MOLAR_AMOUNT); } private bool conversionRequired(IReactionBuilder reaction) diff --git a/src/MoBi.Core/Services/ModelPartsToExcelExporterTask.cs b/src/MoBi.Core/Services/ModelPartsToExcelExporterTask.cs index 11b4452ca..ceab45b27 100644 --- a/src/MoBi.Core/Services/ModelPartsToExcelExporterTask.cs +++ b/src/MoBi.Core/Services/ModelPartsToExcelExporterTask.cs @@ -4,19 +4,19 @@ using MoBi.Core.Domain.Model; using MoBi.Core.Mappers; using OSPSuite.Core.Domain; -using OSPSuite.Infrastructure.Services; +using OSPSuite.Infrastructure.Export; namespace MoBi.Core.Services { public interface IModelPartsToExcelExporterTask { /// - /// Export parts of a simulation model to an Excel file + /// Export parts of a simulation model to an Excel file /// /// The name of the excel file /// The simulation that is being exported /// true if an an attempt to open excel should be made after export - void ExportModelPartsToExcelFile (string excelFileName, IMoBiSimulation simulation, bool openExcel); + void ExportModelPartsToExcelFile(string excelFileName, IMoBiSimulation simulation, bool openExcel); } public class ModelPartsToExcelExporterTask : IModelPartsToExcelExporterTask @@ -51,4 +51,4 @@ public void ExportModelPartsToExcelFile(string excelFileName, IMoBiSimulation si }); } } -} +} \ No newline at end of file diff --git a/src/MoBi.Core/Services/PassiveTransportConverter.cs b/src/MoBi.Core/Services/PassiveTransportConverter.cs deleted file mode 100644 index 998cd93f0..000000000 --- a/src/MoBi.Core/Services/PassiveTransportConverter.cs +++ /dev/null @@ -1,166 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MoBi.Assets; -using OSPSuite.Utility.Events; -using OSPSuite.Utility.Extensions; -using OSPSuite.Utility.Visitor; -using MoBi.Core.Domain.Model; -using MoBi.Core.Events; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Services; -using OSPSuite.Core.Serialization.Exchange; -using OSPSuite.Assets; - -namespace MoBi.Core.Services -{ - public interface IPassiveTransportConverter - { - void Convert(object objectToConvert); - } - - public class PassiveTransportConverter : IPassiveTransportConverter, IVisitor, IVisitor, IVisitor, IVisitor, IVisitor, IVisitor - - { - private readonly IObjectBaseFactory _objectBaseFactory; - private readonly IMoBiProjectRetriever _projectRetriever; - private readonly IContainerTask _containerTask; - private readonly IEventPublisher _eventPublisher; - private readonly ICloneManagerForModel _cloneManager; - private readonly IFormulaTask _formulaTask; - - public PassiveTransportConverter(IObjectBaseFactory objectBaseFactory, IMoBiProjectRetriever projectRetriever, IContainerTask containerTask, - IEventPublisher eventPublisher, ICloneManagerForModel cloneManager, IFormulaTask formulaTask) - { - _objectBaseFactory = objectBaseFactory; - _projectRetriever = projectRetriever; - _containerTask = containerTask; - _eventPublisher = eventPublisher; - _cloneManager = cloneManager; - _formulaTask = formulaTask; - } - - public void Convert(object objectToConvert) - { - this.Visit(objectToConvert); - } - - public void Visit(IMoleculeBuildingBlock moleculeBuildingBlock) - { - var passiveTransportBuildingBlock = createPassiveTransportBuildingBlockForMolecule(moleculeBuildingBlock.Name); - convert(moleculeBuildingBlock, passiveTransportBuildingBlock); - addPassiveTransportToProject(passiveTransportBuildingBlock); - } - - private void convert(IMoleculeBuildingBlock moleculeBuildingBlock, IPassiveTransportBuildingBlock passiveTransportBuildingBlock) - { - convert(moleculeBuildingBlock, new[] {passiveTransportBuildingBlock}); - } - - private void convert(IMoleculeBuildingBlock moleculeBuildingBlock, IReadOnlyList passiveTransportBuildingBlocks) - { - moleculeBuildingBlock.Each(m => convert(m, moleculeBuildingBlock, passiveTransportBuildingBlocks)); - } - - private IPassiveTransportBuildingBlock createPassiveTransportBuildingBlockForMolecule(string name) - { - return _objectBaseFactory.Create() - .WithName(_containerTask.CreateUniqueName(_projectRetriever.Current.PassiveTransportCollection, name, canUseBaseName: true)); - } - - public void Visit(IMoleculeBuilder moleculeBuilder) - { - var passiveTransportBuildingBlock = createPassiveTransportBuildingBlockForMolecule(moleculeBuilder.Name); - convert(moleculeBuilder, null, passiveTransportBuildingBlock); - addPassiveTransportToProject(passiveTransportBuildingBlock); - } - - private void convert(IMoleculeBuilder moleculeBuilder, IMoleculeBuildingBlock moleculeBuildingBlock, IPassiveTransportBuildingBlock passiveTransportBuildingBlock) - { - convert(moleculeBuilder, moleculeBuildingBlock, new[] {passiveTransportBuildingBlock}); - } - - private void convert(IMoleculeBuilder moleculeBuilder, IMoleculeBuildingBlock moleculeBuildingBlock, IReadOnlyList passiveTransportBuildingBlocks) - { - var allPassiveTransports = moleculeBuilder.GetChildren().ToList(); - if (!allPassiveTransports.Any()) return; - - foreach (var passiveTransport in allPassiveTransports) - { - moleculeBuilder.RemoveChild(passiveTransport); - var defaultName = AppConstants.CompositeNameFor(passiveTransport.Name, moleculeBuilder.Name); - - foreach (var passiveTransportBuildingBlock in passiveTransportBuildingBlocks) - { - if (similarPassiveTransportAlreadyExists(passiveTransportBuildingBlock, passiveTransport, defaultName)) - { - var existingPassiveTransport = passiveTransportBuildingBlock.FindByName(defaultName); - existingPassiveTransport.AddMoleculeName(moleculeBuilder.Name); - continue; - } - - var passiveTransportClone = _cloneManager.Clone(passiveTransport); - passiveTransportClone.Name = _containerTask.CreateUniqueName(passiveTransportBuildingBlock, defaultName, canUseBaseName: true); - passiveTransportClone.ForAll = false; - passiveTransportClone.AddMoleculeName(moleculeBuilder.Name); - passiveTransportClone.Parameters.Each(x => x.BuildMode = ParameterBuildMode.Local); - passiveTransportBuildingBlock.Add(passiveTransportClone); - passiveTransportBuildingBlock.AddFormula(passiveTransportClone.Formula); - } - - if (moleculeBuildingBlock != null) - moleculeBuildingBlock.FormulaCache.Remove(passiveTransport.Formula); - } - } - - private bool similarPassiveTransportAlreadyExists(IPassiveTransportBuildingBlock passiveTransportBuildingBlock, ITransportBuilder passiveTransport, string passiveTransportName) - { - var existingPassiveTransport = passiveTransportBuildingBlock.FindByName(passiveTransportName); - if (existingPassiveTransport == null) return false; - - return _formulaTask.FormulasAreTheSame(existingPassiveTransport.Formula, passiveTransport.Formula); - } - - private void convert(IMoBiProject project) - { - //we should only convert the template building blocks by creating the cartesian product of all - foreach (var moleculeBuildingBlock in project.MoleculeBlockCollection) - { - convert(moleculeBuildingBlock, project.PassiveTransportCollection); - } - } - - private void addPassiveTransportToProject(IPassiveTransportBuildingBlock passiveTransportBuildingBlock) - { - _projectRetriever.Current.AddBuildingBlock(passiveTransportBuildingBlock); - var notification = new NotificationMessage(passiveTransportBuildingBlock, MessageOrigin.Simulation, passiveTransportBuildingBlock, NotificationType.Info) - { - Message = AppConstants.Warnings.PassiveTransportBuildingBlockCreatedAutomatically(passiveTransportBuildingBlock.Name), - ObjectType = ObjectTypes.PassiveTransportBuildingBlock, - BuildingBlockType = ObjectTypes.PassiveTransportBuildingBlock, - }; - _eventPublisher.PublishEvent(new ShowNotificationsEvent(notification)); - } - - public void Visit(IBuildConfiguration buildConfiguration) - { - convert(buildConfiguration.Molecules, buildConfiguration.PassiveTransports); - } - - public void Visit(SimulationTransfer simulationTransfer) - { - Visit(simulationTransfer.Simulation); - } - - public void Visit(IModelCoreSimulation simulation) - { - Visit(simulation.BuildConfiguration); - } - - public void Visit(IMoBiProject project) - { - convert(project); - project.Simulations.Each(Visit); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Core/Services/ReactionDimensionRetriever.cs b/src/MoBi.Core/Services/ReactionDimensionRetriever.cs index 5df399b0b..7e2c5c3bb 100644 --- a/src/MoBi.Core/Services/ReactionDimensionRetriever.cs +++ b/src/MoBi.Core/Services/ReactionDimensionRetriever.cs @@ -17,7 +17,7 @@ public ReactionDimensionRetriever(IDimensionFactory dimensionFactory, IMoBiProje public IDimension ReactionDimension => getDimension(Constants.Dimension.AMOUNT_PER_TIME, Constants.Dimension.MOLAR_CONCENTRATION_PER_TIME); - public IDimension MoleculeDimension => getDimension(Constants.Dimension.AMOUNT, Constants.Dimension.MOLAR_CONCENTRATION); + public IDimension MoleculeDimension => getDimension(Constants.Dimension.MOLAR_AMOUNT, Constants.Dimension.MOLAR_CONCENTRATION); public ReactionDimensionMode SelectedDimensionMode => _projectRetriever.Current?.ReactionDimensionMode ?? ReactionDimensionMode.AmountBased; diff --git a/src/MoBi.Engine/Tasks/SimModelManagerFactory.cs b/src/MoBi.Core/Services/SimModelManagerFactory.cs similarity index 70% rename from src/MoBi.Engine/Tasks/SimModelManagerFactory.cs rename to src/MoBi.Core/Services/SimModelManagerFactory.cs index cc6d7a637..e0c1a712c 100644 --- a/src/MoBi.Engine/Tasks/SimModelManagerFactory.cs +++ b/src/MoBi.Core/Services/SimModelManagerFactory.cs @@ -1,27 +1,29 @@ using MoBi.Core.Domain.Model; -using MoBi.Presentation.Tasks; +using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Serialization.SimModel.Services; using OSPSuite.Core.Services; -using OSPSuite.Engine.Domain; -namespace MoBi.Engine.Tasks +namespace MoBi.Core.Services { + public interface ISimModelManagerFactory + { + ISimModelManager Create(); + } + public class SimModelManagerFactory : ISimModelManagerFactory { private readonly ISimModelExporter _simModelExporter; private readonly ISimModelSimulationFactory _simModelSimulationFactory; private readonly IMoBiContext _context; - private readonly IDataNamingService _dataNamingService; private readonly IDisplayUnitRetriever _displayUnitRetriever; private readonly IDataRepositoryTask _dataRepositoryTask; - public SimModelManagerFactory(ISimModelExporter simModelExporter, ISimModelSimulationFactory simModelSimulationFactory, IMoBiContext context, IDataNamingService dataNamingService, IDisplayUnitRetriever displayUnitRetriever, IDataRepositoryTask dataRepositoryTask) + public SimModelManagerFactory(ISimModelExporter simModelExporter, ISimModelSimulationFactory simModelSimulationFactory, IMoBiContext context, IDisplayUnitRetriever displayUnitRetriever, IDataRepositoryTask dataRepositoryTask) { _simModelExporter = simModelExporter; _simModelSimulationFactory = simModelSimulationFactory; _context = context; - _dataNamingService = dataNamingService; _displayUnitRetriever = displayUnitRetriever; _dataRepositoryTask = dataRepositoryTask; } @@ -33,7 +35,7 @@ public ISimModelManager Create() private DataFactory createDataFactory() { - return new DataFactory(_context.DimensionFactory, _dataNamingService, _context.ObjectPathFactory, _displayUnitRetriever, _dataRepositoryTask); + return new DataFactory(_context.DimensionFactory, _context.ObjectPathFactory, _displayUnitRetriever, _dataRepositoryTask); } } } \ No newline at end of file diff --git a/src/MoBi.Core/app.config b/src/MoBi.Core/app.config deleted file mode 100644 index 7824742fd..000000000 --- a/src/MoBi.Core/app.config +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MoBi.Core/packages.config b/src/MoBi.Core/packages.config deleted file mode 100644 index 50d0d87f3..000000000 --- a/src/MoBi.Core/packages.config +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MoBi.Engine/EngineRegister.cs b/src/MoBi.Engine/EngineRegister.cs index dbb825826..3a069a3c2 100644 --- a/src/MoBi.Engine/EngineRegister.cs +++ b/src/MoBi.Engine/EngineRegister.cs @@ -1,9 +1,6 @@ -using MoBi.Core; -using MoBi.Engine.Sbml; +using MoBi.Engine.Sbml; using OSPSuite.Core; -using OSPSuite.FuncParser; using OSPSuite.Utility.Container; -using SimModelNET; namespace MoBi.Engine { @@ -11,11 +8,6 @@ public class EngineRegister : Register { public override void RegisterInContainer(IContainer container) { - container.AddRegister(x => x.FromType()); - var pkSimConfiguration = container.Resolve(); - XMLSchemaCache.InitializeFromFile(pkSimConfiguration.SimModelSchemaFilePath); - - container.Register(); container.AddRegister(x => x.FromType()); diff --git a/src/MoBi.Engine/Extensions/DimensionInfoExtensions.cs b/src/MoBi.Engine/Extensions/DimensionInfoExtensions.cs deleted file mode 100644 index 149a4e228..000000000 --- a/src/MoBi.Engine/Extensions/DimensionInfoExtensions.cs +++ /dev/null @@ -1,19 +0,0 @@ -using OSPSuite.FuncParser; - -namespace MoBi.Engine.Extensions -{ - - public static class DimensionInfoExtensions - { - public static bool AreEquals(this IDimensionInfo left, IDimensionInfo right) - { - return (left.Length == right.Length - && left.Mass == right.Mass - && left.Time == right.Time - && left.ElectricCurrent == right.ElectricCurrent - && left.Temperature == right.Temperature - && left.Amount == right.Amount - && left.LuminousIntensity == right.LuminousIntensity); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Engine/MoBi.Engine.csproj b/src/MoBi.Engine/MoBi.Engine.csproj index 8d36cdf23..ec6c16c4b 100644 --- a/src/MoBi.Engine/MoBi.Engine.csproj +++ b/src/MoBi.Engine/MoBi.Engine.csproj @@ -1,149 +1,58 @@ - - - + + - Debug - AnyCPU - {15ED932C-EDEC-407B-91D9-7BCB8E7F95F5} - Library - Properties - MoBi.Engine - MoBi.Engine - v4.6.2 - 512 - true + net472 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + false + false + open-systems-pharmacology, ospsuite-components + Core functionalities for PK-Sim + Open-Systems-Pharmacology + LICENSE + bin\$(Configuration) + bin\$(Configuration)\$(TargetFramework)\PKSim.Core.xml + 1591 + - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false + + x64 - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - + - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - False - ..\..\pre\libsbmlcsP.dll - - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.Engine.8.0.4\lib\net462\OSPSuite.Engine.dll - - - ..\..\packages\OSPSuite.FuncParser.3.0.1.14\lib\net45\OSPSuite.FuncParser.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.SimModel.3.0.1.27\lib\net45\OSPSuite.SimModel.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - True - True - - - - - - - + + - - Properties\SolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + - - {3c65ffc2-d9ec-4951-8c35-04854ad34e52} - MoBi.Assets - - - {2DBF50BE-A749-421C-B526-8BDA31CFE7B3} - MoBi.Core - - - {B4C86DCA-8877-4400-8088-2401EE65B403} - MoBi.Presentation - + + True + + + + + + + + + + + + ..\..\pre\libsbmlcsP.dll + - - \ No newline at end of file + + + diff --git a/src/MoBi.Engine/Properties/AssemblyInfo.cs b/src/MoBi.Engine/Properties/AssemblyInfo.cs deleted file mode 100644 index 936f799b6..000000000 --- a/src/MoBi.Engine/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,6 +0,0 @@ -using System.Reflection; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MoBi.Engine")] \ No newline at end of file diff --git a/src/MoBi.Engine/Sbml/SBMLTask.cs b/src/MoBi.Engine/Sbml/SBMLTask.cs index 8d291102b..457b7036a 100644 --- a/src/MoBi.Engine/Sbml/SBMLTask.cs +++ b/src/MoBi.Engine/Sbml/SBMLTask.cs @@ -44,7 +44,7 @@ public IMoBiCommand ImportModelFromSbml(string filename, IMoBiProject project) var model = GetModel(filename); if (model == null) return new MoBiEmptyCommand(); - initialiseDimensionFactory(project); + initialiseDimensionFactory(); project.Name = getProjectName(model); reportConstraints(project, model); @@ -70,11 +70,10 @@ private void reportConstraints(IMoBiProject project, Model model) } } - private void initialiseDimensionFactory(IMoBiProject project) + private void initialiseDimensionFactory() { _moBiDimensionFactory = new MoBiDimensionFactory(); - _mobiContext.DimensionFactory.BaseFactory.Dimensions.Each(_moBiDimensionFactory.BaseFactory.AddDimension); - project.DimensionFactory.Dimensions.Each(_moBiDimensionFactory.ProjectFactory.AddDimension); + _mobiContext.DimensionFactory.Dimensions.Each(_moBiDimensionFactory.AddDimension); } private string getProjectName(Model model) diff --git a/src/MoBi.Engine/app.config b/src/MoBi.Engine/app.config deleted file mode 100644 index c553f0e98..000000000 --- a/src/MoBi.Engine/app.config +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MoBi.Engine/packages.config b/src/MoBi.Engine/packages.config deleted file mode 100644 index e0ff0893c..000000000 --- a/src/MoBi.Engine/packages.config +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MoBi.Presentation/DTO/OutputIntervalDTO.cs b/src/MoBi.Presentation/DTO/OutputIntervalDTO.cs deleted file mode 100644 index 362ff7a39..000000000 --- a/src/MoBi.Presentation/DTO/OutputIntervalDTO.cs +++ /dev/null @@ -1,8 +0,0 @@ -using BTS.Utility.Validation; -using MoBi.Resources; -using SBSuite.Core.Domain; - -namespace MoBi.Presentation.DTO -{ - -} \ No newline at end of file diff --git a/src/MoBi.Presentation/DTO/ParameterDTO.cs b/src/MoBi.Presentation/DTO/ParameterDTO.cs index 5bfc2fc86..61a7acaec 100644 --- a/src/MoBi.Presentation/DTO/ParameterDTO.cs +++ b/src/MoBi.Presentation/DTO/ParameterDTO.cs @@ -31,12 +31,12 @@ public class ParameterDTO : ObjectBaseDTO, ITaggedEntityDTO, IMoBiParameterDTO public int Sequence { get; set; } public double Percentile { get; set; } public PathElements PathElements { get; set; } = new PathElements(); - public PathElementDTO SimulationPathElement => PathElements[PathElement.Simulation]; - public PathElementDTO TopContainerPathElement => PathElements[PathElement.TopContainer]; - public PathElementDTO ContainerPathElement => PathElements[PathElement.Container]; - public PathElementDTO BottomCompartmentPathElement => PathElements[PathElement.BottomCompartment]; - public PathElementDTO MoleculePathElement => PathElements[PathElement.Molecule]; - public PathElementDTO NamePathElement => PathElements[PathElement.Name]; + public PathElement SimulationPathElement => PathElements[PathElementId.Simulation]; + public PathElement TopContainerPathElement => PathElements[PathElementId.TopContainer]; + public PathElement ContainerPathElement => PathElements[PathElementId.Container]; + public PathElement BottomCompartmentPathElement => PathElements[PathElementId.BottomCompartment]; + public PathElement MoleculePathElement => PathElements[PathElementId.Molecule]; + public PathElement NamePathElement => PathElements[PathElementId.Name]; public string Category { get; } public string DisplayPathAsString => PathElements.Select(x => x.DisplayName).ToString(Constants.DISPLAY_PATH_SEPARATOR); diff --git a/src/MoBi.Presentation/DTO/ValueEditDTO.cs b/src/MoBi.Presentation/DTO/ValueEditDTO.cs index 9b2694fa2..846974134 100644 --- a/src/MoBi.Presentation/DTO/ValueEditDTO.cs +++ b/src/MoBi.Presentation/DTO/ValueEditDTO.cs @@ -23,11 +23,8 @@ public virtual double KernelValue public double Value { get => valueToDisplayValue(KernelValue); - set - { - KernelValue = displayValueToValue(value); - OnPropertyChanged(() => Value); - } + //Settings the Kernel Value triggers a Value Change. Event. No need to send it twice + set => KernelValue = displayValueToValue(value); } public Unit DisplayUnit diff --git a/src/MoBi.Presentation/Mappers/DataTableToImportQuantityDTOMapperForMolecules.cs b/src/MoBi.Presentation/Mappers/DataTableToImportQuantityDTOMapperForMolecules.cs index 4fe976869..f40217620 100644 --- a/src/MoBi.Presentation/Mappers/DataTableToImportQuantityDTOMapperForMolecules.cs +++ b/src/MoBi.Presentation/Mappers/DataTableToImportQuantityDTOMapperForMolecules.cs @@ -85,7 +85,7 @@ private bool isDimensionRequired(ImportedQuantityDTO dto) private static string getDimensionConstantForProject(ReactionDimensionMode dimensionMode) { - return dimensionMode == ReactionDimensionMode.AmountBased ? Constants.Dimension.AMOUNT : Constants.Dimension.MOLAR_CONCENTRATION; + return dimensionMode == ReactionDimensionMode.AmountBased ? Constants.Dimension.MOLAR_AMOUNT : Constants.Dimension.MOLAR_CONCENTRATION; } private bool isCorrectDimensionForDimensionMode(ReactionDimensionMode dimensionMode, ImportedQuantityDTO dto) @@ -93,7 +93,7 @@ private bool isCorrectDimensionForDimensionMode(ReactionDimensionMode dimensionM if (dto.Dimension == _dimensionFactory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION) && dimensionMode == ReactionDimensionMode.ConcentrationBased) return true; - if (dto.Dimension == _dimensionFactory.Dimension(Constants.Dimension.AMOUNT) && dimensionMode == ReactionDimensionMode.AmountBased) + if (dto.Dimension == _dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT) && dimensionMode == ReactionDimensionMode.AmountBased) return true; return false; diff --git a/src/MoBi.Presentation/Mappers/MoBiQuantityPathToQuantityDisplayPathMapper.cs b/src/MoBi.Presentation/Mappers/MoBiQuantityPathToQuantityDisplayPathMapper.cs index 19a746a41..512258d9d 100644 --- a/src/MoBi.Presentation/Mappers/MoBiQuantityPathToQuantityDisplayPathMapper.cs +++ b/src/MoBi.Presentation/Mappers/MoBiQuantityPathToQuantityDisplayPathMapper.cs @@ -2,8 +2,7 @@ using MoBi.Core.Domain.Model.Diagram; using MoBi.Presentation.Settings; using OSPSuite.Core.Domain; -using OSPSuite.Presentation.DTO; -using OSPSuite.Presentation.Mappers; +using OSPSuite.Core.Domain.Mappers; namespace MoBi.Presentation.Mappers { @@ -18,19 +17,19 @@ public MoBiQuantityPathToQuantityDisplayPathMapper(IObjectPathFactory objectPath _userSettings = userSettings; } - protected override IEnumerable DefaultPathElementsToUse(bool addTopContainerName, PathElements pathElements) + protected override IEnumerable DefaultPathElementsToUse(bool addTopContainerName, PathElements pathElements) { if (addTopContainerName || chartOptions.SimulationInCurveName) - yield return PathElement.Simulation; + yield return PathElementId.Simulation; - //Observed data repository name is stored in PathElement.TopContainer. So if the top container name is to be displayed, we need to add it as well + //Observed data repository name is stored in PathElementId.TopContainer. So if the top container name is to be displayed, we need to add it as well if (addTopContainerName || chartOptions.TopContainerInCurveName) - yield return PathElement.TopContainer; + yield return PathElementId.TopContainer; - yield return PathElement.Container; - yield return PathElement.BottomCompartment; - yield return PathElement.Molecule; - yield return PathElement.Name; + yield return PathElementId.Container; + yield return PathElementId.BottomCompartment; + yield return PathElementId.Molecule; + yield return PathElementId.Name; } } } \ No newline at end of file diff --git a/src/MoBi.Presentation/Mappers/ParameterToParameterDTOMapper.cs b/src/MoBi.Presentation/Mappers/ParameterToParameterDTOMapper.cs index bc7560e75..e1acd525d 100644 --- a/src/MoBi.Presentation/Mappers/ParameterToParameterDTOMapper.cs +++ b/src/MoBi.Presentation/Mappers/ParameterToParameterDTOMapper.cs @@ -1,9 +1,9 @@ using MoBi.Presentation.DTO; using OSPSuite.Core.Domain; +using OSPSuite.Core.Domain.Mappers; using OSPSuite.Core.Domain.Repositories; using OSPSuite.Core.Domain.Services; using OSPSuite.Presentation.DTO; -using OSPSuite.Presentation.Mappers; using OSPSuite.Utility.Extensions; namespace MoBi.Presentation.Mappers diff --git a/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuFactoryForContainer.cs b/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuFactoryForContainer.cs index 30a2611f0..389b31efc 100644 --- a/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuFactoryForContainer.cs +++ b/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuFactoryForContainer.cs @@ -1,5 +1,3 @@ -using OSPSuite.Utility.Container; -using OSPSuite.Utility.Extensions; using MoBi.Core.Domain.Model; using MoBi.Presentation.DTO; using MoBi.Presentation.Presenter; @@ -8,6 +6,8 @@ using OSPSuite.Presentation.Core; using OSPSuite.Presentation.Presenters; using OSPSuite.Presentation.Presenters.ContextMenus; +using OSPSuite.Utility.Container; +using OSPSuite.Utility.Extensions; using IContainer = OSPSuite.Core.Domain.IContainer; namespace MoBi.Presentation.MenusAndBars.ContextMenus @@ -26,9 +26,9 @@ public override IContextMenu CreateFor(IObjectBaseDTO objectBaseDTO, IPresenterW protected override bool IsSatisfiedBy(IEntity entity, IPresenterWithContextMenu presenter) { - return presenter.IsAnImplementationOf() - && entity.IsAnImplementationOf() - && !entity.IsAnImplementationOf(); + return presenter.IsAnImplementationOf() + && entity.IsAnImplementationOf() + && !entity.IsAnImplementationOf(); } } } \ No newline at end of file diff --git a/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForContainer.cs b/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForContainer.cs index 515d0f401..d96b6ef31 100644 --- a/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForContainer.cs +++ b/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForContainer.cs @@ -1,17 +1,15 @@ using MoBi.Assets; -using OSPSuite.Presentation.MenuAndBars; using MoBi.Core.Domain.Extensions; using MoBi.Core.Domain.Model; -using MoBi.Core.Helper; using MoBi.Presentation.DTO; using MoBi.Presentation.UICommand; +using OSPSuite.Assets; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Services; using OSPSuite.Presentation.Core; +using OSPSuite.Presentation.MenuAndBars; using OSPSuite.Presentation.Presenters; using OSPSuite.Presentation.Presenters.ContextMenus; -using OSPSuite.Assets; -using RemoveTopContainerCommand = MoBi.Presentation.UICommand.RemoveTopContainerCommand; namespace MoBi.Presentation.MenusAndBars.ContextMenus { @@ -21,7 +19,7 @@ public interface IContextMenuForContainer : IContextMenuFor public class ContextMenuForContainerBase : ContextMenuFor where TContainer : class, IContainer { - public ContextMenuForContainerBase(IMoBiContext context, IObjectTypeResolver objectTypeResolver) : base( context, objectTypeResolver) + public ContextMenuForContainerBase(IMoBiContext context, IObjectTypeResolver objectTypeResolver) : base(context, objectTypeResolver) { } @@ -49,8 +47,8 @@ protected override IMenuBarItem CreateDeleteItemFor(TContainer objectToRemove) { if (objectToRemove.ParentContainer != null) return CreateMenuButton.WithCaption(AppConstants.MenuNames.Delete) - .WithCommandFor(objectToRemove) - .WithIcon(ApplicationIcons.Delete); + .WithCommandFor(objectToRemove) + .WithIcon(ApplicationIcons.Delete); return CreateMenuButton.WithCaption(AppConstants.MenuNames.Delete) .WithCommandFor(objectToRemove) @@ -73,7 +71,6 @@ private IMenuBarItem createAddExistingFromTemplateItemFor(TContainer parent) .WithCommandFor, IContainer>(parent); } - protected IMenuBarItem CreateAddNewChild(TContainer container) where T : class, IEntity { var typeName = _objectTypeResolver.TypeFor(); @@ -98,6 +95,7 @@ public override IContextMenu InitializeWith(IObjectBaseDTO dto, IPresenter prese _allMenuItems.Add(CreateAddNewItemFor(container)); _allMenuItems.Add(CreateAddExistingItemFor(container)); } + _allMenuItems.Add(CreateAddNewChild(container)); return this; } diff --git a/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForSimulation.cs b/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForSimulation.cs index 72b587893..30e959de1 100644 --- a/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForSimulation.cs +++ b/src/MoBi.Presentation/MenusAndBars/ContextMenus/ContextMenuForSimulation.cs @@ -50,8 +50,10 @@ public IContextMenu InitializeWith(IObjectBaseDTO dto, IPresenter presenter) createReportItemFor(simulation), createAddToJournal(simulation), exportSimulationResultsToExcel(simulation), - createExportForMatlabItem(simulation), - createMatlabODEExportItem(simulation), + createExportODEForMatlabItem(simulation), + createExportODEForRItem(simulation), + createExportForSimModelXmlItem(simulation), + createExportForCppItem(simulation), createDebugReportItem(simulation), createExportModelPartsItem(simulation), @@ -92,13 +94,21 @@ private IMenuBarItem createRunItem(IMoBiSimulation simulation) .AsGroupStarter(); } - private IMenuBarItem createMatlabODEExportItem(IMoBiSimulation simulation) + private IMenuBarItem createExportODEForMatlabItem(IMoBiSimulation simulation) { - return CreateMenuButton.WithCaption(AppConstants.MenuNames.MatlabDifferentialSystemExport) - .WithCommandFor(simulation) + return CreateMenuButton.WithCaption(MenuNames.ExportODEForMatlab) + .WithCommandFor(simulation) .WithIcon(ApplicationIcons.Matlab); } + private IMenuBarItem createExportODEForRItem(IMoBiSimulation simulation) + { + return CreateMenuButton.WithCaption(MenuNames.AsDeveloperOnly(MenuNames.ExportODEForR)) + .WithCommandFor(simulation) + .WithIcon(ApplicationIcons.R) + .ForDeveloper(); + } + private IMenuBarItem createParameterIdentificationItem(IMoBiSimulation simulation) { return ParameterIdentificationContextMenuItems.CreateParameterIdentificationFor(new[] {simulation}); @@ -111,11 +121,18 @@ private IMenuBarItem createDebugReportItem(IMoBiSimulation simulation) .WithCommandFor(simulation); } - private IMenuBarItem createExportForMatlabItem(IMoBiSimulation simulation) + private IMenuBarItem createExportForSimModelXmlItem(IMoBiSimulation simulation) { - return CreateMenuButton.WithCaption(AppConstants.MenuNames.ExportSimModelXml) - .WithCommandFor(simulation) - .WithIcon(ApplicationIcons.Matlab); + return CreateMenuButton.WithCaption(MenuNames.ExportSimModelXml) + .WithCommandFor(simulation) + .ForDeveloper(); + } + + private IMenuBarItem createExportForCppItem(IMoBiSimulation simulation) + { + return CreateMenuButton.WithCaption(MenuNames.ExportForCpp) + .WithCommandFor(simulation) + .ForDeveloper(); } private IMenuBarItem createStartPopulationSimulation(IMoBiSimulation simulation) diff --git a/src/MoBi.Presentation/MoBi.Presentation.csproj b/src/MoBi.Presentation/MoBi.Presentation.csproj index 85d60ca38..566867c65 100644 --- a/src/MoBi.Presentation/MoBi.Presentation.csproj +++ b/src/MoBi.Presentation/MoBi.Presentation.csproj @@ -1,994 +1,49 @@ - - + + - Debug - AnyCPU - 9.0.21022 - 2.0 - {B4C86DCA-8877-4400-8088-2401EE65B403} - Library - Properties - MoBi.Presentation - MoBi.Presentation - v4.6.2 - 512 - - - - - 3.5 - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - bin\Debug\MoBi.Presentation.XML + net472 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + false + false + Open-Systems-Pharmacology + LICENSE + bin\$(Configuration) + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml 1591 - false - AnyCPU - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + + + + + - - ..\..\packages\Antlr3.Runtime.3.5.1\lib\net40-client\Antlr3.Runtime.dll - - - ..\..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\..\packages\Castle.Windsor.4.1.1\lib\net45\Castle.Windsor.dll - - - ..\..\packages\Dapper.1.60.6\lib\net451\Dapper.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - ..\..\packages\FakeItEasy.5.1.1\lib\net45\FakeItEasy.dll - - - ..\..\packages\FluentNHibernate.2.1.2\lib\net461\FluentNHibernate.dll - - - ..\..\packages\SharpZipLib.1.1.0\lib\net45\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\Iesi.Collections.4.0.4\lib\net461\Iesi.Collections.dll - - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - - ..\..\packages\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Logging.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\..\packages\Microsoft.Extensions.Primitives.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\NHibernate.5.2.5\lib\net461\NHibernate.dll - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Draw.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Instruments.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Layout.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Pdf.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Svg.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Xml.dll - True - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.Infrastructure.8.0.4\lib\net462\OSPSuite.Infrastructure.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - - ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - - ..\..\packages\Remotion.Linq.EagerFetching.2.2.0\lib\net45\Remotion.Linq.EagerFetching.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - ..\..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - 3.5 - - - ..\..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net46\System.Data.SQLite.dll - - - - ..\..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - - - - - 3.5 - - - 3.5 - - - - - 3.0 - + + - - Properties\SolutionInfo.cs - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - + + True + + + - - {2dbf50be-a749-421c-b526-8bda31cfe7b3} - MoBi.Core - - - {3c65ffc2-d9ec-4951-8c35-04854ad34e52} - MoBi.Assets - + + - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - \ No newline at end of file + + diff --git a/src/MoBi.Presentation/PresentationRegister.cs b/src/MoBi.Presentation/PresentationRegister.cs index da1794bc6..c324a7306 100644 --- a/src/MoBi.Presentation/PresentationRegister.cs +++ b/src/MoBi.Presentation/PresentationRegister.cs @@ -55,15 +55,15 @@ namespace MoBi.Presentation { public class PresentationRegister : Register { - private readonly bool _registerMainViewpresenter; + private readonly bool _registerMainViewPresenter; public PresentationRegister() : this(true) { } - public PresentationRegister(bool registerMainViewpresenter) + public PresentationRegister(bool registerMainViewPresenter) { - _registerMainViewpresenter = registerMainViewpresenter; + _registerMainViewPresenter = registerMainViewPresenter; } public override void RegisterInContainer(IContainer container) @@ -125,6 +125,7 @@ public override void RegisterInContainer(IContainer container) container.Register(); container.Register(); + container.AddRegister(x=>x.FromType()); registerTasks(container); registerContextMenus(container); @@ -159,7 +160,7 @@ private static void registerContextMenuAndCommands(IContainer container) private void registerMainPresenters(IContainer container) { - if (_registerMainViewpresenter) + if (_registerMainViewPresenter) container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); diff --git a/src/MoBi.Presentation/Presenter/AbstractParameterBasePresenter.cs b/src/MoBi.Presentation/Presenter/AbstractParameterBasePresenter.cs index d85a3c4a4..b2a816bca 100644 --- a/src/MoBi.Presentation/Presenter/AbstractParameterBasePresenter.cs +++ b/src/MoBi.Presentation/Presenter/AbstractParameterBasePresenter.cs @@ -49,7 +49,7 @@ public virtual IBuildingBlock BuildingBlock public IFormulaCache FormulaCache => BuildingBlock?.FormulaCache; - public void SetParamterUnit(IParameterDTO parameterDTO, Unit displayUnit) + public void SetParameterUnit(IParameterDTO parameterDTO, Unit displayUnit) { ExecuteQuantityTaskAction(parameterDTO, (p, sim) => _quantityTask.SetQuantityDisplayUnit(p, displayUnit, sim), @@ -95,9 +95,9 @@ public IEnumerable GetFormulas() } - public IEnumerable GetDimensions() + public IReadOnlyList GetDimensions() { - return _interactionTaskContext.Context.DimensionFactory.Dimensions; + return _interactionTaskContext.Context.DimensionFactory.DimensionsSortedByName; } public void SetIsFavorite(IParameterDTO parameterDTO, bool isFavorite) diff --git a/src/MoBi.Presentation/Presenter/CalculateScaleDivisorsPresenter.cs b/src/MoBi.Presentation/Presenter/CalculateScaleDivisorsPresenter.cs index 131f63ff3..38527771c 100644 --- a/src/MoBi.Presentation/Presenter/CalculateScaleDivisorsPresenter.cs +++ b/src/MoBi.Presentation/Presenter/CalculateScaleDivisorsPresenter.cs @@ -16,6 +16,7 @@ using OSPSuite.Core.Services; using OSPSuite.Presentation.Presenters; using OSPSuite.Assets; +using OSPSuite.Utility.Exceptions; namespace MoBi.Presentation.Presenter { @@ -136,6 +137,10 @@ public async Task StartScaleDivisorsCalculation() { /*canceled*/ } + catch (Exception e) + { + throw new OSPSuiteException(e.ExceptionMessage(addContactSupportInfo:false)); + } finally { _view.Calculating = false; diff --git a/src/MoBi.Presentation/Presenter/ChartPresenter.cs b/src/MoBi.Presentation/Presenter/ChartPresenter.cs index 85139bbf7..6666bbcba 100644 --- a/src/MoBi.Presentation/Presenter/ChartPresenter.cs +++ b/src/MoBi.Presentation/Presenter/ChartPresenter.cs @@ -14,6 +14,7 @@ using OSPSuite.Core.Domain.Data; using OSPSuite.Core.Events; using OSPSuite.Presentation.Binders; +using OSPSuite.Presentation.Core; using OSPSuite.Presentation.DTO; using OSPSuite.Presentation.Extensions; using OSPSuite.Presentation.MenuAndBars; @@ -158,20 +159,20 @@ private void initLayout() _chartPresenterContext.EditorLayoutTask.InitFromUserSettings(_chartPresenterContext.EditorAndDisplayPresenter); } - protected void LoadFromTemplate(CurveChartTemplate chartTemplate, bool triggeredManually, bool propogateChartChangeEvent = true) + protected void LoadFromTemplate(CurveChartTemplate chartTemplate, bool triggeredManually, bool propagateChartChangeEvent = true) { - _chartTemplatingTask.InitFromTemplate(_dataRepositoryCache, Chart, editorPresenter, chartTemplate, CurveNameDefinition, triggeredManually, propogateChartChangeEvent); + _chartTemplatingTask.InitFromTemplate(_dataRepositoryCache, Chart, editorPresenter, chartTemplate, CurveNameDefinition, triggeredManually, propagateChartChangeEvent); } - protected virtual void OnDragOver(object sender, DragEventArgs e) + protected virtual void OnDragOver(object sender, IDragEvent e) { if (simulationResultsIsBeingDragged(e)) - e.Effect = CanDropSimulation ? DragDropEffects.Move : DragDropEffects.None; + e.Effect = CanDropSimulation ? DragEffect.Move : DragEffect.None; else _observedDataDragDropBinder.PrepareDrag(e); } - private static bool simulationResultsIsBeingDragged(DragEventArgs e) + private static bool simulationResultsIsBeingDragged(IDragEvent e) { var data = e.Data>(); //do not use null propagation as suggested by resharper @@ -182,7 +183,7 @@ private static bool simulationResultsIsBeingDragged(DragEventArgs e) return data.Count == data.OfType().Count(); } - protected virtual void OnDragDrop(object sender, DragEventArgs e) + protected virtual void OnDragDrop(object sender, IDragEvent e) { if (simulationResultsIsBeingDragged(e) && CanDropSimulation) { @@ -236,7 +237,7 @@ public void Show(CurveChart chart, IReadOnlyList dataRepositorie //do not validate template when showing a chart as the chart might well be without curves when initialized for the first time. var currentTemplate = defaultTemplate ?? _chartTemplatingTask.TemplateFrom(chart, validateTemplate: false); replaceSimulationRepositories(dataRepositories); - LoadFromTemplate(currentTemplate, triggeredManually: false, propogateChartChangeEvent: false); + LoadFromTemplate(currentTemplate, triggeredManually: false, propagateChartChangeEvent: false); addObservedDataIfNeeded(dataRepositories); } finally diff --git a/src/MoBi.Presentation/Presenter/EditDistributedParameterPresenter.cs b/src/MoBi.Presentation/Presenter/EditDistributedParameterPresenter.cs index 5dea1fcf4..23de6ab56 100644 --- a/src/MoBi.Presentation/Presenter/EditDistributedParameterPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditDistributedParameterPresenter.cs @@ -31,7 +31,7 @@ public interface IEditDistributedParameterPresenter : IEditPresenter { - IEnumerable GetDimensions(); + IReadOnlyList GetDimensions(); IDimension PercentDimension { get; } IDimension NoDimension { get; } void SetPercentile(double newValue); @@ -94,9 +94,9 @@ public void RenameSubject() _editTasks.Rename(_distributedParameter, BuildingBlock); } - public IEnumerable GetDimensions() + public IReadOnlyList GetDimensions() { - return _context.DimensionFactory.Dimensions; + return _context.DimensionFactory.DimensionsSortedByName; } public override bool CanClose => _distributedParameter == null || base.CanClose; diff --git a/src/MoBi.Presentation/Presenter/EditFavoritesPresenter.cs b/src/MoBi.Presentation/Presenter/EditFavoritesPresenter.cs index c2b27666f..39970cf80 100644 --- a/src/MoBi.Presentation/Presenter/EditFavoritesPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditFavoritesPresenter.cs @@ -91,7 +91,7 @@ private void updateFavorites() _editParameterListPresenter.Edit(allFavoritesParameters); //name always visible - _editParameterListPresenter.SetVisibility(PathElement.Name, isVisible: true); + _editParameterListPresenter.SetVisibility(PathElementId.Name, isVisible: true); UpdateSpecialColumnsVisibility(); } diff --git a/src/MoBi.Presentation/Presenter/EditFormulaPathListPresenter.cs b/src/MoBi.Presentation/Presenter/EditFormulaPathListPresenter.cs index 55d8d97e2..90811bf95 100644 --- a/src/MoBi.Presentation/Presenter/EditFormulaPathListPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditFormulaPathListPresenter.cs @@ -54,7 +54,7 @@ public interface IEditFormulaPathListPresenter : void RemovePath(FormulaUsablePathDTO formulaUsablePathDTO); - IEnumerable GetDimensions(); + IReadOnlyList GetDimensions(); /// /// Clones the path of and adds it to the formula with a unique alias @@ -225,9 +225,9 @@ public void ShowContextMenu(IViewItem viewItem, Point popupLocation) contextMenu.Show(View, popupLocation); } - public IEnumerable GetDimensions() + public IReadOnlyList GetDimensions() { - return _context.DimensionFactory.Dimensions; + return _context.DimensionFactory.DimensionsSortedByName; } public void Handle(FormulaChangedEvent eventToHandle) diff --git a/src/MoBi.Presentation/Presenter/EditFormulaPresenter.cs b/src/MoBi.Presentation/Presenter/EditFormulaPresenter.cs index f87409993..06d62022c 100644 --- a/src/MoBi.Presentation/Presenter/EditFormulaPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditFormulaPresenter.cs @@ -206,7 +206,7 @@ private IDimension formulaDimension private IDimension rhsDimensionFor(IWithDimension withDimension) { - return _context.DimensionFactory.RHSDimensionFor(withDimension.Dimension); + return _context.DimensionFactory.GetOrAddRHSDimensionFor(withDimension.Dimension); } private void selectFormulaByTypeAndName(Type formulaType, string formulaName) diff --git a/src/MoBi.Presentation/Presenter/EditObserverBuilderPresenter.cs b/src/MoBi.Presentation/Presenter/EditObserverBuilderPresenter.cs index 703852348..a928ddc4c 100644 --- a/src/MoBi.Presentation/Presenter/EditObserverBuilderPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditObserverBuilderPresenter.cs @@ -28,7 +28,7 @@ public interface IEditObserverBuilderPresenter : IPresenter { - IEnumerable AllDimensions(); + IReadOnlyList AllDimensions(); void UpdateDimension(IDimension newDimension); } @@ -83,7 +83,7 @@ public void Edit(TObserverBuilder observerBuilder) public IBuildingBlock BuildingBlock { - get { return _buildingBlock; } + get => _buildingBlock; set { _buildingBlock = value; @@ -109,9 +109,9 @@ protected override void FormulaChanged() protected abstract ObserverBuilderDTO MapFrom(TObserverBuilder observerBuilder); - public IEnumerable AllDimensions() + public IReadOnlyList AllDimensions() { - return _context.DimensionFactory.Dimensions; + return _context.DimensionFactory.DimensionsSortedByName; } public void UpdateDimension(IDimension newDimension) diff --git a/src/MoBi.Presentation/Presenter/EditOutputSchemaPresenter.cs b/src/MoBi.Presentation/Presenter/EditOutputSchemaPresenter.cs index 7b7183c1a..8bf6a1633 100644 --- a/src/MoBi.Presentation/Presenter/EditOutputSchemaPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditOutputSchemaPresenter.cs @@ -52,7 +52,7 @@ private void bindToView() public void Edit(IMoBiSimulation simulation) { _simulation = simulation; - Edit(_simulation.Settings); + Edit(_simulation.SimulationSettings); } public void Edit(ISimulationSettings simulationSettings) diff --git a/src/MoBi.Presentation/Presenter/EditParameterListPresenter.cs b/src/MoBi.Presentation/Presenter/EditParameterListPresenter.cs index cef611f52..a688a2739 100644 --- a/src/MoBi.Presentation/Presenter/EditParameterListPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditParameterListPresenter.cs @@ -18,12 +18,13 @@ namespace MoBi.Presentation.Presenter { - public class EditParameterListPresenter : AbstractParameterBasePresenter, IEditParameterListPresenter + public class EditParameterListPresenter : AbstractParameterBasePresenter, + IEditParameterListPresenter { private readonly IViewItemContextMenuFactory _viewItemContextMenuFactory; private readonly IParameterToParameterDTOMapper _parameterDTOMapper; - private IEnumerable _parameters; private readonly List _parameterDTOs = new List(); + public IEnumerable EditedParameters { get; private set; } public EditParameterListPresenter( IEditParameterListView view, @@ -39,7 +40,7 @@ public EditParameterListPresenter( _viewItemContextMenuFactory = viewItemContextMenuFactory; _parameterDTOMapper = parameterDTOMapper; } - + public void ShowContextMenu(IViewItem viewItem, Point popupLocation) { var contextMenu = _viewItemContextMenuFactory.CreateFor(viewItem, this); @@ -59,25 +60,24 @@ public void Edit(IEnumerable parameters) { releaseParameters(); - _parameters = parameters; - _parameterDTOs.AddRange(_parameters.MapAllUsing(_parameterDTOMapper).Cast()); + EditedParameters = parameters; + _parameterDTOs.AddRange(EditedParameters.MapAllUsing(_parameterDTOMapper).Cast()); _view.BindTo(_parameterDTOs); - EnumHelper.AllValuesFor().Each(updateColumnVisibility); + EnumHelper.AllValuesFor().Each(updateColumnVisibility); } - private void updateColumnVisibility(PathElement pathElement) + private void updateColumnVisibility(PathElementId pathElement) { SetVisibility(pathElement, !_parameterDTOs.HasOnlyEmptyValuesAt(pathElement)); } - public void SetVisibility(PathElement pathElement, bool isVisible) + public void SetVisibility(PathElementId pathElement, bool isVisible) { View.SetVisibility(pathElement, isVisible); } - public virtual IReadOnlyList SelectedParameters { get => ParametersFrom(_view.SelectedParameters).ToList(); @@ -90,8 +90,6 @@ public virtual IReadOnlyList SelectedParameters } } - public IEnumerable EditedParameters => _parameters; - public override void ReleaseFrom(IEventPublisher eventPublisher) { base.ReleaseFrom(eventPublisher); diff --git a/src/MoBi.Presentation/Presenter/EditParameterListPresenterExtensions.cs b/src/MoBi.Presentation/Presenter/EditParameterListPresenterExtensions.cs index fd48c66bd..0b1617bd8 100644 --- a/src/MoBi.Presentation/Presenter/EditParameterListPresenterExtensions.cs +++ b/src/MoBi.Presentation/Presenter/EditParameterListPresenterExtensions.cs @@ -10,37 +10,37 @@ public static class EditParameterListPresenterExtensions public static void ConfigureForReaction(this IEditParameterListPresenter presenter) { var view = presenter.View; - var captions = new Dictionary {{PathElement.TopContainer, ObjectTypes.Reaction}}; + var captions = new Dictionary {{ PathElementId.TopContainer, ObjectTypes.Reaction}}; view.SetCaptions(captions); - view.SetVisibility(PathElement.BottomCompartment, isVisible: false); - view.SetVisibility(PathElement.Container, isVisible: false); - view.SetVisibility(PathElement.Molecule, isVisible: false); + view.SetVisibility(PathElementId.BottomCompartment, isVisible: false); + view.SetVisibility(PathElementId.Container, isVisible: false); + view.SetVisibility(PathElementId.Molecule, isVisible: false); } public static void ConfigureForEvent(this IEditParameterListPresenter presenter) { var view = presenter.View; - view.SetVisibility(PathElement.Molecule, isVisible: false); + view.SetVisibility(PathElementId.Molecule, isVisible: false); } public static void ConfigureForMolecule(this IEditParameterListPresenter presenter) { var view = presenter.View; - var captions = new Dictionary + var captions = new Dictionary { - {PathElement.TopContainer, AppConstants.Captions.Molecule}, - {PathElement.Container, $"{ObjectTypes.TransporterMoleculeContainer}/{ObjectTypes.InteractionContainer}"}, - {PathElement.BottomCompartment, ObjectTypes.ActiveTransport} + {PathElementId.TopContainer, AppConstants.Captions.Molecule}, + {PathElementId.Container, $"{ObjectTypes.TransporterMoleculeContainer}/{ObjectTypes.InteractionContainer}"}, + {PathElementId.BottomCompartment, ObjectTypes.ActiveTransport} }; view.SetCaptions(captions); - view.SetVisibility(PathElement.Molecule, isVisible: false); + view.SetVisibility(PathElementId.Molecule, isVisible: false); } public static void ShowNameColumn(this IEditParameterListPresenter presenter) { var view = presenter.View; - view.SetVisibility(PathElement.Name, isVisible: true); + view.SetVisibility(PathElementId.Name, isVisible: true); } } } \ No newline at end of file diff --git a/src/MoBi.Presentation/Presenter/EditParameterPresenter.cs b/src/MoBi.Presentation/Presenter/EditParameterPresenter.cs index 5fdb0603f..5f13842cf 100644 --- a/src/MoBi.Presentation/Presenter/EditParameterPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditParameterPresenter.cs @@ -1,13 +1,8 @@ using System.Collections.Generic; using System.Linq; using MoBi.Assets; -using OSPSuite.Core.Commands.Core; -using OSPSuite.Utility; -using OSPSuite.Utility.Events; -using OSPSuite.Utility.Extensions; using MoBi.Core.Commands; using MoBi.Core.Domain.Model; -using MoBi.Core.Helper; using MoBi.Core.Services; using MoBi.Presentation.DTO; using MoBi.Presentation.Mappers; @@ -16,12 +11,16 @@ using MoBi.Presentation.Tasks.Edit; using MoBi.Presentation.Tasks.Interaction; using MoBi.Presentation.Views; +using OSPSuite.Core.Commands.Core; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Domain.UnitSystem; using OSPSuite.Core.Services; using OSPSuite.Presentation.Presenters; +using OSPSuite.Utility; +using OSPSuite.Utility.Events; +using OSPSuite.Utility.Extensions; namespace MoBi.Presentation.Presenter { @@ -30,7 +29,7 @@ public interface IEditParameterPresenter : IEditPresenter, ICreatePresenter { void SetUseRHSFormula(bool useRHS); - IEnumerable AllDimensions(); + IReadOnlyList AllDimensions(); void SetDimension(IDimension dimension); IEnumerable LocalEntitiesToReference { set; } bool CanSetBuildMode { set; } @@ -74,7 +73,7 @@ public interface IEditParameterPresenter : IEditPresenter, void SetName(ParameterDTO parameterDTO, string newName); /// - /// Build modes that can be used in this use case + /// Build modes that can be used in this use case /// IEnumerable ParameterBuildModes { get; set; } @@ -101,19 +100,19 @@ public class EditParameterPresenter : AbstractEntityEditPresenter ParameterBuildModes { get; set; } public bool WarnOnBuildModeChange { get; set; } - public EditParameterPresenter(IEditParameterView view, - IEditFormulaPresenter editValueFormulaPresenter, + public EditParameterPresenter(IEditParameterView view, + IEditFormulaPresenter editValueFormulaPresenter, IParameterToParameterDTOMapper parameterMapper, - IEditFormulaPresenter editRhsFormulaPresenter, - IInteractionTaskContext interactionTaskContext, - IEntityTask entityTask, - IGroupRepository groupRepository, + IEditFormulaPresenter editRhsFormulaPresenter, + IInteractionTaskContext interactionTaskContext, + IEntityTask entityTask, + IGroupRepository groupRepository, IEditTaskFor editTasks, - IInteractionTasksForParameter parameterTask, - IContextSpecificReferencesRetriever contextSpecificReferencesRetriever, + IInteractionTasksForParameter parameterTask, + IContextSpecificReferencesRetriever contextSpecificReferencesRetriever, IFavoriteTask favoriteTask, IEditValueOriginPresenter editValueOriginPresenter - ) + ) : base(view) { _editValueFormulaPresenter = editValueFormulaPresenter; @@ -144,16 +143,6 @@ IEditValueOriginPresenter editValueOriginPresenter _editValueOriginPresenter.ShowCaption = false; } - public void SetPropertyValueFromView(string propertyName, TProp newValue, TProp oldValue) - { - if (propertyName.Equals(_parameter.PropertyName(p => p.BuildMode))) - { - _interactionTaskContext.DialogCreator.MessageBoxInfo(AppConstants.Validation.ChangeBuildModeWarning); - } - - AddCommand(new EditObjectBasePropertyInBuildingBlockCommand(propertyName, newValue, oldValue, _parameter, BuildingBlock).Run(_interactionTaskContext.Context)); - } - public void SetIsFavorite(bool isFavorite) { _favoriteTask.SetParameterFavorite(_parameter, isFavorite); @@ -166,15 +155,17 @@ public void RenameParameter() public void SetDescription(ParameterDTO parameterDTO, string newDescription) { - AddCommand(_parameterTask.SetDescriptionForParameter(parameterDTO.Parameter, newDescription, BuildingBlock).Run(_interactionTaskContext.Context)); + AddCommand(_parameterTask.SetDescriptionForParameter(parameterDTO.Parameter, newDescription, BuildingBlock) + .Run(_interactionTaskContext.Context)); } public void SetBuildMode(ParameterDTO parameterDTO, ParameterBuildMode newBuildMode) { - if (WarnOnBuildModeChange) + if (WarnOnBuildModeChange) _interactionTaskContext.DialogCreator.MessageBoxInfo(AppConstants.Validation.ChangeBuildModeWarning); - AddCommand(_parameterTask.SetBuildModeForParameter(parameterDTO.Parameter, newBuildMode, BuildingBlock).Run(_interactionTaskContext.Context)); + AddCommand(_parameterTask.SetBuildModeForParameter(parameterDTO.Parameter, newBuildMode, BuildingBlock) + .Run(_interactionTaskContext.Context)); } public void SetName(ParameterDTO parameterDTO, string newName) @@ -212,7 +203,8 @@ public override void Edit(IParameter parameter, IEnumerable existin { _parameter = parameter; _editValueFormulaPresenter.Init(_parameter, BuildingBlock); - _editValueFormulaPresenter.ReferencePresenter.Init(_contextSpecificReferencesRetriever.RetrieveLocalReferencePoint(parameter), _contextSpecificReferencesRetriever.RetrieveFor(_parameter, BuildingBlock), _parameter); + _editValueFormulaPresenter.ReferencePresenter.Init(_contextSpecificReferencesRetriever.RetrieveLocalReferencePoint(parameter), + _contextSpecificReferencesRetriever.RetrieveFor(_parameter, BuildingBlock), _parameter); _editValueOriginPresenter.Edit(parameter); if (hasRHS(parameter)) initRHSPresenter(); @@ -236,7 +228,8 @@ private static bool hasRHS(IParameter parameter) private void initRHSPresenter() { _editRHSFormulaPresenter.Init(_parameter, BuildingBlock); - _editRHSFormulaPresenter.ReferencePresenter.Init(_contextSpecificReferencesRetriever.RetrieveLocalReferencePoint(_parameter), _contextSpecificReferencesRetriever.RetrieveFor(_parameter, BuildingBlock), _parameter); + _editRHSFormulaPresenter.ReferencePresenter.Init(_contextSpecificReferencesRetriever.RetrieveLocalReferencePoint(_parameter), + _contextSpecificReferencesRetriever.RetrieveFor(_parameter, BuildingBlock), _parameter); } public override object Subject => _parameter; @@ -294,14 +287,11 @@ public void SetGroup(IGroup group) _parameterDTO.Group = group; } - public string DisplayFor(IGroup group) - { - return group.FullName; - } + public string DisplayFor(IGroup group) => @group.FullName; - public IEnumerable AllDimensions() + public IReadOnlyList AllDimensions() { - return _interactionTaskContext.Context.DimensionFactory.Dimensions; + return _interactionTaskContext.Context.DimensionFactory.DimensionsSortedByName; } private void addCommandToRun(ICommand command) @@ -331,6 +321,5 @@ public override bool CanClose return !_view.HasError && _editValueFormulaPresenter.CanClose; } } - } } \ No newline at end of file diff --git a/src/MoBi.Presentation/Presenter/EditParametersInContainerPresenter.cs b/src/MoBi.Presentation/Presenter/EditParametersInContainerPresenter.cs index 2875928ef..9924e14cb 100644 --- a/src/MoBi.Presentation/Presenter/EditParametersInContainerPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditParametersInContainerPresenter.cs @@ -104,7 +104,6 @@ public void Edit(IContainer container) _view.ParentName = container.Name; createParameterCache(_getParametersFunc(container)); showParameters(); - setupEditPresenter(_parameters.FirstOrDefault()); } public override void ReleaseFrom(IEventPublisher eventPublisher) @@ -162,8 +161,10 @@ private ParameterDTO dtoFor(IParameter parameter) private void showParameters() { - var parametersToShowDTO = _allParametersDTO.Where(shouldShowParameter); + var parametersToShowDTO = _allParametersDTO.Where(shouldShowParameter).ToList(); _view.BindTo(parametersToShowDTO); + setupEditPresenter(parametersToShowDTO.FirstOrDefault()?.Parameter); + } private bool shouldShowParameter(ParameterDTO parameterDTO) diff --git a/src/MoBi.Presentation/Presenter/EditSimulationPresenter.cs b/src/MoBi.Presentation/Presenter/EditSimulationPresenter.cs index 87370363b..a63bad04c 100644 --- a/src/MoBi.Presentation/Presenter/EditSimulationPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditSimulationPresenter.cs @@ -12,8 +12,8 @@ using OSPSuite.Core.Chart; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Data; +using OSPSuite.Core.Services; using OSPSuite.Presentation.Presenters; -using OSPSuite.Presentation.Services; using OSPSuite.Utility.Collections; using OSPSuite.Utility.Events; using OSPSuite.Utility.Extensions; diff --git a/src/MoBi.Presentation/Presenter/EditSolverSettingsPresenter.cs b/src/MoBi.Presentation/Presenter/EditSolverSettingsPresenter.cs index ce7f85ac7..7d323cfd1 100644 --- a/src/MoBi.Presentation/Presenter/EditSolverSettingsPresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditSolverSettingsPresenter.cs @@ -65,7 +65,7 @@ private IMoBiCommand createEditCommandFor(string name, object newValue, object o public void Edit(IMoBiSimulation simulation) { _simulation = simulation; - Edit(_simulation.Settings); + Edit(_simulation.SimulationSettings); } public void Edit(ISimulationSettings simulationSettings) diff --git a/src/MoBi.Presentation/Presenter/EditSpatialStructurePresenter.cs b/src/MoBi.Presentation/Presenter/EditSpatialStructurePresenter.cs index 80846af17..2ff9b9119 100644 --- a/src/MoBi.Presentation/Presenter/EditSpatialStructurePresenter.cs +++ b/src/MoBi.Presentation/Presenter/EditSpatialStructurePresenter.cs @@ -7,6 +7,7 @@ using MoBi.Presentation.Presenter.SpaceDiagram; using MoBi.Presentation.Views; using OSPSuite.Core.Domain; +using OSPSuite.Core.Services; using OSPSuite.Presentation.Presenters; using OSPSuite.Presentation.Services; using OSPSuite.Presentation.Views; diff --git a/src/MoBi.Presentation/Presenter/HierarchicalSimulationPresenter.cs b/src/MoBi.Presentation/Presenter/HierarchicalSimulationPresenter.cs index 707b4648c..74e7920bf 100644 --- a/src/MoBi.Presentation/Presenter/HierarchicalSimulationPresenter.cs +++ b/src/MoBi.Presentation/Presenter/HierarchicalSimulationPresenter.cs @@ -73,7 +73,7 @@ public void Edit(IMoBiSimulation simulation) _view.AddNode(_favoritesNode); _view.AddNode(_userDefinedNode); - var roots = new List {_simulationSettingsMapper.MapFrom(simulation.Settings)}; + var roots = new List {_simulationSettingsMapper.MapFrom(simulation.SimulationSettings) }; roots.AddRange(rootContainers()); _view.Show(roots); diff --git a/src/MoBi.Presentation/Presenter/IEditParameterListPresenter.cs b/src/MoBi.Presentation/Presenter/IEditParameterListPresenter.cs index 953369e2f..605e7a7a2 100644 --- a/src/MoBi.Presentation/Presenter/IEditParameterListPresenter.cs +++ b/src/MoBi.Presentation/Presenter/IEditParameterListPresenter.cs @@ -1,5 +1,4 @@ -using System.Collections; -using System.Collections.Generic; +using System.Collections.Generic; using MoBi.Presentation.DTO; using MoBi.Presentation.Views; using OSPSuite.Core.Domain; @@ -12,7 +11,7 @@ public interface IEditParameterListPresenter : IParameterPresenter, IPresenterWi { void GoTo(ParameterDTO parameterDTO); void Edit(IEnumerable parameters); - void SetVisibility(PathElement pathElement, bool isVisible); + void SetVisibility(PathElementId pathElement, bool isVisible); IEnumerable EditedParameters { get; } IReadOnlyList SelectedParameters { get; set; } } diff --git a/src/MoBi.Presentation/Presenter/IParameterPresenter.cs b/src/MoBi.Presentation/Presenter/IParameterPresenter.cs index 4c7f1d687..df9b76cae 100644 --- a/src/MoBi.Presentation/Presenter/IParameterPresenter.cs +++ b/src/MoBi.Presentation/Presenter/IParameterPresenter.cs @@ -8,11 +8,11 @@ namespace MoBi.Presentation.Presenter { public interface IParameterPresenter : IPresenterWithFormulaCache, ICommandCollectorPresenter { - void SetParamterUnit(IParameterDTO parameterDTO, Unit displayUnit); + void SetParameterUnit(IParameterDTO parameterDTO, Unit displayUnit); bool IsFixedValue(IParameterDTO parameterDTO); void OnParameterValueSet(IParameterDTO parameterDTO, double valueInGuiUnit); void OnParameterValueOriginSet(IParameterDTO parameterDTO, ValueOrigin valueOrigin); - IEnumerable GetDimensions(); + IReadOnlyList GetDimensions(); void SetIsFavorite(IParameterDTO parameterDTO, bool isFavorite); void ResetValueFor(IParameterDTO parameterDTO); } diff --git a/src/MoBi.Presentation/Presenter/Main/MenuAndToolBarPresenter.cs b/src/MoBi.Presentation/Presenter/Main/MenuAndToolBarPresenter.cs index 5785b4cb6..14e91c156 100644 --- a/src/MoBi.Presentation/Presenter/Main/MenuAndToolBarPresenter.cs +++ b/src/MoBi.Presentation/Presenter/Main/MenuAndToolBarPresenter.cs @@ -14,12 +14,12 @@ using OSPSuite.Core.Domain.SensitivityAnalyses; using OSPSuite.Core.Events; using OSPSuite.Core.Journal; -using OSPSuite.Presentation.Events; using OSPSuite.Presentation.Presenters.Main; using OSPSuite.Presentation.Repositories; using OSPSuite.Presentation.Services; using OSPSuite.Presentation.Views; using OSPSuite.Assets; +using OSPSuite.Presentation.Presenters.Events; namespace MoBi.Presentation.Presenter.Main { @@ -93,8 +93,8 @@ protected override void AddRibbonPages() initializeDynamicPages(); - _view.AddQuickAcccessButton(_menuBarItemRepository[MenuBarItemIds.OpenProject]); - _view.AddQuickAcccessButton(_menuBarItemRepository[MenuBarItemIds.SaveProject]); + _view.AddQuickAccessButton(_menuBarItemRepository[MenuBarItemIds.OpenProject]); + _view.AddQuickAccessButton(_menuBarItemRepository[MenuBarItemIds.SaveProject]); _view.AddPageHeaderItemLinks(_menuBarItemRepository[MenuBarItemIds.Help]); } diff --git a/src/MoBi.Presentation/Presenter/MoBiMainViewPresenter.cs b/src/MoBi.Presentation/Presenter/MoBiMainViewPresenter.cs index 95d8e7777..8e9cbc369 100644 --- a/src/MoBi.Presentation/Presenter/MoBiMainViewPresenter.cs +++ b/src/MoBi.Presentation/Presenter/MoBiMainViewPresenter.cs @@ -1,4 +1,3 @@ -using Castle.Core.Configuration; using MoBi.Assets; using MoBi.Core; using OSPSuite.TeXReporting.Events; diff --git a/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtEvent.cs b/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtEvent.cs index 91fa95dd2..5edfc01ec 100644 --- a/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtEvent.cs +++ b/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtEvent.cs @@ -74,7 +74,7 @@ protected override IFormulaUsablePath CreateRelativePath(IFormulaUsable formulaU else { //Molecule replace With Amount - path = CreateFormulaUsablePathFrom(new[] {ObjectPath.PARENT_CONTAINER, formulaUsable.Name}, formulaUsable.Name, Constants.Dimension.AMOUNT); + path = CreateFormulaUsablePathFrom(new[] {ObjectPath.PARENT_CONTAINER, formulaUsable.Name}, formulaUsable.Name, Constants.Dimension.MOLAR_AMOUNT); } correctPath(path, refObject as IContainer); } diff --git a/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtTransport.cs b/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtTransport.cs index d48d8dc79..b4a92e785 100644 --- a/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtTransport.cs +++ b/src/MoBi.Presentation/Presenter/ObjectPathCreatorAtTransport.cs @@ -60,7 +60,7 @@ public override ReferenceDTO CreateMoleculePath(DummyMoleculeContainerDTO dtoObj return new ReferenceDTO { - Path = CreateFormulaUsablePathFrom(new[] {firstPathElemnt, moleculeElement}, AppConstants.AmountAlias, Constants.Dimension.AMOUNT) + Path = CreateFormulaUsablePathFrom(new[] {firstPathElemnt, moleculeElement}, AppConstants.AmountAlias, Constants.Dimension.MOLAR_AMOUNT) }; } diff --git a/src/MoBi.Presentation/Presenter/ObjectPathCreatorBase.cs b/src/MoBi.Presentation/Presenter/ObjectPathCreatorBase.cs index 7cb000cac..f212df660 100644 --- a/src/MoBi.Presentation/Presenter/ObjectPathCreatorBase.cs +++ b/src/MoBi.Presentation/Presenter/ObjectPathCreatorBase.cs @@ -173,7 +173,7 @@ public virtual ReferenceDTO CreateMoleculePath(DummyMoleculeContainerDTO dtoObje } path.Alias = _aliasCreator.CreateAliasFrom(dtoObjectBase.Name); - path.Dimension = _context.DimensionFactory.Dimension(Constants.Dimension.AMOUNT); + path.Dimension = _context.DimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT); path.Add(dtoObjectBase.Name); return new ReferenceDTO {Path = path}; @@ -183,7 +183,7 @@ private ReferenceDTO createMoleculeReference() { return new ReferenceDTO { - Path = CreateFormulaUsablePathFrom(new [] { ObjectPath.PARENT_CONTAINER }, AppConstants.AmountAlias, Constants.Dimension.AMOUNT) + Path = CreateFormulaUsablePathFrom(new [] { ObjectPath.PARENT_CONTAINER }, AppConstants.AmountAlias, Constants.Dimension.MOLAR_AMOUNT) }; } diff --git a/src/MoBi.Presentation/Presenter/ObserverBuilderListPresenter.cs b/src/MoBi.Presentation/Presenter/ObserverBuilderListPresenter.cs index 490809345..1e3fcc41c 100644 --- a/src/MoBi.Presentation/Presenter/ObserverBuilderListPresenter.cs +++ b/src/MoBi.Presentation/Presenter/ObserverBuilderListPresenter.cs @@ -30,7 +30,7 @@ public interface IObserverBuilderListPresenter : IPresenterWithContextMenu GetDimensions(); + IReadOnlyList GetDimensions(); void SetPropertyValueFromViewFor(IObjectBaseDTO dtoObjectBase, string propertyName, T newValue, T oldValue); IEditObserverBuildingBlockPresenter Parent { get; set; } void Select(ObserverBuilderDTO dto); @@ -72,10 +72,7 @@ public IEnumerable GetFormulas() public IBuildingBlock BuildingBlock { get; set; } - public IFormulaCache FormulaCache - { - get { return BuildingBlock.FormulaCache; } - } + public IFormulaCache FormulaCache => BuildingBlock.FormulaCache; public void SetFormula(ObserverBuilderDTO dtoObserverBuilder, FormulaBuilderDTO newValue, FormulaBuilderDTO oldValue) { @@ -85,10 +82,7 @@ public void SetFormula(ObserverBuilderDTO dtoObserverBuilder, FormulaBuilderDTO AddCommand(new EditObjectBasePropertyInBuildingBlockCommand("Formula", newFormula, oldFormula, observerBuilder, BuildingBlock).Run(_context)); // } - public IEnumerable GetDimensions() - { - return _dimensionFactory.Dimensions; - } + public IReadOnlyList GetDimensions() => _dimensionFactory.DimensionsSortedByName; public void SetPropertyValueFromViewFor(IObjectBaseDTO dtoObserverBuilder, string propertyName, T newValue, T oldValue) { diff --git a/src/MoBi.Presentation/Presenter/SolverMessagePresenter.cs b/src/MoBi.Presentation/Presenter/SolverMessagePresenter.cs index 6214af368..e1d490d34 100644 --- a/src/MoBi.Presentation/Presenter/SolverMessagePresenter.cs +++ b/src/MoBi.Presentation/Presenter/SolverMessagePresenter.cs @@ -1,8 +1,8 @@ using System.Collections.Generic; using MoBi.Assets; using MoBi.Presentation.Views; -using OSPSuite.Core.Domain; using OSPSuite.Presentation.Presenters; +using OSPSuite.SimModel; namespace MoBi.Presentation.Presenter { diff --git a/src/MoBi.Presentation/Properties/AssemblyInfo.cs b/src/MoBi.Presentation/Properties/AssemblyInfo.cs deleted file mode 100644 index be02b92fb..000000000 --- a/src/MoBi.Presentation/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("MoBiPresentation")] diff --git a/src/MoBi.Presentation/Repositories/MenuBarItemRepository.cs b/src/MoBi.Presentation/Repositories/MenuBarItemRepository.cs index 5e308fa6e..ba8043645 100644 --- a/src/MoBi.Presentation/Repositories/MenuBarItemRepository.cs +++ b/src/MoBi.Presentation/Repositories/MenuBarItemRepository.cs @@ -13,8 +13,8 @@ using OSPSuite.Presentation.Presenters.ContextMenus; using OSPSuite.Presentation.UICommands; using OSPSuite.Assets; +using Keys = OSPSuite.Presentation.Core.Keys; using ToolTips = MoBi.Assets.ToolTips; - namespace MoBi.Presentation.Repositories { public class MenuBarItemRepository : OSPSuite.Presentation.Repositories.MenuBarItemRepository @@ -504,7 +504,7 @@ protected override IEnumerable AllMenuBarItems() yield return ParameterIdentificationMenuBarButtons.StopParameterIdentification(MenuBarItemIds.StopParameterIdentification); yield return ParameterIdentificationMenuBarButtons.TimeProfileParameterIdentification(MenuBarItemIds.TimeProfileParameterIdentification); yield return ParameterIdentificationMenuBarButtons.PredictedVsObservedParameterIdentification(MenuBarItemIds.PredictedVsObservedParameterIdentification); - yield return ParameterIdentificationMenuBarButtons.ResidualsVsTimeParameterIdentifcation(MenuBarItemIds.ResidualsVsTimeParameterIdentification); + yield return ParameterIdentificationMenuBarButtons.ResidualsVsTimeParameterIdentification(MenuBarItemIds.ResidualsVsTimeParameterIdentification); yield return ParameterIdentificationMenuBarButtons.ResidualHistogramParameterIdentification(MenuBarItemIds.ResidualHistogramParameterIdentification); yield return ParameterIdentificationMenuBarButtons.CorrelationMatrixParameterIdentification(MenuBarItemIds.CorrelationMatrixParameterIdentification); yield return ParameterIdentificationMenuBarButtons.CovarianceMatrixParameterIdentification(MenuBarItemIds.CovarianceMatrixParameterIdentification); diff --git a/src/MoBi.Presentation/Serialization/Xml/Serializer/MergeConflictViewSettingsXmlSerializer.cs b/src/MoBi.Presentation/Serialization/Xml/Serializer/MergeConflictViewSettingsXmlSerializer.cs index 2a5c7f34c..bf9d6549c 100644 --- a/src/MoBi.Presentation/Serialization/Xml/Serializer/MergeConflictViewSettingsXmlSerializer.cs +++ b/src/MoBi.Presentation/Serialization/Xml/Serializer/MergeConflictViewSettingsXmlSerializer.cs @@ -1,4 +1,3 @@ - using OSPSuite.Presentation.Serialization; using MergeConflictViewSettings = MoBi.Presentation.Settings.MergeConflictViewSettings; diff --git a/src/MoBi.Presentation/Serialization/Xml/Serializer/MoBiXmlSerializerRepository.cs b/src/MoBi.Presentation/Serialization/Xml/Serializer/MoBiXmlSerializerRepository.cs index e61e393b1..b4bf76259 100644 --- a/src/MoBi.Presentation/Serialization/Xml/Serializer/MoBiXmlSerializerRepository.cs +++ b/src/MoBi.Presentation/Serialization/Xml/Serializer/MoBiXmlSerializerRepository.cs @@ -4,6 +4,8 @@ using OSPSuite.Core.Serialization.Xml; using OSPSuite.Presentation.Serialization; using OSPSuite.Presentation.Serialization.Extensions; +//using OSPSuite.Presentation.Serialization; +//using OSPSuite.Presentation.Serialization.Extensions; using OSPSuite.Serializer; using OSPSuite.Serializer.Attributes; diff --git a/src/MoBi.Engine/Tasks/DimensionValidator.cs b/src/MoBi.Presentation/Tasks/DimensionValidator.cs similarity index 64% rename from src/MoBi.Engine/Tasks/DimensionValidator.cs rename to src/MoBi.Presentation/Tasks/DimensionValidator.cs index 07a32aba3..7e2a831cd 100644 --- a/src/MoBi.Engine/Tasks/DimensionValidator.cs +++ b/src/MoBi.Presentation/Tasks/DimensionValidator.cs @@ -4,23 +4,20 @@ using System.Threading.Tasks; using MoBi.Assets; using MoBi.Core.Domain.Services; -using MoBi.Engine.Extensions; +using MoBi.Core.Extensions; using MoBi.Presentation.Settings; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Core.Extensions; using OSPSuite.FuncParser; using OSPSuite.Utility.Extensions; -using static MoBi.Assets.AppConstants.Parameters; -using static MoBi.Assets.AppConstants.DimensionNames; -namespace MoBi.Engine.Tasks +namespace MoBi.Presentation.Tasks { public class DimensionValidator : IDimensionValidator { - private readonly IDimensionParser _dimensionParser; + private readonly DimensionParser _dimensionParser; private readonly IObjectPathFactory _objectPathFactory; private readonly IUserSettings _userSettings; private bool _checkDimensions; @@ -29,35 +26,35 @@ public class DimensionValidator : IDimensionValidator private readonly IDictionary _hiddenNotifications; private bool _checkRules; - public DimensionValidator(IDimensionParser dimensionParser, IObjectPathFactory objectPathFactory, IUserSettings userSettings) + public DimensionValidator(DimensionParser dimensionParser, IObjectPathFactory objectPathFactory, IUserSettings userSettings) { _dimensionParser = dimensionParser; _objectPathFactory = objectPathFactory; _userSettings = userSettings; _hiddenNotifications = new Dictionary { - {SURFACE_AREA_INTERSTITIAL_INTRACELLULAR, dimensionAreaMessage}, - {BSA, dimensionAreaMessage}, - {PERMEABILITY, dimensionVelocityMessage}, - {SPECIFIC_INTESTINAL_PERMEABILITY_TRANSCELLULAR, dimensionVelocityMessage}, - {RADIUS_SOLUTE, dimensionValidationMessage(LENGTH)}, - {SECRETION_OF_LIQUID, dimensionFlowMessage}, + {AppConstants.Parameters.SURFACE_AREA_INTERSTITIAL_INTRACELLULAR, dimensionAreaMessage}, + {AppConstants.Parameters.BSA, dimensionAreaMessage}, + {AppConstants.Parameters.PERMEABILITY, dimensionVelocityMessage}, + {AppConstants.Parameters.SPECIFIC_INTESTINAL_PERMEABILITY_TRANSCELLULAR, dimensionVelocityMessage}, + {AppConstants.Parameters.RADIUS_SOLUTE, dimensionValidationMessage(AppConstants.DimensionNames.LENGTH)}, + {AppConstants.Parameters.SECRETION_OF_LIQUID, dimensionFlowMessage}, {Constants.Parameters.VOLUME, $"Organism|Saliva|Volume' {dimensionValidationMessage(Constants.Dimension.VOLUME)}"}, - {RELEASE_RATE_OF_TABLET, dimensionValidationMessage(Constants.Dimension.AMOUNT_PER_TIME)}, - {V_MAX, dimensionValidationMessage(Constants.Dimension.MOLAR_CONCENTRATION_PER_TIME)}, - {LYMPH_FLOW_RATE, dimensionFlowMessage}, - {LYMPH_FLOW_RATE_INCL_MUCOSA, dimensionFlowMessage}, - {FLUID_RECIRCULATION_FLOW_RATE, dimensionFlowMessage}, - {FLUID_RECIRCULATION_FLOW_RATE_INCL_MUCOSA, dimensionFlowMessage}, - {CALCULATED_SPECIFIC_INTESTINAL_PERMEABILITY_TRANSCELLULAR, dimensionVelocityMessage}, - {EFFECTIVE_MOLECULAR_WEIGHT, "Arguments of MINUS-function must have the same dimension (Formula: MW - F * 0.000000017 - Cl * 0.000000022 - Br * 0.000000062 - I * 0.000000098)"} + {AppConstants.Parameters.RELEASE_RATE_OF_TABLET, dimensionValidationMessage(Constants.Dimension.AMOUNT_PER_TIME)}, + {AppConstants.Parameters.V_MAX, dimensionValidationMessage(Constants.Dimension.MOLAR_CONCENTRATION_PER_TIME)}, + {AppConstants.Parameters.LYMPH_FLOW_RATE, dimensionFlowMessage}, + {AppConstants.Parameters.LYMPH_FLOW_RATE_INCL_MUCOSA, dimensionFlowMessage}, + {AppConstants.Parameters.FLUID_RECIRCULATION_FLOW_RATE, dimensionFlowMessage}, + {AppConstants.Parameters.FLUID_RECIRCULATION_FLOW_RATE_INCL_MUCOSA, dimensionFlowMessage}, + {AppConstants.Parameters.CALCULATED_SPECIFIC_INTESTINAL_PERMEABILITY_TRANSCELLULAR, dimensionVelocityMessage}, + {AppConstants.Parameters.EFFECTIVE_MOLECULAR_WEIGHT, "Arguments of MINUS-function must have the same dimension (Formula: MW - F * 0.000000017 - Cl * 0.000000022 - Br * 0.000000062 - I * 0.000000098)"} }; } private static string dimensionValidationMessage(string dimensionName) => AppConstants.Validation.DoesNotEvaluateTo(dimensionName); - private static string dimensionFlowMessage { get; } = AppConstants.Validation.DoesNotEvaluateTo(FLOW); - private static string dimensionVelocityMessage { get; } = AppConstants.Validation.DoesNotEvaluateTo(VELOCITY); - private static string dimensionAreaMessage { get; } = AppConstants.Validation.DoesNotEvaluateTo(AREA); + private static string dimensionFlowMessage { get; } = AppConstants.Validation.DoesNotEvaluateTo(AppConstants.DimensionNames.FLOW); + private static string dimensionVelocityMessage { get; } = AppConstants.Validation.DoesNotEvaluateTo(AppConstants.DimensionNames.VELOCITY); + private static string dimensionAreaMessage { get; } = AppConstants.Validation.DoesNotEvaluateTo(AppConstants.DimensionNames.AREA); public Task Validate(IContainer container, IBuildConfiguration buildConfiguration) => Validate(new[] {container}, buildConfiguration); @@ -137,13 +134,13 @@ private void checkRHSFormula(IParameter parameter, string displayPath) private void addNotification(NotificationType notificationType, IObjectBase entityToValidate, string notification) { var builder = _buildConfiguration.BuilderFor(entityToValidate); - if (!shouldShowNotifiction(entityToValidate, notification)) + if (!shouldShowNotification(entityToValidate, notification)) return; _result.AddMessage(notificationType, builder, notification); } - private bool shouldShowNotifiction(IObjectBase entityToValidate, string notification) + private bool shouldShowNotification(IObjectBase entityToValidate, string notification) { if (_userSettings.ShowPKSimDimensionProblemWarnings) return true; @@ -170,7 +167,7 @@ private void checkExplicitFormula(IUsingFormula entityUsingFormula, string displ { if (explicitFormula == null) return; - var dimensionInfos = new List(); + var dimensionInfos = new List(); if (isDoubleString(explicitFormula.FormulaString)) return; @@ -180,45 +177,45 @@ private void checkExplicitFormula(IUsingFormula entityUsingFormula, string displ if (!Equals(objectReference.Object.Dimension, pathDim)) addWarning(entityUsingFormula, AppConstants.Validation.ReferenceDimensionMissmatch(displayPath, objectReference, pathDim)); - dimensionInfos.Add(new QuantityDimensionInfo(objectReference.Alias, createDimensionInfoFromBaseRepresentation(objectReference.Object.Dimension.BaseRepresentation))); + dimensionInfos.Add(new QuantityDimensionInformation(objectReference.Alias, createDimensionInfoFromBaseRepresentation(objectReference.Object.Dimension.BaseRepresentation))); } - IFuncParserErrorData ed = new FuncParserErrorData(); - var verifyDimension = _dimensionParser.GetDimensionInfoFor(explicitFormula.FormulaString, dimensionInfos, ed); + var (dimInfo, parseSuccess, calculateDimensionSuccess, errorMessage ) = _dimensionParser.GetDimensionInformationFor(explicitFormula.FormulaString, dimensionInfos); - if (!ed.ErrorNumber.Equals(errNumber.err_OK)) + if (!parseSuccess) { - //ignore some dimension check errors. - //Reason: some formulas are written so that dimension exponents cannot be calculated, e.g. - //x^y where y is not dimensionless. - // - //In this case, err_CANNOTCALC_DIMENSION is returned. - //In all other cases, generate error or warning, depending on the error number returned - - if (ed.ErrorNumber != errNumber.err_CANNOTCALC_DIMENSION || (_userSettings.ShowCannotCalcErrors && ed.ErrorNumber == errNumber.err_CANNOTCALC_DIMENSION)) - { - var notificationType = ed.ErrorNumber.IsOneOf(errNumber.err_DIMENSION, errNumber.err_CANNOTCALC_DIMENSION) - ? NotificationType.Warning - : NotificationType.Error; + addNotification(NotificationType.Error, entityUsingFormula, errorMessage); + return; + } + - addNotification(notificationType, entityUsingFormula, ed.Description); + if (calculateDimensionSuccess) + { + if (!dimInfo.AreEquals(createDimensionInfoFromBaseRepresentation(baseDimensionRepresentation))) + { + addWarning(entityUsingFormula, AppConstants.Validation.FormulaDimensionMismatch(displayPath, explicitFormula.Dimension.Name)); } + + return; } - else if (!verifyDimension.AreEquals(createDimensionInfoFromBaseRepresentation(baseDimensionRepresentation))) + //ignore some dimension check errors. + //Reason: some formulas are written so that dimension exponents cannot be calculated, e.g. + //x^y where y is not dimensionless. + if (_userSettings.ShowCannotCalcErrors) { - addWarning(entityUsingFormula, AppConstants.Validation.FormulaDimensionMismatch(displayPath, explicitFormula.Dimension.Name)); + addWarning(entityUsingFormula, errorMessage); } } - private bool isDoubleString(string stringTocheck) + private bool isDoubleString(string stringToCheck) { - return double.TryParse(stringTocheck, out double value); + return double.TryParse(stringToCheck, out _); } - private DimensionInfo createDimensionInfoFromBaseRepresentation(BaseDimensionRepresentation baseRepresentation) + private DimensionInformation createDimensionInfoFromBaseRepresentation(BaseDimensionRepresentation baseRepresentation) { - return new DimensionInfo(baseRepresentation.LengthExponent, + return new DimensionInformation(baseRepresentation.LengthExponent, baseRepresentation.MassExponent, baseRepresentation.TimeExponent, baseRepresentation.ElectricCurrentExponent, diff --git a/src/MoBi.Presentation/Tasks/Edit/EditTasksForSimulation.cs b/src/MoBi.Presentation/Tasks/Edit/EditTasksForSimulation.cs index 6de37468b..a0da762ad 100644 --- a/src/MoBi.Presentation/Tasks/Edit/EditTasksForSimulation.cs +++ b/src/MoBi.Presentation/Tasks/Edit/EditTasksForSimulation.cs @@ -27,7 +27,9 @@ public interface IEditTasksForSimulation : IEditTaskFor void ExportResultsToExcel(IMoBiSimulation simulation); void ExportResultsToExcel(IMoBiSimulation simulation, DataRepository dataRepository); void RenameResults(IMoBiSimulation simulation, DataRepository dataRepository); - void ExportMatlabDifferentialSystem(IMoBiSimulation simulation); + void ExportODEForMatlab(IMoBiSimulation simulation); + void ExportODEForR(IMoBiSimulation simulation); + void ExportSimulationToCppCode(IMoBiSimulation simulation); void ExportSimModelXml(IMoBiSimulation simulation); void CalculateScaleFactors(IMoBiSimulation simulation); } @@ -37,7 +39,7 @@ public class EditTasksForSimulation : EditTasksForBuildingBlock private readonly ISimulationPersistor _simulationPersistor; private readonly IDialogCreator _dialogCreator; private readonly IModelReportCreator _reportCreator; - private readonly IDataRepositoryTask _dataRepositoryTask; + private readonly IDataRepositoryExportTask _dataRepositoryTask; private readonly ISimModelExporter _simModelExporter; private readonly IDimensionFactory _dimensionFactory; private readonly IParameterIdentificationSimulationPathUpdater _parameterIdentificationSimulationPathUpdater; @@ -46,7 +48,7 @@ public EditTasksForSimulation( IInteractionTaskContext interactionTaskContext, ISimulationPersistor simulationPersistor, IDialogCreator dialogCreator, - IDataRepositoryTask dataRepositoryTask, + IDataRepositoryExportTask dataRepositoryTask, IModelReportCreator reportCreator, ISimModelExporter simModelExporter, IDimensionFactory dimensionFactory, @@ -123,11 +125,25 @@ public void RenameResults(IMoBiSimulation simulation, DataRepository dataReposit addCommand(new RenameSimulationResultsCommand(dataRepository, simulation, newName).Run(_context)); } - public void ExportMatlabDifferentialSystem(IMoBiSimulation simulation) + public void ExportODEForMatlab(IMoBiSimulation simulation) { - var exportFolder = _interactionTask.AskForFolder(AppConstants.Dialog.ExportSimulationMatlabODE, Constants.DirectoryKey.SIM_MODEL_XML); + var exportFolder = _interactionTask.AskForFolder(AppConstants.Dialog.ExportODEForMatlab, Constants.DirectoryKey.SIM_MODEL_XML); if (string.IsNullOrEmpty(exportFolder)) return; - _simModelExporter.ExportODEForMatlab(simulation, exportFolder, MatlabFormulaExportMode.Formula); + _simModelExporter.ExportODEForMatlab(simulation, exportFolder, FormulaExportMode.Formula); + } + + public void ExportODEForR(IMoBiSimulation simulation) + { + var exportFolder = _interactionTask.AskForFolder(AppConstants.Dialog.ExportODEForR, Constants.DirectoryKey.SIM_MODEL_XML); + if (string.IsNullOrEmpty(exportFolder)) return; + _simModelExporter.ExportODEForR(simulation, exportFolder, FormulaExportMode.Formula); + } + + public void ExportSimulationToCppCode(IMoBiSimulation simulation) + { + var exportFolder = _interactionTask.AskForFolder(AppConstants.Dialog.ExportSimulationToCppCode, Constants.DirectoryKey.SIM_MODEL_XML); + if (string.IsNullOrEmpty(exportFolder)) return; + _simModelExporter.ExportCppCode(simulation, exportFolder, FormulaExportMode.Formula); } public void CalculateScaleFactors(IMoBiSimulation simulation) @@ -168,7 +184,7 @@ public void ExportSimModelXml(IMoBiSimulation simulation) { var fileName = _dialogCreator.AskForFileToSave(AppConstants.Captions.Save, AppConstants.Filter.SIM_MODEL_FILE_FILTER, Constants.DirectoryKey.SIM_MODEL_XML, simulation.Name); if (fileName.IsNullOrEmpty()) return; - _simModelExporter.Export(simulation, fileName); + _simModelExporter.ExportSimModelXml(simulation, fileName); } public override void Rename(IMoBiSimulation simulationToRename, IEnumerable existingObjectsInParent, IBuildingBlock buildingBlock) diff --git a/src/MoBi.Presentation/Tasks/FullPathDisplayResolver.cs b/src/MoBi.Presentation/Tasks/FullPathDisplayResolver.cs deleted file mode 100644 index 952222008..000000000 --- a/src/MoBi.Presentation/Tasks/FullPathDisplayResolver.cs +++ /dev/null @@ -1,30 +0,0 @@ -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Mappers; -using OSPSuite.Core.Domain.Services; -using OSPSuite.Presentation.Mappers; - -namespace MoBi.Presentation.Tasks -{ - public class FullPathDisplayResolver : IFullPathDisplayResolver - { - private readonly IQuantityPathToQuantityDisplayPathMapper _quantityDisplayPathMapper; - - public FullPathDisplayResolver(IQuantityPathToQuantityDisplayPathMapper quantityDisplayPathMapper) - { - _quantityDisplayPathMapper = quantityDisplayPathMapper; - } - - public string FullPathFor(IObjectBase objectBase, bool addSimulationName = false) - { - var quantity = objectBase as IQuantity; - if (quantity != null) - return _quantityDisplayPathMapper.DisplayPathAsStringFor(quantity, addSimulationName); - - var entity = objectBase as IEntity; - if (entity != null) - return entity.EntityPath(); - - return objectBase.Name; - } - } -} \ No newline at end of file diff --git a/src/MoBi.Presentation/Tasks/ISimModelManagerFactory.cs b/src/MoBi.Presentation/Tasks/ISimModelManagerFactory.cs deleted file mode 100644 index fb0d20232..000000000 --- a/src/MoBi.Presentation/Tasks/ISimModelManagerFactory.cs +++ /dev/null @@ -1,9 +0,0 @@ -using OSPSuite.Core.Domain.Services; - -namespace MoBi.Presentation.Tasks -{ - public interface ISimModelManagerFactory - { - ISimModelManager Create(); - } -} \ No newline at end of file diff --git a/src/MoBi.Presentation/Tasks/Interaction/InteractionTasksForMoleculeBuildingBlock.cs b/src/MoBi.Presentation/Tasks/Interaction/InteractionTasksForMoleculeBuildingBlock.cs index da0004861..d65e0c446 100644 --- a/src/MoBi.Presentation/Tasks/Interaction/InteractionTasksForMoleculeBuildingBlock.cs +++ b/src/MoBi.Presentation/Tasks/Interaction/InteractionTasksForMoleculeBuildingBlock.cs @@ -2,10 +2,8 @@ using MoBi.Assets; using OSPSuite.Core.Commands.Core; using OSPSuite.Utility.Extensions; -using MoBi.Core; using MoBi.Core.Commands; using MoBi.Core.Domain.Model; -using MoBi.Core.Domain.Services; using MoBi.Core.Events; using MoBi.Core.Exceptions; using MoBi.Core.Helper; @@ -14,7 +12,6 @@ using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Services; -using OSPSuite.Infrastructure.Services; namespace MoBi.Presentation.Tasks.Interaction { diff --git a/src/MoBi.Presentation/Tasks/ObservedDataTask.cs b/src/MoBi.Presentation/Tasks/ObservedDataTask.cs index 3c0235acb..88ac1324d 100644 --- a/src/MoBi.Presentation/Tasks/ObservedDataTask.cs +++ b/src/MoBi.Presentation/Tasks/ObservedDataTask.cs @@ -49,8 +49,15 @@ public class ObservedDataTask : OSPSuite.Core.Domain.Services.ObservedDataTask, private readonly IDimension _molWeightDimension; private readonly IDialogCreator _mobiDialogCreator; - public ObservedDataTask(IDataImporter dataImporter, IDimensionFactory dimensionFactory, IMoBiContext context, - IDialogCreator dialogCreator, IInteractionTask interactionTask, IDataRepositoryTask dataRepositoryTask, IContainerTask containerTask, IObjectTypeResolver objectTypeResolver) : base(dialogCreator, context, dataRepositoryTask, containerTask, objectTypeResolver) + public ObservedDataTask( + IDataImporter dataImporter, + IDimensionFactory dimensionFactory, + IMoBiContext context, + IDialogCreator dialogCreator, + IInteractionTask interactionTask, + IDataRepositoryExportTask dataRepositoryTask, + IContainerTask containerTask, + IObjectTypeResolver objectTypeResolver) : base(dialogCreator, context, dataRepositoryTask, containerTask, objectTypeResolver) { _dataImporter = dataImporter; _mobiDialogCreator = dialogCreator; @@ -127,7 +134,7 @@ public void DeleteAllResultsFromAllSimulation() private static MoBiMacroCommand deleteAllResultsFromSimulationCommand(IMoBiSimulation simulation) { - var macoCommand = new MoBiMacroCommand + var macroCommand = new MoBiMacroCommand { CommandType = Command.CommandTypeDelete, ObjectType = ObjectTypes.ObservedData, @@ -135,17 +142,17 @@ private static MoBiMacroCommand deleteAllResultsFromSimulationCommand(IMoBiSimul }; if (simulation.Results != null) - macoCommand.AddCommand(new ClearResultsCommand(simulation)); + macroCommand.AddCommand(new ClearResultsCommand(simulation)); - simulation.HistoricResults.Each(x => macoCommand.Add(new RemoveHistoricResultFromSimulationCommand(simulation, x))); - return macoCommand; + simulation.HistoricResults.Each(x => macroCommand.Add(new RemoveHistoricResultFromSimulationCommand(simulation, x))); + return macroCommand; } private DataImporterSettings createDataImportSettings() { var settings = new DataImporterSettings { - Icon = ApplicationIcons.MoBi, + IconName = ApplicationIcons.MoBi.IconName, Caption = $"{AppConstants.PRODUCT_NAME} - {AppConstants.Captions.ImportObservedData}" }; settings.AddNamingPatternMetaData(Constants.FILE); @@ -288,7 +295,7 @@ private void addDimensionsTo(ColumnInfo columnInfo, IDimension mainDimension) { var timeDimension = _dimensionFactory.Dimension(CoreConstants.Dimension.TIME); - foreach (var dimension in _dimensionFactory.Dimensions.Where(x => x != timeDimension)) + foreach (var dimension in _dimensionFactory.DimensionsSortedByName.Where(x => x != timeDimension)) { columnInfo.DimensionInfos.Add(new DimensionInfo { @@ -390,7 +397,7 @@ private void addInfoToCategory(MetaDataCategory metaDataCategory, IContainer con var icon = ApplicationIcons.IconByName(container.Icon); if (icon != ApplicationIcons.EmptyIcon) - metaDataCategory.ListOfImages.Add(container.Name, icon); + metaDataCategory.ListOfImages.Add(container.Name, icon.IconName); } private MetaDataCategory createMetaDataCategory(string categoryName, bool isMandatory = false, bool isListOfValuesFixed = false, Action fixedValuesRetriever = null, string description = null) diff --git a/src/MoBi.Presentation/Tasks/OutputSelectionsRetriever.cs b/src/MoBi.Presentation/Tasks/OutputSelectionsRetriever.cs index 3fc43f476..d2d1db0c0 100644 --- a/src/MoBi.Presentation/Tasks/OutputSelectionsRetriever.cs +++ b/src/MoBi.Presentation/Tasks/OutputSelectionsRetriever.cs @@ -33,7 +33,7 @@ public QuantitySelection SelectionFrom(IQuantity quantity) public void UpdatePersistableOutputsIn(IMoBiSimulation simulation) { - if (simulation.Settings == null) + if (simulation.SimulationSettings == null) return; var allPersistableParameters = simulation.Model.Root.GetAllChildren(x => x.Persistable); diff --git a/src/MoBi.Presentation/Tasks/ProjectTask.cs b/src/MoBi.Presentation/Tasks/ProjectTask.cs index 5ad575a33..10432bfd2 100644 --- a/src/MoBi.Presentation/Tasks/ProjectTask.cs +++ b/src/MoBi.Presentation/Tasks/ProjectTask.cs @@ -1,21 +1,18 @@ using System; -using System.Collections.Generic; using MoBi.Assets; -using OSPSuite.Core.Commands.Core; -using OSPSuite.Core.Services; -using OSPSuite.Utility.Extensions; -using MoBi.Core; using MoBi.Core.Domain.Builder; using MoBi.Core.Domain.Model; using MoBi.Core.Exceptions; using MoBi.Core.Services; +using OSPSuite.Core.Commands.Core; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Data; using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Events; using OSPSuite.Core.Serialization.Exchange; +using OSPSuite.Core.Services; using OSPSuite.Presentation.Services; +using OSPSuite.Utility.Extensions; namespace MoBi.Presentation.Tasks { @@ -134,15 +131,6 @@ public SimulationTransfer LoadSimulationTransferDataFromFile(string fileName) { return loadSimulationTransferFromFileUsingDimensionMode(fileName, ReactionDimensionMode.ConcentrationBased); } - catch (NotMatchingSerializationFileException) - { - return new SimulationTransfer - { - Simulation = _serializationTask.Load(fileName), - AllObservedData = new List(), - PkmlVersion = ProjectVersions.V3_0_4 - }; - } } private SimulationTransfer loadSimulationTransferFromFileUsingDimensionMode(string fileName, ReactionDimensionMode dimensionMode) @@ -202,7 +190,7 @@ public bool Save() public bool SaveAs() { - bool defaultNameIsUndefined = string.Equals(Constants.ProjectUndefined, _context.CurrentProject.Name); + bool defaultNameIsUndefined = string.Equals(Constants.PROJECT_UNDEFINED, _context.CurrentProject.Name); var defaultFileName = defaultNameIsUndefined ? string.Empty : _context.CurrentProject.Name; var newFilePath = _dialogCreator.AskForFileToSave(AppConstants.Dialog.AskForSaveProject, diff --git a/src/MoBi.Presentation/Tasks/SimulationRunner.cs b/src/MoBi.Presentation/Tasks/SimulationRunner.cs index 66d6415e9..b1e945ab4 100644 --- a/src/MoBi.Presentation/Tasks/SimulationRunner.cs +++ b/src/MoBi.Presentation/Tasks/SimulationRunner.cs @@ -79,7 +79,7 @@ private bool settingsRequired(IMoBiSimulation simulation, bool defineSettings) if (defineSettings) return true; - if (simulation.Settings == null) + if (simulation.SimulationSettings == null) return true; return !simulation.OutputSelections.HasSelection; @@ -101,17 +101,19 @@ private void startSimulationRun(IMoBiSimulation simulation) { addEvents(); updatePersistableFor(simulation); - var results = _simModelManager.RunSimulation(_simulation); + var simulationRunResults = _simModelManager.RunSimulation(_simulation); _simulation.HasChanged = true; - showWarningsIfAny(results); + showWarningsIfAny(simulationRunResults); - if (results.Success) + if (simulationRunResults.Success) { - _displayUnitUpdater.UpdateDisplayUnitsIn(results.Results); - copyResultsToSimulation(results, _simulation); + var results = simulationRunResults.Results; + results.Name = getNewRepositoryName(); + _displayUnitUpdater.UpdateDisplayUnitsIn(results); + copyResultsToSimulation(simulationRunResults, _simulation); } - addCommand(getSimulationResultLabel(results)); + addCommand(getSimulationResultLabel(simulationRunResults)); } finally { @@ -121,6 +123,11 @@ private void startSimulationRun(IMoBiSimulation simulation) } } + private string getNewRepositoryName() + { + return AppConstants.ResultName + DateTime.Now.ToIsoFormat(withSeconds: true); + } + private void addCommand(ICommand command) { _context.AddToHistory(command); diff --git a/src/MoBi.Presentation/UICommand/ExportHistoryUICommand.cs b/src/MoBi.Presentation/UICommand/ExportHistoryUICommand.cs index fde43fe5d..2897919dd 100644 --- a/src/MoBi.Presentation/UICommand/ExportHistoryUICommand.cs +++ b/src/MoBi.Presentation/UICommand/ExportHistoryUICommand.cs @@ -12,10 +12,10 @@ namespace MoBi.Presentation.UICommand public class ExportHistoryUICommand : IUICommand { private readonly IMoBiContext _context; - private readonly IReportTask _reportTask; + private readonly IHistoryExportTask _reportTask; private readonly IDialogCreator _dialogCreator; - public ExportHistoryUICommand(IMoBiContext context, IReportTask reportTask, IDialogCreator dialogCreator) + public ExportHistoryUICommand(IMoBiContext context, IHistoryExportTask reportTask, IDialogCreator dialogCreator) { _context = context; _reportTask = reportTask; diff --git a/src/MoBi.Presentation/UICommand/ExportMatlabODEUICommand.cs b/src/MoBi.Presentation/UICommand/ExportMatlabODEUICommand.cs deleted file mode 100644 index 0b8135ac5..000000000 --- a/src/MoBi.Presentation/UICommand/ExportMatlabODEUICommand.cs +++ /dev/null @@ -1,21 +0,0 @@ -using MoBi.Core.Domain.Model; -using MoBi.Presentation.Tasks.Edit; -using OSPSuite.Presentation.UICommands; - -namespace MoBi.Presentation.UICommand -{ - internal class ExportMatlabODEUICommand : ObjectUICommand - { - private readonly IEditTasksForSimulation _editTasksesForSimulation; - - public ExportMatlabODEUICommand(IEditTasksForSimulation editTasksForSimulation) - { - _editTasksesForSimulation = editTasksForSimulation; - } - - protected override void PerformExecute() - { - _editTasksesForSimulation.ExportMatlabDifferentialSystem(Subject); - } - } -} \ No newline at end of file diff --git a/src/MoBi.Presentation/UICommand/ExportODEForMatlabUICommand.cs b/src/MoBi.Presentation/UICommand/ExportODEForMatlabUICommand.cs new file mode 100644 index 000000000..d8009125f --- /dev/null +++ b/src/MoBi.Presentation/UICommand/ExportODEForMatlabUICommand.cs @@ -0,0 +1,21 @@ +using MoBi.Core.Domain.Model; +using MoBi.Presentation.Tasks.Edit; +using OSPSuite.Presentation.UICommands; + +namespace MoBi.Presentation.UICommand +{ + internal class ExportODEForMatlabUICommand : ObjectUICommand + { + private readonly IEditTasksForSimulation _editTasksForSimulation; + + public ExportODEForMatlabUICommand(IEditTasksForSimulation editTasksForSimulation) + { + _editTasksForSimulation = editTasksForSimulation; + } + + protected override void PerformExecute() + { + _editTasksForSimulation.ExportODEForMatlab(Subject); + } + } +} \ No newline at end of file diff --git a/src/MoBi.Presentation/UICommand/ExportODEForRUICommand.cs b/src/MoBi.Presentation/UICommand/ExportODEForRUICommand.cs new file mode 100644 index 000000000..00ba9ccd0 --- /dev/null +++ b/src/MoBi.Presentation/UICommand/ExportODEForRUICommand.cs @@ -0,0 +1,21 @@ +using MoBi.Core.Domain.Model; +using MoBi.Presentation.Tasks.Edit; +using OSPSuite.Presentation.UICommands; + +namespace MoBi.Presentation.UICommand +{ + internal class ExportODEForRUICommand : ObjectUICommand + { + private readonly IEditTasksForSimulation _editTasksForSimulation; + + public ExportODEForRUICommand(IEditTasksForSimulation editTasksForSimulation) + { + _editTasksForSimulation = editTasksForSimulation; + } + + protected override void PerformExecute() + { + _editTasksForSimulation.ExportODEForR(Subject); + } + } +} \ No newline at end of file diff --git a/src/MoBi.Presentation/UICommand/ExportSimulationToCppUICommand.cs b/src/MoBi.Presentation/UICommand/ExportSimulationToCppUICommand.cs new file mode 100644 index 000000000..4df1adc77 --- /dev/null +++ b/src/MoBi.Presentation/UICommand/ExportSimulationToCppUICommand.cs @@ -0,0 +1,21 @@ +using MoBi.Core.Domain.Model; +using MoBi.Presentation.Tasks.Edit; +using OSPSuite.Presentation.UICommands; + +namespace MoBi.Presentation.UICommand +{ + public class ExportSimulationToCppUICommand : ObjectUICommand + { + private readonly IEditTasksForSimulation _editTasksForSimulation; + + public ExportSimulationToCppUICommand(IEditTasksForSimulation editTasksForSimulation) + { + _editTasksForSimulation = editTasksForSimulation; + } + + protected override void PerformExecute() + { + _editTasksForSimulation.ExportSimulationToCppCode(Subject); + } + } +} \ No newline at end of file diff --git a/src/MoBi.Presentation/UICommand/ExportSimulationToSimModelXml.cs b/src/MoBi.Presentation/UICommand/ExportSimulationToSimModelXml.cs deleted file mode 100644 index 0a62d01a5..000000000 --- a/src/MoBi.Presentation/UICommand/ExportSimulationToSimModelXml.cs +++ /dev/null @@ -1,22 +0,0 @@ -using MoBi.Core.Domain.Model; -using MoBi.Presentation.Tasks.Edit; -using OSPSuite.Presentation.UICommands; - -namespace MoBi.Presentation.UICommand -{ - public class ExportSimulationToSimModelXml : ObjectUICommand - { - private readonly IEditTasksForSimulation _editTasksesForSimulation; - - public ExportSimulationToSimModelXml(IEditTasksForSimulation editTasksForSimulation) - { - _editTasksesForSimulation = editTasksForSimulation; - } - - protected override void PerformExecute() - { - _editTasksesForSimulation.ExportSimModelXml(Subject); - } - - } -} \ No newline at end of file diff --git a/src/MoBi.Presentation/UICommand/ExportSimulationToSimModelXmlUICommand.cs b/src/MoBi.Presentation/UICommand/ExportSimulationToSimModelXmlUICommand.cs new file mode 100644 index 000000000..4a385c5bf --- /dev/null +++ b/src/MoBi.Presentation/UICommand/ExportSimulationToSimModelXmlUICommand.cs @@ -0,0 +1,21 @@ +using MoBi.Core.Domain.Model; +using MoBi.Presentation.Tasks.Edit; +using OSPSuite.Presentation.UICommands; + +namespace MoBi.Presentation.UICommand +{ + public class ExportSimulationToSimModelXmlUICommand : ObjectUICommand + { + private readonly IEditTasksForSimulation _editTasksForSimulation; + + public ExportSimulationToSimModelXmlUICommand(IEditTasksForSimulation editTasksForSimulation) + { + _editTasksForSimulation = editTasksForSimulation; + } + + protected override void PerformExecute() + { + _editTasksForSimulation.ExportSimModelXml(Subject); + } + } +} \ No newline at end of file diff --git a/src/MoBi.Presentation/Views/BaseDiagram/IMoBiBaseDiagramView.cs b/src/MoBi.Presentation/Views/BaseDiagram/IMoBiBaseDiagramView.cs index 9220735ea..a84d61862 100644 --- a/src/MoBi.Presentation/Views/BaseDiagram/IMoBiBaseDiagramView.cs +++ b/src/MoBi.Presentation/Views/BaseDiagram/IMoBiBaseDiagramView.cs @@ -1,3 +1,4 @@ +using System.Windows.Forms; using MoBi.Presentation.Presenter.BaseDiagram; using OSPSuite.Core.Diagram; using OSPSuite.Presentation.Views; @@ -9,5 +10,6 @@ public interface IMoBiBaseDiagramView : IView, IBaseD { void ExpandParents(IBaseNode baseNode); bool IsMoleculeNode(IBaseNode baseNode); + Control Overview { set; } } } \ No newline at end of file diff --git a/src/MoBi.Presentation/Views/IEditParameterListView.cs b/src/MoBi.Presentation/Views/IEditParameterListView.cs index bc3d62403..27aa9349f 100644 --- a/src/MoBi.Presentation/Views/IEditParameterListView.cs +++ b/src/MoBi.Presentation/Views/IEditParameterListView.cs @@ -10,8 +10,8 @@ public interface IEditParameterListView : IView { void BindTo(IEnumerable parameters); void Select(ParameterDTO parameterDTO); - void SetCaptions(IDictionary captions); - void SetVisibility(PathElement pathElement, bool isVisible); + void SetCaptions(IDictionary captions); + void SetVisibility(PathElementId pathElement, bool isVisible); IReadOnlyList SelectedParameters { get; set; } } } \ No newline at end of file diff --git a/src/MoBi.Presentation/Views/ISolverMessageView.cs b/src/MoBi.Presentation/Views/ISolverMessageView.cs index d671d1c8d..fc89e7c07 100644 --- a/src/MoBi.Presentation/Views/ISolverMessageView.cs +++ b/src/MoBi.Presentation/Views/ISolverMessageView.cs @@ -2,6 +2,7 @@ using MoBi.Presentation.Presenter; using OSPSuite.Core.Domain; using OSPSuite.Presentation.Views; +using OSPSuite.SimModel; namespace MoBi.Presentation.Views { diff --git a/src/MoBi.Presentation/app.config b/src/MoBi.Presentation/app.config deleted file mode 100644 index 64b712bb6..000000000 --- a/src/MoBi.Presentation/app.config +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/MoBi.Presentation/packages.config b/src/MoBi.Presentation/packages.config deleted file mode 100644 index feb7f1bca..000000000 --- a/src/MoBi.Presentation/packages.config +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/MoBi.UI/MoBi.UI.csproj b/src/MoBi.UI/MoBi.UI.csproj index 113f33575..f9fec814f 100644 --- a/src/MoBi.UI/MoBi.UI.csproj +++ b/src/MoBi.UI/MoBi.UI.csproj @@ -1,1527 +1,56 @@ - - + + - Debug - AnyCPU - 9.0.21022 - 2.0 - {DE743812-F444-42E2-B72D-CF298933E2BA} - Library - Properties - MoBi.UI - MoBi.UI - v4.6.2 - 512 - - - - - - - - - - - false - MoBi.ico - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - - - 3.5 - - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AnyCPU - bin\Debug\MoBi.UI.xml + net472 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + false + false + LICENSE + bin\$(Configuration) + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml 1591 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - x86 - false + + - - True - - - ..\..\packages\Antlr3.Runtime.3.5.1\lib\net40-client\Antlr3.Runtime.dll - - - ..\..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\..\packages\Castle.Windsor.4.1.1\lib\net45\Castle.Windsor.dll - - - ..\..\packages\Dapper.1.60.6\lib\net451\Dapper.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.BonusSkins.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Charts.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Images.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Office.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.PivotGrid.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Printing.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.RichEdit.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.RichEdit.v18.2.Export.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraBars.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.UI.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.Wizard.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraEditors.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraGrid.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraLayout.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraNavBar.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraPivotGrid.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraPrinting.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraRichEdit.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraRichEdit.v18.2.Extensions.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraTreeList.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraVerticalGrid.v18.2.dll - - - ..\..\packages\FluentNHibernate.2.1.2\lib\net461\FluentNHibernate.dll - - - ..\..\packages\SharpZipLib.1.1.0\lib\net45\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\Iesi.Collections.4.0.4\lib\net461\Iesi.Collections.dll - - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - - ..\..\packages\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Logging.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\..\packages\Microsoft.Extensions.Primitives.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - - ..\..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll - True - - - ..\..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll - True - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\NHibernate.5.2.5\lib\net461\NHibernate.dll - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Draw.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Instruments.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Layout.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Pdf.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Svg.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Xml.dll - True - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.DataBinding.2.3.0.3\lib\net462\OSPSuite.DataBinding.dll - - - ..\..\packages\OSPSuite.DataBinding.DevExpress.3.0.0.3\lib\net462\OSPSuite.DataBinding.DevExpress.dll - - - ..\..\packages\OSPSuite.Infrastructure.8.0.4\lib\net462\OSPSuite.Infrastructure.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.UI.8.0.4\lib\net462\OSPSuite.UI.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - - ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - - ..\..\packages\Remotion.Linq.EagerFetching.2.2.0\lib\net45\Remotion.Linq.EagerFetching.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - ..\..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - 3.5 - - - - ..\..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net46\System.Data.SQLite.dll - - - - - ..\..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - - - - - - 3.5 - - - 3.5 - - - - - - True - - - - - - - 3.0 - + + - - Properties\SolutionInfo.cs - - - Form - - - AboutView.cs - - - - - - - - - - - - - - - - - UserControl - - - ApplicationSettingsView.cs - - - UserControl - - - ChartOptionsView.cs - - - UserControl - - - DiagramOptionsView.cs - - - UserControl - - - ForceLayoutConfigurationView.cs - - - UserControl - - - MoBiBaseDiagramView.cs - - - UserControl - - - BaseStartValuesView.cs - - - UserControl - - - BuildingBlockMergeView.cs - - - Form - - - CalculateScaleDivisorsView.cs - - - UserControl - - - ChartView.cs - - - Form - - - ConfigureSimulationView.cs - - - Form - - - CreateBuildingBlockMergeView.cs - - - Form - - - CreatePKSimMoleculeView.cs - - - Form - - - CreateSimulationView.cs - - - Form - - - CreateStartValuesView.cs - - - UserControl - - - DescriptorConditionListView.cs - - - UserControl - - - EditBlackBoxFormulaView.cs - - - UserControl - - - EditBuildConfigurationView.cs - - - Form - - - EditBuildingBlockBaseView.cs - - - Form - - - UserControl - - - EditActiveTransportBuilderContainerView.cs - - - UserControl - - - EditApplicationMoleculeBuilderView.cs - - - UserControl - - - EditContainerInSimulationView.cs - - - UserControl - - - EditDistributedParameterView.cs - - - UserControl - - - EditEventAssignmentBuilderView.cs - - - UserControl - - - EditEventBuilderView.cs - - - Form - - - EditEventGroupBuildingBlockView.cs - - - UserControl - - - EditEventGroupView.cs - - - UserControl - - - EditFavoritesView.cs - - - UserControl - - - EditFormulaPathListView.cs - - - UserControl - - - EditParameterListView.cs - - - UserControl - - - EditFormulaView.cs - - - UserControl - - - EditMoleculeBuilderView.cs - - - UserControl - - - EditObserverBuilderView.cs - - - Form - - - EditObserverBuildingBlockView.cs - - - UserControl - - - EditOutputSchemaView.cs - - - UserControl - - - EditParametersInContainerView.cs - - - Form - - - EditPassiveTransportBuildingBlockView.cs - - - UserControl - - - EditQuantityInSimulationView.cs - - - Form - - - EditSimulationSettingsView.cs - - - UserControl - - - EditSumFormulaView.cs - - - UserControl - - - EditTableFormulaWithXArgumentFormulaView.cs - - - UserControl - - - EditTableFormulaWithOffsetFormulaView.cs - - - UserControl - - - EditTransportBuilderView.cs - - - Form - - - ExportSelectedQuantitiesView.cs - - - Form - - - ImportMoleculeStartValuesView.cs - - - Form - - - ImportQuantityView.cs - - - Form - - - MergeConflictResolverView.cs - - - UserControl - - - LegendView.cs - - - UserControl - - - EditChartTemplateManagerView.cs - - - Form - - - ModalForm.cs - - - UserControl - - - MoleculeDependentBuilderView.cs - - - Form - - - NewFormulaView.cs - - - UserControl - - - NotificationView.cs - - - UserControl - - - EventGroupsListView.cs - - - UserControl - - - FormulaCacheView.cs - - - UserControl - - - ApplyToSelectionView.cs - - - UserControl - - - MoleculeStartValuesView.cs - - - Form - - - MultipleStringSelectionView.cs - - - UserControl - - - BuildingBlockExplorerView.cs - - - Form - - - NewValuePointView.cs - - - UserControl - - - ObjectBaseSummaryView.cs - - - UserControl - - - ParameterStartValuesView.cs - - - UserControl - - - ReactionBuilderView.cs - - - UserControl - - - UserControl - - - SearchView.cs - - - Form - - - SelectFormulasForObjectBaseView.cs - - - Form - - - SelectFormulaUsablePathView.cs - - - Component - - - SelectManyView.cs - - - UserControl - - - UserControl - - - MoleculeListView.cs - - - UserControl - - - Form - - - SelectEventAssignmentTargetView.cs - - - Component - - - SelectLocalisationView.cs - - - Form - - - SelectMoleculesForBuildingBlockView.cs - - - UserControl - - - SelectReferenceView.cs - - - Form - - - SelectRenamingView.cs - - - UserControl - - - EditReactionInSimulationView.cs - - - UserControl - - - SimulationExplorerView.cs - - - Form - - - OutputSelectionsView.cs - - - Form - - - EditSimulationView.cs - - - UserControl - - - SelectAndEditContainerView.cs - - - UserControl - - - EditBaseInfoView.cs - - - UserControl - - - EditContainerView.cs - - - Form - - - EditMoleculeStartValuesView.cs - - - Form - - - EditParameterStartValuesView.cs - - - UserControl - - - EditParameterView.cs - - - UserControl - - - EditSolverSettingsView.cs - - - Form - - - EditSpatialStructureView.cs - - - UserControl - - - EditUnitView.cs - - - UserControl - - - HierarchicalStructureView.cs - - - UserControl - - - EditExplicitFormulaView.cs - - - - UserControl - - - ChartControl.cs - - - UserControl - - - EditConstantFormulaView.cs - - - UserControl - - - EditReactionBuilderView.cs - - - Form - - - EditReactionBuildingBlockView.cs - - - Form - - - EditMoleculesBuildingBlockView.cs - - - UserControl - - - ReactionListView.cs - - - UserControl - - - FinalOptionsView.cs - - - Form - - - SolverMessageView.cs - - - UserControl - - - Form - - - SplashScreen.cs - - - Form - - - ProjectChartView.cs - - - UserControl - - - UserControl - - - UserDefinedParametersView.cs - - - Form - - - UserSettingsView.cs - - - Component - - - Form - - - ValidationMessagesView.cs - - - - UserControl - - - EditDimensionView.cs - - - UserControl - - - BuildingBlockSelectionView.cs - - - Form - - - MoBiMainView.cs - - - - - AboutView.cs - Designer - - - - ApplicationSettingsView.cs - - - ChartOptionsView.cs - Designer - - - DiagramOptionsView.cs - Designer - - - ForceLayoutConfigurationView.cs - Designer - - - BaseStartValuesView.cs - Designer - - - BuildingBlockMergeView.cs - Designer - - - CalculateScaleDivisorsView.cs - - - ConfigureSimulationView.cs - - - CreateBuildingBlockMergeView.cs - Designer - - - CreatePKSimMoleculeView.cs - - - CreateSimulationView.cs - Designer - - - CreateStartValuesView.cs - Designer - - - DescriptorConditionListView.cs - - - EditBlackBoxFormulaView.cs - - - EditBuildConfigurationView.cs - Designer - - - EditBuildingBlockBaseView.cs - Designer - - - ChartControl.cs - Designer - - - EditActiveTransportBuilderContainerView.cs - Designer - - - EditContainerInSimulationView.cs - - - EditFavoritesView.cs - - - EditFormulaPathListView.cs - - - EditParameterListView.cs - - - EditSimulationSettingsView.cs - - - EditSumFormulaView.cs - Designer - - - EditTableFormulaWithXArgumentFormulaView.cs - Designer - - - EditTableFormulaWithOffsetFormulaView.cs - Designer - - - ExportSelectedQuantitiesView.cs - - - ImportQuantityView.cs - - - MergeConflictResolverView.cs - - - LegendView.cs - - - EditChartTemplateManagerView.cs - - - ModalForm.cs - - - MoleculeDependentBuilderView.cs - - - NewFormulaView.cs - - - NotificationView.cs - - - ApplyToSelectionView.cs - Designer - - - ObjectBaseSummaryView.cs - - - ReactionBuilderView.cs - - - SearchView.cs - Designer - - - SelectAndEditContainerView.cs - Designer - - - EditApplicationBuilderView.cs - Designer - - - EditApplicationMoleculeBuilderView.cs - Designer - - - EditBaseInfoView.cs - Designer - - - EditContainerView.cs - Designer - - - EditDistributedParameterView.cs - Designer - - - EditEventAssignmentBuilderView.cs - Designer - - - EditEventBuilderView.cs - Designer - - - EditEventGroupBuildingBlockView.cs - Designer - - - EditEventGroupView.cs - Designer - - - EditExplicitFormulaView.cs - Designer - - - EditFormulaView.cs - Designer - - - EditMoleculeBuilderView.cs - Designer - - - EditMoleculeStartValuesView.cs - Designer - - - EditObserverBuilderView.cs - Designer - - - EditObserverBuildingBlockView.cs - Designer - - - EditOutputSchemaView.cs - Designer - - - EditParametersInContainerView.cs - Designer - - - EditParameterStartValuesView.cs - Designer - - - EditParameterView.cs - Designer - - - EditPassiveTransportBuildingBlockView.cs - Designer - - - EditQuantityInSimulationView.cs - Designer - - - EditTableFormulaView.cs - Designer - - - EditTransportBuilderView.cs - Designer - - - EditSolverSettingsView.cs - Designer - - - EditSpatialStructureView.cs - Designer - - - EditUnitView.cs - Designer - - - EventGroupsListView.cs - Designer - - - FormulaCacheView.cs - Designer - - - MoleculeStartValuesView.cs - Designer - - - MultipleStringSelectionView.cs - Designer - - - HierarchicalStructureView.cs - Designer - - - MoleculeListView.cs - Designer - - - NewValuePointView.cs - Designer - - - ObserverListView.cs - Designer - - - ParameterStartValuesView.cs - Designer - - - ReactionDiagramView.cs - Designer - - - SelectEventAssignmentTargetView.cs - Designer - - - SelectFormulasForObjectBaseView.cs - Designer - - - SelectFormulaUsablePathView.cs - Designer - - - SelectMoleculesForBuildingBlockView.cs - Designer - - - SelectReferenceView.cs - Designer - - - SelectRenamingView.cs - Designer - - - EditReactionInSimulationView.cs - Designer - - - SimulationExplorerView.cs - Designer - - - EditConstantFormulaView.cs - Designer - - - EditDimensionView.cs - Designer - - - EditReactionBuilderView.cs - Designer - - - EditReactionBuildingBlockView.cs - Designer - - - EditMoleculesBuildingBlockView.cs - Designer - - - ReactionListView.cs - Designer - - - FinalOptionsView.cs - Designer - - - BuildingBlockSelectionView.cs - Designer - - - MoBiMainView.cs - Designer - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - OutputSelectionsView.cs - - - EditSimulationView.cs - Designer - - - SolverMessageView.cs - Designer - - - SplashScreen.cs - Designer - - - StringSelectionListBox.cs - Designer - - - UserSettingsView.cs - Designer - - - ValidationMessagesView.cs - Designer - - - ValidationOptionsView.cs - - - ValueEdit.cs - Designer - - - True - Resources.resx - True - - - Designer - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - StringSelectionListBox.cs - - - UserControl - - - ValidationOptionsView.cs - - - UserControl - - - ValueEdit.cs - - - UserControl - - - ObserverListView.cs - - - UserControl - - - EditApplicationBuilderView.cs - - - UserControl - - - EditTableFormulaView.cs - + + + + + + + + + + + + + - - Always - - - - - - - False - .NET Framework 2.0 %28x86%29 - false - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - true - - - False - Windows Installer 3.1 - true - + + True + + + - - {2DBF50BE-A749-421C-B526-8BDA31CFE7B3} - MoBi.Core - - - {B4C86DCA-8877-4400-8088-2401EE65B403} - MoBi.Presentation - - - {3C65FFC2-D9EC-4951-8C35-04854AD34E52} - MoBi.Assets - + + + + - + + - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - \ No newline at end of file + + diff --git a/src/MoBi.UI/Properties/AssemblyInfo.cs b/src/MoBi.UI/Properties/AssemblyInfo.cs deleted file mode 100644 index cf2737718..000000000 --- a/src/MoBi.UI/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Reflection; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("MoBi-Application")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyCulture("")] diff --git a/src/MoBi.UI/Properties/Resources.Designer.cs b/src/MoBi.UI/Properties/Resources.Designer.cs deleted file mode 100644 index f434b03ab..000000000 --- a/src/MoBi.UI/Properties/Resources.Designer.cs +++ /dev/null @@ -1,83 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MoBi.UI.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MoBi.UI.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap Cancel { - get { - object obj = ResourceManager.GetObject("Cancel", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - - /// - /// Looks up a localized resource of type System.Drawing.Bitmap. - /// - internal static System.Drawing.Bitmap OK { - get { - object obj = ResourceManager.GetObject("OK", resourceCulture); - return ((System.Drawing.Bitmap)(obj)); - } - } - } -} diff --git a/src/MoBi.UI/Properties/Resources.resx b/src/MoBi.UI/Properties/Resources.resx deleted file mode 100644 index 4390e0e49..000000000 --- a/src/MoBi.UI/Properties/Resources.resx +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - ..\Resources\Cancel.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - - ..\Resources\OK.ico;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a - - \ No newline at end of file diff --git a/src/MoBi.UI/Properties/Settings.Designer.cs b/src/MoBi.UI/Properties/Settings.Designer.cs deleted file mode 100644 index 9932c3326..000000000 --- a/src/MoBi.UI/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MoBi.UI.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/src/MoBi.UI/Properties/Settings.settings b/src/MoBi.UI/Properties/Settings.settings deleted file mode 100644 index 39645652a..000000000 --- a/src/MoBi.UI/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/MoBi.UI/Properties/build.licx b/src/MoBi.UI/Properties/build.licx deleted file mode 100644 index c742e85ca..000000000 --- a/src/MoBi.UI/Properties/build.licx +++ /dev/null @@ -1,2 +0,0 @@ -Northwoods.Go.Layout.GoLayoutForceDirected, Northwoods.Go.Layout, Version=4.1.0.2, Culture=neutral, PublicKeyToken=a4e3b7b70161cfe8 -Northwoods.Go.GoView, Northwoods.Go, Version=4.1.0.2, Culture=neutral, PublicKeyToken=a4e3b7b70161cfe8 diff --git a/src/MoBi.UI/Properties/licenses.licx b/src/MoBi.UI/Properties/licenses.licx deleted file mode 100644 index 9c7120d12..000000000 --- a/src/MoBi.UI/Properties/licenses.licx +++ /dev/null @@ -1,6 +0,0 @@ -DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v18.2, Version=18.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v18.2, Version=18.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v18.2, Version=18.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v18.2, Version=18.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v18.2, Version=18.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a -DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v18.2, Version=18.2.7.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a diff --git a/src/MoBi.UI/Services/ApplicationStartup.cs b/src/MoBi.UI/Services/ApplicationStartup.cs index 629461718..61cfade7b 100644 --- a/src/MoBi.UI/Services/ApplicationStartup.cs +++ b/src/MoBi.UI/Services/ApplicationStartup.cs @@ -144,10 +144,10 @@ public static void InitDimensions(IContainer container) var configuration = container.Resolve(); var dimFactory = container.Resolve(); var persister = container.Resolve(); - persister.Load(dimFactory.BaseFactory, configuration.DimensionFilePath); - dimFactory.BaseFactory.AddDimension(Constants.Dimension.NO_DIMENSION); + persister.Load(dimFactory, configuration.DimensionFilePath); + dimFactory.AddDimension(Constants.Dimension.NO_DIMENSION); container.RegisterImplementationOf(dimFactory); - setUpDimensionMergings(dimFactory.BaseFactory); + setupDimensionMergings(dimFactory); } // because Setup cannot copy into each user profile app data, copy has to be done here @@ -187,19 +187,19 @@ private static ICoreCalculationMethod createDefaultCalculationMethodForCategory( return cm; } - private static void setUpDimensionMergings(IDimensionFactory factory) + private static void setupDimensionMergings(IDimensionFactory factory) { var concentrationDimension = factory.Dimension(Constants.Dimension.MASS_CONCENTRATION); - var molarConcentrationDimomension = factory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION); + var molarConcentrationDimension = factory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION); - factory.AddMergingInformation(new MoBiDimensionMergingInformation(concentrationDimension, molarConcentrationDimomension, - new MolWeightDimensionConverterForFormulaUsable(concentrationDimension, molarConcentrationDimomension))); + factory.AddMergingInformation(new MoBiDimensionMergingInformation(concentrationDimension, molarConcentrationDimension, + new MolWeightDimensionConverterForFormulaUsable(concentrationDimension, molarConcentrationDimension))); - factory.AddMergingInformation(new MoBiDimensionMergingInformation(concentrationDimension, molarConcentrationDimomension, - new ConcentrationToMolarConcentrationConverterForDataColumn(concentrationDimension, molarConcentrationDimomension))); + factory.AddMergingInformation(new MoBiDimensionMergingInformation(concentrationDimension, molarConcentrationDimension, + new ConcentrationToMolarConcentrationConverterForDataColumn(concentrationDimension, molarConcentrationDimension))); - factory.AddMergingInformation(new MoBiDimensionMergingInformation(molarConcentrationDimomension, concentrationDimension, - new MolarConcentrationToConcentrationConverterForDataColumn(molarConcentrationDimomension, concentrationDimension))); + factory.AddMergingInformation(new MoBiDimensionMergingInformation(molarConcentrationDimension, concentrationDimension, + new MolarConcentrationToConcentrationConverterForDataColumn(molarConcentrationDimension, concentrationDimension))); } public void InitializeForStartup(Action registrationAction) @@ -266,8 +266,8 @@ private static void registerCoreComponents(IContainer container) private static void registerImport(IContainer container) { - var mobiDataImprterSettings = new DataImporterSettings {Icon = ApplicationIcons.MoBi, Caption = "MoBi Data Import"}; - container.RegisterImplementationOf(mobiDataImprterSettings); + var mobiDataImporterSettings = new DataImporterSettings {IconName = ApplicationIcons.MoBi.IconName, Caption = "MoBi Data Import"}; + container.RegisterImplementationOf(mobiDataImporterSettings); } private static void registerPresenter(IContainer container) @@ -282,7 +282,7 @@ private static void registerView(IContainer container) private static void registerSerializationDependencies(IContainer container) { - //create serializer repository for xml persisentence and register all available serializer + //create serializer repository for xml persistence and register all available serializer var register = new SerializerRegister(); container.AddRegister(x => x.FromInstance(register)); register.PerformMappingForSerializerIn(container); diff --git a/src/MoBi.UI/UserInterfaceRegister.cs b/src/MoBi.UI/UserInterfaceRegister.cs index 23487f9d3..79a62bae7 100644 --- a/src/MoBi.UI/UserInterfaceRegister.cs +++ b/src/MoBi.UI/UserInterfaceRegister.cs @@ -40,6 +40,8 @@ public void RegisterInContainer(IContainer container) scan.WithConvention(); }); + + container.AddRegister(x=>x.FromType()); container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Transient); diff --git a/src/MoBi.UI/Views/CreatePKSimMoleculeView.cs b/src/MoBi.UI/Views/CreatePKSimMoleculeView.cs index f2fa9ab47..f45bb57b9 100644 --- a/src/MoBi.UI/Views/CreatePKSimMoleculeView.cs +++ b/src/MoBi.UI/Views/CreatePKSimMoleculeView.cs @@ -6,6 +6,7 @@ using MoBi.Presentation.Presenter; using MoBi.Presentation.Views; using OSPSuite.Core.Domain.UnitSystem; +using OSPSuite.Presentation.DTO; using OSPSuite.Presentation.Extensions; using OSPSuite.UI.Controls; using OSPSuite.UI.Extensions; @@ -48,7 +49,7 @@ public override void InitializeBinding() _gridViewBinder.AutoBind(x => x.Value) .WithFormat(x => x.ParameterFormatter()) .WithCaption(AppConstants.Captions.Value) - .WithEditorConfiguration((activeEditor, parmeterDTO) => _comboBoxUnit.UpdateUnitsFor(activeEditor, parmeterDTO)) + .WithEditorConfiguration((activeEditor, parameterDTO) => _comboBoxUnit.UpdateUnitsFor(activeEditor, parameterDTO)) .WithOnValueUpdating((p, e) => setParameterValue(p, e.NewValue)) .OnChanged += p => NotifyViewChanged(); diff --git a/src/MoBi.UI/Views/EditDistributedParameterView.cs b/src/MoBi.UI/Views/EditDistributedParameterView.cs index cdb4a7845..b1e29198c 100644 --- a/src/MoBi.UI/Views/EditDistributedParameterView.cs +++ b/src/MoBi.UI/Views/EditDistributedParameterView.cs @@ -107,7 +107,7 @@ protected override void OnClearError(Control control) } } - private IEnumerable getDimensions(DistributedParameterDTO dto) + private IReadOnlyList getDimensions(DistributedParameterDTO dto) { return _presenter.GetDimensions(); } diff --git a/src/MoBi.UI/Views/EditParameterListView.cs b/src/MoBi.UI/Views/EditParameterListView.cs index 00b5c9e3d..51b48f79c 100644 --- a/src/MoBi.UI/Views/EditParameterListView.cs +++ b/src/MoBi.UI/Views/EditParameterListView.cs @@ -16,6 +16,7 @@ using OSPSuite.DataBinding; using OSPSuite.DataBinding.DevExpress; using OSPSuite.DataBinding.DevExpress.XtraGrid; +using OSPSuite.Presentation.DTO; using OSPSuite.UI.Binders; using OSPSuite.UI.Controls; using OSPSuite.UI.Extensions; @@ -150,7 +151,7 @@ public override void InitializeBinding() _isFixedParameterEditRepository.ButtonClick += (o, e) => OnEvent(() => onResetValue(_gridViewBinder.FocusedElement)); - _pathBinder.SetVisibility(PathElement.Simulation, visible: false); + _pathBinder.SetVisibility(PathElementId.Simulation, visible: false); } private void onResetValue(ParameterDTO favoriteParameterDTO) @@ -202,16 +203,16 @@ private void setParameterUnit(ParameterDTO parameter, Unit unit) OnEvent(() => { _gridView.CloseEditor(); - _presenter.SetParamterUnit(parameter, unit); + _presenter.SetParameterUnit(parameter, unit); }); } - public void SetCaptions(IDictionary captions) + public void SetCaptions(IDictionary captions) { captions.Each(kv => _pathBinder.SetCaption(kv.Key, kv.Value)); } - public void SetVisibility(PathElement pathElement, bool isVisible) + public void SetVisibility(PathElementId pathElement, bool isVisible) { _pathBinder.SetVisibility(pathElement, isVisible); } diff --git a/src/MoBi.UI/Views/EditParametersInContainerView.cs b/src/MoBi.UI/Views/EditParametersInContainerView.cs index 892649b03..153c6a1c1 100644 --- a/src/MoBi.UI/Views/EditParametersInContainerView.cs +++ b/src/MoBi.UI/Views/EditParametersInContainerView.cs @@ -21,6 +21,7 @@ using OSPSuite.DataBinding; using OSPSuite.DataBinding.DevExpress; using OSPSuite.DataBinding.DevExpress.XtraGrid; +using OSPSuite.Presentation.DTO; using OSPSuite.Presentation.Extensions; using OSPSuite.Presentation.Views; using OSPSuite.UI.Binders; @@ -221,7 +222,7 @@ private void setParameterUnit(ParameterDTO parameter, Unit unit) OnEvent(() => { _gridView.CloseEditor(); - _presenter.SetParamterUnit(parameter, unit); + _presenter.SetParameterUnit(parameter, unit); }); } diff --git a/src/MoBi.UI/Views/EditQuantityInSimulationView.cs b/src/MoBi.UI/Views/EditQuantityInSimulationView.cs index 401327093..71c9fb2c1 100644 --- a/src/MoBi.UI/Views/EditQuantityInSimulationView.cs +++ b/src/MoBi.UI/Views/EditQuantityInSimulationView.cs @@ -54,7 +54,7 @@ public void BindTo(QuantityDTO quantityDTO) public bool ReadOnly { - get { return _readOnly; } + get => _readOnly; set { _readOnly = value; @@ -64,7 +64,7 @@ public bool ReadOnly public bool AllowValueChange { - get { return LayoutVisibilityConvertor.ToBoolean(layoutControlItemValue.Visibility); } + get => LayoutVisibilityConvertor.ToBoolean(layoutControlItemValue.Visibility); set { layoutControlItemValue.Visibility = LayoutVisibilityConvertor.FromBoolean(value); diff --git a/src/MoBi.UI/Views/ParameterStartValuesView.cs b/src/MoBi.UI/Views/ParameterStartValuesView.cs index 4df5d70cd..6ab4a588d 100644 --- a/src/MoBi.UI/Views/ParameterStartValuesView.cs +++ b/src/MoBi.UI/Views/ParameterStartValuesView.cs @@ -40,7 +40,7 @@ protected override void DoInitializeBinding() { _unitControl.ParameterUnitSet += setParameterUnit; - _dimensionComboBoxRepository.FillComboBoxRepositoryWith(_dimensionFactory.Dimensions); + _dimensionComboBoxRepository.FillComboBoxRepositoryWith(_dimensionFactory.DimensionsSortedByName); var colName = _gridViewBinder.AutoBind(dto => dto.Name) .WithCaption(AppConstants.Captions.ParameterName).WithOnValueUpdating((o,e) => OnEvent(() => OnNameSet(o,e))); diff --git a/src/MoBi.UI/Views/SolverMessageView.cs b/src/MoBi.UI/Views/SolverMessageView.cs index 0f3a544f6..fd81624b5 100644 --- a/src/MoBi.UI/Views/SolverMessageView.cs +++ b/src/MoBi.UI/Views/SolverMessageView.cs @@ -1,10 +1,10 @@ using System.Collections.Generic; using MoBi.Presentation.Presenter; using MoBi.Presentation.Views; -using OSPSuite.Core.Domain; using OSPSuite.DataBinding.DevExpress; using OSPSuite.DataBinding.DevExpress.XtraGrid; using OSPSuite.Presentation.Views; +using OSPSuite.SimModel; using OSPSuite.UI.Views; namespace MoBi.UI.Views diff --git a/src/MoBi.UI/Views/ValueEdit.cs b/src/MoBi.UI/Views/ValueEdit.cs index dd3a4aa67..c6b0749e9 100644 --- a/src/MoBi.UI/Views/ValueEdit.cs +++ b/src/MoBi.UI/Views/ValueEdit.cs @@ -4,6 +4,7 @@ using DevExpress.XtraEditors.DXErrorProvider; using MoBi.Presentation.DTO; +using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Domain.UnitSystem; using OSPSuite.UI.Controls; @@ -38,7 +39,7 @@ public override void InitializeBinding() _screenBinder = new ScreenBinder(); _screenBinder.Bind(p => p.Value) - .To(tbValue).OnValueUpdating += (o, e) => ValueChanged(o, e.NewValue); + .To(tbValue).OnValueUpdating += onValueUpdating; _screenBinder.Bind(p => p.DisplayUnit).To(cbUnit) .WithValues(p => p.Dimension.Units) @@ -51,11 +52,18 @@ public override void InitializeBinding() tbValue.EnterMoveNextControl = true; } - public override bool HasError + private void onValueUpdating(ValueEditDTO dto, PropertyValueSetEventArgs e) { - get { return _screenBinder.HasError; } + // Some artifact with this control when values have a lot of digits could lead to an event being raised even though nothing has changed. + // This should be fixed in OSPSuite.DataBinding but we'll be done at another time + if (ValueComparer.AreValuesEqual(e.OldValue, e.NewValue)) + return; + + ValueChanged(dto, e.NewValue); } + public override bool HasError => _screenBinder.HasError; + public void ValidateControl() { _screenBinder.Validate(); @@ -63,8 +71,8 @@ public void ValidateControl() public string ToolTip { - set { tbValue.ToolTip = value; } - get { return tbValue.ToolTip; } + set => tbValue.ToolTip = value; + get => tbValue.ToolTip; } public void SetError(string errorMessage) diff --git a/src/MoBi.UI/app.config b/src/MoBi.UI/app.config index ef6a30b70..94d16da7c 100644 --- a/src/MoBi.UI/app.config +++ b/src/MoBi.UI/app.config @@ -3,121 +3,9 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - + \ No newline at end of file diff --git a/src/MoBi.UI/packages.config b/src/MoBi.UI/packages.config index 28ae2445e..9095f9023 100644 --- a/src/MoBi.UI/packages.config +++ b/src/MoBi.UI/packages.config @@ -2,12 +2,12 @@ - + - + @@ -16,33 +16,38 @@ - + - - - + + + + - - - - - - - - + + + + + + + + + + + + - + - + + - \ No newline at end of file diff --git a/src/MoBi/MoBi.csproj b/src/MoBi/MoBi.csproj index e451c911a..9b1e8a7ff 100644 --- a/src/MoBi/MoBi.csproj +++ b/src/MoBi/MoBi.csproj @@ -1,282 +1,91 @@ - - + + - Debug - AnyCPU - 9.0.21022 - 2.0 - {B831E5E2-431A-4627-B58C-3CE3F5002E42} + net472 WinExe - Properties - MoBi - MoBi - true - v4.6.2 - 512 - - - - - - - - - - - false + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + 9.0.0 + false + false + Open-Systems-Pharmacology + LICENSE + bin\$(Configuration)\$(TargetFramework)\$(AssemblyName).xml + 1591, 3246 MoBi.ico - - - - - - - 3.5 - - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 + + x64 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - - ..\..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll - - - ..\..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.Engine.8.0.4\lib\net462\OSPSuite.Engine.dll - - - ..\..\packages\OSPSuite.FuncParser.3.0.1.14\lib\net45\OSPSuite.FuncParser.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.SimModel.3.0.1.27\lib\net45\OSPSuite.SimModel.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - 3.5 - - - - - 3.5 - - - 3.5 - - - - - - + + + - - Properties\SolutionInfo.cs - - - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - OSPSuite.SimModel.xsd - Designer - PreserveNewest - - - AllCalculationMethods.pkml - PreserveNewest - - - SpaceOrganismTemplate.mbdt - PreserveNewest - - - Standard Molecule.pkml + PreserveNewest - - - Designer - - - Designer - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - OSPSuite.Dimensions.xml + + PreserveNewest - - - OSPSuite.PKParameters.xml + + PreserveNewest - - - OSPSuite.SimModelSolver_CVODES.dll + + PreserveNewest - - SQLite.Interop.dll + PreserveNewest - - libsbmlcs.dll + PreserveNewest - - GroupRepository.xml + PreserveNewest - - Always + + PreserveNewest + - - {2DBF50BE-A749-421C-B526-8BDA31CFE7B3} - MoBi.Core - - - {15ed932c-edec-407b-91d9-7bcb8e7f95f5} - MoBi.Engine - - - {B4C86DCA-8877-4400-8088-2401EE65B403} - MoBi.Presentation - - - {DE743812-F444-42E2-B72D-CF298933E2BA} - MoBi.UI - + + - - False - .NET Framework 3.5 SP1 Client Profile - false - - - False - .NET Framework 2.0 %28x86%29 - false - - - False - .NET Framework 3.0 %28x86%29 - false - - - False - .NET Framework 3.5 - true - - - False - .NET Framework 3.5 SP1 - false - - - False - Windows Installer 3.1 - true - + + True + + + + PreserveNewest + + + + + + + + + + + + + + + + + + + + + + + - - - - - - \ No newline at end of file diff --git a/src/MoBi/Properties/AssemblyInfo.cs b/src/MoBi/Properties/AssemblyInfo.cs deleted file mode 100644 index f549bbc77..000000000 --- a/src/MoBi/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MoBi")] - - diff --git a/src/MoBi/Properties/Resources.Designer.cs b/src/MoBi/Properties/Resources.Designer.cs deleted file mode 100644 index 94a728821..000000000 --- a/src/MoBi/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MoBi.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "15.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MoBi.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/src/MoBi/Properties/Resources.resx b/src/MoBi/Properties/Resources.resx deleted file mode 100644 index af7dbebba..000000000 --- a/src/MoBi/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/src/MoBi/Properties/Settings.Designer.cs b/src/MoBi/Properties/Settings.Designer.cs deleted file mode 100644 index a5180e7b5..000000000 --- a/src/MoBi/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MoBi.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.3.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/src/MoBi/Properties/Settings.settings b/src/MoBi/Properties/Settings.settings deleted file mode 100644 index 39645652a..000000000 --- a/src/MoBi/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/src/MoBi/app.config b/src/MoBi/app.config index ed8d8aee2..76df683cd 100644 --- a/src/MoBi/app.config +++ b/src/MoBi/app.config @@ -1,129 +1,13 @@  - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/src/MoBi/packages.config b/src/MoBi/packages.config deleted file mode 100644 index f93e43fa0..000000000 --- a/src/MoBi/packages.config +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/MoBi.Tests/ContextSpecification.cs b/tests/MoBi.Tests/ContextSpecification.cs deleted file mode 100644 index 1e80c7596..000000000 --- a/tests/MoBi.Tests/ContextSpecification.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Threading.Tasks; -using OSPSuite.BDDHelper; -using OSPSuite.Engine; - -namespace MoBi -{ - public abstract class ContextSpecificationAsync : AbstractContextSpecificationAsync - { - public override async Task GlobalContext() - { - await base.GlobalContext(); - EngineRegister.InitFormulaParser(); - } - } - - public abstract class ContextSpecification : AbstractContextSpecification - { - public override void GlobalContext() - { - base.GlobalContext(); - EngineRegister.InitFormulaParser(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/Core/Commands/RemoveSimulationCommandSpecs.cs b/tests/MoBi.Tests/Core/Commands/RemoveSimulationCommandSpecs.cs index eca082474..2168e7991 100644 --- a/tests/MoBi.Tests/Core/Commands/RemoveSimulationCommandSpecs.cs +++ b/tests/MoBi.Tests/Core/Commands/RemoveSimulationCommandSpecs.cs @@ -18,7 +18,7 @@ public abstract class concern_for_RemoveSimulationCommand : ContextWithLoadedPro protected override void Context() { base.Context(); - var simulationTransfer = LoadPKML("523_Export_S1"); + var simulationTransfer = LoadPKML("Sim"); _context = IoC.Resolve(); _simulation = simulationTransfer.Simulation as IMoBiSimulation; _context.Register(_simulation); diff --git a/tests/MoBi.Tests/Core/Commands/SetParameterDimensionInBuildingBlockCommandSpecs.cs b/tests/MoBi.Tests/Core/Commands/SetParameterDimensionInBuildingBlockCommandSpecs.cs index 386ee1997..59071f7c7 100644 --- a/tests/MoBi.Tests/Core/Commands/SetParameterDimensionInBuildingBlockCommandSpecs.cs +++ b/tests/MoBi.Tests/Core/Commands/SetParameterDimensionInBuildingBlockCommandSpecs.cs @@ -2,7 +2,6 @@ using OSPSuite.BDDHelper; using OSPSuite.BDDHelper.Extensions; using MoBi.Core.Domain.Model; -using MoBi.Core.Services; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Formulas; @@ -58,6 +57,7 @@ public void dimension_of_parameter_changes() { _parameter.Dimension.ShouldBeEqualTo(_newDimension); } + } public class When_setting_new_dimension_for_parameter_with_right_hand_side : concern_for_SetParameterDimensionInBuildingBlockCommand @@ -71,7 +71,7 @@ protected override void Context() _newRightHandSideDimension = A.Fake(); _newDisplayUnit = A.Fake(); _parameter.RHSFormula= A.Fake(); - A.CallTo(() => _context.DimensionFactory.RHSDimensionFor(_newDimension)).Returns(_newRightHandSideDimension); + A.CallTo(() => _context.DimensionFactory.GetOrAddRHSDimensionFor(_newDimension)).Returns(_newRightHandSideDimension); var displayUnitRetriever = A.Fake(); A.CallTo(() => _context.Resolve()).Returns(displayUnitRetriever); A.CallTo(displayUnitRetriever).WithReturnType().Returns(_newDisplayUnit); @@ -117,7 +117,7 @@ protected override void Context() base.Context(); _newRightHandSideDimension = A.Fake(); _newDisplayUnit = A.Fake(); - A.CallTo(() => _context.DimensionFactory.RHSDimensionFor(_newDimension)).Returns(_newRightHandSideDimension); + A.CallTo(() => _context.DimensionFactory.GetOrAddRHSDimensionFor(_newDimension)).Returns(_newRightHandSideDimension); var displayUnitRetriever = A.Fake(); A.CallTo(() => _context.Resolve()).Returns(displayUnitRetriever); A.CallTo(displayUnitRetriever).WithReturnType().Returns(_newDisplayUnit); diff --git a/tests/MoBi.Tests/Core/Converter313To32Specs.cs b/tests/MoBi.Tests/Core/Converter313To32Specs.cs deleted file mode 100644 index 0871f8bad..000000000 --- a/tests/MoBi.Tests/Core/Converter313To32Specs.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System.Linq; -using System.Xml.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Utility.Events; -using FakeItEasy; -using MoBi.Core.Domain.Model; -using MoBi.Core.Domain.UnitSystem; -using MoBi.Core.Serialization.Converter.v3_2; -using OSPSuite.Core.Converter.v5_2; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Data; - -namespace MoBi.Core -{ - public abstract class concern_for_Converter313To32 : ContextSpecification - { - protected IDimensionConverter _dimensionConverter; - private IMoBiDimensionFactory _dimensionFactory; - private IObjectBaseFactory _objectBaseFactory; - private IFormulaMapper _formulaMapper; - private IDimensionMapper _dimensionMapper; - private IEventPublisher _eventPublisher; - - protected override void Context() - { - _dimensionConverter = A.Fake(); - _dimensionFactory = A.Fake(); - _objectBaseFactory = A.Fake(); - _formulaMapper = A.Fake(); - _dimensionMapper = A.Fake(); - _eventPublisher = A.Fake(); - sut = new Converter313To32(_dimensionConverter, _dimensionFactory, _objectBaseFactory, _formulaMapper, _dimensionMapper, _eventPublisher); - } - } - - class When_converting_an_mobi_project : concern_for_Converter313To32 - { - private IMoBiProject _mobiProject; - private DataRepository _observedData; - - protected override void Context() - { - base.Context(); - _mobiProject = new MoBiProject(); - _observedData = new DataRepository(); - _mobiProject.AddObservedData(_observedData); - } - - protected override void Because() - { - sut.Convert(_mobiProject, null); - } - - [Observation] - public void should_call_dimension_converter_for_data_repositories() - { - A.CallTo(() => _dimensionConverter.ConvertDimensionIn(_observedData)).MustHaveHappened(); - } - } - - public class When_converting_an_old_dimension_xml_files : concern_for_Converter313To32 - { - private XElement _element; - - protected override void Context() - { - base.Context(); - _element = new XElement("DimensionFactory", - new XElement("Dimensions", - new XElement("Dimension", new XAttribute("name", "dim1"), new XAttribute("BaseUnit", "unit1"), new XAttribute("DefaultUnit", "unit2")), - new XElement("Dimension", new XAttribute("name", "dim2"), new XAttribute("BaseUnit", "unit1"), new XAttribute("DefaultUnit", "unit2")), - new XElement("Dimension", new XAttribute("name", "dim3"), new XAttribute("BaseUnit", "unit1")) - ) - ); - } - - protected override void Because() - { - sut.ConvertXml(_element, null); - } - - [Observation] - public void should_have_replaced_the_attributes_to_lower_case_values() - { - var allBaseUnits = _element.DescendantsAndSelf().Where(x => x.Attribute("baseUnit") != null); - allBaseUnits.Count().ShouldBeEqualTo(3); - - var allDefaultUnits = _element.DescendantsAndSelf().Where(x => x.Attribute("defaultUnit") != null); - allDefaultUnits.Count().ShouldBeEqualTo(2); - } - } - - public class When_converting_an_observed_building_block_element_without_builder : concern_for_Converter313To32 - { - private XElement _element; - - protected override void Context() - { - base.Context(); - base.Context(); - _element = new XElement("ObserverBuildingBlock"); - } - - [Observation] - public void should_not_crash() - { - sut.ConvertXml(_element, null); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/Core/DimensionConverterSpecs.cs b/tests/MoBi.Tests/Core/DimensionConverterSpecs.cs index 6b8f85bc4..0728ebf43 100644 --- a/tests/MoBi.Tests/Core/DimensionConverterSpecs.cs +++ b/tests/MoBi.Tests/Core/DimensionConverterSpecs.cs @@ -9,7 +9,7 @@ namespace MoBi.Core { - public abstract class concern_for_DimensionCoverterFor : ContextSpecification> where T : IWithDimension + public abstract class concern_for_DimensionConverterFor : ContextSpecification> where T : IWithDimension { private IDimension _source; @@ -22,7 +22,7 @@ protected override void Context() sut = new TestDimensionConverterFor(_source, _target); } - public class TestDimensionConverterFor : DimensionConverterFor + public class TestDimensionConverterFor : DimensionConverter { public TestDimensionConverterFor(IDimension sourceDimension, IDimension targetDimension) : base(sourceDimension, targetDimension) { @@ -45,7 +45,7 @@ public override string UnableToResolveParametersMessage } - public class When_a_parameter_converter_is_asked_to_convert_a_Parameter : concern_for_DimensionCoverterFor + public class When_a_parameter_converter_is_asked_to_convert_a_Parameter : concern_for_DimensionConverterFor { private bool _res; @@ -62,7 +62,7 @@ public void should_return_true() } } - public class When_a_parameter_converter_is_asked_to_convert_a_DataColumn : concern_for_DimensionCoverterFor + public class When_a_parameter_converter_is_asked_to_convert_a_DataColumn : concern_for_DimensionConverterFor { private bool _res; diff --git a/tests/MoBi.Tests/Core/DimensionValidatorSpecs.cs b/tests/MoBi.Tests/Core/DimensionValidatorSpecs.cs index 3c0c6ade8..0fcb98da3 100644 --- a/tests/MoBi.Tests/Core/DimensionValidatorSpecs.cs +++ b/tests/MoBi.Tests/Core/DimensionValidatorSpecs.cs @@ -3,7 +3,7 @@ using FakeItEasy; using MoBi.Assets; using MoBi.Core.Domain.Services; -using MoBi.Engine.Tasks; +using MoBi.Core.Services; using MoBi.Presentation.Settings; using MoBi.Presentation.Tasks; using OSPSuite.BDDHelper; @@ -20,7 +20,7 @@ namespace MoBi.Core public abstract class concern_for_DimensionValidator : ContextSpecification { protected ObjectPathFactory _pathFactory; - private IUserSettings _userSettings; + protected IUserSettings _userSettings; protected IBuildConfiguration _buildConfiguration; protected override void Context() @@ -294,7 +294,7 @@ protected override void Because() } [Observation] - public void should_return_valide_with_warnings() + public void should_return_valid_with_warnings() { _result.ValidationState.ShouldBeEqualTo(ValidationState.ValidWithWarnings); } @@ -306,7 +306,7 @@ public void should_have_the_right_messages() } } - public class When_validating_a_Formula_using_object_dimension_and_formula_with_missmatching_dimensions : concern_for_DimensionValidator + public class When_validating_a_Formula_using_object_dimension_and_formula_with_miss_matching_dimensions : concern_for_DimensionValidator { private IContainer _root; private IParameter _para; @@ -333,6 +333,8 @@ protected override void Context() _para.Formula.AddObjectPath(_pathFactory.CreateRelativeFormulaUsablePath(_para, a)); _para.Formula.AddObjectPath(_pathFactory.CreateRelativeFormulaUsablePath(_para, b)); _para.Formula.ResolveObjectPathsFor(_para); + + _userSettings.ShowCannotCalcErrors = true; } protected override void Because() @@ -349,7 +351,7 @@ public void should_return_invalid() [Observation] public void should_have_the_correct_messages() { - _result.Messages.Single().Text.ShouldBeEqualTo(String.Format("Arguments of PLUS-function must have the same dimension (Formula: {0})", _formulaString)); + _result.Messages.Single().Text.ShouldBeEqualTo($"Arguments of PLUS-function must have the same dimension (Formula: {_formulaString})"); } } diff --git a/tests/MoBi.Tests/Core/FormulaCachePresenterSpecs.cs b/tests/MoBi.Tests/Core/FormulaCachePresenterSpecs.cs index cdecdeaba..f89d2a1e9 100644 --- a/tests/MoBi.Tests/Core/FormulaCachePresenterSpecs.cs +++ b/tests/MoBi.Tests/Core/FormulaCachePresenterSpecs.cs @@ -62,7 +62,7 @@ protected override void Context() _dtoFormula = new FormulaBuilderDTO(); _dtoFormula.Id = _formula.Id; A.CallTo(() => _formulaChecker.FormulaUsedIn(_buildingBlock,_formula)).Returns(false); - A.CallTo(() => _messagePresenter.MessageBoxYesNo(AppConstants.Captions.ReallyDeleteFormula(_formula.Name))) + A.CallTo(() => _messagePresenter.MessageBoxYesNo(AppConstants.Captions.ReallyDeleteFormula(_formula.Name), ViewResult.Yes)) .Returns(ViewResult.Yes); } diff --git a/tests/MoBi.Tests/Core/Mapper/ParameterToDTOParameterMapperSpecs.cs b/tests/MoBi.Tests/Core/Mapper/ParameterToDTOParameterMapperSpecs.cs index d5302c9fd..c48fe5f60 100644 --- a/tests/MoBi.Tests/Core/Mapper/ParameterToDTOParameterMapperSpecs.cs +++ b/tests/MoBi.Tests/Core/Mapper/ParameterToDTOParameterMapperSpecs.cs @@ -9,6 +9,7 @@ using FakeItEasy; using OSPSuite.BDDHelper; using OSPSuite.BDDHelper.Extensions; +using OSPSuite.Core.Domain.Mappers; using OSPSuite.Presentation.DTO; using OSPSuite.Presentation.Mappers; using OSPSuite.Utility.Extensions; @@ -19,7 +20,7 @@ namespace MoBi.Core.Mapper public abstract class concern_for_ParameterToDTOParameterMapper : ContextSpecification { protected IFormulaToFormulaBuilderDTOMapper _formulaMapper; - protected ITagToTagDTOMapper _tagMappper; + protected ITagToTagDTOMapper _tagMapper; protected IGroupRepository _groupRepository; protected IFavoriteRepository _favoriteRepository; protected IEntityPathResolver _entityPathResolver; @@ -28,12 +29,12 @@ public abstract class concern_for_ParameterToDTOParameterMapper : ContextSpecifi protected override void Context() { _formulaMapper = A.Fake(); - _tagMappper = A.Fake(); + _tagMapper = A.Fake(); _groupRepository= A.Fake(); _favoriteRepository = A.Fake(); _entityPathResolver = A.Fake(); _pathToPathElementsMapper= A.Fake(); - sut = new ParameterToParameterDTOMapper(_formulaMapper,_tagMappper,_groupRepository,_favoriteRepository,_entityPathResolver, _pathToPathElementsMapper); + sut = new ParameterToParameterDTOMapper(_formulaMapper,_tagMapper,_groupRepository,_favoriteRepository,_entityPathResolver, _pathToPathElementsMapper); } } @@ -89,8 +90,8 @@ public void should_ask_to_map_formulas() [Observation] public void should_ask_map_all_tags() { - A.CallTo(() => _tagMappper.MapFrom(_tag)).MustHaveHappened(); - A.CallTo(() => _tagMappper.MapFrom(_otherTag)).MustHaveHappened(); + A.CallTo(() => _tagMapper.MapFrom(_tag)).MustHaveHappened(); + A.CallTo(() => _tagMapper.MapFrom(_otherTag)).MustHaveHappened(); } [Observation] @@ -157,8 +158,8 @@ public void should_ask_to_map_formulas() [Observation] public void should_ask_map_all_Tags() { - A.CallTo(() => _tagMappper.MapFrom(_tag)).MustHaveHappened(); - A.CallTo(() => _tagMappper.MapFrom(_otherTag)).MustHaveHappened(); + A.CallTo(() => _tagMapper.MapFrom(_tag)).MustHaveHappened(); + A.CallTo(() => _tagMapper.MapFrom(_otherTag)).MustHaveHappened(); } [Observation] @@ -221,8 +222,8 @@ public void should_ask_to_map_formulas() [Observation] public void should_ask_map_all_Tags() { - A.CallTo(() => _tagMappper.MapFrom(_tag)).MustHaveHappened(); - A.CallTo(() => _tagMappper.MapFrom(_otherTag)).MustHaveHappened(); + A.CallTo(() => _tagMapper.MapFrom(_tag)).MustHaveHappened(); + A.CallTo(() => _tagMapper.MapFrom(_otherTag)).MustHaveHappened(); } [Observation] diff --git a/tests/MoBi.Tests/Core/MoBiContextSpecs.cs b/tests/MoBi.Tests/Core/MoBiContextSpecs.cs index 25d751b6e..6d60e0245 100644 --- a/tests/MoBi.Tests/Core/MoBiContextSpecs.cs +++ b/tests/MoBi.Tests/Core/MoBiContextSpecs.cs @@ -11,7 +11,7 @@ using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Domain.UnitSystem; -using OSPSuite.Infrastructure.Journal; +using OSPSuite.Infrastructure.Serialization.Journal; using OSPSuite.Infrastructure.Serialization.ORM.History; using OSPSuite.Utility.Events; using OSPSuite.Utility.FileLocker; @@ -27,7 +27,7 @@ public abstract class concern_for_MoBiContext : ContextSpecification(); _registerTask = A.Fake(); _objectBaseRepository = A.Fake(); - _moBiHistoryManagerFacory = A.Fake(); + _moBiHistoryManagerFactory = A.Fake(); _serializationService = A.Fake(); _objectPathFactory = A.Fake(); _unregisterTask = A.Fake(); @@ -59,12 +59,12 @@ protected override void Context() sut = new MoBiContext(_objectBaseFactory, _dimensionFactory, _eventPublisher, _serializationService, _objectPathFactory, _objectBaseRepository, - _moBiHistoryManagerFacory, _registerTask, _unregisterTask, + _moBiHistoryManagerFactory, _registerTask, _unregisterTask, _clipboardManager, _container, _objectTypeResolver, _cloneManager, _journalSession, _fileLocker, _lazyLoadTask); - A.CallTo(() => _moBiHistoryManagerFacory.Create()).Returns(A.Fake()); + A.CallTo(() => _moBiHistoryManagerFactory.Create()).Returns(A.Fake()); } } @@ -76,7 +76,6 @@ protected override void Context() { base.Context(); _project = A.Fake(); - _project.DimensionFactory = A.Fake(); _project.Name = "Neu"; sut.LoadFrom(_project); } @@ -91,7 +90,6 @@ public void should_set_the_reference_to_current_project_and_history_manager_to_n { sut.CurrentProject.ShouldBeNull(); sut.HistoryManager.ShouldBeNull(); - sut.DimensionFactory.ProjectFactory.ShouldBeNull(); } [Observation] @@ -109,7 +107,6 @@ protected override void Context() { base.Context(); var project = A.Fake(); - project.DimensionFactory = A.Fake(); project.Name = "Neu"; A.CallTo(() => _objectBaseFactory.Create()).Returns(project); sut.NewProject(); @@ -136,7 +133,6 @@ protected override void Context() { base.Context(); _project = A.Fake(); - _project.DimensionFactory = A.Fake(); _project.Name = "Neu"; sut.LoadFrom(_project); _newObjectBase = A.Fake(); @@ -171,7 +167,6 @@ protected override void Context() { base.Context(); _project = A.Fake(); - _project.DimensionFactory = A.Fake(); _project.Name = "Neu"; _newObjectBase = A.Fake(); id = "ID"; @@ -206,7 +201,6 @@ protected override void Context() { base.Context(); _newProject = A.Fake(); - _newProject.DimensionFactory = A.Fake(); _newProject.Name = "Neu"; A.CallTo(() => _objectBaseFactory.Create()).Returns(_newProject); } @@ -221,12 +215,6 @@ public void should_set_current_project_to_the_new_project() { sut.CurrentProject.ShouldBeEqualTo(_newProject); } - - [Observation] - public void should_set_the_Project_dimension_factory_to_the_project_ones() - { - sut.DimensionFactory.ProjectFactory.ShouldBeEqualTo(_newProject.DimensionFactory); - } } public class When_unregistering_a_simulation_from_context : concern_for_MoBiContext diff --git a/tests/MoBi.Tests/Core/MoBiDimensionFactorySpecs.cs b/tests/MoBi.Tests/Core/MoBiDimensionFactorySpecs.cs index 5c9ab35a5..c43cc218a 100644 --- a/tests/MoBi.Tests/Core/MoBiDimensionFactorySpecs.cs +++ b/tests/MoBi.Tests/Core/MoBiDimensionFactorySpecs.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using MoBi.Assets; using MoBi.Core.Domain.UnitSystem; using OSPSuite.BDDHelper; using OSPSuite.BDDHelper.Extensions; @@ -15,6 +14,7 @@ public abstract class concern_for_MoBiDimensionFactory : ContextSpecification sut.Dimension("TRALALA")).ShouldThrowAn(); } } - - public class When_told_to_retrieve_a_dimension_by_name_that_does_not_exist_and_but_that_is_an_RHS_dimension : concern_for_MoBiDimensionFactory - { - [Observation] - public void should_return_a_new_dimension() - { - sut.Dimension(AppConstants.RHSDimensionName(_drugMassDimension)).ShouldNotBeNull(); - } - } - - - public class When_told_to_retrieve_the_RHS_dimension_for_the_dimensionless_dimension : concern_for_MoBiDimensionFactory - { - [Observation] - public void should_return_the_per_time_dimension() - { - var rhsDimension = sut.RHSDimensionFor(Constants.Dimension.NO_DIMENSION); - rhsDimension.ShouldBeEqualTo(_inversedTimeDimension); - } - } - - public class When_told_to_retrieve_the_RHS_dimension_for_the_time_dimension : concern_for_MoBiDimensionFactory - { - [Observation] - public void should_return_the_fraction_dimension() - { - var rhsDimension = sut.RHSDimensionFor(_timeDimension); - rhsDimension.ShouldBeEqualTo(Constants.Dimension.NO_DIMENSION); - } - } - - public class When_told_to_retrieve_a_rhs_dimension_for_a_dimension : concern_for_MoBiDimensionFactory - { - [Observation] - public void should_return_the_equivalent_dimension_if_it_exists_instead_of_creating_a_new_one() - { - sut.RHSDimensionFor(_volumeDimension).ShouldBeEqualTo(_flowDimension); - } - } - - public class When_told_to_retrieve_a_dimension_by_name_that_does_not_exist_and_that_is_not_a_possible_RHS_dimension : concern_for_MoBiDimensionFactory - { - [Observation] - public void should_return_a_new_dimension() - { - The.Action(() => sut.Dimension("TRALALAL" + AppConstants.RHSDimensionSuffix)).ShouldThrowAn(); - } - } } \ No newline at end of file diff --git a/tests/MoBi.Tests/Core/MoBiMergedDimensionFactorySpecs.cs b/tests/MoBi.Tests/Core/MoBiMergedDimensionFactorySpecs.cs index 52ff9ad61..21a9a876a 100644 --- a/tests/MoBi.Tests/Core/MoBiMergedDimensionFactorySpecs.cs +++ b/tests/MoBi.Tests/Core/MoBiMergedDimensionFactorySpecs.cs @@ -8,9 +8,9 @@ namespace MoBi.Core { - public abstract class concern_for_MoBiMergedDimensionFactory : ContextSpecification + public abstract class concern_for_MoBiMergedDimensionFactory : ContextSpecification { - protected IMoBiDimensionConverterFor _converter; + protected IMoBiDimensionConverter _converter; protected IDimension _source; protected IDimension _target; @@ -24,7 +24,7 @@ protected override void Context() _target.DefaultUnit = _target.Unit("mmol"); _converter = new TestDimensionConverterFor(_source, _target); - sut = new MoBiMergedDimensionFactory(); + sut = new MoBiDimensionFactory(); } @@ -92,7 +92,7 @@ public void should_return_the_dimension_of_the_column() public class When_two_posssible_converter_for_One_conversion_are_present : concern_for_MoBiMergedDimensionFactory { - private IMoBiDimensionConverterFor _otherConverter; + private IMoBiDimensionConverter _otherConverter; private IParameter _parameter; private MergedDimensionFor _res; @@ -132,7 +132,7 @@ public void Shoul_return_a_new_merged_dimnsion() } } - internal class TestDimensionConverterFor : DimensionConverterFor where T : IWithDimension + internal class TestDimensionConverterFor : DimensionConverter where T : IWithDimension { public TestDimensionConverterFor(IDimension sourceDimension, IDimension targetDimension) : base(sourceDimension, targetDimension) diff --git a/tests/MoBi.Tests/Core/SBML/Helper.cs b/tests/MoBi.Tests/Core/SBML/Helper.cs index c58451165..550dd6c03 100644 --- a/tests/MoBi.Tests/Core/SBML/Helper.cs +++ b/tests/MoBi.Tests/Core/SBML/Helper.cs @@ -3,12 +3,12 @@ namespace MoBi.Core.SBML { - public class Helper - { - public static string TestFileFullPath(string fileName) - { - var dataFolder = Path.Combine(Path.Combine(Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\.."),"Core","SBML", "Testfiles"))); - return Path.Combine(dataFolder, fileName); - } - } + public class Helper + { + public static string TestFileFullPath(string fileName) + { + var dataFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "..", "..", "Core", "SBML", "Testfiles"); + return Path.Combine(dataFolder, fileName); + } + } } \ No newline at end of file diff --git a/tests/MoBi.Tests/Core/SerializationContextFactorySpecs.cs b/tests/MoBi.Tests/Core/SerializationContextFactorySpecs.cs deleted file mode 100644 index 3dbde7f5d..000000000 --- a/tests/MoBi.Tests/Core/SerializationContextFactorySpecs.cs +++ /dev/null @@ -1,131 +0,0 @@ -using FakeItEasy; -using MoBi.Core.Domain.Model; -using MoBi.Core.Serialization.Services; -using MoBi.Core.Services; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Core.Converter.v5_2; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Data; -using OSPSuite.Core.Domain.Services; -using OSPSuite.Core.Serialization.Xml; -using IContainer = OSPSuite.Utility.Container.IContainer; - -namespace MoBi.Core -{ - public abstract class concern_for_SerializationContextFactory : ContextSpecification - { - protected ISerializationDimensionFactory _dimensionFactory; - protected IObjectBaseFactory _objectBaseFactory; - protected ICloneManagerForModel _cloneManagerForModel; - protected IContainer _container; - protected IMoBiProjectRetriever _projectRetriever; - protected IMoBiProject _project; - - protected override void Context() - { - _dimensionFactory = A.Fake(); - _objectBaseFactory = A.Fake(); - _cloneManagerForModel = A.Fake(); - _container = A.Fake(); - - sut = new SerializationContextFactory(_dimensionFactory, _objectBaseFactory, _cloneManagerForModel, _container); - - _projectRetriever = A.Fake(); - - A.CallTo(() => _container.Resolve()).Returns(_projectRetriever); - - _project = new MoBiProject(); - A.CallTo(() => _projectRetriever.Current).Returns(_project); - } - } - - public class When_creating_a_serialization_context_in_an_empty_project : concern_for_SerializationContextFactory - { - private SerializationContext _result; - - protected override void Because() - { - _result = sut.Create(); - } - - [Observation] - public void should_return_a_serialization_context_without_any_data_repositories_or_simulation_registered() - { - _result.IdRepository.All().ShouldBeEmpty(); - _result.Repositories.ShouldBeEmpty(); - } - } - - public class When_creating_a_serialization_context_based_on_a_parent_serialization_context : concern_for_SerializationContextFactory - { - private SerializationContext _result; - private SerializationContext _parentContext; - private DataRepository _dataRepo1; - private IWithId _simmulation; - - protected override void Context() - { - base.Context(); - _dataRepo1 = new DataRepository("OBS1"); - _simmulation = new MoBiSimulation().WithId("ID"); - _parentContext = new SerializationContext(_dimensionFactory, _objectBaseFactory, new WithIdRepository(), new[] {_dataRepo1}, _cloneManagerForModel, _container); - _parentContext.Register(_simmulation); - } - - protected override void Because() - { - _result = sut.Create(_parentContext); - } - - [Observation] - public void should_add_the_repositories_defined_in_the_parent_context() - { - _result.Repositories.ShouldContain(_dataRepo1); - } - - [Observation] - public void should_register_the_object_registered_in_the_parent_context() - { - _result.IdRepository.All().ShouldContain(_simmulation); - } - } - - public class When_creating_a_serialization_context_with_a_defined_project : concern_for_SerializationContextFactory - { - private SerializationContext _result; - private DataRepository _observedData; - private MoBiSimulation _simmulation; - private DataRepository _simulationResults; - - protected override void Context() - { - base.Context(); - _observedData = new DataRepository("OBS1"); - _simulationResults = new DataRepository("RES"); - _simmulation = new MoBiSimulation().WithId("ID"); - - _simmulation.Results = _simulationResults; - - _project.AddSimulation(_simmulation); - _project.AddObservedData(_observedData); - } - - protected override void Because() - { - _result = sut.Create(); - } - - [Observation] - public void should_add_the_repositories_defined_in_the_parent_context() - { - _result.Repositories.ShouldContain(_observedData, _simulationResults); - } - - [Observation] - public void should_register_the_object_registered_in_the_parent_context() - { - _result.IdRepository.All().ShouldContain(_simmulation, _observedData, _simulationResults); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/Core/Service/AmountToConcentrationConverterSpecs.cs b/tests/MoBi.Tests/Core/Service/AmountToConcentrationConverterSpecs.cs index 622adfc57..d9438dc88 100644 --- a/tests/MoBi.Tests/Core/Service/AmountToConcentrationConverterSpecs.cs +++ b/tests/MoBi.Tests/Core/Service/AmountToConcentrationConverterSpecs.cs @@ -45,7 +45,7 @@ protected override void Context() _formulaCache = new FormulaCache(); _objectTypeResolver=new ObjectTypeResolver(); A.CallTo(() => _formulaTask.AddParentVolumeReferenceToFormula(A._)).Returns(Constants.VOLUME_ALIAS); - A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(DomainHelperForSpecs.AmountDimension); + A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(DomainHelperForSpecs.AmountDimension); A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.AMOUNT_PER_TIME)).Returns(DomainHelperForSpecs.AmountPerTimeDimension); A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION)).Returns(DomainHelperForSpecs.ConcentrationDimension); A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION_PER_TIME)).Returns(DomainHelperForSpecs.ConcentrationPerTimeDimension); diff --git a/tests/MoBi.Tests/Core/Service/DataNamingServiceSpecs.cs b/tests/MoBi.Tests/Core/Service/DataNamingServiceSpecs.cs index e63c42d02..80b3553ac 100644 --- a/tests/MoBi.Tests/Core/Service/DataNamingServiceSpecs.cs +++ b/tests/MoBi.Tests/Core/Service/DataNamingServiceSpecs.cs @@ -1,7 +1,6 @@ using MoBi.Core.Domain.Model; using MoBi.Core.Domain.Services; using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Services; using FakeItEasy; using OSPSuite.BDDHelper; using OSPSuite.BDDHelper.Extensions; @@ -9,7 +8,7 @@ namespace MoBi.Core.Service { - public abstract class concern_for_DataNamingService : ContextSpecification + public abstract class concern_for_DataNamingService : ContextSpecification { protected IMoBiContext _context; diff --git a/tests/MoBi.Tests/Core/Service/PassiveTransportConverterSpecs.cs b/tests/MoBi.Tests/Core/Service/PassiveTransportConverterSpecs.cs deleted file mode 100644 index 6949750b9..000000000 --- a/tests/MoBi.Tests/Core/Service/PassiveTransportConverterSpecs.cs +++ /dev/null @@ -1,174 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Utility.Events; -using OSPSuite.Utility.Extensions; -using FakeItEasy; -using MoBi.Assets; -using MoBi.Core.Domain.Model; -using MoBi.Core.Events; -using MoBi.Core.Services; -using NUnit.Framework; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Formulas; -using OSPSuite.Core.Domain.Services; - -namespace MoBi.Core.Service -{ - public abstract class concern_for_PassiveTransportConverter : ContextSpecification - { - protected IContainerTask _containerTask; - private IObjectBaseFactory _objectBaseFactory; - private IMoBiProjectRetriever _projectRetriever; - protected IMoleculeBuilder _moleculeWithPassiveTransport; - protected TransportBuilder _passiveTransport; - protected IPassiveTransportBuildingBlock _passiveTransports; - protected IMoleculeBuildingBlock _molecules; - protected IMoBiProject _project; - private IEventPublisher _eventPublisher; - protected ShowNotificationsEvent _showNotificationEvent; - protected ICloneManagerForModel _cloneManagerForModel; - protected IFormulaTask _formulaTask; - protected IFormula _passiveTransportKinetic; - - protected override void Context() - { - _containerTask = A.Fake(); - _objectBaseFactory = A.Fake(); - _projectRetriever = A.Fake(); - _eventPublisher = A.Fake(); - _cloneManagerForModel = A.Fake(); - _formulaTask = A.Fake(); - - sut = new PassiveTransportConverter(_objectBaseFactory, _projectRetriever, _containerTask, _eventPublisher, _cloneManagerForModel, _formulaTask); - - A.CallTo(() => _containerTask.CreateUniqueName(A>._, A._, true)) - .ReturnsLazily(x => x.Arguments[1].ToString()); - - _passiveTransportKinetic = new ExplicitFormula("1+2"); - _moleculeWithPassiveTransport = new MoleculeBuilder().WithName("MOLECULE"); - _passiveTransport = new TransportBuilder().WithName("PASSIVE TRANSPORT").WithFormula(_passiveTransportKinetic); - _moleculeWithPassiveTransport.Add(_passiveTransport); - _passiveTransports = new PassiveTransportBuildingBlock(); - _molecules = new MoleculeBuildingBlock {_moleculeWithPassiveTransport}.WithName("MBB"); - _project = new MoBiProject(); - A.CallTo(() => _projectRetriever.Current).Returns(_project); - A.CallTo(() => _eventPublisher.PublishEvent(A._)) - .Invokes(x => _showNotificationEvent = x.GetArgument(0)); - } - } - - public class When_converting_a_simulation_using_passive_transports_defined_in_molecule_builer : concern_for_PassiveTransportConverter - { - private IMoBiSimulation _simulation; - private TransportBuilder _clonedPassiveTransport; - - protected override void Context() - { - base.Context(); - _simulation = A.Fake(); - _simulation.BuildConfiguration.Molecules = _molecules; - _simulation.BuildConfiguration.PassiveTransports = _passiveTransports; - _clonedPassiveTransport = new TransportBuilder().WithName("PASSIVE TRANSPORT"); - A.CallTo(() => _cloneManagerForModel.Clone(_passiveTransport)).Returns(_clonedPassiveTransport); - } - - protected override void Because() - { - sut.Convert(_simulation); - } - - [Observation] - public void should_add_the_passive_transport_in_the_passive_transport_building_block() - { - _passiveTransports.ShouldContain(_clonedPassiveTransport); - } - - [Observation] - public void should_have_renamed_the_passive_transport_to_contain_the_name_of_the_molecule() - { - _clonedPassiveTransport.Name.ShouldBeEqualTo(AppConstants.CompositeNameFor(_passiveTransport.Name, _moleculeWithPassiveTransport.Name)); - } - - [Observation] - public void the_passive_transport_should_only_transport_the_molecule_builder_it_was_attached_to() - { - _clonedPassiveTransport.ForAll.ShouldBeFalse(); - _clonedPassiveTransport.MoleculeNames().ShouldOnlyContain(_moleculeWithPassiveTransport.Name); - } - - [Observation] - public void should_not_notify_any_warning_or_info() - { - _showNotificationEvent.ShouldBeNull(); - } - } - - public class When_converting_a_molecule_building_block_using_a_molecule_with_a_passive_transport : concern_for_PassiveTransportConverter - { - protected override void Because() - { - sut.Convert(_molecules); - } - - [Observation] - public void should_have_added_a_new_passive_transport_to_the_project() - { - _project.PassiveTransportCollection.Count.ShouldBeEqualTo(1); - } - - [Observation] - public void should_have_named_the_newly_added_passive_transport_after_the_molecule_building_block() - { - _project.PassiveTransportCollection.ElementAt(0).Name.ShouldBeEqualTo(_molecules.Name); - } - - [Observation] - public void should_notify_an_info_to_the_user() - { - _showNotificationEvent.ShouldNotBeNull(); - _showNotificationEvent.NotificationMessages.Count.ShouldBeEqualTo(1); - _showNotificationEvent.NotificationMessages[0].BuildingBlock.ShouldBeEqualTo(_project.PassiveTransportCollection.ElementAt(0)); - } - } - - public class When_converting_a_project : concern_for_PassiveTransportConverter - { - private IPassiveTransportBuildingBlock _passiveTransports2; - protected override void Context() - { - base.Context(); - _passiveTransports2 = new PassiveTransportBuildingBlock(); - _project.AddBuildingBlock(_passiveTransports); - _project.AddBuildingBlock(_passiveTransports2); - _project.AddBuildingBlock(_molecules); - - var anotherMoleculeWithPassiveTransport = new MoleculeBuilder().WithName("MOLECULE"); - var molecules2 = new MoleculeBuildingBlock {anotherMoleculeWithPassiveTransport}.WithName("MBB2"); - var samePassiveTransport = new TransportBuilder().WithName("PASSIVE TRANSPORT").WithFormula(A.Fake()); - anotherMoleculeWithPassiveTransport.Add(samePassiveTransport); - - A.CallTo(() => _formulaTask.FormulasAreTheSame(_passiveTransportKinetic, samePassiveTransport.Formula)).Returns(true); - - A.CallTo(() => _cloneManagerForModel.Clone(_passiveTransport)).ReturnsLazily(x => new TransportBuilder().WithFormula(_passiveTransportKinetic)); - A.CallTo(() => _containerTask.CreateUniqueName(_passiveTransports, A._, true)).ReturnsLazily(x => x.Arguments[1].ConvertedTo()); - _project.AddBuildingBlock(molecules2); - } - - protected override void Because() - { - sut.Convert(_project); - } - - [Observation] - public void should_have_added_all_passive_transport_of_all_molecules_in_all_passive_transport_building_blocks() - { - _passiveTransports.Count().ShouldBeEqualTo(1); - _passiveTransports2.Count().ShouldBeEqualTo(1); - Assert.AreNotSame(_passiveTransports.First(),_passiveTransports2.First()); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/Core/Service/SerializationTasksSpecs.cs b/tests/MoBi.Tests/Core/Service/SerializationTasksSpecs.cs index 51e3c3ad6..19814c876 100644 --- a/tests/MoBi.Tests/Core/Service/SerializationTasksSpecs.cs +++ b/tests/MoBi.Tests/Core/Service/SerializationTasksSpecs.cs @@ -31,7 +31,7 @@ public abstract class concern_for_SerializationTask : ContextSpecification _oldFileExists; @@ -44,9 +44,9 @@ protected override void Context() _converterLogger = A.Fake(); _context = A.Fake(); _postSerializationSteps = A.Fake(); - _heavyworkManager = new HeavyWorkManagerForSpecs(); + _heavyWorkManager = new HeavyWorkManagerForSpecs(); sut = new SerializationTask(_serializationService, _contextPersistor, new ObjectTypeResolver(), _dialogCreator, _contentSelector, _converterLogger, - _context, _postSerializationSteps, _heavyworkManager); + _context, _postSerializationSteps, _heavyWorkManager); _fileToOpen = "toto.mbp3"; @@ -78,7 +78,7 @@ protected override void Because() } [Observation] - public void should_return_the_desieriliezed_objects() + public void should_return_the_deserialized_objects() { _result.ShouldNotBeNull(); } @@ -112,7 +112,7 @@ protected override void Because() [Observation] public void should_notify_that_the_project_is_already_open() { - A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._, AppConstants.Captions.OpenAnyway, AppConstants.Captions.CancelButton)).MustHaveHappened(); + A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._, AppConstants.Captions.OpenAnyway, AppConstants.Captions.CancelButton, ViewResult.Yes)).MustHaveHappened(); } } diff --git a/tests/MoBi.Tests/Core/Service/SimulationCommitToBuildingBlockTasksSpecs.cs b/tests/MoBi.Tests/Core/Service/SimulationCommitToBuildingBlockTasksSpecs.cs deleted file mode 100644 index 9068aa4d7..000000000 --- a/tests/MoBi.Tests/Core/Service/SimulationCommitToBuildingBlockTasksSpecs.cs +++ /dev/null @@ -1,97 +0,0 @@ -using FakeItEasy; - -using BTS.BDDHelper; -using BTS.BDDHelper.Extensions; -using MoBi.Core.Commands; -using MoBi.Core.Domain.Model; -using MoBi.Core.Services; -using SBSuite.Core.Domain; -using SBSuite.Core.Domain.Builder; - -using SBSuite.Core.Domain.Services; - - -namespace MoBi.Core.Service -{ - public abstract class concern_for_SimulationCommitToBuildingBlockTasksSpecs : ContextSpecification - { - protected ICreateCommitChangesToBuildingBlockCommandTaskRetriever _taskRetriever; - protected ICloneManagerForBuildingBlock _cloneManagerForBuildingBlock; - - - protected override void Context() - { - _taskRetriever = A.Fake(); - _cloneManagerForBuildingBlock = A.Fake(); - sut = new SimulationCommitToBuildingBlockTasks(_taskRetriever,_cloneManagerForBuildingBlock); - } - } - - class When_tell_a_SimulationCommitToBuildingBlockTasks_to_CommitChanges : concern_for_SimulationCommitToBuildingBlockTasksSpecs - { - private IMoBiSimulation _simulation; - private IBuildingBlock _buildingBlock; - private IMoBiCommand _resultCommand; - - protected override void Context() - { - base.Context(); - _simulation = A.Fake(); - A.CallTo(() => _simulation.MoBiBuildConfiguration).Returns( A.Fake()); - _buildingBlock = A.Fake(); - var buildingBlockTask = A.Fake(); - A.CallTo(() => _taskRetriever.TaskFor(_buildingBlock)).Returns(buildingBlockTask); - A.CallTo(() => buildingBlockTask.CreateCommitToBuildingBlockCommand(_simulation,_buildingBlock)).Returns(A.Fake()); - } - - protected override void Because() - { - _resultCommand=sut.CommitSimulaitionChangesToBuildingBlock(_simulation, _buildingBlock); - } - - [Observation] - public void should_ask_for_building_block_specific_creat_command_task() - { - A.CallTo(() => _taskRetriever.TaskFor(_buildingBlock)).MustHaveHappened(); - } - - [Observation] - public void should_return_macroCommand_conntaining_nessary_commands() - { - var macroCommand = _resultCommand as IMoBiMacroCommand; - macroCommand.ShouldNotBeNull(); - macroCommand.Count.ShouldBeEqualTo(2); - //TODO retrieve single Commands To Check - } - - } - - class When_to_a_SimulationCommitToBuildingBlockTasks_an_empty_command_was_given_by_sub_task : concern_for_SimulationCommitToBuildingBlockTasksSpecs - { - private IMoBiSimulation _simulation; - private IBuildingBlock _buildingBlock; - private IMoBiCommand _resultCommand; - - protected override void Context() - { - base.Context(); - _simulation = A.Fake(); - _buildingBlock = A.Fake(); - var buildingBlockTask = A.Fake(); - A.CallTo(() => _taskRetriever.TaskFor(_buildingBlock)).Returns(buildingBlockTask); - A.CallTo(() => buildingBlockTask.CreateCommitToBuildingBlockCommand(_simulation, _buildingBlock)).Returns(new MoBiEmptyCommand()); - } - - protected override void Because() - { - _resultCommand = sut.CommitSimulaitionChangesToBuildingBlock(_simulation, _buildingBlock); - } - - [Observation] - public void should_return_empty_command() - { - _resultCommand.ShouldBeAnInstanceOf(); - } - - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/Core/SessionFactoryProviderSpecs.cs b/tests/MoBi.Tests/Core/SessionFactoryProviderSpecs.cs index 2751a1975..772d94a53 100644 --- a/tests/MoBi.Tests/Core/SessionFactoryProviderSpecs.cs +++ b/tests/MoBi.Tests/Core/SessionFactoryProviderSpecs.cs @@ -1,6 +1,6 @@ using OSPSuite.BDDHelper; using MoBi.Core.Serialization.ORM.MetaData; -using OSPSuite.Infrastructure.Services; +using OSPSuite.Infrastructure.Serialization.Services; namespace MoBi.Core { diff --git a/tests/MoBi.Tests/Helpers/DiagramModelToXmlMapperForSpecs.cs b/tests/MoBi.Tests/Helpers/DiagramModelToXmlMapperForSpecs.cs new file mode 100644 index 000000000..efa5b9e8b --- /dev/null +++ b/tests/MoBi.Tests/Helpers/DiagramModelToXmlMapperForSpecs.cs @@ -0,0 +1,184 @@ +using System.Collections.Generic; +using System.Drawing; +using System.Linq; +using System.Xml; +using OSPSuite.Core.Diagram; +using OSPSuite.Core.Serialization.Diagram; + +namespace MoBi.Helpers +{ + public class DiagramModelToXmlMapperForSpecs : IDiagramModelToXmlMapper + { + public IDiagramModel XmlDocumentToDiagramModel(XmlDocument xmlDoc) + { + return new DiagramModelForSpecs(); + } + + public XmlDocument DiagramModelToXmlDocument(IDiagramModel diagramModel) + { + var doc = new XmlDocument(); + doc.AppendChild(doc.CreateElement(ElementName)); + return doc; + } + + public void Deserialize(IDiagramModel model, XmlDocument xmlDoc) + { + + } + + public void AddElementBaseNodeBindingFor(T node) + { + + } + + public string ElementName => "DiagramModel"; + } + + public class DiagramModelForSpecs : IDiagramModel + { + public PointF Location { get; set; } + public PointF Center { get; set; } + public SizeF Size { get; set; } + public RectangleF Bounds { get; set; } + + public IEnumerable GetDirectChildren() where T : class + { + return Enumerable.Empty(); + } + + public IEnumerable GetAllChildren() where T : class + { + return Enumerable.Empty(); + } + + public void AddChildNode(IBaseNode node) + { + } + + public void RemoveChildNode(IBaseNode node) + { + } + + public bool ContainsChildNode(IBaseNode node, bool recursive) + { + return false; + } + + public RectangleF CalculateBounds() + { + return new RectangleF(0, 0, 10, 10); + } + + public void SetHiddenRecursive(bool hidden) + { + } + + public void PostLayoutStep() + { + } + + public void Collapse(int level) + { + } + + public void Expand(int level) + { + } + + public IBaseNode GetNode(string id) + { + return null; + } + + public T GetNode(string id) where T : class, IBaseNode + { + return null; + } + + public T CreateNode(string id, PointF location, IContainerBase parentContainerBase) where T : class, IBaseNode, new() + { + return new T(); + } + + public void RemoveNode(string id) + { + } + + public void RenameNode(string id, string name) + { + } + + public IDiagramModel CreateCopy(string containerId = null) + { + return new DiagramModelForSpecs(); + } + + public void ReplaceNodeIds(IDictionary changedIds) + { + } + + public bool IsEmpty() + { + return true; + } + + public void Clear() + { + } + + public void SetDefaultExpansion() + { + } + + public void RefreshSize() + { + } + + public void Undo() + { + } + + public void ClearUndoStack() + { + } + + public void BeginUpdate() + { + } + + public void EndUpdate() + { + } + + public bool StartTransaction() + { + return true; + } + + public bool FinishTransaction(string layoutrecursivedone) + { + return true; + } + + public void ShowDefaultExpansion() + { + } + + public IBaseNode FindByName(string name) + { + return null; + } + + public void AddNodeId(IBaseNode baseNode) + { + } + + public bool IsLayouted { get; set; } + public IDiagramOptions DiagramOptions { get; set; } + public IDiagramModel Create() + { + return new DiagramModelForSpecs(); + } + } + +} \ No newline at end of file diff --git a/tests/MoBi.Tests/Helpers/DomainFactoryForSpecs.cs b/tests/MoBi.Tests/Helpers/DomainFactoryForSpecs.cs index 788f3566d..939534846 100644 --- a/tests/MoBi.Tests/Helpers/DomainFactoryForSpecs.cs +++ b/tests/MoBi.Tests/Helpers/DomainFactoryForSpecs.cs @@ -86,7 +86,7 @@ public static IMoleculeStartValuesBuildingBlock CreateMoleculeStartValuesFor(IMo return startValuesCreator.CreateFrom(buildConfiguration.MoBiSpatialStructure, buildConfiguration.Molecules); } - public static IDimension AmountDimension => DimensionByName(Constants.Dimension.AMOUNT); + public static IDimension AmountDimension => DimensionByName(Constants.Dimension.MOLAR_AMOUNT); public static IDimension DimensionByName(string dimensionName) => IoC.Resolve().Dimension(dimensionName); } diff --git a/tests/MoBi.Tests/Helpers/DomainHelperForSpecs.cs b/tests/MoBi.Tests/Helpers/DomainHelperForSpecs.cs index c0b2019ab..d13a6371a 100644 --- a/tests/MoBi.Tests/Helpers/DomainHelperForSpecs.cs +++ b/tests/MoBi.Tests/Helpers/DomainHelperForSpecs.cs @@ -21,11 +21,11 @@ static DomainHelperForSpecs() /// The full path including the name and extension public static string TestFileFullPath(string fileName) { - var dataFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "..", "TestFiles"); + var dataFolder = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "..", "..", "TestFiles"); return Path.Combine(dataFolder, fileName); } - public static IDimension AmountDimension { get; } = new Dimension(new BaseDimensionRepresentation {AmountExponent = 1}, Constants.Dimension.AMOUNT, "µmol"); + public static IDimension AmountDimension { get; } = new Dimension(new BaseDimensionRepresentation {AmountExponent = 1}, Constants.Dimension.MOLAR_AMOUNT, "µmol"); public static IDimension ConcentrationDimension { get; } = new Dimension(new BaseDimensionRepresentation {LengthExponent = -3, MassExponent = 1, TimeExponent = -1}, Constants.Dimension.MOLAR_CONCENTRATION, "µmol/l"); diff --git a/tests/MoBi.Tests/IntegrationTests/ContextForIntegration.cs b/tests/MoBi.Tests/IntegrationTests/ContextForIntegration.cs index 47e195c46..3e4802d11 100644 --- a/tests/MoBi.Tests/IntegrationTests/ContextForIntegration.cs +++ b/tests/MoBi.Tests/IntegrationTests/ContextForIntegration.cs @@ -4,17 +4,15 @@ using Castle.Facilities.TypedFactory; using FakeItEasy; using MoBi.Assets; -using MoBi.BatchTool.Services; using MoBi.Core; using MoBi.Core.Commands; using MoBi.Core.Domain.Model; using MoBi.Core.Domain.Model.Diagram; using MoBi.Core.Domain.Services; -using MoBi.Core.SBML; using MoBi.Core.Serialization.Xml.Services; using MoBi.Core.Services; using MoBi.Engine; -using MoBi.Engine.Sbml; +using MoBi.Helpers; using MoBi.Presentation; using MoBi.Presentation.Presenter; using MoBi.Presentation.Serialization; @@ -23,7 +21,6 @@ using MoBi.UI.Services; using OSPSuite.BDDHelper; using OSPSuite.Core; -using OSPSuite.Core.Commands; using OSPSuite.Core.Diagram; using OSPSuite.Core.Domain; using OSPSuite.Core.Journal; @@ -81,7 +78,7 @@ public override void GlobalContext() container.RegisterImplementationOf(A.Fake()); container.RegisterImplementationOf(A.Fake()); - container.Register(); + container.Register(); container.Register(LifeStyle.Singleton); container.Register(LifeStyle.Singleton); IHeavyWorkManager heavyWorkManager = new HeavyWorkManagerForSpecs(); diff --git a/tests/MoBi.Tests/IntegrationTests/ProjectTaskIntegrationTests.cs b/tests/MoBi.Tests/IntegrationTests/ProjectTaskIntegrationTests.cs index 3d2d8f6c4..0f2937486 100644 --- a/tests/MoBi.Tests/IntegrationTests/ProjectTaskIntegrationTests.cs +++ b/tests/MoBi.Tests/IntegrationTests/ProjectTaskIntegrationTests.cs @@ -1,14 +1,14 @@ using System; using System.IO; +using MoBi.Core.Domain.Model; +using MoBi.Presentation.Tasks; using OSPSuite.BDDHelper; using OSPSuite.BDDHelper.Extensions; using OSPSuite.Utility.Container; -using MoBi.Core.Domain.Model; -using MoBi.Presentation.Tasks; namespace MoBi.IntegrationTests { - public class LoadProjectIntegrationTest : ContextForIntegration + public class LoadProjectIntegrationTest : ContextWithLoadedProject { private IMoBiContext _context; @@ -16,8 +16,7 @@ public override void GlobalContext() { base.GlobalContext(); _context = IoC.Resolve(); - sut = IoC.Resolve(); - sut.OpenProjectFrom(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\..\\TestFiles\\PK_Manual_Diclofenac.mbp3")); + LoadProject("PK_Manual_Diclofenac"); } [Observation] diff --git a/tests/MoBi.Tests/IntegrationTests/ReportingSpecs.cs b/tests/MoBi.Tests/IntegrationTests/ReportingSpecs.cs index 35877fbb5..9e22c23b9 100644 --- a/tests/MoBi.Tests/IntegrationTests/ReportingSpecs.cs +++ b/tests/MoBi.Tests/IntegrationTests/ReportingSpecs.cs @@ -3,7 +3,6 @@ using System.Linq; using OSPSuite.BDDHelper; using OSPSuite.BDDHelper.Extensions; -using OSPSuite.TeXReporting; using OSPSuite.Utility; using OSPSuite.Utility.Container; using MoBi.Core.Domain.Model; @@ -45,7 +44,7 @@ public override void GlobalContext() private static string TEXTemplateFolder() { - return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..", "..\\Templates", "StandardTemplate"); + return Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TeXTemplates", "StandardTemplate"); } public void CreateReportAndValidate(IObjectBase objectBase) @@ -55,7 +54,7 @@ public void CreateReportAndValidate(IObjectBase objectBase) public void CreateReportAndValidate(object objectToReport, string reportName) { - _reportConfiguration.ReportFile = Path.Combine(_reportsDir.FullName, string.Format("{0}.pdf", reportName)); + _reportConfiguration.ReportFile = Path.Combine(_reportsDir.FullName, $"{reportName}.pdf"); _reportConfiguration.SubTitle = reportName; _reportingTask.CreateReportAsync(objectToReport, _reportConfiguration).Wait(); FileHelper.FileExists(_reportConfiguration.ReportFile).ShouldBeTrue(); diff --git a/tests/MoBi.Tests/IntegrationTests/SBMLTestSuiteSpecs.cs b/tests/MoBi.Tests/IntegrationTests/SBMLTestSuiteSpecs.cs index 6b374554a..a3809ef65 100644 --- a/tests/MoBi.Tests/IntegrationTests/SBMLTestSuiteSpecs.cs +++ b/tests/MoBi.Tests/IntegrationTests/SBMLTestSuiteSpecs.cs @@ -20,7 +20,6 @@ using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Serialization.SimModel.Services; using OSPSuite.Core.Services; -using OSPSuite.Engine.Domain; using OSPSuite.Utility.Container; using OSPSuite.Utility.Extensions; @@ -32,7 +31,7 @@ public class SBMLTestSuiteSpecs : ContextForSBMLIntegration private IBuildConfigurationFactory _buildConfigurationFactory; private IModelConstructor _modelConstructor; private ISimModelExporter _simModelExporter; - private IDataRepositoryTask _dateRepositoryTask; + private IDataRepositoryExportTask _dateRepositoryTask; protected override void Context() { @@ -41,7 +40,7 @@ protected override void Context() _buildConfigurationFactory = IoC.Resolve(); _modelConstructor = IoC.Resolve(); _simModelExporter = IoC.Resolve(); - _dateRepositoryTask = IoC.Resolve(); + _dateRepositoryTask = IoC.Resolve(); _directory = Path.Combine(Path.Combine(Path.Combine(Path.Combine(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "..\\.."), "Core", "SBML", "Testfiles", "SBMLTestSuite")))); } @@ -88,7 +87,7 @@ public void should_be_able_to_read_all_files_and_run_the_most() var simulation = new MoBiSimulation {BuildConfiguration = buildConfigurtion, Model = result.Model}; var simModelManager = new SimModelManager(_simModelExporter, new SimModelSimulationFactory(), - new DataFactory(IoC.Resolve(), new SBMLTestDataNamingService(), IoC.Resolve(), IoC.Resolve(), IoC.Resolve())); + new DataFactory(IoC.Resolve(), IoC.Resolve(), IoC.Resolve(), IoC.Resolve())); var runResults = simModelManager.RunSimulation(simulation); if (!runResults.Success) { @@ -140,22 +139,4 @@ private void addjEmptyBBIfneeded(IMoBiProject project) project.AddBuildingBlock(new ParameterStartValuesBuildingBlock().WithName("Empty")); } } - - internal class SBMLTestDataNamingService : IDataNamingService - { - public string GetTimeName() - { - return AppConstants.TimeColumName; - } - - public string GetNewRepositoryName() - { - return "results"; - } - - public string GetEntityName(string id) - { - return id; - } - } } \ No newline at end of file diff --git a/tests/MoBi.Tests/MoBi.Tests.csproj b/tests/MoBi.Tests/MoBi.Tests.csproj index 8fff55e54..62e531f37 100644 --- a/tests/MoBi.Tests/MoBi.Tests.csproj +++ b/tests/MoBi.Tests/MoBi.Tests.csproj @@ -1,754 +1,98 @@ - - - + + - Debug - AnyCPU - 9.0.21022 - 2.0 - {9DFDB6C9-FB74-4578-AAAF-F89C07BD4414} - Library - Properties + net472 + + false + MoBi - MoBi.Tests - v4.6.2 - 512 - - - - - 3.5 - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 + + x64 - false - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + PreserveNewest + + + + + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + + + + + + + + + + + + + + + + - - ..\..\packages\Antlr3.Runtime.3.5.1\lib\net40-client\Antlr3.Runtime.dll - - - ..\..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\..\packages\Castle.Windsor.4.1.1\lib\net45\Castle.Windsor.dll - - - ..\..\packages\Dapper.1.60.6\lib\net451\Dapper.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - ..\..\packages\FakeItEasy.5.1.1\lib\net45\FakeItEasy.dll - - - ..\..\packages\FluentNHibernate.2.1.2\lib\net461\FluentNHibernate.dll - - - ..\..\packages\SharpZipLib.1.1.0\lib\net45\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\Iesi.Collections.4.0.4\lib\net461\Iesi.Collections.dll - ..\..\pre\libsbmlcsP.dll - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - - ..\..\packages\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Logging.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\..\packages\Microsoft.Extensions.Primitives.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - ..\..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll - True - - - ..\..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll - True - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\NHibernate.5.2.5\lib\net461\NHibernate.dll - - - False - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Draw.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Instruments.dll - True - - - False - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Layout.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Pdf.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Svg.dll - True - - - False - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Xml.dll - True - - - ..\..\packages\NUnit.3.11.0\lib\net45\nunit.framework.dll - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.BDDHelper.3.1.0.1\lib\netstandard2.0\OSPSuite.BDDHelper.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.DataBinding.2.3.0.3\lib\net462\OSPSuite.DataBinding.dll - - - ..\..\packages\OSPSuite.Engine.8.0.4\lib\net462\OSPSuite.Engine.dll - - - ..\..\packages\OSPSuite.FuncParser.3.0.1.14\lib\net45\OSPSuite.FuncParser.dll - - - ..\..\packages\OSPSuite.Infrastructure.8.0.4\lib\net462\OSPSuite.Infrastructure.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.SimModel.3.0.1.27\lib\net45\OSPSuite.SimModel.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - - ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - - ..\..\packages\Remotion.Linq.EagerFetching.2.2.0\lib\net45\Remotion.Linq.EagerFetching.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - ..\..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - 3.5 - - - ..\..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net46\System.Data.SQLite.dll - - - - ..\..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - - - - - 3.5 - - - 3.5 - - - - - 3.0 - - - - - Properties\SolutionInfo.cs - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Code - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - OSPSuite.SimModel.xsd - Designer - PreserveNewest + + True + - - AllCalculationMethods.pkml + PreserveNewest - - - - - - - - - Designer - - - - - - - - - - - - - - - - - - - libsbmlcs.dll + PreserveNewest - - OSPSuite.Dimensions.xml - PreserveNewest - - - OSPSuite.SimModelSolver_CVODES.dll + PreserveNewest - - - SQLite.Interop.dll - PreserveNewest - - - OSPSuite.PKParameters.xml + + PreserveNewest - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Designer + + - - {881d23db-4a9f-45c8-ba67-58b790537634} - MoBi.BatchTool - - - {2DBF50BE-A749-421C-B526-8BDA31CFE7B3} - MoBi.Core - - - {15ED932C-EDEC-407B-91D9-7BCB8E7F95F5} - MoBi.Engine - - - {B4C86DCA-8877-4400-8088-2401EE65B403} - MoBi.Presentation - - - {3c65ffc2-d9ec-4951-8c35-04854ad34e52} - MoBi.Assets - - - {de743812-f444-42e2-b72d-cf298933e2ba} - MoBi.UI - + - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - + + \ No newline at end of file diff --git a/tests/MoBi.Tests/Presentation/DTOValuePointSpecs.cs b/tests/MoBi.Tests/Presentation/DTOValuePointSpecs.cs index 9d38c15fe..9541ff54b 100644 --- a/tests/MoBi.Tests/Presentation/DTOValuePointSpecs.cs +++ b/tests/MoBi.Tests/Presentation/DTOValuePointSpecs.cs @@ -13,7 +13,7 @@ public abstract class concern_for_DTOValuePoint : ContextSpecification { A.Fake(), A.Fake() }; - A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._)).Returns(ViewResult.No); + A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._, ViewResult.Yes)).Returns(ViewResult.No); } protected override void Because() @@ -76,7 +76,7 @@ protected override void Context() { base.Context(); _simulations = new List {A.Fake(), A.Fake()}; - A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._)).Returns(ViewResult.Yes); + A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._, ViewResult.Yes)).Returns(ViewResult.Yes); } protected override void Because() diff --git a/tests/MoBi.Tests/Presentation/Mapper/DataTableToImportQuantityDTOMapperForMoleculesSpecs.cs b/tests/MoBi.Tests/Presentation/Mapper/DataTableToImportQuantityDTOMapperForMoleculesSpecs.cs index b10a48dfe..dc706eec6 100644 --- a/tests/MoBi.Tests/Presentation/Mapper/DataTableToImportQuantityDTOMapperForMoleculesSpecs.cs +++ b/tests/MoBi.Tests/Presentation/Mapper/DataTableToImportQuantityDTOMapperForMoleculesSpecs.cs @@ -68,7 +68,7 @@ protected override void Context() _concentrationDimension = new Dimension(new BaseDimensionRepresentation(), Constants.Dimension.MOLAR_CONCENTRATION, "mol/l"); - _amountDimension = new Dimension(new BaseDimensionRepresentation(), Constants.Dimension.AMOUNT, "mol"); + _amountDimension = new Dimension(new BaseDimensionRepresentation(), Constants.Dimension.MOLAR_AMOUNT, "mol"); _amountDimension.AddUnit("mmol", 0.001, 0); _timeDimension = new Dimension(new BaseDimensionRepresentation(), Constants.Dimension.TIME, "s"); @@ -85,7 +85,7 @@ protected override void Context() A.CallTo(() => _dimensionFactory.DimensionForUnit("s")).Returns(_timeDimension); A.CallTo(() => _dimensionFactory.DimensionForUnit("")).Throws(); - A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_amountDimension); + A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_amountDimension); A.CallTo(() => _dimensionFactory.Dimension(Constants.Dimension.MOLAR_CONCENTRATION)).Returns(_concentrationDimension); A.CallTo(() => _reactionDimensionRetriever.SelectedDimensionMode).Returns(ReactionDimensionMode.AmountBased); diff --git a/tests/MoBi.Tests/Presentation/NotificationPresenterSpecs.cs b/tests/MoBi.Tests/Presentation/NotificationPresenterSpecs.cs index b53cf2ec6..304e59e87 100644 --- a/tests/MoBi.Tests/Presentation/NotificationPresenterSpecs.cs +++ b/tests/MoBi.Tests/Presentation/NotificationPresenterSpecs.cs @@ -1,9 +1,5 @@ using System.Collections.Generic; using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Core.Services; -using OSPSuite.Utility; using FakeItEasy; using MoBi.Assets; using MoBi.Core; @@ -12,16 +8,20 @@ using MoBi.Core.Events; using MoBi.Core.Helper; using MoBi.Core.Services; -using MoBi.Presentation.Settings; using MoBi.Presentation.Mappers; using MoBi.Presentation.Presenter.Main; +using MoBi.Presentation.Settings; using MoBi.Presentation.Views; +using OSPSuite.BDDHelper; +using OSPSuite.BDDHelper.Extensions; using OSPSuite.Core.Domain; using OSPSuite.Core.Domain.Builder; using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Events; +using OSPSuite.Core.Services; using OSPSuite.Presentation.Presenters.ContextMenus; using OSPSuite.Presentation.Regions; +using OSPSuite.Utility; using OSPSuite.Utility.Collections; namespace MoBi.Presentation @@ -57,7 +57,7 @@ protected override void Context() _dialogCreator = A.Fake(); _notificationMessageMapper = new NotificationMessageMapper(new ObjectTypeResolver(), _buildingBlockRetriever); A.CallTo(() => _regionResolver.RegionWithName(RegionNames.NotificationList)).Returns(_region); - sut = new NotificationPresenter(_view, _regionResolver, _userSettings, _notificationMessageMapper,_viewItemContextMenuFactory,_applicationController,_context,_dialogCreator); + sut = new NotificationPresenter(_view, _regionResolver, _userSettings, _notificationMessageMapper, _viewItemContextMenuFactory, _applicationController, _context, _dialogCreator); A.CallTo(() => _view.BindTo(A>._)) .Invokes(x => _allNotifications = x.GetArgument>(0)); @@ -215,7 +215,7 @@ protected override void Because() } [Observation] - public void should_only_add_visible_notificaiton() + public void should_only_add_visible_notification() { _allNotifications.Count().ShouldBeEqualTo(1); } @@ -239,7 +239,7 @@ protected override void Context() _settingsToUse = NotificationType.Error | NotificationType.Info; base.Context(); _visibleNotification = new NotificationMessageDTO(new NotificationMessage(A.Fake(), MessageOrigin.Simulation, A.Fake(), NotificationType.Error)); - _hiddenNotification = new NotificationMessageDTO(new NotificationMessage(A.Fake(), MessageOrigin.Simulation, A.Fake(), NotificationType.Warning)); ; + _hiddenNotification = new NotificationMessageDTO(new NotificationMessage(A.Fake(), MessageOrigin.Simulation, A.Fake(), NotificationType.Warning)); } [Observation] @@ -265,7 +265,7 @@ protected override void Context() base.Context(); _existingInvalidFormula = A.Fake().WithId("EXISTING"); _newInvalidFormula = A.Fake().WithId("NEW"); - sut.Handle(new FormulaInvalidEvent(_existingInvalidFormula, _buildingBlock,"EXISTING OLD")); + sut.Handle(new FormulaInvalidEvent(_existingInvalidFormula, _buildingBlock, "EXISTING OLD")); } protected override void Because() @@ -297,13 +297,13 @@ protected override void Context() base.Context(); _validFormula = A.Fake().WithId("VALID"); _invalidFormula = A.Fake().WithId("INVALID"); - sut.Handle(new FormulaInvalidEvent(_validFormula,_buildingBlock, "VALID_MESSAGE")); - sut.Handle(new FormulaInvalidEvent(_invalidFormula,_buildingBlock, "INVALID_MESSAGE")); + sut.Handle(new FormulaInvalidEvent(_validFormula, _buildingBlock, "VALID_MESSAGE")); + sut.Handle(new FormulaInvalidEvent(_invalidFormula, _buildingBlock, "INVALID_MESSAGE")); } protected override void Because() { - sut.Handle(new FormulaValidEvent(_validFormula,_buildingBlock)); + sut.Handle(new FormulaValidEvent(_validFormula, _buildingBlock)); } [Observation] @@ -319,7 +319,7 @@ public void should_have_kept_the_other_formula_notification() } } - public class When_the_notification_presenter_is_told_to_clear_the_notifcations_of_a_given_origin : concern_for_NotificationPresenter + public class When_the_notification_presenter_is_told_to_clear_the_notifications_of_a_given_origin : concern_for_NotificationPresenter { protected override void Context() { @@ -343,13 +343,13 @@ public void should_remove_the_expected_notification() } } - public class When_the_notification_presenter_is_told_to_clear_all_notifcations : concern_for_NotificationPresenter + public class When_the_notification_presenter_is_told_to_clear_all_notifications : concern_for_NotificationPresenter { protected override void Context() { base.Context(); var validationResult = new ValidationResult(); - validationResult.AddMessage(NotificationType.Error, A.Fake(),"TOTO"); + validationResult.AddMessage(NotificationType.Error, A.Fake(), "TOTO"); sut.Handle(new ShowValidationResultsEvent(validationResult)); sut.Handle(new FormulaInvalidEvent(A.Fake().WithId("INVALID"), _buildingBlock, "INVALID_MESSAGE")); } @@ -372,7 +372,7 @@ protected override void Context() { base.Context(); var validationResult = new ValidationResult(); - validationResult.AddMessage(NotificationType.Error, A.Fake(),"TOTO"); + validationResult.AddMessage(NotificationType.Error, A.Fake(), "TOTO"); sut.Handle(new ShowValidationResultsEvent(validationResult)); sut.Handle(new FormulaInvalidEvent(A.Fake().WithId("INVALID"), _buildingBlock, "INVALID_MESSAGE")); } @@ -389,7 +389,7 @@ public void should_remove_all_notifications() } } - public class When_the_notification_presenter_is_notified_that_an_buildgingblock_was_removed_for_which_a_notification_was_available : concern_for_NotificationPresenter + public class When_the_notification_presenter_is_notified_that_an_building_block_was_removed_for_which_a_notification_was_available : concern_for_NotificationPresenter { protected override void Context() { @@ -435,15 +435,15 @@ public void should_remove_the_notification() public class When_the_notification_presenter_is_asked_to_select_the_item_corresponding_to_a_notification : concern_for_NotificationPresenter { private NotificationMessageDTO _notificationMessage; - private IObjectBase _obectBase; + private IObjectBase _objectBase; protected override void Context() { base.Context(); - _obectBase = A.Fake(); + _objectBase = A.Fake(); _buildingBlock = A.Fake(); A.CallTo(() => _context.HistoryManager).Returns(A.Fake()); - _notificationMessage = new NotificationMessageDTO(new NotificationMessage(_obectBase, MessageOrigin.Simulation, _buildingBlock, NotificationType.Error)); + _notificationMessage = new NotificationMessageDTO(new NotificationMessage(_objectBase, MessageOrigin.Simulation, _buildingBlock, NotificationType.Error)); } protected override void Because() @@ -454,7 +454,7 @@ protected override void Because() [Observation] public void should_select_the_item_in_the_view() { - A.CallTo(() => _applicationController.Select(_obectBase, _buildingBlock, _context.HistoryManager)).MustHaveHappened(); + A.CallTo(() => _applicationController.Select(_objectBase, _buildingBlock, _context.HistoryManager)).MustHaveHappened(); } } @@ -474,7 +474,6 @@ protected override void Because() [Observation] public void should_not_export_anything() { - } } diff --git a/tests/MoBi.Tests/Presentation/ObjectPathCreatorAtReactionParameterSpecs.cs b/tests/MoBi.Tests/Presentation/ObjectPathCreatorAtReactionParameterSpecs.cs index 34675b56b..702ba781d 100644 --- a/tests/MoBi.Tests/Presentation/ObjectPathCreatorAtReactionParameterSpecs.cs +++ b/tests/MoBi.Tests/Presentation/ObjectPathCreatorAtReactionParameterSpecs.cs @@ -161,7 +161,7 @@ protected override void Context() base.Context(); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _parameterName = "Para"; var paramterId = _parameterName; diff --git a/tests/MoBi.Tests/Presentation/ObjectPathCreatorSpecs.cs b/tests/MoBi.Tests/Presentation/ObjectPathCreatorSpecs.cs index 1be46cb16..ba95b357f 100644 --- a/tests/MoBi.Tests/Presentation/ObjectPathCreatorSpecs.cs +++ b/tests/MoBi.Tests/Presentation/ObjectPathCreatorSpecs.cs @@ -91,7 +91,7 @@ protected override void Context() A.CallTo(() => _context.Get(_moleculePropertiesID)).Returns(_moleculeProperties); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); var rootContainer = new Container().WithName(_rootName); var parentContainer = new Container().WithName(_parentName); @@ -137,7 +137,7 @@ protected override void Context() A.CallTo(() => _context.Get(_moleculePropertiesID)).Returns(_moleculeProperties); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); var rootContainer = new Container().WithName(_rootName); var parentContainer = new Container().WithName(_parentName); @@ -184,7 +184,7 @@ protected override void Context() A.CallTo(() => _context.Get(_moleculePropertiesID)).Returns(_moleculeProperties); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _parentContainer = new Container().WithName(_parentName); _parentContainer.Add(_moleculeProperties); @@ -531,7 +531,7 @@ protected override void Context() base.Context(); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _dtoMolecule = new ObjectBaseDTO().WithId(ObjectPathKeywords.MOLECULE); @@ -567,7 +567,7 @@ protected override void Context() base.Context(); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _dtoMoleculeParameter = new DummyParameterDTO().WithId("ID"); _parameterName = "Para"; @@ -613,7 +613,7 @@ protected override void Context() base.Context(); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _parameterName = "Para"; var paramterId = _parameterName; @@ -658,7 +658,7 @@ protected override void Context() base.Context(); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _parameterName = "Para"; var paramterId = _parameterName; @@ -946,7 +946,7 @@ protected override void Context() base.Context(); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _parameterName = "Para"; var paramterId = _parameterName; @@ -1001,7 +1001,7 @@ protected override void Context() base.Context(); var dimensionFactory = A.Fake(); _rightDimension = A.Fake(); - A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.AMOUNT)).Returns(_rightDimension); + A.CallTo(() => dimensionFactory.Dimension(Constants.Dimension.MOLAR_AMOUNT)).Returns(_rightDimension); A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); _parameterName = "Para"; diff --git a/tests/MoBi.Tests/Presentation/ProjectTaskSpecs.cs b/tests/MoBi.Tests/Presentation/ProjectTaskSpecs.cs index 58a4fc8de..80f9e3859 100644 --- a/tests/MoBi.Tests/Presentation/ProjectTaskSpecs.cs +++ b/tests/MoBi.Tests/Presentation/ProjectTaskSpecs.cs @@ -293,7 +293,7 @@ protected override void Context() _project.HasChanged = true; A.CallTo(_dialogCreator).WithReturnType().Returns(string.Empty); A.CallTo(() => _context.CurrentProject).Returns(_project); - A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject)) + A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject, ViewResult.Yes)) .Returns(ViewResult.Yes); } @@ -334,7 +334,7 @@ protected override void Context() _project.HasChanged = true; _project.FilePath = "AA"; A.CallTo(() => _context.CurrentProject).Returns(_project); - A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject)) + A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject, ViewResult.Yes)) .Returns(ViewResult.Yes); } @@ -353,7 +353,7 @@ public void closing_and_closed_events_should_be_raised_in_order() [Observation] public void should_ask_if_project_Should_be_closed() { - A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject)) + A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject, ViewResult.Yes)) .MustHaveHappened(); } @@ -393,7 +393,7 @@ protected override void Context() _project = A.Fake(); _project.HasChanged = true; A.CallTo(() => _context.CurrentProject).Returns(_project); - A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject)) + A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject, ViewResult.Yes)) .Returns(ViewResult.No); } @@ -412,7 +412,7 @@ public void closing_and_closed_events_should_be_raised_in_order() [Observation] public void should_ask_if_project_Should_be_closed() { - A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject)) + A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject, ViewResult.Yes)) .MustHaveHappened(); } @@ -508,7 +508,7 @@ protected override void Context() _oldProject.HasChanged = true; _oldProject.FilePath = String.Empty; A.CallTo(() => _context.CurrentProject).Returns(_oldProject); - A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject)) + A.CallTo(() => _dialogCreator.MessageBoxYesNoCancel(AppConstants.Dialog.DoYouWantToSaveTheCurrentProject, ViewResult.Yes)) .Returns(ViewResult.Yes); A.CallTo( () => diff --git a/tests/MoBi.Tests/Presentation/Tasks/EditTasksForSimulationSpecs.cs b/tests/MoBi.Tests/Presentation/Tasks/EditTasksForSimulationSpecs.cs index a7b93c8ed..08d15c271 100644 --- a/tests/MoBi.Tests/Presentation/Tasks/EditTasksForSimulationSpecs.cs +++ b/tests/MoBi.Tests/Presentation/Tasks/EditTasksForSimulationSpecs.cs @@ -21,7 +21,7 @@ public abstract class concern_for_EditTasksForSimulation : ContextSpecification< protected IInteractionTaskContext _context; private ISimulationPersistor _simulationPersistor; private IDialogCreator _dialogCreator; - private IDataRepositoryTask _dataRepositoryTask; + private IDataRepositoryExportTask _dataRepositoryTask; private ISimModelExporter _simulationModelExporter; private IModelReportCreator _reportCreator; private IDimensionFactory _dimensionFactory; @@ -32,7 +32,7 @@ protected override void Context() _context = A.Fake(); _simulationPersistor = A.Fake(); _dialogCreator = A.Fake(); - _dataRepositoryTask = A.Fake(); + _dataRepositoryTask = A.Fake(); _simulationModelExporter = A.Fake(); _reportCreator = A.Fake(); _dimensionFactory = A.Fake(); diff --git a/tests/MoBi.Tests/Presentation/Tasks/ObservedDataTasksSpecs.cs b/tests/MoBi.Tests/Presentation/Tasks/ObservedDataTasksSpecs.cs index 514fd8718..8e36a6527 100644 --- a/tests/MoBi.Tests/Presentation/Tasks/ObservedDataTasksSpecs.cs +++ b/tests/MoBi.Tests/Presentation/Tasks/ObservedDataTasksSpecs.cs @@ -30,7 +30,7 @@ public abstract class concern_for_ObservedDataTask : ContextSpecification(); _dataRepository = new DataRepository {new BaseGrid("", DimensionFactoryForSpecs.Factory.Dimension("Time"))}; _interactionTask = A.Fake(); - _dataRepositoryTask = A.Fake(); + _dataRepositoryTask = A.Fake(); _containerTask = A.Fake(); _objectTypeResolver = A.Fake(); sut = new ObservedDataTask(_dataImporter, _dimensionFactory, _context, _dialogCreator, _interactionTask, _dataRepositoryTask, _containerTask, _objectTypeResolver); @@ -120,7 +120,7 @@ protected override void Context() { base.Context(); _project.AddObservedData(_dataRepository); - A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._)).Returns(ViewResult.Yes); + A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._, ViewResult.Yes)).Returns(ViewResult.Yes); } protected override void Because() @@ -141,7 +141,7 @@ protected override void Context() { base.Context(); _project.AddObservedData(_dataRepository); - A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._)).Returns(ViewResult.No); + A.CallTo(() => _dialogCreator.MessageBoxYesNo(A._, ViewResult.Yes)).Returns(ViewResult.No); } protected override void Because() @@ -164,7 +164,7 @@ public class When_addding_data_from_Excel : concern_for_ObservedDataTask protected override void Context() { base.Context(); - A.CallTo(() => _dimensionFactory.Dimensions).Returns(new [] + A.CallTo(() => _dimensionFactory.DimensionsSortedByName).Returns(new [] { DimensionFactoryForSpecs.MassDimension, DimensionFactoryForSpecs.TimeDimension, @@ -281,7 +281,7 @@ protected override void Because() [Observation] public void should_ask_the_user_if_he_really_wants_to_delete_the_results() { - A.CallTo(() => _dialogCreator.MessageBoxYesNo(AppConstants.Dialog.RemoveAllResultsFrom(_simulation.Name))).MustHaveHappened(); + A.CallTo(() => _dialogCreator.MessageBoxYesNo(AppConstants.Dialog.RemoveAllResultsFrom(_simulation.Name), ViewResult.Yes)).MustHaveHappened(); } [Observation] @@ -321,7 +321,7 @@ protected override void Because() [Observation] public void should_ask_the_user_if_he_really_wants_to_delete_the_results() { - A.CallTo(() => _dialogCreator.MessageBoxYesNo(AppConstants.Dialog.RemoveAllResultsFromProject())).MustHaveHappened(); + A.CallTo(() => _dialogCreator.MessageBoxYesNo(AppConstants.Dialog.RemoveAllResultsFromProject(), ViewResult.Yes)).MustHaveHappened(); } [Observation] diff --git a/tests/MoBi.Tests/Presentation/Tasks/SimulationRunnerSpecs.cs b/tests/MoBi.Tests/Presentation/Tasks/SimulationRunnerSpecs.cs index 0a1265bc6..a41e383f5 100644 --- a/tests/MoBi.Tests/Presentation/Tasks/SimulationRunnerSpecs.cs +++ b/tests/MoBi.Tests/Presentation/Tasks/SimulationRunnerSpecs.cs @@ -15,8 +15,8 @@ using OSPSuite.Core.Domain.Formulas; using OSPSuite.Core.Domain.Services; using OSPSuite.Core.Services; +using OSPSuite.SimModel; using OSPSuite.Utility.Extensions; -using SimModelNET; using ISimulationPersistableUpdater = MoBi.Core.Services.ISimulationPersistableUpdater; namespace MoBi.Presentation.Tasks @@ -146,7 +146,7 @@ public void should_record_a_command_to_update_the_new_simulation_output_in_the_s [Observation] public void should_have_updated_the_simulation_output_selection() { - _simulation.Settings.OutputSelections.ShouldBeEqualTo(_newOutputSelection); + _simulation.SimulationSettings.OutputSelections.ShouldBeEqualTo(_newOutputSelection); } [Observation] @@ -196,7 +196,7 @@ protected override void Context() _newResults = new DataRepository("NEW"); _simulationResults = new SimulationRunResults(success:true, warnings: Enumerable.Empty(), results: _newResults); - A.CallTo(() => _simModelManager.RunSimulation(_simulation)).Returns(_simulationResults); + A.CallTo(() => _simModelManager.RunSimulation(_simulation, null)).Returns(_simulationResults); var baseGrid = new BaseGrid("Time", DomainHelperForSpecs.TimeDimension); _concentrationColumn = new DataColumn("Drug", DomainHelperForSpecs.ConcentrationDimension, baseGrid); _fractionColumn = new DataColumn("Fraction", DomainHelperForSpecs.FractionDimension, baseGrid); @@ -225,7 +225,7 @@ public void should_update_the_simulation_settings_from_the_selected_output() [Observation] public void should_run_the_simulation() { - A.CallTo(() => _simModelManager.RunSimulation(_simulation)).MustHaveHappened(); + A.CallTo(() => _simModelManager.RunSimulation(_simulation, null)).MustHaveHappened(); } [Observation] diff --git a/tests/MoBi.Tests/ProjectConversion/v3_1/ParameterStarValuesUpdaterSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_1/ParameterStarValuesUpdaterSpecs.cs deleted file mode 100644 index 0b93ea5bf..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_1/ParameterStarValuesUpdaterSpecs.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using System.Collections.Generic; -using FakeItEasy; -using MoBi.Core.Domain.Model; -using MoBi.Core.Serialization.Converter; -using MoBi.Core.Serialization.Converter.v3_1; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.UnitSystem; - -namespace MoBi.ProjectConversion.v3_1 -{ - public abstract class concern_for_ParameterStarValuesUpdaterSpecs : ContextSpecification - { - protected IList _messages; - protected IParameterStartValueDimensionRetriever _dimensionRetriever; - private IDimensionFactory _dimensionFactory; - private IProjectConverterLogger _projectConverterLogger; - - protected override void Context() - { - _dimensionRetriever = A.Fake(); - _dimensionFactory = A.Fake(); - _projectConverterLogger = A.Fake(); - sut = new ParameterStartValuesUpdater(_dimensionRetriever, _dimensionFactory, _projectConverterLogger); - } - } - - internal class When_updating_a_psvbb_to_Version_3_1_3 : concern_for_ParameterStarValuesUpdaterSpecs - { - private IParameterStartValuesBuildingBlock _psvbb; - private IParameterStartValue _psv1; - private IParameterStartValue _psv2; - private IParameterStartValue _psv3; - private IDimension _dim; - private double _startValue; - private IMoBiProject _project; - - protected override void Context() - { - base.Context(); - _psvbb = new ParameterStartValuesBuildingBlock(); - _psv1 = new ParameterStartValue{Path = new ObjectPath("A")}; - _project = A.Fake(); - - _psv2 = new ParameterStartValue { Path = new ObjectPath("B") }; - _psv3 = new ParameterStartValue { Path = new ObjectPath(Constants.Distribution.GEOMETRIC_DEVIATION) }; - _psvbb.Add(_psv1); - _psvbb.Add(_psv2); - _psvbb.Add(_psv3); - _startValue = 2; - _psv3.StartValue = _startValue; - _dim = A.Fake(); - A.CallTo(_dimensionRetriever).WithReturnType().Returns(_dim); - } - - protected override void Because() - { - sut.UpdateParameterStartvalues(_psvbb, _project); - } - - [Observation] - public void should_ask_dimesnion_retirever_for_the_dimesion_of_each_parameter_start_value() - { - A.CallTo(() => _dimensionRetriever.GetDimensionFor(_psv1, _psvbb, _project)).MustHaveHappened(); - A.CallTo(() => _dimensionRetriever.GetDimensionFor(_psv2, _psvbb, _project)).MustHaveHappened(); - A.CallTo(() => _dimensionRetriever.GetDimensionFor(_psv3, _psvbb, _project)).MustHaveHappened(); - } - - [Observation] - public void should_set_dimension_for_all_parameter_start_values() - { - _psv1.Dimension.ShouldBeEqualTo(_dim); - _psv2.Dimension.ShouldBeEqualTo(_dim); - _psv3.Dimension.ShouldBeEqualTo(_dim); - } - - [Observation] - public void should_change_value_of_psv_3() - { - _psv3.StartValue.ShouldBeEqualTo(Math.Exp(_startValue)); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_1/ParameterStartValueDimensionRetrieverSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_1/ParameterStartValueDimensionRetrieverSpecs.cs deleted file mode 100644 index fe1aabbad..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_1/ParameterStartValueDimensionRetrieverSpecs.cs +++ /dev/null @@ -1,77 +0,0 @@ -using FakeItEasy; -using MoBi.Core.Domain.Model; -using MoBi.Core.Serialization.Converter.v3_1; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.UnitSystem; - -namespace MoBi.ProjectConversion.v3_1 -{ - public abstract class concern_for_ParameterStartValueDimensionRetriever : ContextSpecification - { - protected IMoBiContext _context; - - protected override void Context() - { - _context = A.Fake(); - sut = new ParameterStartValueDimensionRetriever(); - } - } - - internal class When_retieving_a_dimension_for_a_paramter_start_value : concern_for_ParameterStartValueDimensionRetriever - { - private IParameterStartValuesBuildingBlock _parentBuidlidingBlock; - private IParameterStartValue _startValue; - private IMoBiProject _project; - private IMoBiBuildConfiguration _buildConfiguration; - private IObjectPath _parameterPath; - private IContainer _root; - private IDimension _reultDimension; - private IParameter _para; - private IMoBiSimulation _simulation; - private IModel _model; - - protected override void Context() - { - base.Context(); - _project = A.Fake(); - _startValue = A.Fake(); - _parameterPath = A.Fake(); - _parentBuidlidingBlock = A.Fake(); - _parentBuidlidingBlock.Id = "Parent"; - _para = A.Fake().WithName("Para").WithDimension(A.Fake()); - A.CallTo(() => _startValue.Path).Returns(_parameterPath); - _simulation = A.Fake(); - A.CallTo(() => _project.Simulations).Returns(new[] {_simulation,}); - _buildConfiguration = A.Fake(); - _buildConfiguration.ParameterStartValuesInfo = new ParameterStartValuesBuildingBlockInfo(); - _buildConfiguration.ParameterStartValuesInfo.TemplateBuildingBlock = _parentBuidlidingBlock; - _model = A.Fake(); - _root = A.Fake(); - A.CallTo(() => _simulation.MoBiBuildConfiguration).Returns(_buildConfiguration); - A.CallTo(() => _simulation.Model).Returns(_model); - A.CallTo(() => _parameterPath.Resolve(_root)).Returns(_para); - _model.Root = _root; - A.CallTo(() => _context.CurrentProject).Returns(_project); - } - - protected override void Because() - { - _reultDimension = sut.GetDimensionFor(_startValue, _parentBuidlidingBlock, _project); - } - - [Observation] - public void should_retrieve_parameter_in_simulation() - { - A.CallTo(() => _parameterPath.Resolve(_root)).MustHaveHappened(); - } - - [Observation] - public void should_return_the_parameters_dimension() - { - _reultDimension.ShouldBeEqualTo(_para.Dimension); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_1/ProjectUpdaterSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_1/ProjectUpdaterSpecs.cs deleted file mode 100644 index 5f282702b..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_1/ProjectUpdaterSpecs.cs +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_1/SpatialStructureUpdaterSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_1/SpatialStructureUpdaterSpecs.cs deleted file mode 100644 index fede8bed5..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_1/SpatialStructureUpdaterSpecs.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using MoBi.Core.Serialization.Converter.v3_1; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Formulas; - -namespace MoBi.ProjectConversion.v3_1 -{ - public abstract class concern_for_SpatialStructureUpdaterSpecs : ContextSpecification - { - protected override void Context() - { - sut = new SpatialStructureUpdaterTo3_1_3(); - } - } - - class When_updating_a_distributed_parameter_with_a_Log_normal_distribution : concern_for_SpatialStructureUpdaterSpecs - { - private IDistributedParameter _distributedParameter; - private double _geometricDeviation = 1; - private Parameter _geoSDParameter; - - protected override void Context() - { - base.Context(); - _distributedParameter = new DistributedParameter().WithName("DP").WithFormula(new LogNormalDistributionFormula()); - _distributedParameter.Add( - new Parameter().WithName(Constants.Distribution.MEAN).WithFormula(new ConstantFormula().WithValue(2))); - _geoSDParameter = new Parameter().WithName(Constants.Distribution.GEOMETRIC_DEVIATION).WithFormula(new ConstantFormula().WithValue(_geometricDeviation)); - _distributedParameter.Add(_geoSDParameter); - - } - - protected override void Because() - { - sut.UpdateDistributedParameterTo3_1_3(_distributedParameter); - } - - [Observation] - public void should_change_Geometric_Deviation_to_its_exp_value() - { - _geoSDParameter.Value.ShouldBeEqualTo(Math.Exp(_geometricDeviation)); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_2/EventGroupBuildingBlockConversionSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_2/EventGroupBuildingBlockConversionSpecs.cs deleted file mode 100644 index 45b241bc1..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_2/EventGroupBuildingBlockConversionSpecs.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain.Builder; - -namespace MoBi.ProjectConversion.v3_2 -{ - public abstract class concern_for_EventGroupBuildingBlockConversionSpecs : ContextWithLoadedProject - { - protected IEventGroupBuildingBlock _eventGroupBuildingBlock; - - public override void GlobalContext() - { - base.GlobalContext(); - _eventGroupBuildingBlock = LoadPKML("Events"); - } - } - - public class When_converting_an_event_group_building_block : concern_for_EventGroupBuildingBlockConversionSpecs - { - [Observation] - public void should_move_event_assigments_to_children() - { - var eventGroup = _eventGroupBuildingBlock.First(); - var applicationBuilder = eventGroup.GetAllChildren().First(); - eventGroup.ShouldNotBeNull(); - applicationBuilder.GetChildren().Count().ShouldBeEqualTo(1); - applicationBuilder.GetChildren().Count().ShouldBeEqualTo(1); - var domainEvent = eventGroup.GetAllChildren().First(); - domainEvent.GetChildren().Count().ShouldBeEqualTo(1); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_2/MoleculeBuildingBlockConversionSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_2/MoleculeBuildingBlockConversionSpecs.cs deleted file mode 100644 index 3b6c59e79..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_2/MoleculeBuildingBlockConversionSpecs.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; - -namespace MoBi.ProjectConversion.v3_2 -{ - public abstract class concern_for_MoleculeBuildingBlockConversionSpecs : ContextWithLoadedProject - { - protected IMoleculeBuildingBlock _moleculeBuildingBlock; - - public override void GlobalContext() - { - base.GlobalContext(); - _moleculeBuildingBlock = LoadPKML("Molecules"); - } - } - - internal class When_converting_a_molecule_building_block : concern_for_MoleculeBuildingBlockConversionSpecs - { - [Observation] - public void should_move_parameters_and_transport_realizations_of_Transporter_container_to_children() - { - var transporterContainer = _moleculeBuildingBlock.First().GetChildren().First(); - var parameter = transporterContainer.GetChildren(); - parameter.Count().ShouldBeEqualTo(1); - var transporter = transporterContainer.GetChildren(); - transporter.Count().ShouldBeEqualTo(1); - var transport = transporter.First(); - transport.Children.Count().ShouldBeEqualTo(1); - } - - [Observation] - public void should_not_move_passive_transports_to_molecule_children() - { - var moleculeBuilder = _moleculeBuildingBlock.First(); - var transporter = moleculeBuilder.GetChildren(); - transporter.Any().ShouldBeFalse(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_2/MultipleOutputSchemaItemConversionSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_2/MultipleOutputSchemaItemConversionSpecs.cs deleted file mode 100644 index 104f97061..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_2/MultipleOutputSchemaItemConversionSpecs.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; - -namespace MoBi.ProjectConversion.v3_2 -{ - public abstract class concern_for_MultipleOutputSchemaItemConversion : ContextWithLoadedProject - { - protected IModelCoreSimulation _simulation; - protected List _intervals; - - public override void GlobalContext() - { - base.GlobalContext(); - _simulation = LoadProject("ManualModel_Sim").Simulations.First(); - } - } - - public class When_converting_the_output_schema_in_the_project_containing_multiple_intervals : concern_for_MultipleOutputSchemaItemConversion - { - [Observation] - public void should_have_converted_the_existing_intervals() - { - _intervals = _simulation.BuildConfiguration.SimulationSettings.OutputSchema.Intervals.ToList(); - _intervals.Count.ShouldBeEqualTo(2); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_2/OutputSchemaConversionSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_2/OutputSchemaConversionSpecs.cs deleted file mode 100644 index 61068166a..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_2/OutputSchemaConversionSpecs.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Serialization.Exchange; - -namespace MoBi.ProjectConversion.v3_2 -{ - public abstract class concern_for_OutputSchemaConversion : ContextWithLoadedProject - { - protected IModelCoreSimulation _simulation; - protected List _intervals; - - public override void GlobalContext() - { - base.GlobalContext(); - _simulation = LoadPKML("warnings").Simulation; - } - } - - public class When_converting_the_output_schema_in_the_project_warning : concern_for_OutputSchemaConversion - { - [Observation] - public void should_have_converted_the_existing_intervals() - { - _intervals = _simulation.BuildConfiguration.SimulationSettings.OutputSchema.Intervals.ToList(); - _intervals.Count.ShouldBeEqualTo(1); - var interval = _intervals[0]; - interval.GetSingleChildByName(Constants.Parameters.START_TIME).Value.ShouldBeEqualTo(0); - interval.GetSingleChildByName(Constants.Parameters.END_TIME).Value.ShouldBeEqualTo(1440); - interval.GetSingleChildByName(Constants.Parameters.RESOLUTION).Value.ShouldBeEqualTo(4.0 / 60.0); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_2/PK_Manual_DiclofenacSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_2/PK_Manual_DiclofenacSpecs.cs deleted file mode 100644 index 3eb69cc5a..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_2/PK_Manual_DiclofenacSpecs.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Utility.Container; -using OSPSuite.Utility.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Services; - -namespace MoBi.ProjectConversion.v3_2 -{ - public abstract class PK_Manual_DiclofenacSpecs : ContextWithLoadedProject - { - protected IMoBiProject _project; - - public override void GlobalContext() - { - base.GlobalContext(); - _project = LoadProject("PK_Manual_Diclofenac"); - } - } - - internal class When_converting_old_Dicolfenac_example : PK_Manual_DiclofenacSpecs - { - [Observation] - public void should_set_project_Has_Changed_flag_to_false() - { - //project does not need to be saved necessarily. It was just open - _project.HasChanged.ShouldBeFalse(); - } - - [Observation] - public void should_set_all_simulations_to_changed() - { - _project.Simulations.Each(sim => sim.HasChanged.ShouldBeTrue()); - } - } - - internal class When_recreating_existing_simulation : PK_Manual_DiclofenacSpecs - { - private IMoBiSimulation _simulation; - private IModelConstructor _modelConstructor; - private IMoBiBuildConfiguration _buildConfiguration; - private CreationResult _results; - private ISimModelManager _simModelManager; - private IMoBiContext _context; - - protected override void Context() - { - base.Context(); - _modelConstructor = IoC.Resolve(); - _simModelManager = IoC.Resolve(); - _buildConfiguration = IoC.Resolve().CreateFromReferencesUsedIn(_project.Simulations.Last().MoBiBuildConfiguration); - _buildConfiguration.ShowProgress = false; - _context = IoC.Resolve(); - } - - protected override void Because() - { - _results = _modelConstructor.CreateModelFrom(_buildConfiguration, "test"); - } - - [Observation] - public void should_be_able_to_create_simulation() - { - _results.State.ShouldNotBeEqualTo(ValidationState.Invalid, _results.ValidationResult.Messages.SelectMany(x => x.Details).ToString("\n")); - _simulation = new MoBiSimulation {BuildConfiguration = _buildConfiguration, Model = _results.Model}; - _simulation.Id = "Sim"; - _context.Register(_simulation); - _simModelManager.RunSimulation(_simulation); - } - } - - internal class When_creating_and_running_a_new_simulation : PK_Manual_DiclofenacSpecs - { - private IMoBiSimulation _simulation; - private IModelConstructor _modelConstructor; - private IMoBiBuildConfiguration _buildConfiguration; - private CreationResult _results; - private ISimModelManager _simModelManager; - private IMoBiContext _context; - private ICoreCalculationMethodRepository _calculationMethodRepository; - - protected override void Context() - { - base.Context(); - _modelConstructor = IoC.Resolve(); - _simModelManager = IoC.Resolve(); - _context = IoC.Resolve(); - _calculationMethodRepository = IoC.Resolve(); - _buildConfiguration = createBuildConfiguration(); - } - - private IMoBiBuildConfiguration createBuildConfiguration() - { - var moBiBuildConfiguration = new MoBiBuildConfiguration() - { - SpatialStructure = _project.SpatialStructureCollection.First(), - Molecules = _project.MoleculeBlockCollection.First(), - Reactions = _project.ReactionBlockCollection.First(), - PassiveTransports = _project.PassiveTransportCollection.First(), - Observers = _project.ObserverBlockCollection.First(), - EventGroups = _project.EventBlockCollection.First(), - MoleculeStartValues = _project.MoleculeStartValueBlockCollection.First(), - ParameterStartValues = _project.ParametersStartValueBlockCollection.First(), - SimulationSettings = _project.SimulationSettingsCollection.First() - }; - _calculationMethodRepository.All().Each(moBiBuildConfiguration.AddCalculationMethod); - moBiBuildConfiguration.ShowProgress = false; - moBiBuildConfiguration.ShouldValidate = true; - return moBiBuildConfiguration; - } - - protected override void Because() - { - _results = _modelConstructor.CreateModelFrom(_buildConfiguration, "test"); - } - - [Observation] - public void should_be_able_to_create_simulation() - { - _results.State.ShouldNotBeEqualTo(ValidationState.Invalid, _results.ValidationResult.Messages.SelectMany(x => x.Details).ToString("\n")); - _simulation = new MoBiSimulation {BuildConfiguration = _buildConfiguration, Model = _results.Model}; - _simulation.Id = "Sim"; - _context.Register(_simulation); - _simModelManager.RunSimulation(_simulation); - } - } - - internal class When_converting_the_molecule_building_block_ : PK_Manual_DiclofenacSpecs - { - private IMoleculeBuildingBlock _moleculeBuildingBlock; - - [Observation] - public void should_have_converted_the_molecule_building_block() - { - _moleculeBuildingBlock = _project.MoleculeBlockCollection.First(); - _moleculeBuildingBlock.ShouldNotBeNull(); - } - } - - public class When_converting_the_output_schema_in_the_project_PK_Manual_Diclofenac : PK_Manual_DiclofenacSpecs - { - private List _intervals; - - [Observation] - public void should_have_converted_the_existing_intervals() - { - _intervals = _project.Simulations.First().Settings.OutputSchema.Intervals.ToList(); - _intervals.Count.ShouldBeEqualTo(1); - var interval = _intervals[0]; - interval.GetSingleChildByName(Constants.Parameters.START_TIME).Value.ShouldBeEqualTo(0); - interval.GetSingleChildByName(Constants.Parameters.END_TIME).Value.ShouldBeEqualTo(1440); - interval.GetSingleChildByName(Constants.Parameters.RESOLUTION).Value.ShouldBeEqualTo(4.0 / 60.0, 0.00000001); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_2/PassiveTransportBuildingBlockConversionSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_2/PassiveTransportBuildingBlockConversionSpecs.cs deleted file mode 100644 index 8498112c5..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_2/PassiveTransportBuildingBlockConversionSpecs.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; - -namespace MoBi.ProjectConversion.v3_2 -{ - public abstract class concern_for_PassiveTransportBuildingBlockConversionSpecs : ContextWithLoadedProject - { - protected IPassiveTransportBuildingBlock _passiveTransportBuildingBlock; - - public override void GlobalContext() - { - base.GlobalContext(); - _passiveTransportBuildingBlock = LoadPKML("Passive Transports"); - } - } - - internal class When_converting_a_passive_transport_building_block : concern_for_PassiveTransportBuildingBlockConversionSpecs - { - [Observation] - public void should_return_parameter_as_children() - { - var passiveTransport = _passiveTransportBuildingBlock.First(); - passiveTransport.GetChildren().Count().ShouldBeEqualTo(1); - passiveTransport.Parameters.First().BuildMode.ShouldBeEqualTo(ParameterBuildMode.Local); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_3/ChartConversionSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_3/ChartConversionSpecs.cs deleted file mode 100644 index 65fc89ba5..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_3/ChartConversionSpecs.cs +++ /dev/null @@ -1,27 +0,0 @@ -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.IntegrationTests; -using OSPSuite.Core.Chart; - -namespace MoBi.ProjectConversion.v3_3 -{ - public abstract class concern_for_ChartConversion : ContextWithLoadedProject - { - protected CurveChart _chart; - - public override void GlobalContext() - { - base.GlobalContext(); - _chart = LoadPKML("Chart"); - } - } - - internal class When_converting_ab_chart_element : concern_for_ChartConversion - { - [Observation] - public void should_have_loaded_the_chart() - { - _chart.ShouldNotBeNull(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_3/Converter32To33Specs.cs b/tests/MoBi.Tests/ProjectConversion/v3_3/Converter32To33Specs.cs deleted file mode 100644 index 31fbbaeaf..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_3/Converter32To33Specs.cs +++ /dev/null @@ -1,267 +0,0 @@ -using System.Collections; -using System.Linq; -using OSPSuite.Utility.Events; -using FakeItEasy; - -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.Core.Domain.UnitSystem; -using MoBi.Core.Helper; -using MoBi.Core.Serialization.Converter; -using MoBi.Core.Serialization.Converter.v3_3; - -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Formulas; -using OSPSuite.Core.Domain.Services; -using OSPSuite.Core.Domain.UnitSystem; - - -namespace MoBi.ProjectConversion.v3_3 -{ - public abstract class concern_for_Converter32To33Specs : ContextSpecification - { - private IMoBiContext _context; - - private IDimension _noDimension; - private IFormulaTask _formulaTask; - - protected override void Context() - { - _context = A.Fake(); - var dimensionFactory = A.Fake(); - A.CallTo(() => _context.DimensionFactory).Returns(dimensionFactory); - A.CallTo(() => dimensionFactory.NoDimension).Returns(_noDimension); - _noDimension = A.Fake(); - _formulaTask = A.Fake(); - sut = new Converter321To331(_context,_formulaTask); - } - } - - class When_converting_an_molecule_buidding_block : concern_for_Converter32To33Specs - { - private IMoleculeBuildingBlock _moleculeBuildingBlock; - - protected override void Context() - { - base.Context(); - _moleculeBuildingBlock = new MoleculeBuildingBlock(); - _moleculeBuildingBlock.Add(new MoleculeBuilder().WithName("Drug")); - _moleculeBuildingBlock.Add(new MoleculeBuilder().WithName("Transporter")); - } - - protected override void Because() - { - sut.Convert(_moleculeBuildingBlock, A.Fake()); - } - - [Observation] - public void should_add_total_drug_mass_parameter_to_all_molecule_builders() - { - foreach (var moleculeBuilder in _moleculeBuildingBlock) - { - var parameter = moleculeBuilder.GetSingleChildByName("Total drug mass"); - parameter.ShouldNotBeNull(); - parameter.BuildMode.ShouldBeEqualTo(ParameterBuildMode.Property); - parameter.Formula.ShouldBeAnInstanceOf(); - } - } - } - - class When_converting_observer_building_block : concern_for_Converter32To33Specs - { - private IFormulaUsablePath _totalDrugMassReference; - private IObserverBuildingBlock _observerBuildingBlock; - - protected override void Context() - { - base.Context(); - var monitor = new ExplicitFormula("TotalDrugMass"); - var observer = new ContainerObserverBuilder().WithName("Tralala").WithFormula(monitor); - _totalDrugMassReference = new FormulaUsablePath(new[] { "Applications", "TotalDrugMass" }).WithAlias("TotalDrugMass"); - monitor.AddObjectPath(_totalDrugMassReference); - _observerBuildingBlock = new ObserverBuildingBlock(); - _observerBuildingBlock.Add(observer); - } - - protected override void Because() - { - sut.Convert(_observerBuildingBlock, A.Fake()); - } - - [Observation] - public void should_have_canged_total_drug_mass_parameter_reference() - { - _totalDrugMassReference.ShouldOnlyContainInOrder(ObjectPathKeywords.MOLECULE,"Total drug mass"); - } - - } - - class When_converting_an_event_group : concern_for_Converter32To33Specs - { - private IEventGroupBuildingBlock _eventGroupBuildingBlock; - private IParameter _drugMassParameter; - private IEventGroupBuilder applications; - - protected override void Context() - { - base.Context(); - _eventGroupBuildingBlock = new EventGroupBuildingBlock(); - var eventGroup = new EventGroupBuilder().WithName("EG"); - _eventGroupBuildingBlock.Add(eventGroup); - var ehcStartEvent = new EventBuilder().WithName(Converter321To331.EHCStartEvent); - eventGroup.Add(ehcStartEvent); - var eabOldStart = new EventAssignmentBuilder().WithName("EAB1").WithFormula(new ExplicitFormula("ln(2) / EHC_Halftime * M * EHC_EjectionFraction")); - eabOldStart.UseAsValue = false; - eabOldStart.ObjectPath = new ObjectPath(new[] { "Organism", "Gallbladder", "Gallbladder emptying rate" }); - ehcStartEvent.AddAssignment(eabOldStart); - var assignmentBuilder = new EventAssignmentBuilder().WithName("EAB2").WithFormula(new ExplicitFormula("DontChange")); - assignmentBuilder.ObjectPath = new ObjectPath( new[]{"PATH"}); - ehcStartEvent.AddAssignment(assignmentBuilder); - var ehcStopEvent = new EventBuilder().WithName(Converter321To331.EHCStopEvent); - var eabOldStop = new EventAssignmentBuilder().WithName("EAB1").WithFormula(new ConstantFormula(0)); - eabOldStop.UseAsValue = false; - eabOldStop.ObjectPath = new ObjectPath(new[] { "Organism", "Gallbladder", "Gallbladder emptying rate" }); - ehcStopEvent.AddAssignment(eabOldStop); - assignmentBuilder = new EventAssignmentBuilder().WithName("EAB2").WithFormula(new ExplicitFormula("DontChange")); - assignmentBuilder.ObjectPath = new ObjectPath(new[] { "PATH" }); - ehcStopEvent.AddAssignment(assignmentBuilder); - eventGroup.Add(ehcStopEvent); - - var protocolSchemaItem = new Container().WithName("ProtocolSchemaItem").WithParentContainer(eventGroup); - _drugMassParameter = new Parameter().WithName("DrugMass").WithParentContainer(protocolSchemaItem).WithValue(1); - - applications = new EventGroupBuilder().WithName("Applications"); - applications.Add(new Parameter().WithName("TotalDrugMass")); - _eventGroupBuildingBlock.Add(applications); - } - - protected override void Because() - { - sut.Convert(_eventGroupBuildingBlock, A.Fake()); - } - - [Observation] - public void should_change_EHC_Start_event_to_assign_Gallbladder_emptying_active() - { - var eventGroup = _eventGroupBuildingBlock.First(); - var ehcStartEvent = eventGroup.GetSingleChildByName(Converter321To331.EHCStartEvent); - var assingment = ehcStartEvent.Assignments.FirstOrDefault(a => a.ObjectPath.PathAsString.Equals("Organism|Gallbladder|Gallbladder emptying active")); - assingment.ShouldNotBeNull(); - assingment.UseAsValue.ShouldBeFalse(); - assingment.Formula.IsConstant().ShouldBeTrue(); - ((ConstantFormula)assingment.Formula).Value.ShouldBeEqualTo(1); - } - - [Observation] - public void should_change_EHC_Stop_event_to_assign_Gallbladder_emptying_active() - { - var eventGroup = _eventGroupBuildingBlock.First(); - var ehcStopEvent= eventGroup.GetSingleChildByName(Converter321To331.EHCStopEvent); - var assingment = ehcStopEvent.Assignments.FirstOrDefault(a => a.ObjectPath.PathAsString.Equals("Organism|Gallbladder|Gallbladder emptying active")); - assingment.ShouldNotBeNull(); - assingment.UseAsValue.ShouldBeTrue(); - assingment.Formula.IsConstant().ShouldBeTrue(); - ((ConstantFormula)assingment.Formula).Value.ShouldBeEqualTo(0); - } - - [Observation] - public void should_leave_other_assignments_unchanged() - { - var eventGroup = _eventGroupBuildingBlock.First(); - eventGroup.GetSingleChildByName(Converter321To331.EHCStartEvent); - foreach (var eventBuilder in eventGroup.GetChildren()) - { - var assingment = eventBuilder.Assignments.FindByName("EAB2"); - assingment.Formula.IsExplicit().ShouldBeTrue(); - ((ExplicitFormula)assingment.Formula).FormulaString.ShouldBeEqualTo("DontChange"); - assingment.ObjectPath.PathAsString.ShouldBeEqualTo("PATH"); - } - } - - [Observation] - public void should_add_molecule_tag_to_drugmass_Parameter() - { - var moleculeTag = _drugMassParameter.Tags.FirstOrDefault(t => t.Value.Equals(ObjectPathKeywords.MOLECULE)); - moleculeTag.ShouldNotBeNull(); - } - - [Observation] - public void should_have_removed_total_drug_mass() - { - applications.ContainsName("TotalDrugMass").ShouldBeFalse(); - } - } - - class When_converting_an_spatial_Structure : concern_for_Converter32To33Specs - { - private ISpatialStructure _spatialStructure; - private Parameter _param; - - protected override void Context() - { - base.Context(); - _spatialStructure = new SpatialStructure(); - var organism = new Container().WithName(Constants.ORGANISM); - _spatialStructure.AddTopContainer(organism); - var gallbladder = new Container().WithName(Converter321To331.Gallbladder).WithParentContainer(organism); - _param = new Parameter().WithName("Volume").WithParentContainer(gallbladder); - _spatialStructure.GlobalMoleculeDependentProperties = new Container(); - _spatialStructure.NeighborhoodsContainer = new Container(); - } - - protected override void Because() - { - sut.Convert(_spatialStructure, A.Fake()); - } - - [Observation] - public void should_have_added_gallbladderemptying_active_parameter() - { - var organism = _spatialStructure.TopContainers.First(c => c.Name.Equals(Constants.ORGANISM)); - var gallbladder = organism.GetSingleChildByName(Converter321To331.Gallbladder); - var parameter = gallbladder.GetSingleChildByName(Converter321To331.GallbladderEmptyingActive); - parameter.ShouldNotBeNull(); - parameter.Formula.IsExplicit(); - } - - [Observation] - public void should_set_group_of_param_to_mobi() - { - _param.GroupName.ShouldBeEqualTo(Constants.Groups.MOBI); - } - - } - - class When_converting_an_GallBladderEmptyingTransportBuilder : concern_for_Converter32To33Specs - { - private ITransportBuilder _transportBuilder; - private IMoBiProject _project; - private ExplicitFormula _kinetic; - private IPassiveTransportBuildingBlock _buildingBlock; - - protected override void Context() - { - base.Context(); - _project= A.Fake(); - _kinetic = new ExplicitFormula("GallbladderEmptyingRate"); - _transportBuilder = new TransportBuilder().WithName("GallbladderEmptying").WithKinetic(_kinetic); - _buildingBlock = new PassiveTransportBuildingBlock(); - _buildingBlock.Add(_transportBuilder); - } - - protected override void Because() - { - sut.Convert(_buildingBlock, _project); - } - - [Observation] - public void should_change_the_kinetic_to_new_rate() - { - _kinetic.FormulaString.ShouldBeEqualTo("EHC_Active ? ln(2) / EHC_Halftime * M * EHC_EjectionFraction : 0"); - var alias = _kinetic.ObjectPaths.Select(op => op.Alias); - alias.ShouldOnlyContain("EHC_Active", "EHC_Halftime","M","EHC_EjectionFraction"); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_3/PassiveTransportBuildignBlockConversionSpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_3/PassiveTransportBuildignBlockConversionSpecs.cs deleted file mode 100644 index cd055ee19..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_3/PassiveTransportBuildignBlockConversionSpecs.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Formulas; - -namespace MoBi.ProjectConversion.v3_3 -{ - public abstract class concern_for_PassiveTransportBuildignBlockConversionSpecs : ContextWithLoadedProject - { - protected IPassiveTransportBuildingBlock _passiveTransportBuildingBlock; - - public override void GlobalContext() - { - base.GlobalContext(); - _passiveTransportBuildingBlock = LoadPKML("Passive Transports"); - } - } - - internal class When_converting_an_passive_tranport_building_block : concern_for_PassiveTransportBuildignBlockConversionSpecs - { - [Observation] - public void should_have_changed_GallbladderEmptyin_Transport() - { - var gallbladderEmptying = _passiveTransportBuildingBlock.FirstOrDefault(pt => pt.Name.Equals("GallbladderEmptying")); - gallbladderEmptying.ShouldNotBeNull(); - var kinetic = ((ExplicitFormula) gallbladderEmptying.Formula); - kinetic.FormulaString.ShouldBeEqualTo("EHC_Active ? ln(2) / EHC_Halftime * M * EHC_EjectionFraction : 0"); - var alias = kinetic.ObjectPaths.Select(op => op.Alias); - alias.ShouldOnlyContain("EHC_Active", "EHC_Halftime", "M", "EHC_EjectionFraction"); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_3/ProjectConversion33IntegrationTest.cs b/tests/MoBi.Tests/ProjectConversion/v3_3/ProjectConversion33IntegrationTest.cs deleted file mode 100644 index c35677824..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_3/ProjectConversion33IntegrationTest.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core; -using MoBi.Core.Serialization.Converter.v3_3; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Builder; -using OSPSuite.Core.Domain.Formulas; -using OSPSuite.Core.Serialization.Exchange; - -namespace MoBi.ProjectConversion.v3_3 -{ - public abstract class concern_for_ProjectConversionIntegrationTest : ContextWithLoadedProject - { - protected SimulationTransfer _simulationTransfer; - - public override void GlobalContext() - { - base.GlobalContext(); - _simulationTransfer = LoadPKML("523_Export_S1"); - } - } - - internal class When_converting_project_523_Export_S1 : concern_for_ProjectConversionIntegrationTest - { - protected IEventGroupBuildingBlock _eventGroupBuildingBlock; - - protected override void Context() - { - base.Context(); - _eventGroupBuildingBlock = _simulationTransfer.Simulation.BuildConfiguration.EventGroups; - } - - [Observation] - public void should_have_changed_GallbladderEmptyin_Transport() - { - var passiveTransportBuildingBlock = _simulationTransfer.Simulation.BuildConfiguration.PassiveTransports; - var gallbladderEmptying = passiveTransportBuildingBlock.FirstOrDefault(pt => pt.Name.Equals("GallbladderEmptying")); - gallbladderEmptying.ShouldNotBeNull(); - var kinetic = ((ExplicitFormula) gallbladderEmptying.Formula); - kinetic.FormulaString.ShouldBeEqualTo("EHC_Active ? ln(2) / EHC_Halftime * M * EHC_EjectionFraction : 0"); - var alias = kinetic.ObjectPaths.Select(op => op.Alias); - alias.ShouldOnlyContain("EHC_Active", "EHC_Halftime", "M", "EHC_EjectionFraction"); - } - - [Observation] - public void should_change_EHC_Start_event_to_assign_Gallbladder_emptying_active() - { - var eventGroup = _eventGroupBuildingBlock.First(eg => eg.Name.Equals("EHC")); - eventGroup = eventGroup.GetSingleChildByName("EHC_1"); - var ehcStartEvent = eventGroup.GetSingleChildByName(Converter321To331.EHCStartEvent); - var assingment = ehcStartEvent.Assignments.FirstOrDefault(a => a.ObjectPath.PathAsString.Equals("Organism|Gallbladder|Gallbladder emptying active")); - assingment.ShouldNotBeNull(); - assingment.UseAsValue.ShouldBeFalse(); - assingment.Formula.IsConstant().ShouldBeTrue(); - ((ConstantFormula) assingment.Formula).Value.ShouldBeEqualTo(1); - } - - [Observation] - public void should_change_EHC_Stop_event_to_assign_Gallbladder_emptying_active() - { - var eventGroup = _eventGroupBuildingBlock.First(eg => eg.Name.Equals("EHC")); - eventGroup = eventGroup.GetSingleChildByName("EHC_1"); - var ehcStopEvent = eventGroup.GetSingleChildByName(Converter321To331.EHCStopEvent); - var assingment = ehcStopEvent.Assignments.FirstOrDefault(a => a.ObjectPath.PathAsString.Equals("Organism|Gallbladder|Gallbladder emptying active")); - assingment.ShouldNotBeNull(); - assingment.UseAsValue.ShouldBeTrue(); - assingment.Formula.IsConstant().ShouldBeTrue(); - ((ConstantFormula) assingment.Formula).Value.ShouldBeEqualTo(0); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_5/331_TestGISpecs.cs b/tests/MoBi.Tests/ProjectConversion/v3_5/331_TestGISpecs.cs deleted file mode 100644 index 053d15037..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_5/331_TestGISpecs.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Utility.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Formulas; - -namespace MoBi.ProjectConversion.v3_5 -{ - public class When_converting_the_331_TestGI_project : ContextWithLoadedProject - { - private IMoBiProject _project; - private IMoBiSpatialStructure _spatialStructure; - private IContainer _organism; - - public override void GlobalContext() - { - base.GlobalContext(); - _project = LoadProject("331_TestGI"); - _spatialStructure = _project.SpatialStructureCollection.First(); - _organism = _spatialStructure.TopContainers.FindByName(Constants.ORGANISM); - } - - - [Observation] - public void should_have_created_the_parameter_for_surface_area() - { - var aeff = _organism.EntityAt("Lumen", "Duodenum","Effective surface area"); - aeff.ShouldNotBeNull(); - aeff.Formula.IsExplicit().ShouldBeTrue(); - aeff.Formula.DowncastTo().FormulaString.ShouldBeEqualTo("Ageom * AeffFactor * AeffVariabilityFactor"); - } - - [Observation] - public void should_have_added_the_variability_parameter() - { - var factor = _organism.EntityAt("Lumen", "Effective surface area variability factor"); - factor.ShouldNotBeNull(); - factor.EntityAt(Constants.Distribution.GEOMETRIC_DEVIATION).Value.ShouldBeEqualTo(1.6); - factor.EntityAt(Constants.Distribution.PERCENTILE).Value.ShouldBeEqualTo(0.5); - factor.EntityAt(Constants.Distribution.MEAN).Value.ShouldBeEqualTo(1); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_5/BuildConfiguration_341Specs.cs b/tests/MoBi.Tests/ProjectConversion/v3_5/BuildConfiguration_341Specs.cs deleted file mode 100644 index e42d57a79..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_5/BuildConfiguration_341Specs.cs +++ /dev/null @@ -1,25 +0,0 @@ -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain.Builder; - -namespace MoBi.ProjectConversion.v3_5 -{ - public class When_loading_a_build_configuration_from_a_523_project : ContextWithLoadedProject - { - private BuildConfiguration _buildConfiguration; - - public override void GlobalContext() - { - base.GlobalContext(); - _buildConfiguration = LoadPKML("523_Export_S1"); - } - - [Observation] - public void should_have_defined_a_default_simulation_setting() - { - _buildConfiguration.SimulationSettings.ShouldNotBeNull(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_5/MoBiSimulation3_4Specs.cs b/tests/MoBi.Tests/ProjectConversion/v3_5/MoBiSimulation3_4Specs.cs deleted file mode 100644 index 9a76637e2..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_5/MoBiSimulation3_4Specs.cs +++ /dev/null @@ -1,26 +0,0 @@ -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using OSPSuite.Utility.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.IntegrationTests; -using OSPSuite.Core.Serialization.Exchange; - -namespace MoBi.ProjectConversion.v3_5 -{ - public class When_converting_the_MoBiSimulation3_4 : ContextWithLoadedProject - { - private IMoBiSimulation _simulation; - - protected override void Context() - { - base.Context(); - _simulation = LoadPKML("MoBiSimulation3_4"); - } - - [Observation] - public void should_have_loaded_the_ParameterIdentificationWorkingDirectory_as_defined_in_the_project() - { - _simulation.ParameterIdentificationWorkingDirectory.ShouldNotBeNull(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_5/ModelCoreSimulation3_0Specs.cs b/tests/MoBi.Tests/ProjectConversion/v3_5/ModelCoreSimulation3_0Specs.cs deleted file mode 100644 index 02e1d31d9..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_5/ModelCoreSimulation3_0Specs.cs +++ /dev/null @@ -1,24 +0,0 @@ -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.IntegrationTests; - -namespace MoBi.ProjectConversion.v3_5 -{ - public class When_converting_the_concern_for_ModelCoreSimulation3_0_simulation : ContextWithLoadedProject - { - private IMoBiSimulation _simulation; - - protected override void Context() - { - base.Context(); - _simulation = LoadPKML("ModelCoreSimulation3_0"); - } - - [Observation] - public void should_have_a_simulation_with_a_simulation_settings() - { - _simulation.BuildConfiguration.SimulationSettings.ShouldNotBeNull(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v3_5/SimpleProject_341Specs.cs b/tests/MoBi.Tests/ProjectConversion/v3_5/SimpleProject_341Specs.cs deleted file mode 100644 index 688c80eb0..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v3_5/SimpleProject_341Specs.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain; -using OSPSuite.Core.Domain.Services; - -namespace MoBi.ProjectConversion.v3_5 -{ - public class When_converting_the_simple_project_341 : ContextWithLoadedProject - { - private IMoBiProject _project; - private IMoBiSimulation _simulation; - - public override void GlobalContext() - { - base.GlobalContext(); - _project = LoadProject("SimpleProject_341"); - _simulation = _project.Simulations.First(); - } - - [Observation] - public void should_have_added_a_simulation_settings_building_block_to_the_template() - { - _project.SimulationSettingsCollection.Any().ShouldBeTrue(); - } - - [Observation] - public void should_have_ensured_that_the_simulation_is_referencing_the_simulation_settings_template() - { - _simulation.MoBiBuildConfiguration.SimulationSettingsInfo.TemplateBuildingBlock - .ShouldBeEqualTo(_project.SimulationSettingsCollection.First()); - } - - [Observation] - public void should_have_set_the_project_mode_to_amount() - { - _project.ReactionDimensionMode.ShouldBeEqualTo(ReactionDimensionMode.AmountBased); - } - - [Observation] - public void should_have_added_the_volume_parameter_to_all_physical_containers() - { - foreach (var container in _project.SpatialStructureCollection.SelectMany(x => x.PhysicalContainers)) - { - container.ContainsName(Constants.Parameters.VOLUME).ShouldBeTrue(); - } - } - - [Observation] - public void should_have_added_the_concentration_parameter_to_all_molecule_builder() - { - foreach (var moleculeBuilder in _project.MoleculeBlockCollection.SelectMany(x => x)) - { - moleculeBuilder.ContainsName(Constants.Parameters.CONCENTRATION).ShouldBeTrue(); - } - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v6_0/Converter36To601Specs.cs b/tests/MoBi.Tests/ProjectConversion/v6_0/Converter36To601Specs.cs deleted file mode 100644 index 05cf50d5b..000000000 --- a/tests/MoBi.Tests/ProjectConversion/v6_0/Converter36To601Specs.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Linq; -using OSPSuite.BDDHelper; -using OSPSuite.BDDHelper.Extensions; -using MoBi.Core.Domain.Model; -using MoBi.IntegrationTests; -using OSPSuite.Core.Domain.Services; -using OSPSuite.Core.Serialization.Exchange; - -namespace MoBi.ProjectConversion.v6_0 -{ - public class When_converting_a_project_from_3_6_to_6_0 : ContextWithLoadedProject - { - private IMoBiProject _project; - - public override void GlobalContext() - { - base.GlobalContext(); - _project = LoadProject("EB_LV"); - } - - [Observation] - public void should_be_able_to_load_a_project_with_display_dimension_map_using_a_per_Time_attribute() - { - _project.DisplayUnits.AllDisplayUnits.Count().ShouldBeEqualTo(2); - } - } - - public class When_converting_a_pkml_from_3_6_to_6_0 : ContextWithLoadedProject - { - private SimulationTransfer _simulation; - - public override void GlobalContext() - { - base.GlobalContext(); - _simulation = LoadPKML("run", ReactionDimensionMode.ConcentrationBased); - } - - [Observation] - public void should_be_able_to_load_a_project_with_display_dimension_map_using_a_per_Time_attribute() - { - _simulation.ShouldNotBeNull(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.Tests/ProjectConversion/v9/Converter730To90Specs.cs b/tests/MoBi.Tests/ProjectConversion/v9/Converter730To90Specs.cs new file mode 100644 index 000000000..ee0227552 --- /dev/null +++ b/tests/MoBi.Tests/ProjectConversion/v9/Converter730To90Specs.cs @@ -0,0 +1,24 @@ +using MoBi.Core.Domain.Model; +using MoBi.IntegrationTests; +using OSPSuite.BDDHelper; +using OSPSuite.BDDHelper.Extensions; + +namespace MoBi.ProjectConversion.v9 +{ + public class When_converting_a_project_to_9_0 : ContextWithLoadedProject + { + private IMoBiProject _project; + + public override void GlobalContext() + { + base.GlobalContext(); + _project = LoadProject("EB_LV"); + } + + [Observation] + public void should_have_loaded_the_project_as_expected() + { + _project.ShouldNotBeNull(); + } + } +} \ No newline at end of file diff --git a/tests/MoBi.Tests/Properties/AssemblyInfo.cs b/tests/MoBi.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index a6b53bd68..000000000 --- a/tests/MoBi.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Reflection; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. - -[assembly: AssemblyTitle("MoBi.Tests")] \ No newline at end of file diff --git a/tests/MoBi.Tests/Templates/BTSTemplate/BTSLogo.pdf b/tests/MoBi.Tests/Templates/BTSTemplate/BTSLogo.pdf deleted file mode 100644 index 2a095e4c2..000000000 Binary files a/tests/MoBi.Tests/Templates/BTSTemplate/BTSLogo.pdf and /dev/null differ diff --git a/tests/MoBi.Tests/Templates/BTSTemplate/BTSTemplate.json b/tests/MoBi.Tests/Templates/BTSTemplate/BTSTemplate.json deleted file mode 100644 index c97b97fcc..000000000 --- a/tests/MoBi.Tests/Templates/BTSTemplate/BTSTemplate.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "DisplayName": "Bayer Technology Services GmbH", - "Description": "Standard template with BTS logo in footer." -} \ No newline at end of file diff --git a/tests/MoBi.Tests/Templates/BTSTemplate/BTSTemplate.tex b/tests/MoBi.Tests/Templates/BTSTemplate/BTSTemplate.tex deleted file mode 100644 index a2ce028bb..000000000 --- a/tests/MoBi.Tests/Templates/BTSTemplate/BTSTemplate.tex +++ /dev/null @@ -1,41 +0,0 @@ -\documentclass[a4paper, titlepage, oneside]{report} - -\newcommand{\COLORSTYLE}[1]{\newcommand{\Colorstyle}{#1}} -\COLORSTYLE{@COLORSTYLE} - -\newcommand{\DRAFT}[1]{\newcommand{\Draft}{#1}} -\DRAFT{@DRAFT} - -\newcommand{\FONT}[1]{\newcommand{\Font}{#1}} -\FONT{@FONT} - -\usepackage{SBSuite} - -%set values for placeholder variables -\AUTHOR{@AUTHOR} -\TITLE{@TITLE} -\SUBTITLE{@SUBTITLE} -\KEYWORDS{@KEYWORDS} -\CONTENTFILE{@CONTENTFILE} -%technical information -\SOFTWARE{@SOFTWARE} -\SOFTWAREVERSION{@SOFTWAREVERSION} -\PLATFORM{@PLATFORM} - -\title{\Title\\\SubTitle} -\author{\Author} - -\PDFSettings - -\PageSetupWithLogo{BTSLogo} - -\begin{document} -\TitlePage - -\TableOfContentsPages - -\include{\ContentFile} - -%\TechnicalInformation - -\end{document} \ No newline at end of file diff --git a/tests/MoBi.Tests/Templates/BTSTemplate/SBSuite.sty b/tests/MoBi.Tests/Templates/BTSTemplate/SBSuite.sty deleted file mode 100644 index 388fe4724..000000000 --- a/tests/MoBi.Tests/Templates/BTSTemplate/SBSuite.sty +++ /dev/null @@ -1,306 +0,0 @@ -\NeedsTeXFormat{LaTeX2e}[1994/06/01] -\ProvidesPackage{SBSuite} - [2013/06/13 v0.01 LaTeX package for SBSuite report generator] - -%define placeholder variables -\newcommand{\AUTHOR}[1]{\newcommand{\Author}{#1}} -\newcommand{\TITLE}[1]{\newcommand{\Title}{#1}} -\newcommand{\SUBTITLE}[1]{\newcommand{\SubTitle}{#1}} -\newcommand{\KEYWORDS}[1]{\newcommand{\Keywords}{#1}} -\newcommand{\CONTENTFILE}[1]{\newcommand{\ContentFile}{#1}} -%technical placeholders -\newcommand{\SOFTWARE}[1]{\newcommand{\Software}{#1}} -\newcommand{\SOFTWAREVERSION}[1]{\newcommand{\SoftwareVersion}{#1}} -\newcommand{\PLATFORM}[1]{\newcommand{\Platform}{#1}} -\newcommand{\MIKTEXVERSION}[1]{\newcommand{\MikTEXVersion}{#1}} -\MIKTEXVERSION{MikTEX Portable 2.9} - -%use of packages -\usepackage[\Colorstyle]{xcolor} -\usepackage[export]{adjustbox} -\usepackage{float} -\usepackage{pdflscape} -\usepackage{grffile} -\usepackage{tabu} -\usepackage{longtable} -\usepackage{needspace} -\usepackage[labelfont=bf]{caption} -\usepackage{threeparttablex} -\usepackage{textcomp} -\usepackage[linktocpage=true,colorlinks=false, linkcolor=blue, linkbordercolor=blue]{hyperref} -\usepackage{fancyhdr} -\usepackage{lastpage} -\usepackage[\Draft]{draftwatermark} -\usepackage{tikz} -\usepackage{sectsty} -\usepackage[section]{placeins} -\usepackage{tcolorbox} -\tcbuselibrary{breakable} -\usepackage{pgfplots} -\pgfplotsset{compat=1.8} -%\usepgfplotslibrary{clickable} -\usepgfplotslibrary{external} -\usepgfplotslibrary{statistics} % LATEX and plain TEX -\usepgfplotslibrary{groupplots} -\tikzexternalize[prefix=plots/] -\tikzsetfigurename{plot} - -\usepackage{ifthen} - -%use helvetica as font -\def\Helvetica { - \usepackage[scaled]{helvet} - \renewcommand*\familydefault{\sfdefault} - \usepackage[T1]{fontenc} - \SetWatermarkScale{1} -} - -\def\Optima { - \renewcommand*\sfdefault{uop} - \renewcommand*\familydefault{\sfdefault} - \usepackage[T1]{fontenc} - \SetWatermarkScale{5} -} - -\def\ComputerModernTeletype { - \usepackage[T1]{fontenc} - \renewcommand*\familydefault{\ttdefault} - \SetWatermarkScale{5} -} - -\def\Courier { -\usepackage{courier} -\renewcommand*\familydefault{\ttdefault} -\usepackage[T1]{fontenc} -} - -\def\Bookman { -\usepackage{bookman} -\usepackage[T1]{fontenc} -} - -\def\Inconsolata { -\renewcommand*\familydefault{\ttdefault} -\usepackage[T1]{fontenc} -} - -\def\LatinModern { -\usepackage{lmodern} -\usepackage[T1]{fontenc} -} - -\def\FontSelection #1{ - \ifthenelse{\equal{#1}{Helvetica}}{\Helvetica} - {\ifthenelse{\equal{#1}{Optima}}{\Optima} - {\ifthenelse{\equal{#1}{ComputerModernTeletype}}{\ComputerModernTeletype} - {\ifthenelse{\equal{#1}{Courier}}{\Courier} - {\ifthenelse{\equal{#1}{Bookman}}{\Bookman} - {\ifthenelse{\equal{#1}{Inconsolata}}{\Inconsolata} - {\ifthenelse{\equal{#1}{LatinModern}}{\LatinModern} - {\SetWatermarkScale{6}} - } - } - } - } - } - } -} - -\FontSelection{\Font} - -\usepackage{siunitx} -\def\alignnumbers#1{\tablenum[group-digits=false]{#1}} - -%new command for multi level groupings in plots -% #1 start x coordinate -% #2 end x coordinate -% #3 text -% #4 level, used for yshifting -\pgfplotsset{ - group line offset/.initial=4ex, - text offset/.initial=0ex, - group line extend/.initial=3pt, - draw group line/.style n args={4}{ - after end axis/.append code={ - \coordinate [yshift=-(5pt + \pgfkeysvalueof{/pgfplots/group line offset}) * #4 - \pgfkeysvalueof{/pgfplots/text offset}] (startgroup) at ({axis cs: #1,1} |- {rel axis cs:0,0}); - \coordinate [yshift=-(5pt + \pgfkeysvalueof{/pgfplots/group line offset}) * #4 - \pgfkeysvalueof{/pgfplots/text offset}] (endgroup) at ({axis cs:#2,1} |- {rel axis cs:0,0}); - \draw [decorate,decoration={brace,amplitude=5pt, mirror}, - shorten >=-\pgfkeysvalueof{/pgfplots/group line extend}, - shorten <=-\pgfkeysvalueof{/pgfplots/group line extend}, - ] (startgroup) -- node [anchor=north, yshift=-5pt] {#3} (endgroup); - } - } -} - -\allsectionsfont{\raggedright} - -\tcbset{breakable, - lowerbox=ignored, - colframe=gray!80, - fonttitle=\bfseries\large, - space=0, - colback=gray!5, - coltitle=white, - toprule at break=0pt, - bottomrule at break=0pt, - title after break=continued from previous page} -\newcommand\textbox[2]{ - \begin{center} - \begin{tcolorbox}[title=#1] - #2 - \end{tcolorbox} - \end{center} -} - -\setlength{\LTpre}{0pt} -\setlength{\LTpost}{0pt} -\setlength{\tabulinesep}{3pt} -\captionsetup[longtable]{position=b} - -\setcounter{chapter}{0} -\setcounter{secnumdepth}{5} -\setcounter{tocdepth}{5} -\makeatletter\@addtoreset{chapter}{part}\makeatother - -\parindent 0pt - -\hypersetup{ - pdflinkmargin=2pt -} - -\def\PDFSettings{ -\hypersetup{ - pdfsubject = {\Title}, - pdftitle = {\SubTitle}, - pdfauthor = {\Author}, - pdfkeywords = \Keywords, - pdfproducer = {\Software~\SoftwareVersion} -} -} - -\def\StandardPageSetup{ -\usepackage[a4paper, left=2cm, right=2cm, top=1cm, bottom=1cm, footskip=1.5cm, includeheadfoot]{geometry} - -\pagestyle{fancy} -\fancyhead{} -\fancyfoot{} - -%line thickness for header and footer -\renewcommand{\headrulewidth}{0.4pt} -\renewcommand{\footrulewidth}{0.4pt} - -\fancyhead[R]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\rightmark}}} -\fancyhead[L]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\leftmark}}} -\fancyfoot[C]{\SubTitle} -\fancyfoot[L]{\Title} -\fancyfoot[R]{Page \thepage~of~\pageref{LastPage}} - -\fancypagestyle{plain}{% - \fancyhf{}% - \fancyhead[C]{} %no header - \renewcommand{\headrulewidth}{0.0pt} %no header line - \fancyfoot[C]{\SubTitle} - \fancyfoot[L]{\Title} - \fancyfoot[R]{Page \thepage~of~\pageref{LastPage}} -} -} - -\def\PageSetupWithLogo #1{ -\usepackage[a4paper, left=2cm, right=2cm, top=1cm, bottom=0.1cm, footskip=2.4cm, includeheadfoot]{geometry} - -\pagestyle{fancy} -\fancyhead{} -\fancyfoot{} - -%line thickness for header and footer -\renewcommand{\headrulewidth}{0.4pt} -\renewcommand{\footrulewidth}{0.4pt} - -\newcommand\myfooter{ - \fancyfoot[L]{ - \begin{tabular}[b]{p{0.6\textwidth}} - \Title\\\relax - \SubTitle\\\relax - \end{tabular} - } - \fancyfoot[C]{} - \fancyfoot[R]{ - \begin{tabular}[b]{r} - Page \thepage~of~\pageref{LastPage}\\\relax - \includegraphics[height=22pt]{#1}\\\relax - \end{tabular} - } -} - -\fancyhead[L]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\leftmark}}} -\fancyhead[R]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\rightmark}}} -\myfooter - -\fancypagestyle{plain}{% - \fancyhf{}% - \fancyhead[C]{} %no header - \renewcommand{\headrulewidth}{0.0pt} %no header line - \myfooter -} -} - -\fancypagestyle{empty}{ - \fancyhf{} - \renewcommand{\headrulewidth}{0.0pt} %no header line - \renewcommand{\footrulewidth}{0.0pt} %no footer line - \fancyhead[C]{} %no header - \fancyfoot[C]{Generated using \Software~\SoftwareVersion.} - \footskip=50pt -} - -\def\TitlePage{ -\clearpage -\phantomsection -\pdfbookmark[1]{Title}{title} -\maketitle -} - -\def\TableOfContentsPages{ -\clearpage -\phantomsection -\pdfbookmark[1]{Table of Contents}{toc} -\tableofcontents -\pagebreak -} - -\def\TechnicalInformation{ -\part{Technical Information} - -\par{ -This report was generated by \Software~\SoftwareVersion ~on \today, with \MikTEXVersion, on a \Platform ~platform. -} -\\ - -For the report generation following \LaTeX{} packages have been used: -\begin{itemize} - \item \texttt{xcolor} - \item \texttt{adjustbox} - \item \texttt{float} - \item \texttt{pdflscape} - \item \texttt{grffile} - \item \texttt{tabu} - \item \texttt{longtable} - \item \texttt{needspace} - \item \texttt{caption} - \item \texttt{threeparttablex} - \item \texttt{textcomp} - \item \texttt{hyperref} - \item \texttt{fancyhdr} - \item \texttt{lastpage} - \item \texttt{draftwatermark} - \item \texttt{geometry} - \item \texttt{tikz} - \item \texttt{sectsty} - \item \texttt{placeins} - \item \texttt{tcolorbox} - \item \texttt{pgfplots} - \item \texttt{siunitx} -\end{itemize} -} - -\endinput \ No newline at end of file diff --git a/tests/MoBi.Tests/Templates/StandardTemplate/SBSuite.sty b/tests/MoBi.Tests/Templates/StandardTemplate/SBSuite.sty deleted file mode 100644 index 388fe4724..000000000 --- a/tests/MoBi.Tests/Templates/StandardTemplate/SBSuite.sty +++ /dev/null @@ -1,306 +0,0 @@ -\NeedsTeXFormat{LaTeX2e}[1994/06/01] -\ProvidesPackage{SBSuite} - [2013/06/13 v0.01 LaTeX package for SBSuite report generator] - -%define placeholder variables -\newcommand{\AUTHOR}[1]{\newcommand{\Author}{#1}} -\newcommand{\TITLE}[1]{\newcommand{\Title}{#1}} -\newcommand{\SUBTITLE}[1]{\newcommand{\SubTitle}{#1}} -\newcommand{\KEYWORDS}[1]{\newcommand{\Keywords}{#1}} -\newcommand{\CONTENTFILE}[1]{\newcommand{\ContentFile}{#1}} -%technical placeholders -\newcommand{\SOFTWARE}[1]{\newcommand{\Software}{#1}} -\newcommand{\SOFTWAREVERSION}[1]{\newcommand{\SoftwareVersion}{#1}} -\newcommand{\PLATFORM}[1]{\newcommand{\Platform}{#1}} -\newcommand{\MIKTEXVERSION}[1]{\newcommand{\MikTEXVersion}{#1}} -\MIKTEXVERSION{MikTEX Portable 2.9} - -%use of packages -\usepackage[\Colorstyle]{xcolor} -\usepackage[export]{adjustbox} -\usepackage{float} -\usepackage{pdflscape} -\usepackage{grffile} -\usepackage{tabu} -\usepackage{longtable} -\usepackage{needspace} -\usepackage[labelfont=bf]{caption} -\usepackage{threeparttablex} -\usepackage{textcomp} -\usepackage[linktocpage=true,colorlinks=false, linkcolor=blue, linkbordercolor=blue]{hyperref} -\usepackage{fancyhdr} -\usepackage{lastpage} -\usepackage[\Draft]{draftwatermark} -\usepackage{tikz} -\usepackage{sectsty} -\usepackage[section]{placeins} -\usepackage{tcolorbox} -\tcbuselibrary{breakable} -\usepackage{pgfplots} -\pgfplotsset{compat=1.8} -%\usepgfplotslibrary{clickable} -\usepgfplotslibrary{external} -\usepgfplotslibrary{statistics} % LATEX and plain TEX -\usepgfplotslibrary{groupplots} -\tikzexternalize[prefix=plots/] -\tikzsetfigurename{plot} - -\usepackage{ifthen} - -%use helvetica as font -\def\Helvetica { - \usepackage[scaled]{helvet} - \renewcommand*\familydefault{\sfdefault} - \usepackage[T1]{fontenc} - \SetWatermarkScale{1} -} - -\def\Optima { - \renewcommand*\sfdefault{uop} - \renewcommand*\familydefault{\sfdefault} - \usepackage[T1]{fontenc} - \SetWatermarkScale{5} -} - -\def\ComputerModernTeletype { - \usepackage[T1]{fontenc} - \renewcommand*\familydefault{\ttdefault} - \SetWatermarkScale{5} -} - -\def\Courier { -\usepackage{courier} -\renewcommand*\familydefault{\ttdefault} -\usepackage[T1]{fontenc} -} - -\def\Bookman { -\usepackage{bookman} -\usepackage[T1]{fontenc} -} - -\def\Inconsolata { -\renewcommand*\familydefault{\ttdefault} -\usepackage[T1]{fontenc} -} - -\def\LatinModern { -\usepackage{lmodern} -\usepackage[T1]{fontenc} -} - -\def\FontSelection #1{ - \ifthenelse{\equal{#1}{Helvetica}}{\Helvetica} - {\ifthenelse{\equal{#1}{Optima}}{\Optima} - {\ifthenelse{\equal{#1}{ComputerModernTeletype}}{\ComputerModernTeletype} - {\ifthenelse{\equal{#1}{Courier}}{\Courier} - {\ifthenelse{\equal{#1}{Bookman}}{\Bookman} - {\ifthenelse{\equal{#1}{Inconsolata}}{\Inconsolata} - {\ifthenelse{\equal{#1}{LatinModern}}{\LatinModern} - {\SetWatermarkScale{6}} - } - } - } - } - } - } -} - -\FontSelection{\Font} - -\usepackage{siunitx} -\def\alignnumbers#1{\tablenum[group-digits=false]{#1}} - -%new command for multi level groupings in plots -% #1 start x coordinate -% #2 end x coordinate -% #3 text -% #4 level, used for yshifting -\pgfplotsset{ - group line offset/.initial=4ex, - text offset/.initial=0ex, - group line extend/.initial=3pt, - draw group line/.style n args={4}{ - after end axis/.append code={ - \coordinate [yshift=-(5pt + \pgfkeysvalueof{/pgfplots/group line offset}) * #4 - \pgfkeysvalueof{/pgfplots/text offset}] (startgroup) at ({axis cs: #1,1} |- {rel axis cs:0,0}); - \coordinate [yshift=-(5pt + \pgfkeysvalueof{/pgfplots/group line offset}) * #4 - \pgfkeysvalueof{/pgfplots/text offset}] (endgroup) at ({axis cs:#2,1} |- {rel axis cs:0,0}); - \draw [decorate,decoration={brace,amplitude=5pt, mirror}, - shorten >=-\pgfkeysvalueof{/pgfplots/group line extend}, - shorten <=-\pgfkeysvalueof{/pgfplots/group line extend}, - ] (startgroup) -- node [anchor=north, yshift=-5pt] {#3} (endgroup); - } - } -} - -\allsectionsfont{\raggedright} - -\tcbset{breakable, - lowerbox=ignored, - colframe=gray!80, - fonttitle=\bfseries\large, - space=0, - colback=gray!5, - coltitle=white, - toprule at break=0pt, - bottomrule at break=0pt, - title after break=continued from previous page} -\newcommand\textbox[2]{ - \begin{center} - \begin{tcolorbox}[title=#1] - #2 - \end{tcolorbox} - \end{center} -} - -\setlength{\LTpre}{0pt} -\setlength{\LTpost}{0pt} -\setlength{\tabulinesep}{3pt} -\captionsetup[longtable]{position=b} - -\setcounter{chapter}{0} -\setcounter{secnumdepth}{5} -\setcounter{tocdepth}{5} -\makeatletter\@addtoreset{chapter}{part}\makeatother - -\parindent 0pt - -\hypersetup{ - pdflinkmargin=2pt -} - -\def\PDFSettings{ -\hypersetup{ - pdfsubject = {\Title}, - pdftitle = {\SubTitle}, - pdfauthor = {\Author}, - pdfkeywords = \Keywords, - pdfproducer = {\Software~\SoftwareVersion} -} -} - -\def\StandardPageSetup{ -\usepackage[a4paper, left=2cm, right=2cm, top=1cm, bottom=1cm, footskip=1.5cm, includeheadfoot]{geometry} - -\pagestyle{fancy} -\fancyhead{} -\fancyfoot{} - -%line thickness for header and footer -\renewcommand{\headrulewidth}{0.4pt} -\renewcommand{\footrulewidth}{0.4pt} - -\fancyhead[R]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\rightmark}}} -\fancyhead[L]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\leftmark}}} -\fancyfoot[C]{\SubTitle} -\fancyfoot[L]{\Title} -\fancyfoot[R]{Page \thepage~of~\pageref{LastPage}} - -\fancypagestyle{plain}{% - \fancyhf{}% - \fancyhead[C]{} %no header - \renewcommand{\headrulewidth}{0.0pt} %no header line - \fancyfoot[C]{\SubTitle} - \fancyfoot[L]{\Title} - \fancyfoot[R]{Page \thepage~of~\pageref{LastPage}} -} -} - -\def\PageSetupWithLogo #1{ -\usepackage[a4paper, left=2cm, right=2cm, top=1cm, bottom=0.1cm, footskip=2.4cm, includeheadfoot]{geometry} - -\pagestyle{fancy} -\fancyhead{} -\fancyfoot{} - -%line thickness for header and footer -\renewcommand{\headrulewidth}{0.4pt} -\renewcommand{\footrulewidth}{0.4pt} - -\newcommand\myfooter{ - \fancyfoot[L]{ - \begin{tabular}[b]{p{0.6\textwidth}} - \Title\\\relax - \SubTitle\\\relax - \end{tabular} - } - \fancyfoot[C]{} - \fancyfoot[R]{ - \begin{tabular}[b]{r} - Page \thepage~of~\pageref{LastPage}\\\relax - \includegraphics[height=22pt]{#1}\\\relax - \end{tabular} - } -} - -\fancyhead[L]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\leftmark}}} -\fancyhead[R]{\textit{\nouppercase{\slshape}} \textit{\nouppercase{\rightmark}}} -\myfooter - -\fancypagestyle{plain}{% - \fancyhf{}% - \fancyhead[C]{} %no header - \renewcommand{\headrulewidth}{0.0pt} %no header line - \myfooter -} -} - -\fancypagestyle{empty}{ - \fancyhf{} - \renewcommand{\headrulewidth}{0.0pt} %no header line - \renewcommand{\footrulewidth}{0.0pt} %no footer line - \fancyhead[C]{} %no header - \fancyfoot[C]{Generated using \Software~\SoftwareVersion.} - \footskip=50pt -} - -\def\TitlePage{ -\clearpage -\phantomsection -\pdfbookmark[1]{Title}{title} -\maketitle -} - -\def\TableOfContentsPages{ -\clearpage -\phantomsection -\pdfbookmark[1]{Table of Contents}{toc} -\tableofcontents -\pagebreak -} - -\def\TechnicalInformation{ -\part{Technical Information} - -\par{ -This report was generated by \Software~\SoftwareVersion ~on \today, with \MikTEXVersion, on a \Platform ~platform. -} -\\ - -For the report generation following \LaTeX{} packages have been used: -\begin{itemize} - \item \texttt{xcolor} - \item \texttt{adjustbox} - \item \texttt{float} - \item \texttt{pdflscape} - \item \texttt{grffile} - \item \texttt{tabu} - \item \texttt{longtable} - \item \texttt{needspace} - \item \texttt{caption} - \item \texttt{threeparttablex} - \item \texttt{textcomp} - \item \texttt{hyperref} - \item \texttt{fancyhdr} - \item \texttt{lastpage} - \item \texttt{draftwatermark} - \item \texttt{geometry} - \item \texttt{tikz} - \item \texttt{sectsty} - \item \texttt{placeins} - \item \texttt{tcolorbox} - \item \texttt{pgfplots} - \item \texttt{siunitx} -\end{itemize} -} - -\endinput \ No newline at end of file diff --git a/tests/MoBi.Tests/Templates/StandardTemplate/StandardTemplate.json b/tests/MoBi.Tests/Templates/StandardTemplate/StandardTemplate.json deleted file mode 100644 index c6a8ccd95..000000000 --- a/tests/MoBi.Tests/Templates/StandardTemplate/StandardTemplate.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "DisplayName": "Standard Template", - "Description": "Standard template without any logo." -} \ No newline at end of file diff --git a/tests/MoBi.Tests/Templates/StandardTemplate/StandardTemplate.tex b/tests/MoBi.Tests/Templates/StandardTemplate/StandardTemplate.tex deleted file mode 100644 index 6c9f3ca88..000000000 --- a/tests/MoBi.Tests/Templates/StandardTemplate/StandardTemplate.tex +++ /dev/null @@ -1,41 +0,0 @@ -\documentclass[a4paper, titlepage, oneside]{report} - -\newcommand{\COLORSTYLE}[1]{\newcommand{\Colorstyle}{#1}} -\COLORSTYLE{@COLORSTYLE} - -\newcommand{\DRAFT}[1]{\newcommand{\Draft}{#1}} -\DRAFT{@DRAFT} - -\newcommand{\FONT}[1]{\newcommand{\Font}{#1}} -\FONT{@FONT} - -\usepackage{SBSuite} - -%set values for placeholder variables -\AUTHOR{@AUTHOR} -\TITLE{@TITLE} -\SUBTITLE{@SUBTITLE} -\KEYWORDS{@KEYWORDS} -\CONTENTFILE{@CONTENTFILE} -%technical information -\SOFTWARE{@SOFTWARE} -\SOFTWAREVERSION{@SOFTWAREVERSION} -\PLATFORM{@PLATFORM} - -\title{\Title\\\SubTitle} -\author{\Author} - -\PDFSettings - -\StandardPageSetup - -\begin{document} -\TitlePage - -\TableOfContentsPages - -\include{\ContentFile} - -%\TechnicalInformation - -\end{document} \ No newline at end of file diff --git a/tests/MoBi.Tests/TestFiles/331_TestGI.mbp3 b/tests/MoBi.Tests/TestFiles/331_TestGI.mbp3 deleted file mode 100644 index e656da6af..000000000 Binary files a/tests/MoBi.Tests/TestFiles/331_TestGI.mbp3 and /dev/null differ diff --git a/tests/MoBi.Tests/TestFiles/523_Export_S1.pkml b/tests/MoBi.Tests/TestFiles/523_Export_S1.pkml deleted file mode 100644 index 687d352be..000000000 --- a/tests/MoBi.Tests/TestFiles/523_Export_S1.pkml +++ /dev/null @@ -1,41319 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/MoBi.Tests/TestFiles/EB_LV.mbp3 b/tests/MoBi.Tests/TestFiles/EB_LV.mbp3 index f767354b0..15da86855 100644 Binary files a/tests/MoBi.Tests/TestFiles/EB_LV.mbp3 and b/tests/MoBi.Tests/TestFiles/EB_LV.mbp3 differ diff --git a/tests/MoBi.Tests/TestFiles/Events.pkml b/tests/MoBi.Tests/TestFiles/Events.pkml index 875b5e7f2..2ef7a80a6 100644 --- a/tests/MoBi.Tests/TestFiles/Events.pkml +++ b/tests/MoBi.Tests/TestFiles/Events.pkml @@ -1,9 +1,10 @@  - + + - + - + @@ -11,52 +12,62 @@ - - + + + + - + - + - + - + - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - - - - + @@ -70,15 +81,18 @@ + - - - + - + + + + + + - @@ -89,54 +103,48 @@ - + - + - + - + - + - + - + - - - - - - - + @@ -152,12 +160,12 @@ - + - + - + diff --git a/tests/MoBi.Tests/TestFiles/ManualModel_Sim.mbp3 b/tests/MoBi.Tests/TestFiles/ManualModel_Sim.mbp3 index 6e62c7b7e..f0b89effb 100644 Binary files a/tests/MoBi.Tests/TestFiles/ManualModel_Sim.mbp3 and b/tests/MoBi.Tests/TestFiles/ManualModel_Sim.mbp3 differ diff --git a/tests/MoBi.Tests/TestFiles/MoBiSimulation3_4.pkml b/tests/MoBi.Tests/TestFiles/MoBiSimulation3_4.pkml deleted file mode 100644 index 0e260c827..000000000 --- a/tests/MoBi.Tests/TestFiles/MoBiSimulation3_4.pkml +++ /dev/null @@ -1,41317 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - C1 - - - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - C1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/MoBi.Tests/TestFiles/ModelCoreSimulation3_0.pkml b/tests/MoBi.Tests/TestFiles/ModelCoreSimulation3_0.pkml deleted file mode 100644 index 49d602c8f..000000000 --- a/tests/MoBi.Tests/TestFiles/ModelCoreSimulation3_0.pkml +++ /dev/null @@ -1,47375 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Drug - - - - - - - - - - - Drug - Cyp - - - - - - - - - - Drug - - - - - - - - - - - Drug - - - - - - - - - - - Drug - - - - - - - - - - - - Drug - - - - - - - - - - Drug - - - - - - - - - - Drug - - - - - - - - - - Drug - - - - - - - - - - - Drug - - - - - - - - - - Drug - - - - - - - - - - - - Drug - - - - - - - - - - - Drug - - - - - - - - - - - Drug - - - - - - - - - - - - Drug - - - - - - - - - - Drug - - - - - - - - - - Drug - - - - - - - - - - Drug-Cyp Metabolite - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cyp - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/MoBi.Tests/TestFiles/Molecules.pkml b/tests/MoBi.Tests/TestFiles/Molecules.pkml index 1cf2def7c..690655bda 100644 --- a/tests/MoBi.Tests/TestFiles/Molecules.pkml +++ b/tests/MoBi.Tests/TestFiles/Molecules.pkml @@ -1,200 +1,527 @@  - + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + - - - - + + + + + + + - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -205,7 +532,7 @@ - + @@ -213,27 +540,27 @@ - + - + - + - + @@ -241,7 +568,7 @@ - + @@ -251,20 +578,20 @@ - + - + - + @@ -272,7 +599,7 @@ - + @@ -280,7 +607,7 @@ - + @@ -291,7 +618,7 @@ - + @@ -302,7 +629,7 @@ - + @@ -310,7 +637,7 @@ - + @@ -318,7 +645,7 @@ - + @@ -326,13 +653,13 @@ - + - + @@ -341,69 +668,69 @@ - + - + - + - + - + - + - + - + - + - + - + @@ -411,14 +738,14 @@ - + - + @@ -429,42 +756,42 @@ - + - + - + - + - + - + @@ -472,7 +799,7 @@ - + @@ -482,7 +809,7 @@ - + @@ -490,7 +817,7 @@ - + @@ -500,7 +827,7 @@ - + @@ -511,7 +838,7 @@ - + @@ -522,7 +849,7 @@ - + @@ -538,7 +865,7 @@ - + @@ -549,110 +876,52 @@ - + - + - + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + @@ -722,7 +991,7 @@ - + @@ -756,7 +1025,7 @@ - + diff --git a/tests/MoBi.Tests/TestFiles/PK_Manual_Diclofenac.mbp3 b/tests/MoBi.Tests/TestFiles/PK_Manual_Diclofenac.mbp3 index d1f5bf8a1..cb897fdd5 100644 Binary files a/tests/MoBi.Tests/TestFiles/PK_Manual_Diclofenac.mbp3 and b/tests/MoBi.Tests/TestFiles/PK_Manual_Diclofenac.mbp3 differ diff --git a/tests/MoBi.Tests/TestFiles/Passive Transports.pkml b/tests/MoBi.Tests/TestFiles/Passive Transports.pkml index 23335d18d..4e3e51029 100644 --- a/tests/MoBi.Tests/TestFiles/Passive Transports.pkml +++ b/tests/MoBi.Tests/TestFiles/Passive Transports.pkml @@ -1,15 +1,18 @@  - + + - + - + + + - + @@ -26,17 +29,27 @@ - + + + + - + - - - + + + + + + + + + + \ No newline at end of file diff --git a/tests/MoBi.Tests/TestFiles/Sim.pkml b/tests/MoBi.Tests/TestFiles/Sim.pkml new file mode 100644 index 000000000..c969880bb --- /dev/null +++ b/tests/MoBi.Tests/TestFiles/Sim.pkml @@ -0,0 +1,70318 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + CYP344 + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + + + + + + + + + + Aciclovir + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/tests/MoBi.Tests/TestFiles/SimpleProject_341.mbp3 b/tests/MoBi.Tests/TestFiles/SimpleProject_341.mbp3 deleted file mode 100644 index 2a50b7755..000000000 Binary files a/tests/MoBi.Tests/TestFiles/SimpleProject_341.mbp3 and /dev/null differ diff --git a/tests/MoBi.Tests/TestFiles/run.pkml b/tests/MoBi.Tests/TestFiles/run.pkml index 63c78e82b..69ecbcc01 100644 --- a/tests/MoBi.Tests/TestFiles/run.pkml +++ b/tests/MoBi.Tests/TestFiles/run.pkml @@ -1,22 +1,15 @@  - - + + - - - - - - - - - - + + - + - + + @@ -28,13 +21,13 @@ - + - + @@ -46,107 +39,119 @@ - - - - + + - - - - + + - - - - + + - - - - + + - - + + + - + - + + - - + + - - + + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + - + @@ -154,7 +159,7 @@ - + @@ -165,20 +170,20 @@ - + - + - + @@ -186,32 +191,31 @@ - + - + - + - + - @@ -223,7 +227,7 @@ - + @@ -258,49 +262,41 @@ - - - + + - + - + - + - + - + - + - + - + - + - + - + @@ -311,9 +307,10 @@ - + + - + @@ -323,20 +320,55 @@ - - - + + + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + + - + + @@ -349,17 +381,18 @@ - - + + - + + - + @@ -378,7 +411,7 @@ - + @@ -401,7 +434,7 @@ - + @@ -426,8 +459,9 @@ - + + @@ -436,8 +470,9 @@ - + + @@ -446,8 +481,9 @@ - + + @@ -456,8 +492,9 @@ - + + @@ -466,8 +503,9 @@ - + + @@ -476,8 +514,9 @@ - + + @@ -486,8 +525,9 @@ - + + @@ -496,8 +536,9 @@ - + + @@ -506,8 +547,9 @@ - + + @@ -516,8 +558,9 @@ - + + @@ -526,8 +569,9 @@ - + + @@ -536,8 +580,9 @@ - + + @@ -546,8 +591,9 @@ - + + @@ -558,7 +604,7 @@ - + @@ -572,13 +618,13 @@ - + - + @@ -586,7 +632,7 @@ - + @@ -594,7 +640,7 @@ - + @@ -603,21 +649,21 @@ - + - + - + @@ -626,7 +672,7 @@ - + @@ -634,7 +680,7 @@ - + @@ -643,7 +689,7 @@ - + @@ -652,7 +698,7 @@ - + @@ -750,10 +796,11 @@ - + + - + @@ -772,7 +819,7 @@ - + @@ -817,10 +864,11 @@ - + + - + @@ -839,7 +887,7 @@ - + @@ -862,7 +910,7 @@ - + @@ -887,8 +935,9 @@ - + + @@ -897,8 +946,9 @@ - + + @@ -907,8 +957,9 @@ - + + @@ -917,8 +968,9 @@ - + + @@ -927,8 +979,9 @@ - + + @@ -937,8 +990,9 @@ - + + @@ -947,8 +1001,9 @@ - + + @@ -957,8 +1012,9 @@ - + + @@ -967,8 +1023,9 @@ - + + @@ -977,8 +1034,9 @@ - + + @@ -987,8 +1045,9 @@ - + + @@ -997,8 +1056,9 @@ - + + @@ -1007,8 +1067,9 @@ - + + @@ -1019,7 +1080,7 @@ - + @@ -1033,13 +1094,13 @@ - + - + @@ -1047,7 +1108,7 @@ - + @@ -1055,7 +1116,7 @@ - + @@ -1064,21 +1125,21 @@ - + - + - + @@ -1087,7 +1148,7 @@ - + @@ -1095,7 +1156,7 @@ - + @@ -1104,7 +1165,7 @@ - + @@ -1113,7 +1174,7 @@ - + @@ -1211,10 +1272,11 @@ - + + - + @@ -1229,7 +1291,7 @@ - + @@ -1258,7 +1320,7 @@ - + @@ -1289,8 +1351,9 @@ - + + @@ -1299,8 +1362,9 @@ - + + @@ -1309,8 +1373,9 @@ - + + @@ -1319,8 +1384,9 @@ - + + @@ -1329,8 +1395,9 @@ - + + @@ -1339,8 +1406,9 @@ - + + @@ -1349,8 +1417,9 @@ - + + @@ -1359,8 +1428,9 @@ - + + @@ -1369,8 +1439,9 @@ - + + @@ -1379,8 +1450,9 @@ - + + @@ -1389,8 +1461,9 @@ - + + @@ -1399,8 +1472,9 @@ - + + @@ -1409,8 +1483,9 @@ - + + @@ -1419,8 +1494,9 @@ - + + @@ -1429,8 +1505,9 @@ - + + @@ -1439,8 +1516,9 @@ - + + @@ -1449,8 +1527,9 @@ - + + @@ -1459,8 +1538,9 @@ - + + @@ -1469,8 +1549,9 @@ - + + @@ -1479,8 +1560,9 @@ - + + @@ -1489,8 +1571,9 @@ - + + @@ -1499,8 +1582,9 @@ - + + @@ -1509,8 +1593,9 @@ - + + @@ -1519,8 +1604,9 @@ - + + @@ -1529,8 +1615,9 @@ - + + @@ -1539,8 +1626,9 @@ - + + @@ -1549,8 +1637,9 @@ - + + @@ -1559,8 +1648,9 @@ - + + @@ -1569,8 +1659,9 @@ - + + @@ -1579,8 +1670,9 @@ - + + @@ -1589,8 +1681,9 @@ - + + @@ -1599,8 +1692,9 @@ - + + @@ -1609,8 +1703,9 @@ - + + @@ -1619,8 +1714,9 @@ - + + @@ -1629,8 +1725,9 @@ - + + @@ -1639,8 +1736,9 @@ - + + @@ -1649,8 +1747,9 @@ - + + @@ -1661,7 +1760,7 @@ - + @@ -1674,7 +1773,7 @@ - + @@ -1684,19 +1783,19 @@ - + - + - + @@ -1710,7 +1809,7 @@ - + @@ -1718,7 +1817,7 @@ - + @@ -1726,7 +1825,7 @@ - + @@ -1735,21 +1834,21 @@ - + - + - + @@ -1758,7 +1857,7 @@ - + @@ -1766,7 +1865,7 @@ - + @@ -1775,7 +1874,7 @@ - + @@ -1784,7 +1883,7 @@ - + @@ -1798,7 +1897,7 @@ - + @@ -1806,7 +1905,7 @@ - + @@ -1814,7 +1913,7 @@ - + @@ -1823,21 +1922,21 @@ - + - + - + @@ -1846,7 +1945,7 @@ - + @@ -1854,7 +1953,7 @@ - + @@ -1863,7 +1962,7 @@ - + @@ -1872,7 +1971,7 @@ - + @@ -1886,12 +1985,12 @@ - + - + @@ -1899,7 +1998,7 @@ - + @@ -1908,19 +2007,19 @@ - + - + - + @@ -1929,7 +2028,7 @@ - + @@ -1937,17 +2036,17 @@ - + - + - + @@ -2113,10 +2212,11 @@ - + + - + @@ -2140,7 +2240,7 @@ - + @@ -2167,8 +2267,9 @@ - + + @@ -2177,8 +2278,9 @@ - + + @@ -2187,8 +2289,9 @@ - + + @@ -2197,8 +2300,9 @@ - + + @@ -2207,8 +2311,9 @@ - + + @@ -2217,8 +2322,9 @@ - + + @@ -2227,8 +2333,9 @@ - + + @@ -2237,8 +2344,9 @@ - + + @@ -2247,8 +2355,9 @@ - + + @@ -2257,8 +2366,9 @@ - + + @@ -2267,8 +2377,9 @@ - + + @@ -2277,8 +2388,9 @@ - + + @@ -2287,8 +2399,9 @@ - + + @@ -2297,8 +2410,9 @@ - + + @@ -2307,8 +2421,9 @@ - + + @@ -2317,8 +2432,9 @@ - + + @@ -2327,8 +2443,9 @@ - + + @@ -2337,8 +2454,9 @@ - + + @@ -2347,8 +2465,9 @@ - + + @@ -2357,8 +2476,9 @@ - + + @@ -2367,8 +2487,9 @@ - + + @@ -2377,8 +2498,9 @@ - + + @@ -2387,8 +2509,9 @@ - + + @@ -2397,8 +2520,9 @@ - + + @@ -2407,8 +2531,9 @@ - + + @@ -2417,8 +2542,9 @@ - + + @@ -2427,8 +2553,9 @@ - + + @@ -2437,8 +2564,9 @@ - + + @@ -2447,8 +2575,9 @@ - + + @@ -2457,8 +2586,9 @@ - + + @@ -2467,8 +2597,9 @@ - + + @@ -2477,8 +2608,9 @@ - + + @@ -2487,8 +2619,9 @@ - + + @@ -2497,8 +2630,9 @@ - + + @@ -2509,7 +2643,7 @@ - + @@ -2525,7 +2659,7 @@ - + @@ -2535,7 +2669,7 @@ - + @@ -2551,7 +2685,7 @@ - + @@ -2561,17 +2695,17 @@ - + - + - + @@ -2579,7 +2713,7 @@ - + @@ -2587,7 +2721,7 @@ - + @@ -2595,63 +2729,63 @@ - + - + - + - + - + - + - + - + - + @@ -2667,7 +2801,7 @@ - + @@ -2677,7 +2811,7 @@ - + @@ -2693,7 +2827,7 @@ - + @@ -2703,17 +2837,17 @@ - + - + - + @@ -2721,7 +2855,7 @@ - + @@ -2729,7 +2863,7 @@ - + @@ -2737,56 +2871,56 @@ - + - + - + - + - + - + - + - + @@ -2908,10 +3042,11 @@ - + + - + @@ -2921,7 +3056,7 @@ - + @@ -2931,7 +3066,7 @@ - + @@ -2941,7 +3076,7 @@ - + @@ -2952,14 +3087,12 @@ - - - - + + - + @@ -2984,7 +3117,7 @@ - + @@ -3009,7 +3142,7 @@ - + @@ -3034,7 +3167,7 @@ - + @@ -3061,8 +3194,9 @@ - + + @@ -3071,8 +3205,9 @@ - + + @@ -3081,8 +3216,9 @@ - + + @@ -3091,8 +3227,9 @@ - + + @@ -3101,8 +3238,9 @@ - + + @@ -3111,8 +3249,9 @@ - + + @@ -3121,8 +3260,9 @@ - + + @@ -3131,8 +3271,9 @@ - + + @@ -3141,8 +3282,9 @@ - + + @@ -3151,8 +3293,9 @@ - + + @@ -3161,8 +3304,9 @@ - + + @@ -3171,8 +3315,9 @@ - + + @@ -3181,8 +3326,9 @@ - + + @@ -3191,8 +3337,9 @@ - + + @@ -3201,8 +3348,9 @@ - + + @@ -3211,8 +3359,9 @@ - + + @@ -3221,8 +3370,9 @@ - + + @@ -3231,8 +3381,9 @@ - + + @@ -3241,8 +3392,9 @@ - + + @@ -3251,8 +3403,9 @@ - + + @@ -3261,8 +3414,9 @@ - + + @@ -3271,8 +3425,9 @@ - + + @@ -3281,8 +3436,9 @@ - + + @@ -3291,8 +3447,9 @@ - + + @@ -3301,8 +3458,9 @@ - + + @@ -3311,8 +3469,9 @@ - + + @@ -3321,8 +3480,9 @@ - + + @@ -3331,8 +3491,9 @@ - + + @@ -3341,8 +3502,9 @@ - + + @@ -3351,8 +3513,9 @@ - + + @@ -3361,8 +3524,9 @@ - + + @@ -3371,8 +3535,9 @@ - + + @@ -3381,8 +3546,9 @@ - + + @@ -3391,8 +3557,9 @@ - + + @@ -3401,8 +3568,9 @@ - + + @@ -3411,8 +3579,9 @@ - + + @@ -3421,8 +3590,9 @@ - + + @@ -3431,8 +3601,9 @@ - + + @@ -3441,8 +3612,9 @@ - + + @@ -3451,8 +3623,9 @@ - + + @@ -3461,8 +3634,9 @@ - + + @@ -3471,8 +3645,9 @@ - + + @@ -3481,8 +3656,9 @@ - + + @@ -3491,8 +3667,9 @@ - + + @@ -3503,7 +3680,7 @@ - + @@ -3511,7 +3688,7 @@ - + @@ -3519,7 +3696,7 @@ - + @@ -3527,63 +3704,63 @@ - + - + - + - + - + - + - + - + - + @@ -3591,7 +3768,7 @@ - + @@ -3599,7 +3776,7 @@ - + @@ -3607,63 +3784,63 @@ - + - + - + - + - + - + - + - + - + @@ -3671,7 +3848,7 @@ - + @@ -3679,7 +3856,7 @@ - + @@ -3687,63 +3864,63 @@ - + - + - + - + - + - + - + - + - + @@ -3751,7 +3928,7 @@ - + @@ -3759,7 +3936,7 @@ - + @@ -3767,56 +3944,56 @@ - + - + - + - + - + - + - + - + @@ -3912,10 +4089,11 @@ - + + - + @@ -3940,7 +4118,7 @@ - + @@ -3965,7 +4143,7 @@ - + @@ -3990,7 +4168,7 @@ - + @@ -4017,8 +4195,9 @@ - + + @@ -4027,8 +4206,9 @@ - + + @@ -4037,8 +4217,9 @@ - + + @@ -4047,8 +4228,9 @@ - + + @@ -4057,8 +4239,9 @@ - + + @@ -4067,8 +4250,9 @@ - + + @@ -4077,8 +4261,9 @@ - + + @@ -4087,8 +4272,9 @@ - + + @@ -4097,8 +4283,9 @@ - + + @@ -4107,8 +4294,9 @@ - + + @@ -4117,8 +4305,9 @@ - + + @@ -4127,8 +4316,9 @@ - + + @@ -4137,8 +4327,9 @@ - + + @@ -4147,8 +4338,9 @@ - + + @@ -4157,8 +4349,9 @@ - + + @@ -4167,8 +4360,9 @@ - + + @@ -4177,8 +4371,9 @@ - + + @@ -4187,8 +4382,9 @@ - + + @@ -4197,8 +4393,9 @@ - + + @@ -4207,8 +4404,9 @@ - + + @@ -4217,8 +4415,9 @@ - + + @@ -4227,8 +4426,9 @@ - + + @@ -4237,8 +4437,9 @@ - + + @@ -4247,8 +4448,9 @@ - + + @@ -4257,8 +4459,9 @@ - + + @@ -4267,8 +4470,9 @@ - + + @@ -4277,8 +4481,9 @@ - + + @@ -4287,8 +4492,9 @@ - + + @@ -4297,8 +4503,9 @@ - + + @@ -4307,8 +4514,9 @@ - + + @@ -4317,8 +4525,9 @@ - + + @@ -4327,8 +4536,9 @@ - + + @@ -4337,8 +4547,9 @@ - + + @@ -4347,8 +4558,9 @@ - + + @@ -4357,8 +4569,9 @@ - + + @@ -4367,8 +4580,9 @@ - + + @@ -4377,8 +4591,9 @@ - + + @@ -4387,8 +4602,9 @@ - + + @@ -4397,8 +4613,9 @@ - + + @@ -4407,8 +4624,9 @@ - + + @@ -4417,8 +4635,9 @@ - + + @@ -4427,8 +4646,9 @@ - + + @@ -4437,8 +4657,9 @@ - + + @@ -4447,8 +4668,9 @@ - + + @@ -4459,7 +4681,7 @@ - + @@ -4467,7 +4689,7 @@ - + @@ -4475,7 +4697,7 @@ - + @@ -4483,63 +4705,63 @@ - + - + - + - + - + - + - + - + - + @@ -4547,7 +4769,7 @@ - + @@ -4555,7 +4777,7 @@ - + @@ -4563,63 +4785,63 @@ - + - + - + - + - + - + - + - + - + @@ -4627,7 +4849,7 @@ - + @@ -4635,7 +4857,7 @@ - + @@ -4643,63 +4865,63 @@ - + - + - + - + - + - + - + - + - + @@ -4707,7 +4929,7 @@ - + @@ -4715,7 +4937,7 @@ - + @@ -4723,56 +4945,56 @@ - + - + - + - + - + - + - + - + @@ -4868,10 +5090,11 @@ - + + - + @@ -4890,8 +5113,9 @@ - + + @@ -4900,8 +5124,9 @@ - + + @@ -4910,8 +5135,9 @@ - + + @@ -4920,8 +5146,9 @@ - + + @@ -4930,8 +5157,9 @@ - + + @@ -4940,8 +5168,9 @@ - + + @@ -4951,8 +5180,9 @@ - + + @@ -4961,8 +5191,9 @@ - + + @@ -4971,8 +5202,9 @@ - + + @@ -4981,8 +5213,9 @@ - + + @@ -4991,8 +5224,9 @@ - + + @@ -5002,8 +5236,9 @@ - + + @@ -5012,8 +5247,9 @@ - + + @@ -5022,8 +5258,9 @@ - + + @@ -5032,8 +5269,9 @@ - + + @@ -5041,131 +5279,99 @@ - - - - - - - - - - - - - - - - - - - - - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - - - - - - - - - - - - @@ -5193,191 +5399,141 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - - - + + - - - - + + - - - - - - - - - - - - + + - + - + + - + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + + - + - + + - + + - - + + - + @@ -5385,13 +5541,13 @@ - + - + @@ -5402,14 +5558,14 @@ - + - + @@ -5417,39 +5573,38 @@ - + - + - + - + - + - - + @@ -5469,7 +5624,7 @@ - + @@ -5511,5 +5666,7 @@ + + \ No newline at end of file diff --git a/tests/MoBi.Tests/TestFiles/warnings.pkml b/tests/MoBi.Tests/TestFiles/warnings.pkml index c205ab9bb..a06527c21 100644 --- a/tests/MoBi.Tests/TestFiles/warnings.pkml +++ b/tests/MoBi.Tests/TestFiles/warnings.pkml @@ -1,12 +1,18 @@  - - + + - + + - + - + + + + + + @@ -14,14 +20,24 @@ - + + + + + + - + + + + + + @@ -31,68 +47,81 @@ - - - - + + + + + + + + + + + - + + - + + - + + - + - - Drug - + + + Drug + + - + + - + - + - + - + @@ -103,25 +132,23 @@ - + - - - - + + - - - - + + - + + - + + @@ -133,7 +160,7 @@ - + @@ -151,118 +178,97 @@ - - - - + + + - + - - + + - - + + + + - + - + - + - - + + + + - - - - - - - - - - + - + + - - + + - - + + - - + + - + + - + - + - + - + - + - + - + - + - + @@ -274,11 +280,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + + - + @@ -297,7 +350,7 @@ - + @@ -320,7 +373,7 @@ - + @@ -345,7 +398,9 @@ - + + + @@ -353,7 +408,9 @@ - + + + @@ -361,7 +418,9 @@ - + + + @@ -369,7 +428,9 @@ - + + + @@ -377,7 +438,9 @@ - + + + @@ -385,7 +448,9 @@ - + + + @@ -393,7 +458,9 @@ - + + + @@ -401,7 +468,9 @@ - + + + @@ -409,7 +478,9 @@ - + + + @@ -417,7 +488,9 @@ - + + + @@ -425,7 +498,9 @@ - + + + @@ -433,7 +508,9 @@ - + + + @@ -441,7 +518,9 @@ - + + + @@ -451,7 +530,7 @@ - + @@ -465,13 +544,13 @@ - + - + @@ -479,7 +558,7 @@ - + @@ -487,7 +566,7 @@ - + @@ -496,21 +575,21 @@ - + - + - + @@ -519,7 +598,7 @@ - + @@ -527,7 +606,7 @@ - + @@ -536,7 +615,7 @@ - + @@ -551,7 +630,6 @@ - @@ -559,7 +637,7 @@ - + @@ -644,10 +722,11 @@ - + + - + @@ -666,7 +745,7 @@ - + @@ -693,7 +772,7 @@ - + @@ -711,10 +790,11 @@ - + + - + @@ -733,7 +813,7 @@ - + @@ -756,7 +836,7 @@ - + @@ -781,7 +861,9 @@ - + + + @@ -789,7 +871,9 @@ - + + + @@ -797,7 +881,9 @@ - + + + @@ -805,7 +891,9 @@ - + + + @@ -813,7 +901,9 @@ - + + + @@ -821,7 +911,9 @@ - + + + @@ -829,7 +921,9 @@ - + + + @@ -837,7 +931,9 @@ - + + + @@ -845,7 +941,9 @@ - + + + @@ -853,7 +951,9 @@ - + + + @@ -861,7 +961,9 @@ - + + + @@ -869,7 +971,9 @@ - + + + @@ -877,7 +981,9 @@ - + + + @@ -887,7 +993,7 @@ - + @@ -901,13 +1007,13 @@ - + - + @@ -915,7 +1021,7 @@ - + @@ -923,7 +1029,7 @@ - + @@ -932,21 +1038,21 @@ - + - + - + @@ -955,7 +1061,7 @@ - + @@ -963,7 +1069,7 @@ - + @@ -972,7 +1078,7 @@ - + @@ -987,7 +1093,6 @@ - @@ -995,7 +1100,7 @@ - + @@ -1080,10 +1185,11 @@ - + + - + @@ -1098,7 +1204,7 @@ - + @@ -1127,7 +1233,7 @@ - + @@ -1158,7 +1264,9 @@ - + + + @@ -1166,7 +1274,9 @@ - + + + @@ -1174,7 +1284,9 @@ - + + + @@ -1182,7 +1294,9 @@ - + + + @@ -1190,7 +1304,9 @@ - + + + @@ -1198,7 +1314,9 @@ - + + + @@ -1206,7 +1324,9 @@ - + + + @@ -1214,7 +1334,9 @@ - + + + @@ -1222,7 +1344,9 @@ - + + + @@ -1230,7 +1354,9 @@ - + + + @@ -1238,7 +1364,9 @@ - + + + @@ -1246,7 +1374,9 @@ - + + + @@ -1254,7 +1384,9 @@ - + + + @@ -1262,7 +1394,9 @@ - + + + @@ -1270,7 +1404,9 @@ - + + + @@ -1278,7 +1414,9 @@ - + + + @@ -1286,7 +1424,9 @@ - + + + @@ -1294,7 +1434,9 @@ - + + + @@ -1302,7 +1444,9 @@ - + + + @@ -1310,7 +1454,9 @@ - + + + @@ -1318,7 +1464,9 @@ - + + + @@ -1326,7 +1474,9 @@ - + + + @@ -1334,7 +1484,9 @@ - + + + @@ -1342,7 +1494,9 @@ - + + + @@ -1350,7 +1504,9 @@ - + + + @@ -1358,7 +1514,9 @@ - + + + @@ -1366,7 +1524,9 @@ - + + + @@ -1374,7 +1534,9 @@ - + + + @@ -1382,7 +1544,9 @@ - + + + @@ -1390,7 +1554,9 @@ - + + + @@ -1398,7 +1564,9 @@ - + + + @@ -1406,7 +1574,9 @@ - + + + @@ -1414,7 +1584,9 @@ - + + + @@ -1422,7 +1594,9 @@ - + + + @@ -1430,7 +1604,9 @@ - + + + @@ -1438,7 +1614,9 @@ - + + + @@ -1446,7 +1624,9 @@ - + + + @@ -1454,7 +1634,9 @@ - + + + @@ -1464,7 +1646,7 @@ - + @@ -1475,7 +1657,7 @@ - + @@ -1488,7 +1670,7 @@ - + @@ -1498,19 +1680,19 @@ - + - + - + @@ -1524,7 +1706,7 @@ - + @@ -1532,7 +1714,7 @@ - + @@ -1540,7 +1722,7 @@ - + @@ -1549,21 +1731,21 @@ - + - + - + @@ -1572,7 +1754,7 @@ - + @@ -1580,7 +1762,7 @@ - + @@ -1589,7 +1771,7 @@ - + @@ -1598,7 +1780,7 @@ - + @@ -1612,7 +1794,7 @@ - + @@ -1620,7 +1802,7 @@ - + @@ -1628,7 +1810,7 @@ - + @@ -1637,21 +1819,21 @@ - + - + - + @@ -1660,7 +1842,7 @@ - + @@ -1668,7 +1850,7 @@ - + @@ -1677,7 +1859,7 @@ - + @@ -1686,7 +1868,7 @@ - + @@ -1700,12 +1882,12 @@ - + - + @@ -1713,7 +1895,7 @@ - + @@ -1722,19 +1904,19 @@ - + - + - + @@ -1743,7 +1925,7 @@ - + @@ -1751,17 +1933,17 @@ - + - + - + @@ -1770,8 +1952,6 @@ - - @@ -1789,7 +1969,7 @@ - + @@ -1937,10 +2117,11 @@ - + + - + @@ -1964,7 +2145,7 @@ - + @@ -1991,7 +2172,9 @@ - + + + @@ -1999,7 +2182,9 @@ - + + + @@ -2007,7 +2192,9 @@ - + + + @@ -2015,7 +2202,9 @@ - + + + @@ -2023,7 +2212,9 @@ - + + + @@ -2031,7 +2222,9 @@ - + + + @@ -2039,7 +2232,9 @@ - + + + @@ -2047,7 +2242,9 @@ - + + + @@ -2055,7 +2252,9 @@ - + + + @@ -2063,7 +2262,9 @@ - + + + @@ -2071,7 +2272,9 @@ - + + + @@ -2079,7 +2282,9 @@ - + + + @@ -2087,7 +2292,9 @@ - + + + @@ -2095,7 +2302,9 @@ - + + + @@ -2103,7 +2312,9 @@ - + + + @@ -2111,7 +2322,9 @@ - + + + @@ -2119,7 +2332,9 @@ - + + + @@ -2127,7 +2342,9 @@ - + + + @@ -2135,7 +2352,9 @@ - + + + @@ -2143,7 +2362,9 @@ - + + + @@ -2151,7 +2372,9 @@ - + + + @@ -2159,7 +2382,9 @@ - + + + @@ -2167,7 +2392,9 @@ - + + + @@ -2175,7 +2402,9 @@ - + + + @@ -2183,7 +2412,9 @@ - + + + @@ -2191,7 +2422,9 @@ - + + + @@ -2199,7 +2432,9 @@ - + + + @@ -2207,7 +2442,9 @@ - + + + @@ -2215,7 +2452,9 @@ - + + + @@ -2223,7 +2462,9 @@ - + + + @@ -2231,7 +2472,9 @@ - + + + @@ -2239,7 +2482,9 @@ - + + + @@ -2247,7 +2492,9 @@ - + + + @@ -2255,7 +2502,9 @@ - + + + @@ -2265,7 +2514,7 @@ - + @@ -2281,7 +2530,7 @@ - + @@ -2291,7 +2540,7 @@ - + @@ -2307,7 +2556,7 @@ - + @@ -2317,17 +2566,17 @@ - + - + - + @@ -2335,7 +2584,7 @@ - + @@ -2343,7 +2592,7 @@ - + @@ -2351,63 +2600,63 @@ - + - + - + - + - + - + - + - + - + @@ -2423,7 +2672,7 @@ - + @@ -2433,7 +2682,7 @@ - + @@ -2449,7 +2698,7 @@ - + @@ -2459,17 +2708,17 @@ - + - + - + @@ -2477,7 +2726,7 @@ - + @@ -2485,7 +2734,7 @@ - + @@ -2493,56 +2742,56 @@ - + - + - + - + - + - + - + - + @@ -2556,7 +2805,7 @@ - + @@ -2664,10 +2913,11 @@ - + + - + @@ -2677,7 +2927,7 @@ - + @@ -2687,7 +2937,7 @@ - + @@ -2697,7 +2947,7 @@ - + @@ -2708,14 +2958,12 @@ - - - - + + - + @@ -2740,7 +2988,7 @@ - + @@ -2765,7 +3013,7 @@ - + @@ -2790,7 +3038,7 @@ - + @@ -2817,7 +3065,9 @@ - + + + @@ -2825,7 +3075,9 @@ - + + + @@ -2833,7 +3085,9 @@ - + + + @@ -2841,7 +3095,9 @@ - + + + @@ -2849,7 +3105,9 @@ - + + + @@ -2857,7 +3115,9 @@ - + + + @@ -2865,7 +3125,9 @@ - + + + @@ -2873,7 +3135,9 @@ - + + + @@ -2881,7 +3145,9 @@ - + + + @@ -2889,7 +3155,9 @@ - + + + @@ -2897,7 +3165,9 @@ - + + + @@ -2905,7 +3175,9 @@ - + + + @@ -2913,7 +3185,9 @@ - + + + @@ -2921,7 +3195,9 @@ - + + + @@ -2929,7 +3205,9 @@ - + + + @@ -2937,7 +3215,9 @@ - + + + @@ -2945,7 +3225,9 @@ - + + + @@ -2953,7 +3235,9 @@ - + + + @@ -2961,7 +3245,9 @@ - + + + @@ -2969,7 +3255,9 @@ - + + + @@ -2977,7 +3265,9 @@ - + + + @@ -2985,7 +3275,9 @@ - + + + @@ -2993,7 +3285,9 @@ - + + + @@ -3001,7 +3295,9 @@ - + + + @@ -3009,7 +3305,9 @@ - + + + @@ -3017,7 +3315,9 @@ - + + + @@ -3025,7 +3325,9 @@ - + + + @@ -3033,7 +3335,9 @@ - + + + @@ -3041,7 +3345,9 @@ - + + + @@ -3049,7 +3355,9 @@ - + + + @@ -3057,7 +3365,9 @@ - + + + @@ -3065,7 +3375,9 @@ - + + + @@ -3073,7 +3385,9 @@ - + + + @@ -3081,7 +3395,9 @@ - + + + @@ -3089,7 +3405,9 @@ - + + + @@ -3097,7 +3415,9 @@ - + + + @@ -3105,7 +3425,9 @@ - + + + @@ -3113,7 +3435,9 @@ - + + + @@ -3121,7 +3445,9 @@ - + + + @@ -3129,7 +3455,9 @@ - + + + @@ -3137,7 +3465,9 @@ - + + + @@ -3145,7 +3475,9 @@ - + + + @@ -3153,7 +3485,9 @@ - + + + @@ -3161,7 +3495,9 @@ - + + + @@ -3171,7 +3507,7 @@ - + @@ -3179,7 +3515,7 @@ - + @@ -3187,7 +3523,7 @@ - + @@ -3195,63 +3531,63 @@ - + - + - + - + - + - + - + - + - + @@ -3259,7 +3595,7 @@ - + @@ -3267,7 +3603,7 @@ - + @@ -3275,63 +3611,63 @@ - + - + - + - + - + - + - + - + - + @@ -3339,7 +3675,7 @@ - + @@ -3347,7 +3683,7 @@ - + @@ -3355,63 +3691,63 @@ - + - + - + - + - + - + - + - + - + @@ -3419,7 +3755,7 @@ - + @@ -3427,7 +3763,7 @@ - + @@ -3435,56 +3771,56 @@ - + - + - + - + - + - + - + - + @@ -3580,10 +3916,11 @@ - + + - + @@ -3608,7 +3945,7 @@ - + @@ -3633,7 +3970,7 @@ - + @@ -3658,7 +3995,7 @@ - + @@ -3685,7 +4022,9 @@ - + + + @@ -3693,7 +4032,9 @@ - + + + @@ -3701,7 +4042,9 @@ - + + + @@ -3709,7 +4052,9 @@ - + + + @@ -3717,7 +4062,9 @@ - + + + @@ -3725,7 +4072,9 @@ - + + + @@ -3733,7 +4082,9 @@ - + + + @@ -3741,7 +4092,9 @@ - + + + @@ -3749,7 +4102,9 @@ - + + + @@ -3757,7 +4112,9 @@ - + + + @@ -3765,7 +4122,9 @@ - + + + @@ -3773,7 +4132,9 @@ - + + + @@ -3781,7 +4142,9 @@ - + + + @@ -3789,7 +4152,9 @@ - + + + @@ -3797,7 +4162,9 @@ - + + + @@ -3805,7 +4172,9 @@ - + + + @@ -3813,7 +4182,9 @@ - + + + @@ -3821,7 +4192,9 @@ - + + + @@ -3829,7 +4202,9 @@ - + + + @@ -3837,7 +4212,9 @@ - + + + @@ -3845,7 +4222,9 @@ - + + + @@ -3853,7 +4232,9 @@ - + + + @@ -3861,7 +4242,9 @@ - + + + @@ -3869,7 +4252,9 @@ - + + + @@ -3877,7 +4262,9 @@ - + + + @@ -3885,7 +4272,9 @@ - + + + @@ -3893,7 +4282,9 @@ - + + + @@ -3901,7 +4292,9 @@ - + + + @@ -3909,7 +4302,9 @@ - + + + @@ -3917,7 +4312,9 @@ - + + + @@ -3925,7 +4322,9 @@ - + + + @@ -3933,7 +4332,9 @@ - + + + @@ -3941,7 +4342,9 @@ - + + + @@ -3949,7 +4352,9 @@ - + + + @@ -3957,7 +4362,9 @@ - + + + @@ -3965,7 +4372,9 @@ - + + + @@ -3973,7 +4382,9 @@ - + + + @@ -3981,7 +4392,9 @@ - + + + @@ -3989,7 +4402,9 @@ - + + + @@ -3997,7 +4412,9 @@ - + + + @@ -4005,7 +4422,9 @@ - + + + @@ -4013,7 +4432,9 @@ - + + + @@ -4021,7 +4442,9 @@ - + + + @@ -4029,7 +4452,9 @@ - + + + @@ -4039,7 +4464,7 @@ - + @@ -4047,7 +4472,7 @@ - + @@ -4055,7 +4480,7 @@ - + @@ -4063,63 +4488,63 @@ - + - + - + - + - + - + - + - + - + @@ -4127,7 +4552,7 @@ - + @@ -4135,7 +4560,7 @@ - + @@ -4143,63 +4568,63 @@ - + - + - + - + - + - + - + - + - + @@ -4207,7 +4632,7 @@ - + @@ -4215,7 +4640,7 @@ - + @@ -4223,63 +4648,63 @@ - + - + - + - + - + - + - + - + - + @@ -4287,7 +4712,7 @@ - + @@ -4295,7 +4720,7 @@ - + @@ -4303,56 +4728,56 @@ - + - + - + - + - + - + - + - + @@ -4448,10 +4873,11 @@ - + + - + @@ -4468,7 +4894,7 @@ - + @@ -4480,7 +4906,9 @@ - + + + @@ -4488,7 +4916,9 @@ - + + + @@ -4496,7 +4926,9 @@ - + + + @@ -4504,7 +4936,9 @@ - + + + @@ -4512,7 +4946,9 @@ - + + + @@ -4520,7 +4956,9 @@ - + + + @@ -4529,7 +4967,9 @@ - + + + @@ -4537,7 +4977,9 @@ - + + + @@ -4545,7 +4987,9 @@ - + + + @@ -4553,7 +4997,9 @@ - + + + @@ -4561,7 +5007,9 @@ - + + + @@ -4570,7 +5018,9 @@ - + + + @@ -4578,7 +5028,9 @@ - + + + @@ -4586,7 +5038,9 @@ - + + + @@ -4594,7 +5048,9 @@ - + + + @@ -4604,91 +5060,91 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -4724,40 +5180,23 @@ - + + - - - - + + - - - - + + - - - - - - - - - - - 0 - - - @@ -4774,15 +5213,17 @@ - - + + + + - + - + - + @@ -4792,12 +5233,12 @@ - + - + - + @@ -4805,16 +5246,18 @@ - - + + + + - - + + - + - + @@ -4826,34 +5269,27 @@ - + + + - - + - - - + - - - - - - @@ -4864,9 +5300,11 @@ - + + + \ No newline at end of file diff --git a/tests/MoBi.Tests/app.config b/tests/MoBi.Tests/app.config index 2f68fb473..94d16da7c 100644 --- a/tests/MoBi.Tests/app.config +++ b/tests/MoBi.Tests/app.config @@ -2,134 +2,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + \ No newline at end of file diff --git a/tests/MoBi.Tests/packages.config b/tests/MoBi.Tests/packages.config deleted file mode 100644 index 7b0614eea..000000000 --- a/tests/MoBi.Tests/packages.config +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/tests/MoBi.UI.Tests/ContextSpecification.cs b/tests/MoBi.UI.Tests/ContextSpecification.cs deleted file mode 100644 index c068599b5..000000000 --- a/tests/MoBi.UI.Tests/ContextSpecification.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Threading.Tasks; -using OSPSuite.BDDHelper; -using OSPSuite.Engine; - -namespace MoBi.UI -{ - public abstract class ContextSpecificationAsync : AbstractContextSpecificationAsync - { - public override async Task GlobalContext() - { - await base.GlobalContext(); - EngineRegister.InitFormulaParser(); - } - } - - public abstract class ContextSpecification : AbstractContextSpecification - { - public override void GlobalContext() - { - base.GlobalContext(); - EngineRegister.InitFormulaParser(); - } - } -} \ No newline at end of file diff --git a/tests/MoBi.UI.Tests/MoBi.UI.Tests.csproj b/tests/MoBi.UI.Tests/MoBi.UI.Tests.csproj index 8b64bcb37..202ce0d4e 100644 --- a/tests/MoBi.UI.Tests/MoBi.UI.Tests.csproj +++ b/tests/MoBi.UI.Tests/MoBi.UI.Tests.csproj @@ -1,347 +1,30 @@ - - - - + + - Debug - AnyCPU - {2710573C-9216-4817-AD81-97099597A780} - Library - Properties + net472 + + false + MoBi.UI - MoBi.UI.Tests - v4.6.2 - 512 - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - x64 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\packages\Antlr3.Runtime.3.5.1\lib\net40-client\Antlr3.Runtime.dll - - - ..\..\packages\Castle.Core.4.3.1\lib\net45\Castle.Core.dll - - - ..\..\packages\Castle.Windsor.4.1.1\lib\net45\Castle.Windsor.dll - - - ..\..\packages\Dapper.1.60.6\lib\net451\Dapper.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.BonusSkins.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Charts.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Data.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Images.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Office.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.PivotGrid.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.Printing.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.RichEdit.v18.2.Core.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.RichEdit.v18.2.Export.dll - - - ..\..\packages\OSPSuite.DevExpress.Presentation.18.2.7\lib\net45\DevExpress.Utils.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraBars.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.UI.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraCharts.v18.2.Wizard.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraEditors.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraGrid.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraLayout.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraNavBar.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraPivotGrid.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraPrinting.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraRichEdit.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraRichEdit.v18.2.Extensions.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraTreeList.v18.2.dll - - - ..\..\packages\OSPSuite.DevExpress.18.2.7\lib\net45\DevExpress.XtraVerticalGrid.v18.2.dll - - - ..\..\packages\FakeItEasy.5.1.1\lib\net45\FakeItEasy.dll - - - ..\..\packages\FluentNHibernate.2.1.2\lib\net461\FluentNHibernate.dll - - - ..\..\packages\SharpZipLib.1.1.0\lib\net45\ICSharpCode.SharpZipLib.dll - - - ..\..\packages\Iesi.Collections.4.0.4\lib\net461\Iesi.Collections.dll - - - ..\..\packages\MathNet.Numerics.4.7.0\lib\net461\MathNet.Numerics.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Configuration.Binder.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Configuration.Binder.dll - - - ..\..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Logging.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.dll - - - ..\..\packages\Microsoft.Extensions.Logging.Abstractions.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Logging.Abstractions.dll - - - ..\..\packages\Microsoft.Extensions.Options.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Options.dll - - - ..\..\packages\Microsoft.Extensions.Primitives.2.2.0\lib\netstandard2.0\Microsoft.Extensions.Primitives.dll - - - ..\..\packages\WindowsAPICodePack-Core.1.1.2\lib\Microsoft.WindowsAPICodePack.dll - True - - - ..\..\packages\WindowsAPICodePack-Shell.1.1.1\lib\Microsoft.WindowsAPICodePack.Shell.dll - True - - - ..\..\packages\csmpfit.1.1.1\lib\net20\MPFitLib.dll - - - ..\..\packages\Newtonsoft.Json.12.0.1\lib\net45\Newtonsoft.Json.dll - - - ..\..\packages\NHibernate.5.2.5\lib\net461\NHibernate.dll - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Draw.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Instruments.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Layout.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Pdf.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Svg.dll - True - - - ..\..\packages\Northwoods.GoWin.5.2.0\lib\net45\Northwoods.Go.Xml.dll - True - - - ..\..\packages\NUnit.3.11.0\lib\net45\nunit.framework.dll - - - ..\..\packages\OSPSuite.Assets.8.0.4\lib\net462\OSPSuite.Assets.dll - - - ..\..\packages\OSPSuite.BDDHelper.3.1.0.1\lib\netstandard2.0\OSPSuite.BDDHelper.dll - - - ..\..\packages\OSPSuite.Core.8.0.4\lib\net462\OSPSuite.Core.dll - - - ..\..\packages\OSPSuite.DataBinding.2.3.0.3\lib\net462\OSPSuite.DataBinding.dll - - - ..\..\packages\OSPSuite.DataBinding.DevExpress.3.0.0.3\lib\net462\OSPSuite.DataBinding.DevExpress.dll - - - ..\..\packages\OSPSuite.Engine.8.0.4\lib\net462\OSPSuite.Engine.dll - - - ..\..\packages\OSPSuite.FuncParser.3.0.1.14\lib\net45\OSPSuite.FuncParser.dll - - - ..\..\packages\OSPSuite.Infrastructure.8.0.4\lib\net462\OSPSuite.Infrastructure.dll - - - ..\..\packages\OSPSuite.Presentation.8.0.4\lib\net462\OSPSuite.Presentation.dll - - - ..\..\packages\OSPSuite.Serializer.2.0.1.4\lib\net45\OSPSuite.Serializer.dll - - - ..\..\packages\OSPSuite.SimModel.3.0.1.27\lib\net45\OSPSuite.SimModel.dll - - - ..\..\packages\OSPSuite.TeXReporting.2.1.1.9\lib\net45\OSPSuite.TeXReporting.dll - - - ..\..\packages\OSPSuite.UI.8.0.4\lib\net462\OSPSuite.UI.dll - - - ..\..\packages\OSPSuite.Utility.3.0.1.7\lib\net462\OSPSuite.Utility.dll - - - - ..\..\packages\Remotion.Linq.2.2.0\lib\net45\Remotion.Linq.dll - - - ..\..\packages\Remotion.Linq.EagerFetching.2.2.0\lib\net45\Remotion.Linq.EagerFetching.dll - - - ..\..\packages\OSPSuite.SmartXLS.2.7.0.9\lib\net45\SX.dll - - - - ..\..\packages\System.Buffers.4.4.0\lib\netstandard2.0\System.Buffers.dll - - - ..\..\packages\System.ComponentModel.Annotations.4.5.0\lib\net461\System.ComponentModel.Annotations.dll - - - - - - ..\..\packages\System.Data.SQLite.Core.1.0.110.0\lib\net46\System.Data.SQLite.dll - - - - ..\..\packages\System.Memory.4.5.1\lib\netstandard2.0\System.Memory.dll - - - - ..\..\packages\System.Numerics.Vectors.4.4.0\lib\net46\System.Numerics.Vectors.dll - - - ..\..\packages\System.Runtime.CompilerServices.Unsafe.4.5.1\lib\netstandard2.0\System.Runtime.CompilerServices.Unsafe.dll - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\netstandard1.0\System.ValueTuple.dll - - - - - - - - - - - - Properties\SolutionInfo.cs - - - - - - + - - {3c65ffc2-d9ec-4951-8c35-04854ad34e52} - MoBi.Assets - - - {2dbf50be-a749-421c-b526-8bda31cfe7b3} - MoBi.Core - - - {b4c86dca-8877-4400-8088-2401ee65b403} - MoBi.Presentation - - - {de743812-f444-42e2-b72d-cf298933e2ba} - MoBi.UI - + + + all + runtime; build; native; contentfiles; analyzers; buildtransitive + + + + + + + - - + + - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - + + \ No newline at end of file diff --git a/tests/MoBi.UI.Tests/Properties/AssemblyInfo.cs b/tests/MoBi.UI.Tests/Properties/AssemblyInfo.cs deleted file mode 100644 index 57f17a402..000000000 --- a/tests/MoBi.UI.Tests/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,2 +0,0 @@ -using System.Reflection; -[assembly: AssemblyTitle("MoBi.UI.Tests")] diff --git a/tests/MoBi.UI.Tests/app.config b/tests/MoBi.UI.Tests/app.config index 7ab5df246..94d16da7c 100644 --- a/tests/MoBi.UI.Tests/app.config +++ b/tests/MoBi.UI.Tests/app.config @@ -2,106 +2,10 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + \ No newline at end of file diff --git a/tests/MoBi.UI.Tests/packages.config b/tests/MoBi.UI.Tests/packages.config deleted file mode 100644 index 5822d5804..000000000 --- a/tests/MoBi.UI.Tests/packages.config +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file