From 6b9b57be226a505a9c9cdd9ed029f22495ce04ec Mon Sep 17 00:00:00 2001 From: Max Bruckner Date: Tue, 7 Feb 2017 21:30:57 +0100 Subject: [PATCH] Squashed 'tests/unity/' content from commit 1782bab git-subtree-dir: tests/unity git-subtree-split: 1782bab0bacd349a45bc215ff91f082912cd7a64 --- .gitattributes | 30 + .gitignore | 9 + .travis.yml | 25 + README.md | 211 + auto/colour_prompt.rb | 115 + auto/colour_reporter.rb | 39 + auto/generate_config.yml | 36 + auto/generate_module.rb | 311 ++ auto/generate_test_runner.rb | 435 ++ auto/parseOutput.rb | 191 + auto/stylize_as_junit.rb | 264 ++ auto/test_file_filter.rb | 23 + auto/type_sanitizer.rb | 8 + auto/unity_test_summary.py | 139 + auto/unity_test_summary.rb | 148 + auto/unity_to_junit.py | 146 + ...tSuitableforPrintingandPossiblyFraming.pdf | Bin 0 -> 146272 bytes docs/UnityAssertionsReference.pdf | Bin 0 -> 320499 bytes docs/UnityConfigurationGuide.pdf | Bin 0 -> 253175 bytes docs/UnityGettingStartedGuide.pdf | Bin 0 -> 166200 bytes docs/UnityHelperScriptsGuide.pdf | Bin 0 -> 181016 bytes docs/license.txt | 21 + examples/example_1/makefile | 71 + examples/example_1/readme.txt | 5 + examples/example_1/src/ProductionCode.c | 24 + examples/example_1/src/ProductionCode.h | 3 + examples/example_1/src/ProductionCode2.c | 11 + examples/example_1/src/ProductionCode2.h | 2 + examples/example_1/test/TestProductionCode.c | 62 + examples/example_1/test/TestProductionCode2.c | 31 + .../test_runners/TestProductionCode2_Runner.c | 53 + .../test_runners/TestProductionCode_Runner.c | 57 + examples/example_2/makefile | 70 + examples/example_2/readme.txt | 5 + examples/example_2/src/ProductionCode.c | 24 + examples/example_2/src/ProductionCode.h | 3 + examples/example_2/src/ProductionCode2.c | 11 + examples/example_2/src/ProductionCode2.h | 2 + examples/example_2/test/TestProductionCode.c | 64 + examples/example_2/test/TestProductionCode2.c | 33 + .../test_runners/TestProductionCode2_Runner.c | 9 + .../test_runners/TestProductionCode_Runner.c | 11 + .../example_2/test/test_runners/all_tests.c | 12 + examples/example_3/helper/UnityHelper.c | 10 + examples/example_3/helper/UnityHelper.h | 12 + examples/example_3/rakefile.rb | 43 + examples/example_3/rakefile_helper.rb | 258 ++ examples/example_3/readme.txt | 13 + examples/example_3/src/ProductionCode.c | 24 + examples/example_3/src/ProductionCode.h | 3 + examples/example_3/src/ProductionCode2.c | 11 + examples/example_3/src/ProductionCode2.h | 2 + examples/example_3/target_gcc_32.yml | 46 + examples/example_3/test/TestProductionCode.c | 62 + examples/example_3/test/TestProductionCode2.c | 31 + examples/unity_config.h | 237 + extras/eclipse/error_parsers.txt | 26 + extras/fixture/rakefile.rb | 48 + extras/fixture/rakefile_helper.rb | 179 + extras/fixture/readme.txt | 9 + extras/fixture/src/unity_fixture.c | 432 ++ extras/fixture/src/unity_fixture.h | 83 + extras/fixture/src/unity_fixture_internals.h | 51 + .../src/unity_fixture_malloc_overrides.h | 46 + extras/fixture/test/Makefile | 74 + extras/fixture/test/main/AllTests.c | 22 + extras/fixture/test/template_fixture_tests.c | 39 + extras/fixture/test/unity_fixture_Test.c | 543 +++ .../fixture/test/unity_fixture_TestRunner.c | 57 + extras/fixture/test/unity_output_Spy.c | 57 + extras/fixture/test/unity_output_Spy.h | 17 + release/build.info | 2 + release/version.info | 2 + src/unity.c | 1421 ++++++ src/unity.h | 291 ++ src/unity_internals.h | 734 +++ test/Makefile | 63 + test/expectdata/testsample_cmd.c | 61 + test/expectdata/testsample_def.c | 57 + test/expectdata/testsample_head1.c | 55 + test/expectdata/testsample_head1.h | 15 + test/expectdata/testsample_mock_cmd.c | 80 + test/expectdata/testsample_mock_def.c | 76 + test/expectdata/testsample_mock_head1.c | 75 + test/expectdata/testsample_mock_head1.h | 13 + test/expectdata/testsample_mock_new1.c | 89 + test/expectdata/testsample_mock_new2.c | 89 + test/expectdata/testsample_mock_param.c | 77 + test/expectdata/testsample_mock_run1.c | 89 + test/expectdata/testsample_mock_run2.c | 89 + test/expectdata/testsample_mock_yaml.c | 90 + test/expectdata/testsample_new1.c | 67 + test/expectdata/testsample_new2.c | 70 + test/expectdata/testsample_param.c | 58 + test/expectdata/testsample_run1.c | 67 + test/expectdata/testsample_run2.c | 70 + test/expectdata/testsample_yaml.c | 71 + test/rakefile | 72 + test/rakefile_helper.rb | 257 ++ .../generate_module_existing_file_spec.rb | 158 + test/targets/clang_file.yml | 78 + test/targets/clang_strict.yml | 80 + test/targets/gcc_32.yml | 49 + test/targets/gcc_64.yml | 50 + test/targets/gcc_auto_limits.yml | 47 + test/targets/gcc_auto_stdint.yml | 59 + test/targets/gcc_manual_math.yml | 47 + test/targets/hitech_picc18.yml | 101 + test/targets/iar_arm_v4.yml | 90 + test/targets/iar_arm_v5.yml | 80 + test/targets/iar_arm_v5_3.yml | 80 + test/targets/iar_armcortex_LM3S9B92_v5_4.yml | 94 + test/targets/iar_cortexm3_v5.yml | 84 + test/targets/iar_msp430.yml | 95 + test/targets/iar_sh2a_v6.yml | 86 + test/testdata/CException.h | 11 + test/testdata/Defs.h | 8 + test/testdata/cmock.h | 14 + test/testdata/mockMock.h | 13 + test/testdata/testRunnerGenerator.c | 183 + test/testdata/testRunnerGeneratorSmall.c | 65 + test/testdata/testRunnerGeneratorWithMocks.c | 192 + test/tests/test_generate_test_runner.rb | 1252 +++++ test/tests/testparameterized.c | 110 + test/tests/testunity.c | 4058 +++++++++++++++++ 125 files changed, 16533 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .travis.yml create mode 100644 README.md create mode 100644 auto/colour_prompt.rb create mode 100644 auto/colour_reporter.rb create mode 100644 auto/generate_config.yml create mode 100644 auto/generate_module.rb create mode 100644 auto/generate_test_runner.rb create mode 100644 auto/parseOutput.rb create mode 100644 auto/stylize_as_junit.rb create mode 100644 auto/test_file_filter.rb create mode 100644 auto/type_sanitizer.rb create mode 100644 auto/unity_test_summary.py create mode 100644 auto/unity_test_summary.rb create mode 100644 auto/unity_to_junit.py create mode 100644 docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf create mode 100644 docs/UnityAssertionsReference.pdf create mode 100644 docs/UnityConfigurationGuide.pdf create mode 100644 docs/UnityGettingStartedGuide.pdf create mode 100644 docs/UnityHelperScriptsGuide.pdf create mode 100644 docs/license.txt create mode 100644 examples/example_1/makefile create mode 100644 examples/example_1/readme.txt create mode 100644 examples/example_1/src/ProductionCode.c create mode 100644 examples/example_1/src/ProductionCode.h create mode 100644 examples/example_1/src/ProductionCode2.c create mode 100644 examples/example_1/src/ProductionCode2.h create mode 100644 examples/example_1/test/TestProductionCode.c create mode 100644 examples/example_1/test/TestProductionCode2.c create mode 100644 examples/example_1/test/test_runners/TestProductionCode2_Runner.c create mode 100644 examples/example_1/test/test_runners/TestProductionCode_Runner.c create mode 100644 examples/example_2/makefile create mode 100644 examples/example_2/readme.txt create mode 100644 examples/example_2/src/ProductionCode.c create mode 100644 examples/example_2/src/ProductionCode.h create mode 100644 examples/example_2/src/ProductionCode2.c create mode 100644 examples/example_2/src/ProductionCode2.h create mode 100644 examples/example_2/test/TestProductionCode.c create mode 100644 examples/example_2/test/TestProductionCode2.c create mode 100644 examples/example_2/test/test_runners/TestProductionCode2_Runner.c create mode 100644 examples/example_2/test/test_runners/TestProductionCode_Runner.c create mode 100644 examples/example_2/test/test_runners/all_tests.c create mode 100644 examples/example_3/helper/UnityHelper.c create mode 100644 examples/example_3/helper/UnityHelper.h create mode 100644 examples/example_3/rakefile.rb create mode 100644 examples/example_3/rakefile_helper.rb create mode 100644 examples/example_3/readme.txt create mode 100644 examples/example_3/src/ProductionCode.c create mode 100644 examples/example_3/src/ProductionCode.h create mode 100644 examples/example_3/src/ProductionCode2.c create mode 100644 examples/example_3/src/ProductionCode2.h create mode 100644 examples/example_3/target_gcc_32.yml create mode 100644 examples/example_3/test/TestProductionCode.c create mode 100644 examples/example_3/test/TestProductionCode2.c create mode 100644 examples/unity_config.h create mode 100644 extras/eclipse/error_parsers.txt create mode 100644 extras/fixture/rakefile.rb create mode 100644 extras/fixture/rakefile_helper.rb create mode 100644 extras/fixture/readme.txt create mode 100644 extras/fixture/src/unity_fixture.c create mode 100644 extras/fixture/src/unity_fixture.h create mode 100644 extras/fixture/src/unity_fixture_internals.h create mode 100644 extras/fixture/src/unity_fixture_malloc_overrides.h create mode 100644 extras/fixture/test/Makefile create mode 100644 extras/fixture/test/main/AllTests.c create mode 100644 extras/fixture/test/template_fixture_tests.c create mode 100644 extras/fixture/test/unity_fixture_Test.c create mode 100644 extras/fixture/test/unity_fixture_TestRunner.c create mode 100644 extras/fixture/test/unity_output_Spy.c create mode 100644 extras/fixture/test/unity_output_Spy.h create mode 100644 release/build.info create mode 100644 release/version.info create mode 100644 src/unity.c create mode 100644 src/unity.h create mode 100644 src/unity_internals.h create mode 100644 test/Makefile create mode 100644 test/expectdata/testsample_cmd.c create mode 100644 test/expectdata/testsample_def.c create mode 100644 test/expectdata/testsample_head1.c create mode 100644 test/expectdata/testsample_head1.h create mode 100644 test/expectdata/testsample_mock_cmd.c create mode 100644 test/expectdata/testsample_mock_def.c create mode 100644 test/expectdata/testsample_mock_head1.c create mode 100644 test/expectdata/testsample_mock_head1.h create mode 100644 test/expectdata/testsample_mock_new1.c create mode 100644 test/expectdata/testsample_mock_new2.c create mode 100644 test/expectdata/testsample_mock_param.c create mode 100644 test/expectdata/testsample_mock_run1.c create mode 100644 test/expectdata/testsample_mock_run2.c create mode 100644 test/expectdata/testsample_mock_yaml.c create mode 100644 test/expectdata/testsample_new1.c create mode 100644 test/expectdata/testsample_new2.c create mode 100644 test/expectdata/testsample_param.c create mode 100644 test/expectdata/testsample_run1.c create mode 100644 test/expectdata/testsample_run2.c create mode 100644 test/expectdata/testsample_yaml.c create mode 100644 test/rakefile create mode 100644 test/rakefile_helper.rb create mode 100644 test/spec/generate_module_existing_file_spec.rb create mode 100644 test/targets/clang_file.yml create mode 100644 test/targets/clang_strict.yml create mode 100644 test/targets/gcc_32.yml create mode 100644 test/targets/gcc_64.yml create mode 100644 test/targets/gcc_auto_limits.yml create mode 100644 test/targets/gcc_auto_stdint.yml create mode 100644 test/targets/gcc_manual_math.yml create mode 100644 test/targets/hitech_picc18.yml create mode 100644 test/targets/iar_arm_v4.yml create mode 100644 test/targets/iar_arm_v5.yml create mode 100644 test/targets/iar_arm_v5_3.yml create mode 100644 test/targets/iar_armcortex_LM3S9B92_v5_4.yml create mode 100644 test/targets/iar_cortexm3_v5.yml create mode 100644 test/targets/iar_msp430.yml create mode 100644 test/targets/iar_sh2a_v6.yml create mode 100644 test/testdata/CException.h create mode 100644 test/testdata/Defs.h create mode 100644 test/testdata/cmock.h create mode 100644 test/testdata/mockMock.h create mode 100644 test/testdata/testRunnerGenerator.c create mode 100644 test/testdata/testRunnerGeneratorSmall.c create mode 100644 test/testdata/testRunnerGeneratorWithMocks.c create mode 100644 test/tests/test_generate_test_runner.rb create mode 100644 test/tests/testparameterized.c create mode 100644 test/tests/testunity.c diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..ad95226 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,30 @@ +* text=auto + +# These files are text and should be normalized (convert crlf to lf) +*.rb text +*.test text +*.c text +*.cpp text +*.h text +*.txt text +*.yml text +*.s79 text +*.bat text +*.xcl text +*.inc text +*.info text +*.md text +makefile text +rakefile text + + +#These files are binary and should not be normalized +*.doc binary +*.odt binary +*.pdf binary +*.ewd binary +*.eww binary +*.dni binary +*.wsdt binary +*.dbgdt binary +*.mac binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a383c3c --- /dev/null +++ b/.gitignore @@ -0,0 +1,9 @@ +build/ +test/sandbox +.DS_Store +examples/example_1/test1.exe +examples/example_1/test2.exe +examples/example_2/all_tests.exe +examples/example_1/test1.out +examples/example_1/test2.out +examples/example_2/all_tests.out diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..edf25ee --- /dev/null +++ b/.travis.yml @@ -0,0 +1,25 @@ +language: c + +matrix: + include: + - os: osx + compiler: clang + osx_image: xcode7.3 + - os: linux + dist: trusty + compiler: gcc + +before_install: + - if [ "$TRAVIS_OS_NAME" == "osx" ]; then rvm install 2.1 && rvm use 2.1 && ruby -v; fi + - if [ "$TRAVIS_OS_NAME" == "linux" ]; then sudo apt-get install --assume-yes --quiet gcc-multilib; fi +install: gem install rspec +script: + - cd test && rake ci + - make -s + - make -s DEBUG=-m32 + - cd ../extras/fixture/test && rake ci + - make -s default noStdlibMalloc + - make -s C89 + - cd ../../../examples/example_1 && make -s ci + - cd ../example_2 && make -s ci + - cd ../example_3 && rake diff --git a/README.md b/README.md new file mode 100644 index 0000000..fef275c --- /dev/null +++ b/README.md @@ -0,0 +1,211 @@ +Unity Test API +============== + +[![Unity Build Status](https://api.travis-ci.org/ThrowTheSwitch/Unity.png?branch=master)](https://travis-ci.org/ThrowTheSwitch/Unity) +__Copyright (c) 2007 - 2014 Unity Project by Mike Karlesky, Mark VanderVoord, and Greg Williams__ + +Running Tests +------------- + + RUN_TEST(func, linenum) + +Each Test is run within the macro `RUN_TEST`. This macro performs necessary setup before the test is called and handles cleanup and result tabulation afterwards. + +Ignoring Tests +-------------- + +There are times when a test is incomplete or not valid for some reason. At these times, TEST_IGNORE can be called. Control will immediately be returned to the caller of the test, and no failures will be returned. + + TEST_IGNORE() + +Ignore this test and return immediately + + TEST_IGNORE_MESSAGE (message) + +Ignore this test and return immediately. Output a message stating why the test was ignored. + +Aborting Tests +-------------- + +There are times when a test will contain an infinite loop on error conditions, or there may be reason to escape from the test early without executing the rest of the test. A pair of macros support this functionality in Unity. The first `TEST_PROTECT` sets up the feature, and handles emergency abort cases. `TEST_ABORT` can then be used at any time within the tests to return to the last `TEST_PROTECT` call. + + TEST_PROTECT() + +Setup and Catch macro + + TEST_ABORT() + +Abort Test macro + +Example: + + main() + { + if (TEST_PROTECT() == 0) + { + MyTest(); + } + } + +If MyTest calls `TEST_ABORT`, program control will immediately return to `TEST_PROTECT` with a non-zero return value. + + +Unity Assertion Summary +======================= + +Basic Validity Tests +-------------------- + + TEST_ASSERT_TRUE(condition) + +Evaluates whatever code is in condition and fails if it evaluates to false + + TEST_ASSERT_FALSE(condition) + +Evaluates whatever code is in condition and fails if it evaluates to true + + TEST_ASSERT(condition) + +Another way of calling `TEST_ASSERT_TRUE` + + TEST_ASSERT_UNLESS(condition) + +Another way of calling `TEST_ASSERT_FALSE` + + TEST_FAIL() + TEST_FAIL_MESSAGE(message) + +This test is automatically marked as a failure. The message is output stating why. + +Numerical Assertions: Integers +------------------------------ + + TEST_ASSERT_EQUAL_INT(expected, actual) + TEST_ASSERT_EQUAL_INT8(expected, actual) + TEST_ASSERT_EQUAL_INT16(expected, actual) + TEST_ASSERT_EQUAL_INT32(expected, actual) + TEST_ASSERT_EQUAL_INT64(expected, actual) + +Compare two integers for equality and display errors as signed integers. A cast will be performed +to your natural integer size so often this can just be used. When you need to specify the exact size, +like when comparing arrays, you can use a specific version: + + TEST_ASSERT_EQUAL_UINT(expected, actual) + TEST_ASSERT_EQUAL_UINT8(expected, actual) + TEST_ASSERT_EQUAL_UINT16(expected, actual) + TEST_ASSERT_EQUAL_UINT32(expected, actual) + TEST_ASSERT_EQUAL_UINT64(expected, actual) + +Compare two integers for equality and display errors as unsigned integers. Like INT, there are +variants for different sizes also. + + TEST_ASSERT_EQUAL_HEX(expected, actual) + TEST_ASSERT_EQUAL_HEX8(expected, actual) + TEST_ASSERT_EQUAL_HEX16(expected, actual) + TEST_ASSERT_EQUAL_HEX32(expected, actual) + TEST_ASSERT_EQUAL_HEX64(expected, actual) + +Compares two integers for equality and display errors as hexadecimal. Like the other integer comparisons, +you can specify the size... here the size will also effect how many nibbles are shown (for example, `HEX16` +will show 4 nibbles). + + _ARRAY + +You can append `_ARRAY` to any of these macros to make an array comparison of that type. Here you will +need to care a bit more about the actual size of the value being checked. You will also specify an +additional argument which is the number of elements to compare. For example: + + TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, elements) + + TEST_ASSERT_EQUAL(expected, actual) + +Another way of calling TEST_ASSERT_EQUAL_INT + + TEST_ASSERT_INT_WITHIN(delta, expected, actual) + +Asserts that the actual value is within plus or minus delta of the expected value. This also comes in +size specific variants. + + +Numerical Assertions: Bitwise +----------------------------- + + TEST_ASSERT_BITS(mask, expected, actual) + +Use an integer mask to specify which bits should be compared between two other integers. High bits in the mask are compared, low bits ignored. + + TEST_ASSERT_BITS_HIGH(mask, actual) + +Use an integer mask to specify which bits should be inspected to determine if they are all set high. High bits in the mask are compared, low bits ignored. + + TEST_ASSERT_BITS_LOW(mask, actual) + +Use an integer mask to specify which bits should be inspected to determine if they are all set low. High bits in the mask are compared, low bits ignored. + + TEST_ASSERT_BIT_HIGH(bit, actual) + +Test a single bit and verify that it is high. The bit is specified 0-31 for a 32-bit integer. + + TEST_ASSERT_BIT_LOW(bit, actual) + +Test a single bit and verify that it is low. The bit is specified 0-31 for a 32-bit integer. + +Numerical Assertions: Floats +---------------------------- + + TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) + +Asserts that the actual value is within plus or minus delta of the expected value. + + TEST_ASSERT_EQUAL_FLOAT(expected, actual) + TEST_ASSERT_EQUAL_DOUBLE(expected, actual) + +Asserts that two floating point values are "equal" within a small % delta of the expected value. + +String Assertions +----------------- + + TEST_ASSERT_EQUAL_STRING(expected, actual) + +Compare two null-terminate strings. Fail if any character is different or if the lengths are different. + + TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) + +Compare two strings. Fail if any character is different, stop comparing after len characters. + + TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) + +Compare two null-terminate strings. Fail if any character is different or if the lengths are different. Output a custom message on failure. + + TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message) + +Compare two strings. Fail if any character is different, stop comparing after len characters. Output a custom message on failure. + +Pointer Assertions +------------------ + +Most pointer operations can be performed by simply using the integer comparisons above. However, a couple of special cases are added for clarity. + + TEST_ASSERT_NULL(pointer) + +Fails if the pointer is not equal to NULL + + TEST_ASSERT_NOT_NULL(pointer) + +Fails if the pointer is equal to NULL + +Memory Assertions +----------------- + + TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) + +Compare two blocks of memory. This is a good generic assertion for types that can't be coerced into acting like +standard types... but since it's a memory compare, you have to be careful that your data types are packed. + +_MESSAGE +-------- + +you can append _MESSAGE to any of the macros to make them take an additional argument. This argument +is a string that will be printed at the end of the failure strings. This is useful for specifying more +information about the problem. + diff --git a/auto/colour_prompt.rb b/auto/colour_prompt.rb new file mode 100644 index 0000000..8adab6e --- /dev/null +++ b/auto/colour_prompt.rb @@ -0,0 +1,115 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +if RUBY_PLATFORM =~/(win|w)32$/ + begin + require 'Win32API' + rescue LoadError + puts "ERROR! \"Win32API\" library not found" + puts "\"Win32API\" is required for colour on a windows machine" + puts " try => \"gem install Win32API\" on the command line" + puts + end + # puts + # puts 'Windows Environment Detected...' + # puts 'Win32API Library Found.' + # puts +end + +class ColourCommandLine + def initialize + if RUBY_PLATFORM =~/(win|w)32$/ + get_std_handle = Win32API.new("kernel32", "GetStdHandle", ['L'], 'L') + @set_console_txt_attrb = + Win32API.new("kernel32","SetConsoleTextAttribute",['L','N'], 'I') + @hout = get_std_handle.call(-11) + end + end + + def change_to(new_colour) + if RUBY_PLATFORM =~/(win|w)32$/ + @set_console_txt_attrb.call(@hout,self.win32_colour(new_colour)) + else + "\033[30;#{posix_colour(new_colour)};22m" + end + end + + def win32_colour(colour) + case colour + when :black then 0 + when :dark_blue then 1 + when :dark_green then 2 + when :dark_cyan then 3 + when :dark_red then 4 + when :dark_purple then 5 + when :dark_yellow, :narrative then 6 + when :default_white, :default, :dark_white then 7 + when :silver then 8 + when :blue then 9 + when :green, :success then 10 + when :cyan, :output then 11 + when :red, :failure then 12 + when :purple then 13 + when :yellow then 14 + when :white then 15 + else + 0 + end + end + + def posix_colour(colour) + # ANSI Escape Codes - Foreground colors + # | Code | Color | + # | 39 | Default foreground color | + # | 30 | Black | + # | 31 | Red | + # | 32 | Green | + # | 33 | Yellow | + # | 34 | Blue | + # | 35 | Magenta | + # | 36 | Cyan | + # | 37 | Light gray | + # | 90 | Dark gray | + # | 91 | Light red | + # | 92 | Light green | + # | 93 | Light yellow | + # | 94 | Light blue | + # | 95 | Light magenta | + # | 96 | Light cyan | + # | 97 | White | + + case colour + when :black then 30 + when :red, :failure then 31 + when :green, :success then 32 + when :yellow then 33 + when :blue, :narrative then 34 + when :purple, :magenta then 35 + when :cyan, :output then 36 + when :white, :default_white then 37 + when :default then 39 + else + 39 + end + end + + def out_c(mode, colour, str) + case RUBY_PLATFORM + when /(win|w)32$/ + change_to(colour) + $stdout.puts str if mode == :puts + $stdout.print str if mode == :print + change_to(:default_white) + else + $stdout.puts("#{change_to(colour)}#{str}\033[0m") if mode == :puts + $stdout.print("#{change_to(colour)}#{str}\033[0m") if mode == :print + end + end +end # ColourCommandLine + +def colour_puts(role,str) ColourCommandLine.new.out_c(:puts, role, str) end +def colour_print(role,str) ColourCommandLine.new.out_c(:print, role, str) end + diff --git a/auto/colour_reporter.rb b/auto/colour_reporter.rb new file mode 100644 index 0000000..5aa1d27 --- /dev/null +++ b/auto/colour_reporter.rb @@ -0,0 +1,39 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require "#{File.expand_path(File.dirname(__FILE__))}/colour_prompt" + +$colour_output = true + +def report(message) + if not $colour_output + $stdout.puts(message) + else + message = message.join('\n') if (message.class == Array) + message.each_line do |line| + line.chomp! + colour = case(line) + when /(?:total\s+)?tests:?\s+(\d+)\s+(?:total\s+)?failures:?\s+\d+\s+Ignored:?/i + ($1.to_i == 0) ? :green : :red + when /PASS/ + :green + when /^OK$/ + :green + when /(?:FAIL|ERROR)/ + :red + when /IGNORE/ + :yellow + when /^(?:Creating|Compiling|Linking)/ + :white + else + :silver + end + colour_puts(colour, line) + end + end + $stdout.flush + $stderr.flush +end \ No newline at end of file diff --git a/auto/generate_config.yml b/auto/generate_config.yml new file mode 100644 index 0000000..4a5e474 --- /dev/null +++ b/auto/generate_config.yml @@ -0,0 +1,36 @@ +#this is a sample configuration file for generate_module +#you would use it by calling generate_module with the -ygenerate_config.yml option +#files like this are useful for customizing generate_module to your environment +:generate_module: + :defaults: + #these defaults are used in place of any missing options at the command line + :path_src: ../src/ + :path_inc: ../src/ + :path_tst: ../test/ + :update_svn: true + :includes: + #use [] for no additional includes, otherwise list the includes on separate lines + :src: + - Defs.h + - Board.h + :inc: [] + :tst: + - Defs.h + - Board.h + - Exception.h + :boilerplates: + #these are inserted at the top of generated files. + #just comment out or remove if not desired. + #use %1$s where you would like the file name to appear (path/extension not included) + :src: | + //------------------------------------------- + // %1$s.c + //------------------------------------------- + :inc: | + //------------------------------------------- + // %1$s.h + //------------------------------------------- + :tst: | + //------------------------------------------- + // Test%1$s.c : Units tests for %1$s.c + //------------------------------------------- diff --git a/auto/generate_module.rb b/auto/generate_module.rb new file mode 100644 index 0000000..0fbaf55 --- /dev/null +++ b/auto/generate_module.rb @@ -0,0 +1,311 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +# This script creates all the files with start code necessary for a new module. +# A simple module only requires a source file, header file, and test file. +# Triad modules require a source, header, and test file for each triad type (like model, conductor, and hardware). + +require 'rubygems' +require 'fileutils' +require 'pathname' + +#TEMPLATE_TST +TEMPLATE_TST ||= %q[#include "unity.h" +%2$s#include "%1$s.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_%1$s_NeedToImplement(void) +{ + TEST_IGNORE_MESSAGE("Need to Implement %1$s"); +} +] + +#TEMPLATE_SRC +TEMPLATE_SRC ||= %q[%2$s#include "%1$s.h" +] + +#TEMPLATE_INC +TEMPLATE_INC ||= %q[#ifndef _%3$s_H +#define _%3$s_H +%2$s + +#endif // _%3$s_H +] + +class UnityModuleGenerator + + ############################ + def initialize(options=nil) + + here = File.expand_path(File.dirname(__FILE__)) + '/' + + @options = UnityModuleGenerator.default_options + case(options) + when NilClass then @options + when String then @options.merge!(UnityModuleGenerator.grab_config(options)) + when Hash then @options.merge!(options) + else raise "If you specify arguments, it should be a filename or a hash of options" + end + + # Create default file paths if none were provided + @options[:path_src] = here + "../src/" if @options[:path_src].nil? + @options[:path_inc] = @options[:path_src] if @options[:path_inc].nil? + @options[:path_tst] = here + "../test/" if @options[:path_tst].nil? + @options[:path_src] += '/' unless (@options[:path_src][-1] == 47) + @options[:path_inc] += '/' unless (@options[:path_inc][-1] == 47) + @options[:path_tst] += '/' unless (@options[:path_tst][-1] == 47) + + #Built in patterns + @patterns = { 'src' => {'' => { :inc => [] } }, + 'test'=> {'' => { :inc => [] } }, + 'dh' => {'Driver' => { :inc => [create_filename('%1$s','Hardware.h')] }, + 'Hardware' => { :inc => [] } + }, + 'dih' => {'Driver' => { :inc => [create_filename('%1$s','Hardware.h'), create_filename('%1$s','Interrupt.h')] }, + 'Interrupt'=> { :inc => [create_filename('%1$s','Hardware.h')] }, + 'Hardware' => { :inc => [] } + }, + 'mch' => {'Model' => { :inc => [] }, + 'Conductor'=> { :inc => [create_filename('%1$s','Model.h'), create_filename('%1$s','Hardware.h')] }, + 'Hardware' => { :inc => [] } + }, + 'mvp' => {'Model' => { :inc => [] }, + 'Presenter'=> { :inc => [create_filename('%1$s','Model.h'), create_filename('%1$s','View.h')] }, + 'View' => { :inc => [] } + } + } + end + + ############################ + def self.default_options + { + :pattern => "src", + :includes => + { + :src => [], + :inc => [], + :tst => [], + }, + :update_svn => false, + :boilerplates => {}, + :test_prefix => 'Test', + :mock_prefix => 'Mock', + } + end + + ############################ + def self.grab_config(config_file) + options = self.default_options + unless (config_file.nil? or config_file.empty?) + require 'yaml' + yaml_guts = YAML.load_file(config_file) + options.merge!(yaml_guts[:unity] || yaml_guts[:cmock]) + raise "No :unity or :cmock section found in #{config_file}" unless options + end + return(options) + end + + ############################ + def files_to_operate_on(module_name, pattern=nil) + #strip any leading path information from the module name and save for later + subfolder = File.dirname(module_name) + module_name = File.basename(module_name) + + #create triad definition + prefix = @options[:test_prefix] || 'Test' + triad = [ { :ext => '.c', :path => @options[:path_src], :prefix => "", :template => TEMPLATE_SRC, :inc => :src, :boilerplate => @options[:boilerplates][:src] }, + { :ext => '.h', :path => @options[:path_inc], :prefix => "", :template => TEMPLATE_INC, :inc => :inc, :boilerplate => @options[:boilerplates][:inc] }, + { :ext => '.c', :path => @options[:path_tst], :prefix => prefix, :template => TEMPLATE_TST, :inc => :tst, :boilerplate => @options[:boilerplates][:tst] }, + ] + + #prepare the pattern for use + pattern = (pattern || @options[:pattern] || 'src').downcase + patterns = @patterns[pattern] + raise "ERROR: The design pattern '#{pattern}' specified isn't one that I recognize!" if patterns.nil? + + #single file patterns (currently just 'test') can reject the other parts of the triad + if (pattern == 'test') + triad.reject!{|v| v[:inc] != :tst } + end + + # Assemble the path/names of the files we need to work with. + files = [] + triad.each do |cfg| + patterns.each_pair do |pattern_file, pattern_traits| + submodule_name = create_filename(module_name, pattern_file) + filename = cfg[:prefix] + submodule_name + cfg[:ext] + files << { + :path => (Pathname.new("#{cfg[:path]}#{subfolder}") + filename).cleanpath, + :name => submodule_name, + :template => cfg[:template], + :boilerplate => cfg[:boilerplate], + :includes => case(cfg[:inc]) + when :src then (@options[:includes][:src] || []) | pattern_traits[:inc].map{|f| f % [module_name]} + when :inc then (@options[:includes][:inc] || []) + when :tst then (@options[:includes][:tst] || []) | pattern_traits[:inc].map{|f| "#{@options[:mock_prefix]}#{f}" % [module_name]} + end + } + end + end + + return files + end + + ############################ + def create_filename(part1, part2="") + if part2.empty? + case(@options[:naming]) + when 'bumpy' then part1 + when 'camel' then part1 + when 'snake' then part1.downcase + when 'caps' then part1.upcase + else part1.downcase + end + else + case(@options[:naming]) + when 'bumpy' then part1 + part2 + when 'camel' then part1 + part2 + when 'snake' then part1.downcase + "_" + part2.downcase + when 'caps' then part1.upcase + "_" + part2.upcase + else part1.downcase + "_" + part2.downcase + end + end + end + + ############################ + def generate(module_name, pattern=nil) + + files = files_to_operate_on(module_name, pattern) + + #Abort if all of the module files already exist + all_files_exist = true + files.each do |file| + if not File.exist?(file[:path]) + all_files_exist = false + end + end + raise "ERROR: File #{files[0][:name]} already exists. Exiting." if all_files_exist + + # Create Source Modules + files.each_with_index do |file, i| + # If this file already exists, don't overwrite it. + if File.exist?(file[:path]) + puts "File #{file[:path]} already exists!" + next + end + # Create the path first if necessary. + FileUtils.mkdir_p(File.dirname(file[:path]), :verbose => false) + File.open(file[:path], 'w') do |f| + f.write("#{file[:boilerplate]}\n" % [file[:name]]) unless file[:boilerplate].nil? + f.write(file[:template] % [ file[:name], + file[:includes].map{|f| "#include \"#{f}\"\n"}.join, + file[:name].upcase ] + ) + end + if (@options[:update_svn]) + `svn add \"#{file[:path]}\"` + if $?.exitstatus == 0 + puts "File #{file[:path]} created and added to source control" + else + puts "File #{file[:path]} created but FAILED adding to source control!" + end + else + puts "File #{file[:path]} created" + end + end + puts 'Generate Complete' + end + + ############################ + def destroy(module_name, pattern=nil) + + files_to_operate_on(module_name, pattern).each do |filespec| + file = filespec[:path] + if File.exist?(file) + if @options[:update_svn] + `svn delete \"#{file}\" --force` + puts "File #{file} deleted and removed from source control" + else + FileUtils.remove(file) + puts "File #{file} deleted" + end + else + puts "File #{file} does not exist so cannot be removed." + end + end + puts "Destroy Complete" + end + +end + +############################ +#Handle As Command Line If Called That Way +if ($0 == __FILE__) + destroy = false + options = { } + module_name = nil + + # Parse the command line parameters. + ARGV.each do |arg| + case(arg) + when /^-d/ then destroy = true + when /^-u/ then options[:update_svn] = true + when /^-p\"?(\w+)\"?/ then options[:pattern] = $1 + when /^-s\"?(.+)\"?/ then options[:path_src] = $1 + when /^-i\"?(.+)\"?/ then options[:path_inc] = $1 + when /^-t\"?(.+)\"?/ then options[:path_tst] = $1 + when /^-n\"?(.+)\"?/ then options[:naming] = $1 + when /^-y\"?(.+)\"?/ then options = UnityModuleGenerator.grab_config($1) + when /^(\w+)/ + raise "ERROR: You can't have more than one Module name specified!" unless module_name.nil? + module_name = arg + when /^-(h|-help)/ + ARGV = [] + else + raise "ERROR: Unknown option specified '#{arg}'" + end + end + + if (!ARGV[0]) + puts [ "\nGENERATE MODULE\n-------- ------", + "\nUsage: ruby generate_module [options] module_name", + " -i\"include\" sets the path to output headers to 'include' (DEFAULT ../src)", + " -s\"../src\" sets the path to output source to '../src' (DEFAULT ../src)", + " -t\"C:/test\" sets the path to output source to 'C:/test' (DEFAULT ../test)", + " -p\"MCH\" sets the output pattern to MCH.", + " dh - driver hardware.", + " dih - driver interrupt hardware.", + " mch - model conductor hardware.", + " mvp - model view presenter.", + " src - just a source module, header and test. (DEFAULT)", + " test - just a test file.", + " -d destroy module instead of creating it.", + " -n\"camel\" sets the file naming convention.", + " bumpy - BumpyCaseFilenames.", + " camel - camelCaseFilenames.", + " snake - snake_case_filenames. (DEFAULT)", + " caps - CAPS_CASE_FILENAMES.", + " -u update subversion too (requires subversion command line)", + " -y\"my.yml\" selects a different yaml config file for module generation", + "" ].join("\n") + exit + end + + raise "ERROR: You must have a Module name specified! (use option -h for help)" if module_name.nil? + if (destroy) + UnityModuleGenerator.new(options).destroy(module_name) + else + UnityModuleGenerator.new(options).generate(module_name) + end + +end diff --git a/auto/generate_test_runner.rb b/auto/generate_test_runner.rb new file mode 100644 index 0000000..8e8e5bb --- /dev/null +++ b/auto/generate_test_runner.rb @@ -0,0 +1,435 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +$QUICK_RUBY_VERSION = RUBY_VERSION.split('.').inject(0){|vv,v| vv * 100 + v.to_i } +File.expand_path(File.join(File.dirname(__FILE__),'colour_prompt')) + +class UnityTestRunnerGenerator + + def initialize(options = nil) + @options = UnityTestRunnerGenerator.default_options + case(options) + when NilClass then @options + when String then @options.merge!(UnityTestRunnerGenerator.grab_config(options)) + when Hash then @options.merge!(options) + else raise "If you specify arguments, it should be a filename or a hash of options" + end + require "#{File.expand_path(File.dirname(__FILE__))}/type_sanitizer" + end + + def self.default_options + { + :includes => [], + :defines => [], + :plugins => [], + :framework => :unity, + :test_prefix => "test|spec|should", + :setup_name => "setUp", + :teardown_name => "tearDown", + :main_name => "main", #set to :auto to automatically generate each time + :main_export_decl => "", + :cmdline_args => false, + :use_param_tests => false, + } + end + + def self.grab_config(config_file) + options = self.default_options + unless (config_file.nil? or config_file.empty?) + require 'yaml' + yaml_guts = YAML.load_file(config_file) + options.merge!(yaml_guts[:unity] || yaml_guts[:cmock]) + raise "No :unity or :cmock section found in #{config_file}" unless options + end + return(options) + end + + def run(input_file, output_file, options=nil) + tests = [] + testfile_includes = [] + used_mocks = [] + + @options.merge!(options) unless options.nil? + module_name = File.basename(input_file) + + #pull required data from source file + source = File.read(input_file) + source = source.force_encoding("ISO-8859-1").encode("utf-8", :replace => nil) if ($QUICK_RUBY_VERSION > 10900) + tests = find_tests(source) + headers = find_includes(source) + testfile_includes = (headers[:local] + headers[:system]) + used_mocks = find_mocks(testfile_includes) + testfile_includes = (testfile_includes - used_mocks) + testfile_includes.delete_if{|inc| inc =~ /(unity|cmock)/} + + #build runner file + generate(input_file, output_file, tests, used_mocks, testfile_includes) + + #determine which files were used to return them + all_files_used = [input_file, output_file] + all_files_used += testfile_includes.map {|filename| filename + '.c'} unless testfile_includes.empty? + all_files_used += @options[:includes] unless @options[:includes].empty? + return all_files_used.uniq + end + + def generate(input_file, output_file, tests, used_mocks, testfile_includes) + File.open(output_file, 'w') do |output| + create_header(output, used_mocks, testfile_includes) + create_externs(output, tests, used_mocks) + create_mock_management(output, used_mocks) + create_suite_setup_and_teardown(output) + create_reset(output, used_mocks) + create_main(output, input_file, tests, used_mocks) + end + + if (@options[:header_file] && !@options[:header_file].empty?) + File.open(@options[:header_file], 'w') do |output| + create_h_file(output, @options[:header_file], tests, testfile_includes, used_mocks) + end + end + end + + def find_tests(source) + tests_and_line_numbers = [] + + source_scrubbed = source.clone + source_scrubbed = source_scrubbed.gsub(/"[^"\n]*"/, '') # remove things in strings + source_scrubbed = source_scrubbed.gsub(/\/\/.*$/, '') # remove line comments + source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments + lines = source_scrubbed.split(/(^\s*\#.*$) # Treat preprocessor directives as a logical line + | (;|\{|\}) /x) # Match ;, {, and } as end of lines + + lines.each_with_index do |line, index| + #find tests + if line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/ + arguments = $1 + name = $2 + call = $3 + params = $4 + args = nil + if (@options[:use_param_tests] and !arguments.empty?) + args = [] + arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) {|a| args << a[0]} + end + tests_and_line_numbers << { :test => name, :args => args, :call => call, :params => params, :line_number => 0 } + end + end + tests_and_line_numbers.uniq! {|v| v[:test] } + + #determine line numbers and create tests to run + source_lines = source.split("\n") + source_index = 0; + tests_and_line_numbers.size.times do |i| + source_lines[source_index..-1].each_with_index do |line, index| + if (line =~ /#{tests_and_line_numbers[i][:test]}/) + source_index += index + tests_and_line_numbers[i][:line_number] = source_index + 1 + break + end + end + end + + return tests_and_line_numbers + end + + def find_includes(source) + + #remove comments (block and line, in three steps to ensure correct precedence) + source.gsub!(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '') # remove line comments that comment out the start of blocks + source.gsub!(/\/\*.*?\*\//m, '') # remove block comments + source.gsub!(/\/\/.*$/, '') # remove line comments (all that remain) + + #parse out includes + includes = { + :local => source.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/).flatten, + :system => source.scan(/^\s*#include\s+<\s*(.+)\s*>/).flatten.map { |inc| "<#{inc}>" } + } + return includes + end + + def find_mocks(includes) + mock_headers = [] + includes.each do |include_path| + include_file = File.basename(include_path) + mock_headers << include_path if (include_file =~ /^mock/i) + end + return mock_headers + end + + def create_header(output, mocks, testfile_includes=[]) + output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */') + create_runtest(output, mocks) + output.puts("\n/*=======Automagically Detected Files To Include=====*/") + output.puts("#include \"#{@options[:framework].to_s}.h\"") + output.puts('#include "cmock.h"') unless (mocks.empty?) + output.puts('#include ') + output.puts('#include ') + output.puts('#include "CException.h"') if @options[:plugins].include?(:cexception) + if (@options[:defines] && !@options[:defines].empty?) + @options[:defines].each {|d| output.puts("#define #{d}")} + end + if (@options[:header_file] && !@options[:header_file].empty?) + output.puts("#include \"#{File.basename(@options[:header_file])}\"") + else + @options[:includes].flatten.uniq.compact.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}") + end + testfile_includes.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}") + end + end + mocks.each do |mock| + output.puts("#include \"#{mock.gsub('.h','')}.h\"") + end + if @options[:enforce_strict_ordering] + output.puts('') + output.puts('int GlobalExpectCount;') + output.puts('int GlobalVerifyOrder;') + output.puts('char* GlobalOrderError;') + end + end + + def create_externs(output, tests, mocks) + output.puts("\n/*=======External Functions This Runner Calls=====*/") + output.puts("extern void #{@options[:setup_name]}(void);") + output.puts("extern void #{@options[:teardown_name]}(void);") + tests.each do |test| + output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});") + end + output.puts('') + end + + def create_mock_management(output, mock_headers) + unless (mock_headers.empty?) + output.puts("\n/*=======Mock Management=====*/") + output.puts("static void CMock_Init(void)") + output.puts("{") + if @options[:enforce_strict_ordering] + output.puts(" GlobalExpectCount = 0;") + output.puts(" GlobalVerifyOrder = 0;") + output.puts(" GlobalOrderError = NULL;") + end + mocks = mock_headers.map {|mock| File.basename(mock)} + mocks.each do |mock| + mock_clean = TypeSanitizer.sanitize_c_identifier(mock) + output.puts(" #{mock_clean}_Init();") + end + output.puts("}\n") + + output.puts("static void CMock_Verify(void)") + output.puts("{") + mocks.each do |mock| + mock_clean = TypeSanitizer.sanitize_c_identifier(mock) + output.puts(" #{mock_clean}_Verify();") + end + output.puts("}\n") + + output.puts("static void CMock_Destroy(void)") + output.puts("{") + mocks.each do |mock| + mock_clean = TypeSanitizer.sanitize_c_identifier(mock) + output.puts(" #{mock_clean}_Destroy();") + end + output.puts("}\n") + end + end + + def create_suite_setup_and_teardown(output) + unless (@options[:suite_setup].nil?) + output.puts("\n/*=======Suite Setup=====*/") + output.puts("static void suite_setup(void)") + output.puts("{") + output.puts(@options[:suite_setup]) + output.puts("}") + end + unless (@options[:suite_teardown].nil?) + output.puts("\n/*=======Suite Teardown=====*/") + output.puts("static int suite_teardown(int num_failures)") + output.puts("{") + output.puts(@options[:suite_teardown]) + output.puts("}") + end + end + + def create_runtest(output, used_mocks) + cexception = @options[:plugins].include? :cexception + va_args1 = @options[:use_param_tests] ? ', ...' : '' + va_args2 = @options[:use_param_tests] ? '__VA_ARGS__' : '' + output.puts("\n/*=======Test Runner Used To Run Each Test Below=====*/") + output.puts("#define RUN_TEST_NO_ARGS") if @options[:use_param_tests] + output.puts("#define RUN_TEST(TestFunc, TestLineNum#{va_args1}) \\") + output.puts("{ \\") + output.puts(" Unity.CurrentTestName = #TestFunc#{va_args2.empty? ? '' : " \"(\" ##{va_args2} \")\""}; \\") + output.puts(" Unity.CurrentTestLineNumber = TestLineNum; \\") + output.puts(" if (UnityTestMatches()) { \\") if (@options[:cmdline_args]) + output.puts(" Unity.NumberOfTests++; \\") + output.puts(" CMock_Init(); \\") unless (used_mocks.empty?) + output.puts(" UNITY_CLR_DETAILS(); \\") unless (used_mocks.empty?) + output.puts(" if (TEST_PROTECT()) \\") + output.puts(" { \\") + output.puts(" CEXCEPTION_T e; \\") if cexception + output.puts(" Try { \\") if cexception + output.puts(" #{@options[:setup_name]}(); \\") + output.puts(" TestFunc(#{va_args2}); \\") + output.puts(" } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, \"Unhandled Exception!\"); } \\") if cexception + output.puts(" } \\") + output.puts(" if (TEST_PROTECT()) \\") + output.puts(" { \\") + output.puts(" #{@options[:teardown_name]}(); \\") + output.puts(" CMock_Verify(); \\") unless (used_mocks.empty?) + output.puts(" } \\") + output.puts(" CMock_Destroy(); \\") unless (used_mocks.empty?) + output.puts(" UnityConcludeTest(); \\") + output.puts(" } \\") if (@options[:cmdline_args]) + output.puts("}\n") + end + + def create_reset(output, used_mocks) + output.puts("\n/*=======Test Reset Option=====*/") + output.puts("void resetTest(void);") + output.puts("void resetTest(void)") + output.puts("{") + output.puts(" CMock_Verify();") unless (used_mocks.empty?) + output.puts(" CMock_Destroy();") unless (used_mocks.empty?) + output.puts(" #{@options[:teardown_name]}();") + output.puts(" CMock_Init();") unless (used_mocks.empty?) + output.puts(" #{@options[:setup_name]}();") + output.puts("}") + end + + def create_main(output, filename, tests, used_mocks) + output.puts("\n\n/*=======MAIN=====*/") + main_name = (@options[:main_name].to_sym == :auto) ? "main_#{filename.gsub('.c','')}" : "#{@options[:main_name]}" + if (@options[:cmdline_args]) + if (main_name != "main") + output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv);") + end + output.puts("#{@options[:main_export_decl]} int #{main_name}(int argc, char** argv)") + output.puts("{") + output.puts(" int parse_status = UnityParseOptions(argc, argv);") + output.puts(" if (parse_status != 0)") + output.puts(" {") + output.puts(" if (parse_status < 0)") + output.puts(" {") + output.puts(" UnityPrint(\"#{filename.gsub('.c','')}.\");") + output.puts(" UNITY_PRINT_EOL();") + if (@options[:use_param_tests]) + tests.each do |test| + if ((test[:args].nil?) or (test[:args].empty?)) + output.puts(" UnityPrint(\" #{test[:test]}(RUN_TEST_NO_ARGS)\");") + output.puts(" UNITY_PRINT_EOL();") + else + test[:args].each do |args| + output.puts(" UnityPrint(\" #{test[:test]}(#{args})\");") + output.puts(" UNITY_PRINT_EOL();") + end + end + end + else + tests.each { |test| output.puts(" UnityPrint(\" #{test[:test]}\");\n UNITY_PRINT_EOL();")} + end + output.puts(" return 0;") + output.puts(" }") + output.puts(" return parse_status;") + output.puts(" }") + else + if (main_name != "main") + output.puts("#{@options[:main_export_decl]} int #{main_name}(void);") + end + output.puts("int #{main_name}(void)") + output.puts("{") + end + output.puts(" suite_setup();") unless @options[:suite_setup].nil? + output.puts(" UnityBegin(\"#{filename.gsub(/\\/,'\\\\\\')}\");") + if (@options[:use_param_tests]) + tests.each do |test| + if ((test[:args].nil?) or (test[:args].empty?)) + output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, RUN_TEST_NO_ARGS);") + else + test[:args].each {|args| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, #{args});")} + end + end + else + tests.each { |test| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]});") } + end + output.puts() + output.puts(" CMock_Guts_MemFreeFinal();") unless used_mocks.empty? + output.puts(" return #{@options[:suite_teardown].nil? ? "" : "suite_teardown"}(UnityEnd());") + output.puts("}") + end + + def create_h_file(output, filename, tests, testfile_includes, used_mocks) + filename = File.basename(filename).gsub(/[-\/\\\.\,\s]/, "_").upcase + output.puts("/* AUTOGENERATED FILE. DO NOT EDIT. */") + output.puts("#ifndef _#{filename}") + output.puts("#define _#{filename}\n\n") + output.puts("#include \"#{@options[:framework].to_s}.h\"") + output.puts('#include "cmock.h"') unless (used_mocks.empty?) + @options[:includes].flatten.uniq.compact.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}") + end + testfile_includes.each do |inc| + output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}") + end + output.puts "\n" + tests.each do |test| + if ((test[:params].nil?) or (test[:params].empty?)) + output.puts("void #{test[:test]}(void);") + else + output.puts("void #{test[:test]}(#{test[:params]});") + end + end + output.puts("#endif\n\n") + end +end + +if ($0 == __FILE__) + options = { :includes => [] } + yaml_file = nil + + #parse out all the options first (these will all be removed as we go) + ARGV.reject! do |arg| + case(arg) + when '-cexception' + options[:plugins] = [:cexception]; true + when /\.*\.ya?ml/ + options = UnityTestRunnerGenerator.grab_config(arg); true + when /--(\w+)=\"?(.*)\"?/ + options[$1.to_sym] = $2; true + when /\.*\.h/ + options[:includes] << arg; true + else false + end + end + + #make sure there is at least one parameter left (the input file) + if !ARGV[0] + puts ["\nusage: ruby #{__FILE__} (files) (options) input_test_file (output)", + "\n input_test_file - this is the C file you want to create a runner for", + " output - this is the name of the runner file to generate", + " defaults to (input_test_file)_Runner", + " files:", + " *.yml / *.yaml - loads configuration from here in :unity or :cmock", + " *.h - header files are added as #includes in runner", + " options:", + " -cexception - include cexception support", + " --setup_name=\"\" - redefine setUp func name to something else", + " --teardown_name=\"\" - redefine tearDown func name to something else", + " --main_name=\"\" - redefine main func name to something else", + " --test_prefix=\"\" - redefine test prefix from default test|spec|should", + " --suite_setup=\"\" - code to execute for setup of entire suite", + " --suite_teardown=\"\" - code to execute for teardown of entire suite", + " --use_param_tests=1 - enable parameterized tests (disabled by default)", + " --header_file=\"\" - path/name of test header file to generate too" + ].join("\n") + exit 1 + end + + #create the default test runner name if not specified + ARGV[1] = ARGV[0].gsub(".c","_Runner.c") if (!ARGV[1]) + + UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1]) +end diff --git a/auto/parseOutput.rb b/auto/parseOutput.rb new file mode 100644 index 0000000..7ea180f --- /dev/null +++ b/auto/parseOutput.rb @@ -0,0 +1,191 @@ +#============================================================ +# Author: John Theofanopoulos +# A simple parser. Takes the output files generated during the build process and +# extracts information relating to the tests. +# +# Notes: +# To capture an output file under VS builds use the following: +# devenv [build instructions] > Output.txt & type Output.txt +# +# To capture an output file under GCC/Linux builds use the following: +# make | tee Output.txt +# +# To use this parser use the following command +# ruby parseOutput.rb [options] [file] +# options: -xml : produce a JUnit compatible XML file +# file : file to scan for results +#============================================================ + + +class ParseOutput +# The following flag is set to true when a test is found or false otherwise. + @testFlag + @xmlOut + @arrayList + @totalTests + @classIndex + +# Set the flag to indicate if there will be an XML output file or not + def setXmlOutput() + @xmlOut = true + end + +# if write our output to XML + def writeXmlOuput() + output = File.open("report.xml", "w") + output << "\n" + @arrayList.each do |item| + output << item << "\n" + end + output << "\n" + end + +# This function will try and determine when the suite is changed. This is +# is the name that gets added to the classname parameter. + def testSuiteVerify(testSuiteName) + if @testFlag == false + @testFlag = true; + # Split the path name + testName = testSuiteName.split("/") + # Remove the extension + baseName = testName[testName.size - 1].split(".") + @testSuite = "test." + baseName[0] + printf "New Test: %s\n", @testSuite + end + end + + +# Test was flagged as having passed so format the output + def testPassed(array) + lastItem = array.length - 1 + testName = array[lastItem - 1] + testSuiteVerify(array[@className]) + printf "%-40s PASS\n", testName + if @xmlOut == true + @arrayList.push " " + end + end + +# Test was flagged as being ingored so format the output + def testIgnored(array) + lastItem = array.length - 1 + testName = array[lastItem - 2] + reason = array[lastItem].chomp + testSuiteVerify(array[@className]) + printf "%-40s IGNORED\n", testName + if @xmlOut == true + @arrayList.push " " + @arrayList.push " " + reason + " " + @arrayList.push " " + end + end + +# Test was flagged as having failed so format the line + def testFailed(array) + lastItem = array.length - 1 + testName = array[lastItem - 2] + reason = array[lastItem].chomp + " at line: " + array[lastItem - 3] + testSuiteVerify(array[@className]) + printf "%-40s FAILED\n", testName + if @xmlOut == true + @arrayList.push " " + @arrayList.push " " + reason + " " + @arrayList.push " " + end + end + + +# Figure out what OS we are running on. For now we are assuming if it's not Windows it must +# be Unix based. + def detectOS() + myOS = RUBY_PLATFORM.split("-") + if myOS.size == 2 + if myOS[1] == "mingw32" + @className = 1 + else + @className = 0 + end + else + @className = 0 + end + + end + +# Main function used to parse the file that was captured. + def process(name) + @testFlag = false + @arrayList = Array.new + + detectOS() + + puts "Parsing file: " + name + + + testPass = 0 + testFail = 0 + testIgnore = 0 + puts "" + puts "=================== RESULTS =====================" + puts "" + File.open(name).each do |line| + # Typical test lines look like this: + # /.c:36:test_tc1000_opsys:FAIL: Expected 1 Was 0 + # /.c:112:test_tc5004_initCanChannel:IGNORE: Not Yet Implemented + # /.c:115:test_tc5100_initCanVoidPtrs:PASS + # + # where path is different on Unix vs Windows devices (Windows leads with a drive letter) + lineArray = line.split(":") + lineSize = lineArray.size + # If we were able to split the line then we can look to see if any of our target words + # were found. Case is important. + if lineSize >= 4 + # Determine if this test passed + if line.include? ":PASS" + testPassed(lineArray) + testPass += 1 + elsif line.include? ":FAIL:" + testFailed(lineArray) + testFail += 1 + elsif line.include? ":IGNORE:" + testIgnored(lineArray) + testIgnore += 1 + # If none of the keywords are found there are no more tests for this suite so clear + # the test flag + else + @testFlag = false + end + else + @testFlag = false + end + end + puts "" + puts "=================== SUMMARY =====================" + puts "" + puts "Tests Passed : " + testPass.to_s + puts "Tests Failed : " + testFail.to_s + puts "Tests Ignored : " + testIgnore.to_s + @totalTests = testPass + testFail + testIgnore + if @xmlOut == true + heading = "" + @arrayList.insert(0, heading) + writeXmlOuput() + end + + # return result + end + + end + +# If the command line has no values in, used a default value of Output.txt +parseMyFile = ParseOutput.new + +if ARGV.size >= 1 + ARGV.each do |a| + if a == "-xml" + parseMyFile.setXmlOutput(); + else + parseMyFile.process(a) + break + end + end +end diff --git a/auto/stylize_as_junit.rb b/auto/stylize_as_junit.rb new file mode 100644 index 0000000..27ac76d --- /dev/null +++ b/auto/stylize_as_junit.rb @@ -0,0 +1,264 @@ +#!/usr/bin/ruby +# +# unity_to_junit.rb +# +require 'fileutils' +require 'optparse' +require 'ostruct' +require 'set' + +require 'pp' + +VERSION = 1.0 + +class ArgvParser + + # + # Return a structure describing the options. + # + def self.parse(args) + # The options specified on the command line will be collected in *options*. + # We set default values here. + options = OpenStruct.new + options.results_dir = "." + options.root_path = "." + options.out_file = "results.xml" + + opts = OptionParser.new do |opts| + opts.banner = "Usage: unity_to_junit.rb [options]" + + opts.separator "" + opts.separator "Specific options:" + + opts.on("-r", "--results ", "Look for Unity Results files here.") do |results| + #puts "results #{results}" + options.results_dir = results + end + + opts.on("-p", "--root_path ", "Prepend this path to files in results.") do |root_path| + options.root_path = root_path + end + + opts.on("-o", "--output ", "XML file to generate.") do |out_file| + #puts "out_file: #{out_file}" + options.out_file = out_file + end + + opts.separator "" + opts.separator "Common options:" + + # No argument, shows at tail. This will print an options summary. + opts.on_tail("-h", "--help", "Show this message") do + puts opts + exit + end + + # Another typical switch to print the version. + opts.on_tail("--version", "Show version") do + puts "unity_to_junit.rb version #{VERSION}" + exit + end + end + + opts.parse!(args) + options + end # parse() + +end # class OptparseExample + +class UnityToJUnit + include FileUtils::Verbose + attr_reader :report, :total_tests, :failures, :ignored + + def initialize + @report = '' + @unit_name = '' + end + + def run + # Clean up result file names + results = @targets.map {|target| target.gsub(/\\/,"/")} + #puts "Output File: #{@out_file}" + f = File.new(@out_file, "w") + write_xml_header(f) + write_suites_header( f ) + results.each do |result_file| + lines = File.readlines(result_file).map { |line| line.chomp } + if lines.length == 0 + raise "Empty test result file: #{result_file}" + else + result_output = get_details(result_file, lines) + tests,failures,ignored = parse_test_summary(lines) + result_output[:counts][:total] = tests + result_output[:counts][:failed] = failures + result_output[:counts][:ignored] = ignored + result_output[:counts][:passed] = (result_output[:counts][:total] - result_output[:counts][:failed] - result_output[:counts][:ignored]) + end + #use line[0] from the test output to get the test_file path and name + test_file_str = lines[0].gsub("\\","/") + test_file_str = test_file_str.split(":") + test_file = if (test_file_str.length < 2) + result_file + else + test_file_str[0] + ':' + test_file_str[1] + end + result_output[:source][:path] = File.dirname(test_file) + result_output[:source][:file] = File.basename(test_file) + + # save result_output + @unit_name = File.basename(test_file, ".*") + + write_suite_header( result_output[:counts], f) + write_failures( result_output, f ) + write_tests( result_output, f ) + write_ignored( result_output, f ) + write_suite_footer( f ) + end + write_suites_footer( f ) + f.close + end + + def set_targets(target_array) + @targets = target_array + end + + def set_root_path(path) + @root = path + end + def set_out_file(filename) + @out_file = filename + end + def usage(err_msg=nil) + puts "\nERROR: " + puts err_msg if err_msg + puts "Usage: unity_to_junit.rb [options]" + puts "" + puts "Specific options:" + puts " -r, --results Look for Unity Results files here." + puts " -p, --root_path Prepend this path to files in results." + puts " -o, --output XML file to generate." + puts "" + puts "Common options:" + puts " -h, --help Show this message" + puts " --version Show version" + + exit 1 + end + + protected + def get_details(result_file, lines) + results = get_results_structure + lines.each do |line| + line = line.gsub("\\","/") + src_file,src_line,test_name,status,msg = line.split(/:/) + line_out = ((@root and (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\") + case(status) + when 'IGNORE' then results[:ignores] << {:test => test_name, :line => src_line, :message => msg} + when 'FAIL' then results[:failures] << {:test => test_name, :line => src_line, :message => msg} + when 'PASS' then results[:successes] << {:test => test_name, :line => src_line, :message => msg} + end + end + return results + end + + def parse_test_summary(summary) + if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ } + [$1.to_i,$2.to_i,$3.to_i] + else + raise "Couldn't parse test results: #{summary}" + end + end + def here; File.expand_path(File.dirname(__FILE__)); end + + private + + def get_results_structure + return { + :source => {:path => '', :file => ''}, + :successes => [], + :failures => [], + :ignores => [], + :counts => {:total => 0, :passed => 0, :failed => 0, :ignored => 0}, + :stdout => [], + } + end + + def write_xml_header( stream ) + stream.puts "" + end + + def write_suites_header( stream ) + stream.puts "" + end + + def write_suite_header( counts, stream ) + stream.puts "\t" + end + + def write_failures( results, stream ) + result = results[:failures] + result.each do |item| + filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*')) + stream.puts "\t\t" + stream.puts "\t\t\t" + stream.puts "\t\t\t [File] #{filename} [Line] #{item[:line]} " + stream.puts "\t\t" + end + end + + def write_tests( results, stream ) + result = results[:successes] + result.each do |item| + filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*')) + stream.puts "\t\t" + end + end + + def write_ignored( results, stream ) + result = results[:ignores] + result.each do |item| + filename = File.join(results[:source][:path], File.basename(results[:source][:file], '.*')) + puts "Writing ignored tests for test harness: #{filename}" + stream.puts "\t\t" + stream.puts "\t\t\t" + stream.puts "\t\t\t [File] #{filename} [Line] #{item[:line]} " + stream.puts "\t\t" + end + end + + def write_suite_footer( stream ) + stream.puts "\t" + end + + def write_suites_footer( stream ) + stream.puts "" + end +end #UnityToJUnit + +if __FILE__ == $0 + #parse out the command options + options = ArgvParser.parse(ARGV) + + #create an instance to work with + utj = UnityToJUnit.new + begin + #look in the specified or current directory for result files + targets = "#{options.results_dir.gsub(/\\/, '/')}**/*.test*" + + results = Dir[targets] + raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty? + utj.set_targets(results) + + #set the root path + utj.set_root_path(options.root_path) + + #set the output XML file name + #puts "Output File from options: #{options.out_file}" + utj.set_out_file(options.out_file) + + #run the summarizer + puts utj.run + rescue Exception => e + utj.usage e.message + end +end diff --git a/auto/test_file_filter.rb b/auto/test_file_filter.rb new file mode 100644 index 0000000..3dbc26a --- /dev/null +++ b/auto/test_file_filter.rb @@ -0,0 +1,23 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require'yaml' + +module RakefileHelpers + class TestFileFilter + def initialize(all_files = false) + @all_files = all_files + if not @all_files == true + if File.exist?('test_file_filter.yml') + filters = YAML.load_file( 'test_file_filter.yml' ) + @all_files, @only_files, @exclude_files = + filters[:all_files], filters[:only_files], filters[:exclude_files] + end + end + end + attr_accessor :all_files, :only_files, :exclude_files + end +end diff --git a/auto/type_sanitizer.rb b/auto/type_sanitizer.rb new file mode 100644 index 0000000..7c2c0ac --- /dev/null +++ b/auto/type_sanitizer.rb @@ -0,0 +1,8 @@ +module TypeSanitizer + + def self.sanitize_c_identifier(unsanitized) + # convert filename to valid C identifier by replacing invalid chars with '_' + return unsanitized.gsub(/[-\/\\\.\,\s]/, "_") + end + +end diff --git a/auto/unity_test_summary.py b/auto/unity_test_summary.py new file mode 100644 index 0000000..4c20e52 --- /dev/null +++ b/auto/unity_test_summary.py @@ -0,0 +1,139 @@ +#! python3 +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2015 Alexander Mueller / XelaRellum@web.de +# [Released under MIT License. Please refer to license.txt for details] +# Based on the ruby script by Mike Karlesky, Mark VanderVoord, Greg Williams +# ========================================== +import sys +import os +import re +from glob import glob + +class UnityTestSummary: + def __init__(self): + self.report = '' + self.total_tests = 0 + self.failures = 0 + self.ignored = 0 + + def run(self): + # Clean up result file names + results = [] + for target in self.targets: + results.append(target.replace('\\', '/')) + + # Dig through each result file, looking for details on pass/fail: + failure_output = [] + ignore_output = [] + + for result_file in results: + lines = list(map(lambda line: line.rstrip(), open(result_file, "r").read().split('\n'))) + if len(lines) == 0: + raise Exception("Empty test result file: %s" % result_file) + + details = self.get_details(result_file, lines) + failures = details['failures'] + ignores = details['ignores'] + if len(failures) > 0: failure_output.append('\n'.join(failures)) + if len(ignores) > 0: ignore_output.append('n'.join(ignores)) + tests,failures,ignored = self.parse_test_summary('\n'.join(lines)) + self.total_tests += tests + self.failures += failures + self.ignored += ignored + + if self.ignored > 0: + self.report += "\n" + self.report += "--------------------------\n" + self.report += "UNITY IGNORED TEST SUMMARY\n" + self.report += "--------------------------\n" + self.report += "\n".join(ignore_output) + + if self.failures > 0: + self.report += "\n" + self.report += "--------------------------\n" + self.report += "UNITY FAILED TEST SUMMARY\n" + self.report += "--------------------------\n" + self.report += '\n'.join(failure_output) + + self.report += "\n" + self.report += "--------------------------\n" + self.report += "OVERALL UNITY TEST SUMMARY\n" + self.report += "--------------------------\n" + self.report += "{total_tests} TOTAL TESTS {failures} TOTAL FAILURES {ignored} IGNORED\n".format(total_tests = self.total_tests, failures=self.failures, ignored=self.ignored) + self.report += "\n" + + return self.report + + def set_targets(self, target_array): + self.targets = target_array + + def set_root_path(self, path): + self.root = path + + def usage(self, err_msg=None): + print("\nERROR: ") + if err_msg: + print(err_msg) + print("\nUsage: unity_test_summary.py result_file_directory/ root_path/") + print(" result_file_directory - The location of your results files.") + print(" Defaults to current directory if not specified.") + print(" Should end in / if specified.") + print(" root_path - Helpful for producing more verbose output if using relative paths.") + sys.exit(1) + + def get_details(self, result_file, lines): + results = { 'failures': [], 'ignores': [], 'successes': [] } + for line in lines: + parts = line.split(':') + if len(parts) == 5: + src_file,src_line,test_name,status,msg = parts + elif len(parts) == 4: + src_file,src_line,test_name,status = parts + msg = '' + else: + continue + if len(self.root) > 0: + line_out = "%s%s" % (self.root, line) + else: + line_out = line + if status == 'IGNORE': + results['ignores'].append(line_out) + elif status == 'FAIL': + results['failures'].append(line_out) + elif status == 'PASS': + results['successes'].append(line_out) + return results + + def parse_test_summary(self, summary): + m = re.search(r"([0-9]+) Tests ([0-9]+) Failures ([0-9]+) Ignored", summary) + if not m: + raise Exception("Couldn't parse test results: %s" % summary) + + return int(m.group(1)), int(m.group(2)), int(m.group(3)) + + +if __name__ == '__main__': + uts = UnityTestSummary() + try: + #look in the specified or current directory for result files + if len(sys.argv) > 1: + targets_dir = sys.argv[1] + else: + targets_dir = './' + targets = list(map(lambda x: x.replace('\\', '/'), glob(targets_dir + '*.test*'))) + if len(targets) == 0: + raise Exception("No *.testpass or *.testfail files found in '%s'" % targets_dir) + uts.set_targets(targets) + + #set the root path + if len(sys.argv) > 2: + root_path = sys.argv[2] + else: + root_path = os.path.split(__file__)[0] + uts.set_root_path(root_path) + + #run the summarizer + print(uts.run()) + except Exception as e: + uts.usage(e) diff --git a/auto/unity_test_summary.rb b/auto/unity_test_summary.rb new file mode 100644 index 0000000..8f992e5 --- /dev/null +++ b/auto/unity_test_summary.rb @@ -0,0 +1,148 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +#!/usr/bin/ruby +# +# unity_test_summary.rb +# +require 'fileutils' +require 'set' + +class UnityTestSummary + include FileUtils::Verbose + + attr_reader :report, :total_tests, :failures, :ignored + + def initialize(opts = {}) + @report = '' + @total_tests = 0 + @failures = 0 + @ignored = 0 + + + end + + def run + # Clean up result file names + results = @targets.map {|target| target.gsub(/\\/,'/')} + + # Dig through each result file, looking for details on pass/fail: + failure_output = [] + ignore_output = [] + + results.each do |result_file| + lines = File.readlines(result_file).map { |line| line.chomp } + if lines.length == 0 + raise "Empty test result file: #{result_file}" + else + output = get_details(result_file, lines) + failure_output << output[:failures] unless output[:failures].empty? + ignore_output << output[:ignores] unless output[:ignores].empty? + tests,failures,ignored = parse_test_summary(lines) + @total_tests += tests + @failures += failures + @ignored += ignored + end + end + + if @ignored > 0 + @report += "\n" + @report += "--------------------------\n" + @report += "UNITY IGNORED TEST SUMMARY\n" + @report += "--------------------------\n" + @report += ignore_output.flatten.join("\n") + end + + if @failures > 0 + @report += "\n" + @report += "--------------------------\n" + @report += "UNITY FAILED TEST SUMMARY\n" + @report += "--------------------------\n" + @report += failure_output.flatten.join("\n") + end + + @report += "\n" + @report += "--------------------------\n" + @report += "OVERALL UNITY TEST SUMMARY\n" + @report += "--------------------------\n" + @report += "#{@total_tests} TOTAL TESTS #{@failures} TOTAL FAILURES #{@ignored} IGNORED\n" + @report += "\n" + end + + def set_targets(target_array) + @targets = target_array + end + + def set_root_path(path) + @root = path + end + + def usage(err_msg=nil) + puts "\nERROR: " + puts err_msg if err_msg + puts "\nUsage: unity_test_summary.rb result_file_directory/ root_path/" + puts " result_file_directory - The location of your results files." + puts " Defaults to current directory if not specified." + puts " Should end in / if specified." + puts " root_path - Helpful for producing more verbose output if using relative paths." + exit 1 + end + + protected + + def get_details(result_file, lines) + results = { :failures => [], :ignores => [], :successes => [] } + lines.each do |line| + src_file,src_line,test_name,status,msg = line.split(/:/) + line_out = ((@root && (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\") + case(status) + when 'IGNORE' then results[:ignores] << line_out + when 'FAIL' then results[:failures] << line_out + when 'PASS' then results[:successes] << line_out + end + end + return results + end + + def parse_test_summary(summary) + if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ } + [$1.to_i,$2.to_i,$3.to_i] + else + raise "Couldn't parse test results: #{summary}" + end + end + + def here; File.expand_path(File.dirname(__FILE__)); end + +end + +if $0 == __FILE__ + + #parse out the command options + opts, args = ARGV.partition {|v| v =~ /^--\w+/} + opts.map! {|v| v[2..-1].to_sym } + + #create an instance to work with + uts = UnityTestSummary.new(opts) + + begin + #look in the specified or current directory for result files + args[0] ||= './' + targets = "#{ARGV[0].gsub(/\\/, '/')}**/*.test*" + results = Dir[targets] + raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty? + uts.set_targets(results) + + #set the root path + args[1] ||= Dir.pwd + '/' + uts.set_root_path(ARGV[1]) + + #run the summarizer + puts uts.run + rescue Exception => e + uts.usage e.message + end +end diff --git a/auto/unity_to_junit.py b/auto/unity_to_junit.py new file mode 100644 index 0000000..71dd568 --- /dev/null +++ b/auto/unity_to_junit.py @@ -0,0 +1,146 @@ +import sys +import os +from glob import glob + +from pyparsing import * +from junit_xml import TestSuite, TestCase + + +class UnityTestSummary: + def __init__(self): + self.report = '' + self.total_tests = 0 + self.failures = 0 + self.ignored = 0 + self.targets = 0 + self.root = None + self.test_suites = dict() + + def run(self): + # Clean up result file names + results = [] + for target in self.targets: + results.append(target.replace('\\', '/')) + + # Dig through each result file, looking for details on pass/fail: + for result_file in results: + lines = list(map(lambda line: line.rstrip(), open(result_file, "r").read().split('\n'))) + if len(lines) == 0: + raise Exception("Empty test result file: %s" % result_file) + + # define an expression for your file reference + entry_one = Combine( + oneOf(list(alphas)) + ':/' + + Word(alphanums + '_-./')) + + entry_two = Word(printables + ' ', excludeChars=':') + entry = entry_one | entry_two + + delimiter = Literal(':').suppress() + tc_result_line = Group(entry.setResultsName('tc_file_name') + delimiter + entry.setResultsName( + 'tc_line_nr') + delimiter + entry.setResultsName('tc_name') + delimiter + entry.setResultsName( + 'tc_status') + Optional( + delimiter + entry.setResultsName('tc_msg'))).setResultsName("tc_line") + + eol = LineEnd().suppress() + sol = LineStart().suppress() + blank_line = sol + eol + + tc_summary_line = Group(Word(nums).setResultsName("num_of_tests") + "Tests" + Word(nums).setResultsName( + "num_of_fail") + "Failures" + Word(nums).setResultsName("num_of_ignore") + "Ignored").setResultsName( + "tc_summary") + tc_end_line = Or(Literal("FAIL"), Literal('Ok')).setResultsName("tc_result") + + # run it and see... + pp1 = tc_result_line | Optional(tc_summary_line | tc_end_line) + pp1.ignore(blank_line | OneOrMore("-")) + + result = list() + for l in lines: + result.append((pp1.parseString(l)).asDict()) + # delete empty results + result = filter(None, result) + + tc_list = list() + for r in result: + if 'tc_line' in r: + tmp_tc_line = r['tc_line'] + + # get only the file name which will be used as the classname + file_name = tmp_tc_line['tc_file_name'].split('\\').pop().split('/').pop().rsplit('.', 1)[0] + tmp_tc = TestCase(name=tmp_tc_line['tc_name'], classname=file_name) + if 'tc_status' in tmp_tc_line: + if str(tmp_tc_line['tc_status']) == 'IGNORE': + if 'tc_msg' in tmp_tc_line: + tmp_tc.add_skipped_info(message=tmp_tc_line['tc_msg'], + output=r'[File]={0}, [Line]={1}'.format( + tmp_tc_line['tc_file_name'], tmp_tc_line['tc_line_nr'])) + else: + tmp_tc.add_skipped_info(message=" ") + elif str(tmp_tc_line['tc_status']) == 'FAIL': + if 'tc_msg' in tmp_tc_line: + tmp_tc.add_failure_info(message=tmp_tc_line['tc_msg'], + output=r'[File]={0}, [Line]={1}'.format( + tmp_tc_line['tc_file_name'], tmp_tc_line['tc_line_nr'])) + else: + tmp_tc.add_failure_info(message=" ") + + tc_list.append((str(result_file), tmp_tc)) + + for k, v in tc_list: + try: + self.test_suites[k].append(v) + except KeyError: + self.test_suites[k] = [v] + ts = [] + for suite_name in self.test_suites: + ts.append(TestSuite(suite_name, self.test_suites[suite_name])) + + with open('result.xml', 'w') as f: + TestSuite.to_file(f, ts, prettyprint='True', encoding='utf-8') + + return self.report + + def set_targets(self, target_array): + self.targets = target_array + + def set_root_path(self, path): + self.root = path + + @staticmethod + def usage(err_msg=None): + print("\nERROR: ") + if err_msg: + print(err_msg) + print("\nUsage: unity_test_summary.py result_file_directory/ root_path/") + print(" result_file_directory - The location of your results files.") + print(" Defaults to current directory if not specified.") + print(" Should end in / if specified.") + print(" root_path - Helpful for producing more verbose output if using relative paths.") + sys.exit(1) + + +if __name__ == '__main__': + uts = UnityTestSummary() + try: + # look in the specified or current directory for result files + if len(sys.argv) > 1: + targets_dir = sys.argv[1] + else: + targets_dir = './' + targets = list(map(lambda x: x.replace('\\', '/'), glob(targets_dir + '*.test*'))) + if len(targets) == 0: + raise Exception("No *.testpass or *.testfail files found in '%s'" % targets_dir) + uts.set_targets(targets) + + # set the root path + if len(sys.argv) > 2: + root_path = sys.argv[2] + else: + root_path = os.path.split(__file__)[0] + uts.set_root_path(root_path) + + # run the summarizer + print(uts.run()) + except Exception as e: + UnityTestSummary.usage(e) diff --git a/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf b/docs/UnityAssertionsCheatSheetSuitableforPrintingandPossiblyFraming.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2bce0ab30f3d8324983e9adcb70741413c0da66e GIT binary patch literal 146272 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

hsi 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


INBcirSF|2?Xdp<^Y+E&*%PD{U!fY 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Μ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 MK&GSw%84TXFCw$aGynhq literal 0 HcmV?d00001 diff --git a/docs/UnityAssertionsReference.pdf b/docs/UnityAssertionsReference.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d8b10cc8f964cb5f689906b19b80485b1fc9a1b8 GIT binary patch literal 320499 zcmd42byVC0;^<&!tG|5${?GlP^9cQ?iD>(|f&rX*nqX_#G{DX_p0+Ug0i3dS zj-Ft5Sn6o*34RNEaHXDr{N+ z&UY|Ha07s_H%tu*&Q@SwSOH9hy!`(vuyz6P3c%#h1aNA)xOf79T>r{w!E_1`;QgmZ z?|kcaye;9rrcV3hq`<9`qG ze}1+9SKa;pAdmjfTK@-<)Xi(zx>E;wx&CerO z;S=%g>H7ngJjM2mcO|&EF3$3VJRZ*AWeV_g&UbyiV~9=W-k#H=@NX!iWbCCrGU5kJwyMc6UI`rN+GKfO z?~Fe$-98t}z+xS8eU27szjFz9#7T|WrdSOiL@!8*W`LlO=amIm{^0* zwEaha|0R_Hg#bX9YXI^B{<|e|Fn4zZdpP)UID&`l;`!Sb%wfS=0$@h^FLwj>aPe}tgptl)la%rGl+*HrIk|swa$J9x=AUMA z+g6A z-qhV)EVaP@pq3N1$$()6?CS}0lTI)$l=^on{qIx(Hif?u{EHd?vL!70AKQk1CjTEy z`oE>cfAb*^3=n*OzxY4B-RB^~s*+CkwSYgd!Pr&?w;17}t(*tT`;x(ub!w>Iy(539 zcx0!V7gDvgir+>3itG;XaZq?rEa@n(lpQL7`}4FI9r8OX_+=*K&n1<_o9-V4!7s!i zBq3J?Aun??2QDuU8B`(HWf#|+f9|0n5*Cl7(oPb89yldle*b1{FLQgE<+0^|EMD$+ zP~JqJ*)WTcczN1!dEtH$=X}w0Sno}Ji*^P# z-y6$sfvE=4R1<|)J|l&zRP-~N*TPy7$Z415^pS1sKGXBxXo&;&jgTV(F@J8&$_*`K zfGQ}UvLU;nK_g!6-k8}tv+hTqV?oT5BaX$jmgAuD)St9zN$&cLm9YNaaPO&S1GHG4 zlQox_UGYS9*ocQIR@{$B5P8g{+pDfsipA}xnXP2PmfsY6C28j>ViO{&1<``U<&(4m z=lyce6(%u-6W$CM-D>Z1j~)^{w73c2FI7x7xjc!cuU^wm%uOLUY8ot$1*tcLKW!35 z+vObPO^8+Y`Oo{T2I?-?Xi{t+e4o8zng+i1>x`-U;y5(UF*OK&Kr((4@02`4SL}uqA3J zu}GgVgN@c+E%SZPcU9rBZBOn!t*~g<3(!+YQgiz@Oe-urrM0hKSo&ijLBw2$I#V)q zbr6m*df!0lT#GG(I{Q+n-ucNBb%NrUHa^_VLQSYyE)l80&iKsbi_Z|iO3X_lB-YWl zGn08p&AwofnZWf`xU&he(86AZimR3pO5P8=N@ms7#X3x32?b^2Q9@TRM$u=}jF~un zd~0;zm>9^ozp~s9l|$Z1vuv74;p>W}?oxu6@mZ4vz^^aQjW(>&!a8sgbI0w@@_vsH zDz=Swd#{y5x;J~W_@b5kwm+?<0MhliuXbq=_>w9hM{N;M%U%to015;;K#J1RL1&QW zhfEJiFgrAN{4C*!r9`k77si1d8dcV+zcRm(CBZlDu>)5j?&5hJ2P;=nJva!Z^W|fgnwqpw3r znu1FYui=%wr!mKyR(k1}`41!0S& zPQxoq6gSjt8$Mg>JIc0Rl~p1p%OtbZ1RYg80umS3%F3=jr1!n$MW;`m!f7$NqyeuX zsz_37o^AEVg@IhgW1Grc^RkmEBW^8i`(lphhr5^X7_UP}pmbV7)79Id7<%-tUH8@LLN&uztF_M1o)Et@ysyM2c|vR~ zaoPSl#rue$3vyV=$5wcEglSfqHG~yO@G3DwKWeiKeU5jEXqX}BH3|j83qn*bM3bDa zZ#v3jt#lKD-U=VgHYo#wWHWw#t%!qcks-<*lOu>aYEf?0dws)rhN#7c3l8&Zq zMQXw9sX3RL)S!?h>f($hq&{IyrRnPYTAYoRUWYGscD%`-0q-X9eR0+)zXX$hgq)Z0 zWKnazK9re?a*@8;Q@9|BJb|r^X9cd{jcsvqM8(IBT=oMw=urycBV?)WV?D6l?XXir zc8T|(f}iZfjVVEIH-Gc>5PF5sd?7X^g&9cJ&2V!BdL(?Ox=OTEWF}nR$^1!?9RHpD z`y|o4;G^QEds(8OnMOO){3&XG+IaZ#4%vf_HE)#}1}VmpcI<}{4|TuLPC2Rxz(L}s zHGkWJ)r5Dk)k$D{t~c-ta)d`a98om)*JOJEYYP(dejd7!wJ*-!R5+6jI@WxNw|^xg z5ANekTn14OXjjRwjoc#r2xLbWUdFfBS1Kk;bz`fONhu*jb_&P$9u=8gL3dz=^+;*@*DgdI%gSw_!&v}|@z zR8dRbL?!29>=f94z`>>0S}StPd+9|TnK_g{+1Tf)e>peT7-L?X(zrysdX)W5w#?rj zx1ui_t(}(-KVJEct;A{ZX;m=%u6mBGdeQwrnXgw4vTy>~ZigKC_Df&j*UTY!pE4;> zVBFnkY{{IQ1PHU^Y!J2*qRVt$W zG*!O7F0wf(Bva_Nz-e9w_q9v+pZAFc58byLGX+=eL^wKxJms~}r$-mam@zQn)=lKo z!J|vHPz^8-_ccjL5h(h`>#LBKjU!h}7smk>fT>y*MfMbp4fU~b(Mc%7G5JlBspaUN zt>Tc-O;$fSD|5o|NQB#tuYp3zjB3Hp4mVU$&A^Lqrit{R{DfJCwR5*lB5Os$!yY;& zZ0FX;)eZoN2C=+enJ*VWeqAi+;2o z=bWR!Kc|8sf*a&RYr|WwiN6+VH&cifiEAF2KMUKq^aYpAR8M1{k)NQ}ohL!>STt>Z z^h{@I3Ua@eui?D-alrQ;6gi0~Cnd38`GRBdcTO>w95aI9`aDfFG* zeBtaHS9SI}KZ(t;vNn<%hu|IsX_*`3XNf^LpsDSyf&YdwyWhB_8{|V+#Xz zTWGv!;s{Y!0V$XH7EyO> zNrNeNJE5pd|3}N^obPd3Ur$F~9&mm0XESMlc56vIHb*aE)K694Go2%g(xDP07L>43wN0)D$xlKlo0sE*pd~pC=hgUXoDPeQakfdRPB|`0 zPm=fad#5dJmRpaUC7Co~-G73^(QA|!Y2NSAYP;^05uq@>U=proKo7$xDRb~h5^l6! z+cAaB-VvmcjN!uZaqAprc^+UA5=T0J3bFF z#0MMVm1#M8tb9iAH#p-dV`KC3@a)t1?aTE`&Om~E;Gcvv7ru$Y>)+8w*<8bYUG@y> z4O_LKF>q4AANC6kl!&{A+=-*fL=py|ZU%^hwR+$u)RO;uJ_Bt~#rGD>D^-lCxNj}B z*IDeObhd5k$L?ibnAF%9RU=+P15GO!xCIcO73zPP#%UwdA!ZLBV<5f2go3=ckl z2xQqK)mX9p)Uz&ZVD;-nE#pMHUuCq4{fJ-SZTZuw+VkNo2L&-&V$!ACk89`fc0;r$ zc)WyyExBm1Fl8rW^efM(Lgd)tIlyl2H<2bK zh>^6PHe;#9^6~>5hufsGy-~VIEm8rH%v5Y)Z~E6fyfm&VMbj6(8sxadmfw2QQ7!X& zVo4-&CO5k@(l|>c>T?_c?m{kT6I(pmUTodmYeEZ7N%&MqqSz}8<+bDp3{ns_gImwo z<>lU;3$k~yon=hr#XsDxBT1~5J=$BchL%C;qHO#v4K8Ai;HslAR)WelpGiM*uChiN zID%74i_&MBHs$8ttE8^;qgBDVWl}sA%X)q&}?X$T-tz^H(V{Xk#e#Zq=U=G==bv z1t_vJjnv$GTW)q$C~x*X4&Y00TLU>75A{-y(5^@$d?(~xat=^^Lz!-u@SBcMF#pPM0h|Q@;x8e z&}|&IN2VlXy}H*n;a3cgZs&Y6caJ>~n29`_{e3v=HNMu=)k!asYxTIcLFH^COHnfu zhg6hJgwmqG(PJ{njgm{5i{qtXEn}^+*t?SlLgMMg!Crcf+*;;HB_lnokF6LpJZw-S zi`;Gp)qv}^4C-#k$bI%x2V&yT;%qYHQ=(Vi7*b+iIug2I^q!tMfd#k6Zy{r}G=|%;ve6yL7)01hjzKhfPkp$KC6^pQE`IW_>#Vvuvt=kmgql=JI*{A%0 zKWXaJA1JQ)KHGu!9T>*PCl{@9>Br1TJ=NTOu^x8Ts$Myc)w3TUd-*b^@v+`#*EiA$ z?K<$NLcUX)d(EwP98e%zYk>9%_?Q}$+e*8pca>DG5f&0Fb^_oJSjVTWz$&D>jRexx6R)v8jM8J{o6uL{@K%=IKKBa6-CH~)+8kxATt5CwufTgs!S&gp#Xffb%o*{aMeY!~^j@Qc z$3?KOSP7P1lf{nm&*$i9&H!P2;a(*6s|0UK&mN&PdA>zUT~ic}P$@Fi3*7PqhoD)V|Rs%949`apz*z-9j69s(@gw=&ir;u4@b zdbY`>2G}>whY?x37~C_C$WS^vkY;Wz&s~3;*6LoOq21J~~kJmbbv!4CQx& zNrhJ0cll~4K|^kgygdDk{$Rd6q#KtyuoZLwRQRYSP3%Xx8;fa&yg-nu8IB95AooN@ zjge`^BNo4B)NT18hT9s~W`r(fa4?L+w+nm!Wm0@MA9><}2A^;+Khp}n zpacwpAU}HPa^1srKYIK-9R5Zh(B>VmJ0rI86;M0z2jXLc^sQ`TwT!RRVf6#vLP7Kv z0l!GMgN2OgX*^wH?B>{e@Z6-*_L|m+Za3j|$KpS#xUqdEgw&)?h5u4uP_JcfDn~>f z1X{9*5VvJ*{^W`(|4h8q`C^+hJGX1d?{$x9_$OWE`L~uh(OpBugxE&tMKJE0c_U;Y z525#J?;2O}=}Gja(wbZMvcE`iB_}c_yQ|RyGDoi!KCNn@0X_@&MPCUYVr7n^9LC;t zjMI$tEgphPfqW5WG_LLDUt;%u46;)+DhY!=;cjyI@Zl@hWaF1=dP3wKio*%!-6!#F zDmHJtriIVnibtDUrp@UhN`Rhk$p-V;tRJcc43YD09IWWAa-5!p3)ZF-M<>gQ!ATSN zHuP2s&9Mm6S!qdWNM=65Szg%Eg0Gt?K3~I=3smlHei#{JV|VKvv<@#ACRyZ3nK+At z!Xva`$uM4M9YbdhCkp3o&CK`)Mvv@w2G)^xhSlC9Vpi`@KVX6;?XpPhb{K7ZQ6g)l zRE>>1%8^GQdX+!$-K2!I&E5t04=XFJ9eMg=HciXz?VRVS5&@?YHUoWP2i{r?-?PcA zikw9HWtx9MEmJXO#x`6!@;r-)6wuyOE%Q)IQmf;?V$chkd9gV-Ok5%8@L(aid#CllHfI)G=gT*=6LMI7)dcap~ZNO`vXC`y=m z86qaUlfnh`a`arbdBm)DxUoMpdjo37xi|C=aE0y51Kt_>(g`-^VBaur?u2~-Q@nGe z&>S*5Yxpr2+A6^I_L1z@DcUkK?jA6M*2w zEs>=Wi37HQ*5TyK{CI*(VP#mnglOW9fYR`oy?lNgt^TuIh3Y0f4=0&i%4$>wmw6cX zBSYZ6Znb_k+EhmC$L{@h3c|$~u2Qw8stpjvQp^@$OI((}K=uZBF8Pw9O(R4KkGJ!D z^ZAk+4r2XEL!S600u*5FzLE954q@|xtjeqduTQN#!vrbM6)p3ZX#)*Nfwv3FoLt4$ zOYr)n>Qw3k>qOE?oyJ{l55p`tYiuupTciw+=bd90;Zkk5iTdEl5x%}()=`r{ra-#I zI$a(DOO!UXwt?n{_lb%4z=YBsSejIAj;>pu$^`*A5=c~i(%X_{D2J%(ZXpY;MYXXL zc7V0FdC`US6*HIdq&D;wNhl)QDJMEp>+lY|4FgGyqI#fxqOgq;-h%WJL303)m7-oO zGs`sMvG|X0jfVWZ00VINvlXEn#5rbyo;ge-ik@Rph2mkm`7U(iEv8PrTWR=jA_1gb zDymDbuae|*?NQ=CSkg*vEOvCahyaC^OMmGA9^-x6DH*y?Ep5~bUaE6Nd3ryzCUdu9~yu7X# zx#MbbUM-t4S2v5dTbmn8v*dBAIV13qQ6xd!FIozk+SSW=ZBSjIXX78Gj6%J!Al80G zkooKLeEZby#&zvaS|i+=gD`}7z#Qp25m7e$)GeG`IQDc#qDqxhOk zBwWp9?l}Oc=s1#n+|@`A$7X#mQ}mYz`c6I^NhCK!tMQcRyJr_JA=F8P{lIZZ>JTr;5$s?li)I!2`!Vm_-yCWv#So2blR zBYF$V2o2CRK7^{?<9qLOaG?s~LBY&uvG_H}F&XLVzNYW>XiD$`rVq{78uKXGsv{x=rzbQXD68XLa#X~Jo-BU9%UCX!-!o@=+)1?>hxn}i0x)d z8lnvvuLoup%j_Zu+rr79+=I5%MeDo%JgER)u1Z_xtC>Js1!b}#*F_S9_PMd~1UbvP z5dAZ@(})gE!cNUWD=O@}6`@*kpRGXe0k|)YC&$Ixfxyo}mZoKAan#!147v;Qz*K5& z`Wmhbrs3w7Q>D&vMP*Z>Rl;UHsAXhJ7v}oYq}cc7kk+a_|B&8C=uoLO#0&16`QXzH zFKU%bgusL{hs}4_v3sI6On1)yNTvK0|MT1rk!Vudb)T%lioV~>##)$Ke}QCPTtpm> zxsJx5w`^=`HA_YJ5zaLLG7z81BTU^!9a*SNv>01J|ni_xwe>?;Cr9PK-+ZT1IA5!pKoEalP;CM=3u}uAS!*att6% zYhi68{0glynunViXR!D3bSt?KX!B9V!a8QJDgVli*MTJ`RiPS(@9nF# z`bV;%?nabDT+4S1bX0}-8<0{O2C707L@&(%i?{>>ALwupWezgRn|Q(WVR7sBCJH1Q ze!U0td6T#$e5yk8A2;QbKhnP;AliO2av1a^WfRn$z@3ZmF1W%q*t+(&Uh4*c!qUf? zPdtSMO!R*y9dLX!zG0;v-lTWDItqlgic?_uOWPtI56t2jp}9e+d#Ux7Lv(^DxsB0t zn*_42$zOkUX}d7QHtP^JEDEx==|UD#LjZ@Im6jn)N#t=Q_mE^$F zFAi)^tL7I+b=F69VB%Nps#w-EoH?Tm^j4-nA944$QnzgDw5~H1P`x{W_o3CUcf-M3 zjB#7}ePYDp;mdoWRl6Pf89w_d6$uUSW%;~iz9OBqsh{jx5eW_bnz+Nbeo=Y4)$#>? zWwbm&V4ricerh*JWWh(;z)|!p>F_Q)Z^_z_ZR7-V$-^U-HI3o3KmV~FN?yLKS>IdQ zz#A#XMUgDspe>R8Ahk@STz#~HpaW%ovG}A4jmtJZF)Ph^9LKC;4x*?2kaD|E# z-OSXougZTggslzbv$(16!1h)BhJ2+AO>JZF1!a@-h^y(;Z(l!`zsX-13R3%3>_5|~ zEo773G~{3>ZG`xsF&6tHoXsrE3{CBLyMxi!@$I?e3ZKvVYfq)mo5CfydNNA`a~-}| z?i`xUEZ0rRy?ci^pCfrJ@{W9evd}l&DxGKqQC9UVIWks?g%xzPTg4)>VOio!m6RMh zPLXJyNQrZ2356ag!c18d+@f!%*xgV-t=IOR!I?`dN#df~6gpkw=16@NX2ag&%nwbQ zINlSbx;msu6C`Esrs6XGG!BWUd0&E8$Jke^(SitHle?h>p<|kydVL!JDee3|Ayg&%;Pj@I1uKY5}EP4YBR=z<8BkZM9H+ z@}-ghe3Gb1$4$tjs@~5N%*u{N_Nq1?Cq3Gf9~*kr8 zjNLp>$`rjN+jYDYlt`}3$TFgtm`L=;60T3*ldYR*B8gFaG-r4hx;P)|tlBEBuTH|!jz#BDO~D3?ly-Hs2o zyVVjhm|{{7u&{F2Z!=ac5Ew9M8-I^sA++skRhm#e(e2i~ubP^6a3s6PFG1owirYY8U;=Dvf1Jnqq1DLICzzlR`ly`LCE>RC@= zTCB?|`*DXjx3wdS8$k2pOjLj9;0p5x;>mt6BLl7BiC;maponY>-UM7RAPniVwb@#V z9)}$A=bzpsf!Bo(hg7(GRodoOth^^IF$mVzg@|JY3l1+eeo1_NX>_)jW8d2=uuKWa zs0fEEOYxiL=`7;#s!uQoHf5$%Dg`BC0rs>mbgp5Ek~n-zRXVF8HxX)l6pFJtDi@@o z<_d1TjzfA&h(*!0RpCp3=xPg7{?{~D$J1G5meLgO`L~0o@~8+u52%kqbXc_Y3)I=k zAM+zB>k6SD?23fBM6$3@eIJj6B=)w#Zk8K*D+~~tH~U^LyQ65N5Iq`$wm6(&nwKr8 zD*e=Jf4qk(Slb2Un9G58-6%&y-s(G#?{VMb27lDwZ=bXOO9%h1!>qZ(r?l~(3RQUD zFHL$Q!MH}>5p&s}ep|=)c(j;34Nd)Y)4`9I(^2GZc0ceDW|S5*5LhND|e#Pj!i%NfN)l{ zfkx0;lXr|hb_3>fv|($|T4zTxM}k*KQR#+d5dgq0bRGvq(a|t#&-4t z8vfHp(_eYp@k_rF<7aIS;TWvYS{LrbN5j#_?F2o-Q_1W3V9z@^<8vy?Foo zB=>C=PGw;B#PRSNAyomT>lyT92yS0>a{Ksi>KF@A4L94QHFba-VG6d1;ZxUCTg>3K z^#fsNaH^m#6jtt_pBzoT5RVl?v^zEp*3RU$#0WF&u)=6*ia0*9;{nb6bII|k_Av_Q+3YTq2u?4+Jw+V)Yf_9Ot8PCI9( z@FV?9zV9Y3_4^eohu|_M(_@hbFUfvI1-O~r(n#lYHoDlo9pk>k1YN48Qb1?ap~IH( z2NRdSX>iJ@i9Q~om$Ig;#VH;e8>!j`Sa4yDWu@s`H%=u0#W)C9XGTcIc`KD=pc!3r zN1jfkHet#YTCSjG13E$PpDn$v5PI2Y=02ngfd110e~E8oADVPTRe!$>2!6jRXqO@c zOE~YdBD54(N&UXWfX~1>C$|&FGQ~V|+uU$^=L?=J$!docmnB_eBaJn$%E zOWJ`HTkTvrOWNKX*lghx)mI$oB5~YRg5;-UZoiE_+WE z!_sfq0pQ26`RoWvtReTnckBr&%cju4A$o)Wgm*I2gDk8)JFx2`M$Tlyp@~9)CA7iZ zAM%?fAU0N?)I3BE_0>$EmH-~z!3y`WXp;~DT5ksz#ogET$z2wX1DlN<@Xmqzpg{1A zm2D7-d_zMU|G5?fZN)n7b8@wlpBE*n!6gs zLbaitz#av)3-Wq5hI+a<8TJXG#Q4P8W@n%fN*&&3c-^HNFPF{V44(QE+b~zZb(T=% zjG;k7!*==YyL(>3XSXTn4?(epWc@>SQ!s6+S9w$@?RF5Yn2?T=Q3163$S=;@U^xv&0v_Y z8DAQ(j%>SdF4PkKuqyZoJ@=dV0%-YO z5v&JlWD1JXuQpvTCCFn{FhugVY&;1nY`dZvoC^00Aj_%+3OWD$?YY8$%PJY2hPdIf zaw)46JdrqVnz8wYHUR6Yz3CqROcnEET&jLbJLXkHTw6D77TO0FydihHf@gtrkjwTr z9E(6rgLIEV*RT(*2e23eR}t~YbXee+1bPQHa_K#r58hW9MYL8k(qGdu@H>$WcymG} z7iWeQ_53o70qhVGrP%Gs>vOZt!W*kv88zs$Fuq~yd!glE_vN{xXPi_9EDx7+AUE=A zS$k_OsKzyU6h~~1&7b|i-R_G$-g$LD>aEqs5JCc*s&p7x2PmPsY~xshZl$~o~%c5o2 zk{@q?Ac5wPB4F7RY$<%u()SqV#pIMWJ_!)aTdBXRUY-0kGob5+)_R%DO5mt9aTy~t z^|f=ejHs~0ED8xMwH+xTY#70Oj03slhPTSojAieCJmPawoJE1fQPL41#5G#d4x!FC z!#t&Ix@)a>)yTbf{Hw?xX=2Vjlurv?XbX+#1d6!MemVY0eHATJ7apc48_xayB;zZ# zdAV6vsh(uJlauyxZoOR1mK<-%+c6e~TPPAjQ-a$~JKV*zLsU21UmdF?uoGs$E(l_L zb&PtD@1I8A0Z#c2G5NYB?FQXB)ycRIkrW%*4p#a1Z)F##yOHm6Ef-vE7My#K_d*0w zR9cd0d`}z7fYh_--8-8ipl)M`ZNxhC>lW;U^-#=mdHQS>pR)IxibF6~tP3j#<0X?R z)JPuNC=32BfObDiR-QRyYnQ+N5|Mck8O|9NG>YTi(iM)IwUA}B!<4<8WTuakvQ^6) zWqj%1>7lf+orjURt<3wOo+Cr;llFsmcWRMy+`Tsm={wy^{kYAtUh|*F!j}|y*Kz5f zgZxaiq^&h%K72&I%pzxjrP-LUCcz)mI|s|$&A8qg6H-Ka_Oxu1pQhh~vk-!hVYf}S z(|2afVC}`HtREy69NVE-uBn0qu|O?k@y7k;`eu%z{K|43TFo!KEm;-%0=AR}K7Kx8f`TkRmI|LCB=y+t z#D+DZM0)f-^kPn?l2LfI!>yi>wJZnuN9IFWcizGhDi`>)p@Aii zu}5t1@|ej9N4W^{PamgMRegfqWm#%JtkUIqq>{qLBcm}et)teh-8h_yn1Jf~xqj5N zi=?Yc*mM2SP^YNbwepLnV_32Ho$O=z>q*#l`iTv<(`D6Y3}?bRK0lw;c+8r8elWk9 zJv|LOx)xZNi_Tr6?1X_Ixhf#H9eD5J_fRk`N#-|iy!RN}lwPAIG*mrZ>!CVmSgdLH_`KR`S4E}rf*#RlFQ{9iVrnG4 z;*b31Bi8HZGG!vA3fx_+u?nPJ`m(2ZvqEU2%7CO;F#$-t82Hs@E2Q>3yunryN1H&j z2(nq_(CLXb5FZUv3*-uDDK|!L*Q0qH;{9mP4xQe7Lp5nZ-E-%V#93n5`Z%mu6@h5u zdj6foQvb~J)#p^_$*=S7`-;dP?a^X$SV<3FycqNJ6b0^$J|Sxm+~h`zrW2!9W{&a9 zP-75sle%KAJ=m?!OdEhj!&Hdy+H#d?N|1riwE-5eXxc6|P+(r#H?VblEp#35L{OP_ zN|S3`ewf-HVXN=dh0H*QN2&3(f^13gQ(ap_ZQ8elY=2GD5y;)@NyIbX;jalSVD)fy zjZi0PNUvOU!ps#KmD?BgUwAfjACquM_UUiTBFjkzmprSRF*vwB%_nJ&LR66<2A^G} z*yM1u163*Pg;3*p?U$I&s&+H431Xt?54G=uL5n)8>6i#rtsg%1hGL<|N`J4I$O?Ek z`2af-32?0E^}xe_;A6@k{KT4N`NR2QS#+#x5Efk5v!3QSX<#*wx_7K95xXfy3h9Uo z7#W=6$~2^Aa&8mNLe-Ia-31I1z9C1;oq^|cOV4#D_M|~& zsg4tD1u>%aszKG7^-p8W`@ij%@^`VK$z>&e%!w9<7GmP_g!xrwMW-6jbXvyMTB6%d zHZnOm%U1~YCIlG=rpQ;+hc_v72v9Ow7mKhX%7T#zC%>z_e`INwx7`!{o?odi26XAz zV~ek~yIK}eGA!YlvfrIwv{We5LN6s>=yvVSorbFpS8c@HuVO0?lpMiY+ihDB3>1kk zzsi0m^(E2h)*)C5e-^Gf4K>E6&%XX`?gR(Mv>5JUU7w0JPf9mytd2%St>t;_n2p|V zuj}QeE~nN#OatyLUY-zn$JIKBnYfMU@;;vzChZ3?f&pE*ZA;Nu5_e%;S2!!vS? zi66VxByYw(B`htANVL~l`Y7JD)mPLOCnK$RXY62irzyG(*BzNpo0aA9_|=O|sf z3F|_0TzVLp;Ai0th-)ANJv(&0B)oK7GyudHhl*EZxi;tL9goUj+sot}CxcjUFMHeA z*rjo}l7J{qlUcFwg9%cg7lKmIcG}R}46s__YN&!a1$BS6Z#nwLsubi!wXTgrd^Qr` zJ0WWCW=4jLbW%Ay;=T_`Zh9c@Jo*e>sVCTx(%c^6A1ln?UI~;#=$*N1C9y+9KwQFI zfQ5P8pNb#&-NVAN>Q~HAVAh{TV-GpTVIuAZ$BrRzVZ+WhD}v1)M)`xNp|}r)f)mfk zh@PLfX;M+cW_ec7qd{DomR6s1N6S8Bty*jfS?sXgPISL#$$WpB)0Y)wStd{<(`c}3 z&(|RRbLmr&M+_++TLb{rqI4KVfy7Aqw1V85@>A_Yo2r+MSNZlKvL80FIqlt1@U*;E z$vlnTs=LxL9c1e{kiC^R(u81!RDL4#OI1_kUV1})o3M!YH0si9jln8lX&e|{)3*3c zwxCwohub+1sH*EGZf{qOE2ua0nWkrv=o+_cC7B0zyo1}6gqe`JNsZVMjSThB~% zZXr5Hi<8?(x+SLgJsFPb^{W`Vdwhql-|5|bKMl@0q8R*WGn}@#2Mh6hh@q{U^t3MT zk@AIY%5m}meXQY(@)zh^F$rHf*5a~E*3O28nfIdkTZ8hTI%wgd{3}1xopN2C2=9Ys z2s+Xt`WLT}11K)vMJYeNf`DoH7(A|tyH@`GN0sU8hhx+H6{auESQ~E!uWqtlf^FD4 zO1-$I6tH-D!96M%9Sr_xgI7z|!g)pv#P8DuwmZuiX{CxAuScY;h(%ADf|ofRNPqck zh{)b_M73DXZTpP0B@-Ksg-V@FMh`AOO(cdqN8tENbV^4Tndd*q&iTxaf}XYur%4x# z?^QP*lWM>>F@}P z0SfQ%C{!>}kLDH0*ov))Z3hh2HC*50eoVl@3@DouDrdkbcJ3byD6bap%hM2u+e=K_ zHeHLFe8J&r@BA?03Spxapp%(QUVdG1<~{%mb8I1a2#MZ1eAloEi(qZMVE>w(tt{Tb zi4t(#M;uLp$c(B~P{iONw=h{yE$hNKN>T-2Ypr|w+yggcI9t*`j=m`5?^?>hZx=x9gSD z7?DnZ{^gEbmv>{S`@O!;K|8L&;`q-nYbEeouvfj)>~uSZ)P-YEVP?ndMdy6$U;Tbg zN;oyBWM)%A`jHCk*|BU`t|pV%mzg?;ayCy)`YO4YUBL(8-V z6DVQke_Gl9IA2ZE;{H7XQSKC%+Izpr{X4i_fKr>SLImwiEnChp^!wv&f`Ggcj;Epp z-b_=8puqB}n=k4@$^b{F+H21GA(wbqyhQxs;KPk{(0wT5@rv5-J*l$q@!wU10_xsa z#NtbN>s;ILI8c`gYBzn-N?_w*w=9{9NmLpkN5=QqM?^yvk*ry%t_9{Q#S0j9IjNmr zD0_@-Il&KLv9zJm>(c8)+ZYt%E^3s&{)lAEeF`?+{xw|((7yb!*JQ*Pe+7`=_dXE@K) zw-kcNDLMyMtHFxcQY&4Z&+px6>vn}(+%r0JPnzluPjAjfi zF17nup~pSC2SVBAevNk{&n9U|PwFRa#>8h&u71fNZt!pc_ve}kGc1*IW$`ejH;U)X zVnzk{Q8&64h3^crls!5)RY+d495w-pW5x6hD@_FO1T7j`)@b_d+sEb3$2y9^3@DES zCkWAbfSS}HU-EDx-GGlT^!rEJgA~dTmZa{Vp)r3}rPpiQkNsy!D7ZxS4EC*-BwYtO z@Wh1TwDER2yDb_w|=t50(l%l3qbN|jDbHfKWvj$W}7jd%#^=%Rksm{F&CWd@Fhg* zU^8++=5HYn?BVT=H4na{$YB#i;nvCc9pSQjS1UF!ibp2>-XPd_W~f7)TRddR{pHNa za%=sKBIZwWRQ&k@4L*%m=rf-TcdA9CxtaxTc%*QZ6&HaGVh{^W{@&;|e!sjidNlm; z&c??_;lobn`#J~){D@IZ$Zh?`OC17&MZS1I8T#z7cs|Z45m_hkUA=CeU7Wp;tQVu` zq)B*n#jHu-zIJw2%}=&4u-|Q?b(T$Ly_#3;@(8eH63!myc-MZzx!6aClx(7yNk@On zpjU%52WdyMH0I(edDD&k!jk3UN&cb@eQcZ|q$HsOZ7d}ddOH7bGCo7;DVvAG{h7|euZ53IUU2hRynY5uM63a z_ymK)ChO=InF-(f=WO*Zh7psL+=3uRc%@C)K@<>rOMVocXNVxI=sV(K(>&d}X0j zzz(uO_w&m@#%^Lt9%zf$hJp+=9ncmkw7m$48YB|EyjS(-ynv2r>U)vE0dy5gkI6f;e< zcestp+g+Rh8sVAI(zA1L{y^sR{BvHWXP;DKQ~NO%zpt*8v$b1qy0sGO@6+|X8W}4W zm;L^7kY}!xHCl(>`}cGB@#m_H9=Z8ufj)S8)K=$2;4g2u0$x4(f6_V6Yq<=BP2v?E1#P= zV{88%L6sBF;*>;|mfFqL?!yaxRJ)kiMb@Em3+musvX{k?qmnv1(K-8`rWqpxWUE-s zZnhN{$y2_yn{-Cgjn=T=;aD6fE&qeDvy7=EXt(v??(XjH?hLNO;O-0#8+Ugb++koC z+}+u@ySuw=+~M-wKj-A0yS92 z=5^i2#yHuQJnVvd5(jxGJ1wb_+}S_kIIdmUA^w#g9PWeF7oOz|F&GxJ%~b^`>AppV z%r(^m{(WM=6(4;$o0J$_%F_d~+q(pKHepe4dZ~T&IV3Zs_(BEKuylm*?V5 z(*0~7C&_j=A0mlWRXfl=z&>O&2`usL6dJFxJqMk(ogZd|CSn-J8yE&Spoeb0FS}&@a50v7Qfif;kY+~)Q$SIRY z;bVEly-shw=mukKwk8(`1%nCzLA&Ckji#&(KvkeTFii{@eu2Na2z!APAxaVO?F!RU zC1$jW4xKSH{?XKU)OyUgYOK}y`=TL-Hw%LavuEYfX2Bvt;Xw=2(L+B-r>eHv(p}h) zz;A-H=je4sXoH&-h)UqEAuWYaXRszx-L>(5d)HQF?XRujubXVEk8%)vy1BT#IN`Xz ziunVtVGMV$T`r*!3=6MevdJ7I-5cnNhLkUJegXkkTtd)6y2Hq^@!RpT*<7p_&D)D? zXPqwzu52eVxpmxyUl$UpzRLDY!4ffU15T|x%jX8JEcl|uS{)`E!}}$yZH(rKs;=09 zlC?>TS)xj!Bt-G0?cYrZk1<+!{#V)hdYzKBoKAc!IyVjlxRnLMO|fjWLtZu zJ%w4uDCdZRapF%Zg`iE~$zMq59qpqEThjLN{ZqyaCGim0#_L`ebZ}5v>{8E@m^Hy% zj(V6f%Wq$W%X6E9-!WF)z>J#ibZRl$i1x~x6FF!qjrGV=j{qXagN$KlCWVQZ_~%B_2>-ELt8eP`WEyIT;D=kru<8{_5ZJRVTtq z%+=jgR}2u&Ah$QrOVpz0?NdZ~UcozLP*KIiR$0o?6UYG@E3!tOCmbuyeR@@6Zk683 zT|XYem7&WLbjZZ7XrCc35v?ET_ds>IXCLw9D=3HEz1E*OXC`?xN0}k8i!H#xsy=# zYs`O^v0n*UBb{Bk@1y*~ty7WBX{o&}*eWdgY%zH4OER8Fmm)iw zkoltxv?IlQ@Lk=Y8&|!fzuYUVX^Aj?Gi9a36Nhc zAX`8|INx~c+)e|Kmn7s$KxrLg~#C01(O8F2D^kYFq`}=m4bK$#vm1o z!Olk7x_~)`Hr(nI5sSqlfO-ab;PviwPczx_%`L`M=gxP%x zGNIVy&3eC^x!=7mu_0>X&8l0%P(1`FE*0|&Xo&Wz8U_8-!~{WODsAeB39GsklLK zF~=LQGYh44x8j%$Yn=(+CBc7MN-m;@alKKBTWBD4`xs4$F)-`=m8E5 z=$v5Dg`~jkzU-lQaKcR_OObdg&vA8~X;w(lEJSl0#xF%3MkCh)icDYUO7C zWmW4ymWhxy*^B;{dKTMnw&l(ik@0}|t2)@{mx*T&3^n@kSE3@?{D*`k;*pY5bj~4= z=kaxAhAb43hVYF&$>t1b#T9D{q{qHy#B<9e1>2BmFxbtfpN_(J@MMGE^O25&P ztPYTJo6rQPYo`Gs%bty6IW;w${;cLMPjwvr;kGX^7}z|z^fuWmg_ZlRtN^>({jB!( zoc8$^*!^^-NxI!RJ>hdSF7%*y)4wDch!I*HdCEd9CjdqmgFOES=oV2fyM$r^0xG^Y zcOgNq&pq~em13lTbPe4X6t8HUajQZqaENU_=+$6* zg_9gk#Zrd3|5)$kl*R!K*bJK|i%O~cqSm>hZ%@gQhExhsaVoll6>5u18Q@6iDvB@N zkUBJBQl74R0aRe}XY4UGRmlvhM%IevNu8Ga$w-_PX-epnq&;IHpsyIm)owIau0GxA zc^TJQ_BjnDx00bPI)?j3%h-$=w1V;GsPA4(+;<;6nV?-;HZZAQ?Z*44nnod*TIB>e zlduS9W`H#$iY-%Am&_ETjVthAA!v?yM>TAH)0}fiX(X~d{En?eon`YYK8*IY@uoA{ zBa59T(O>75N3@fPi<7qApRV1UX|MlQ{Dvliro7mQ@zk#xuN4n%66z5QV@dl-g8~nE zPx+IkDkwo@GXK%I=0vmr3GFWR2Eo~_n=63G^nfwv;#TC5HA^$E>#sk&IBR{PQ+Lgz zinIBb%+HY=7Fd#wG>eDnfytZDa?$_asY zek=W^c>Cn46Xc9^r3XFA0K~&OW<&SYJLp_NjJ)70LurK?+&wqODzgf-O9yl=hcDUs zRZBinLd7xqYQZTmqrVA&+a#TFTh(bCT@UY@TOI53ABOAs^^dAd^B+O&+JDkPxPqWl%u zkJW~6hg;A1y3cLuzs$=^_-MT&TM;MOOg56ZyVS_~5}~6p8N+1;*RCl6c&Rol$Nhh0 z+uYB6>4x9)|UldMQ##BrQ zh(q$LvrA3qc!&FjfJ0|r;XL?VD+ByMCrStT1sVDx89w4Uwla;Z$iduPt_+aWRi#ei zjTi)NUUm?L%5*4o*T;$jiva-AGgJ6qukfnKTr9Q{Hy<`B=_CPsA$tae;0i$wk-3Ty9Qm8D(g5|Lluedj)AVw z`(5oVu!}w>^Ql4k9`y>j2H|xGI>u8D=whfzMXvW|DekCLq2El$DhGQDV79o!OmS*BP!%0E(CB&pW9HXb&QY9CAW;GUw4&{%t1(>gp(@v zW%$PPROW+a_Gq&Up5if44x#-uJws5=yLDNPv7LjEYoE0v#L_RQZ!exq+2@Uo`3br( zQN{Fsar4RhY6q0?CD+SEAN06nP|XvRci7;hFBj{wZp<}vbR4}R4f+w2;cedfDoaYj z)!*!xKes^u$t|B?T6!8IA(}+z>h%Mcc{%5$+k?Km!^CypSY}w~2SuW$tiPUeV2-TU zOVgWt8LlGyT`OA}+CK@2SMwi0pYr&(5Cid5UBG}P>YR(*mEZ@X@K<7901mz{Hm7uZ zS1v<(&`24bvSzm)U;EB;DI3y-a#wM=rAI88RabDFFQms~F{P*lfel7gybmm`GkR=f z8AVX@YvZ4Nywed32DFft>&QofP7=V5{h= zp2yI{(51GRFI`riw6fjDqy(;t;OmNO4OSA`9Zgid>5_X(b0eLJ4upu+b}YvhH;AC3 z2i4FLX@enK&-}h-w_<1XvR^Rg$JvDCg3g%2k%;xow(QN^W~% z?MX%SIYIVulDZbA!{3c9W8hmH39R4XdPOfHr#5SdPY3s^f?^aC#b5{a7C9X6`b6FQ zFm)M_EKD}2^y}e2YjwkkheAg3e0kmoI}mLc3IY)jqUwpZ5$lKR&&E*|0eem`@EoTQ z?o?md02x+1n5x>2TIB8-$8Dr5pE0m;o--4=6ECEj2wFob{jY#b@Fm0THP_ySfA23?{HOAhg39|=tvKE0coSpfp&HCqOO3tf3R!L-lT7>**TMT$M_b6G7Lgss2$(T4i1 z+c0wwhwJKhb;l(MF+7S2Y5DI#EAvW>OO@ocjTc&k2}SCZ53ScpfNx|6%U-5?3P;~` z29$BXXUk70Bz1s_$^{7HdJQgmoit>CvRd~@RP(>CLFtYLf38{QdiKXAOnEoo( z@HdQ2lR#Tw^e<^M>6|6t2JKQQ4Hs({?m97O6;`Xy4{Ap*qDTL^st_-B8Jy8YuQ1up z>wmquY#3oEe%_KFTFM z0k5d3=qD3eVm)1tfmxzQ*+s?wT{>c-JpKp4F_9API63G<97}L=5qu)Q5)ud311?!A zc9(p5E4!xdYvUIyGs!pch}!F8hj4y{!JBfR>(BvPi!sZG-`8kyg2qAsR=4OTrL(?3 z8Z`-)h70ZL$1>D8{`B&}&l97sppKk@YCmBMQy>%dyfb4}wI>gmZ-zEyf_b!DL`K>& zTpq=_0)N1?+1K0JYLDB%LLbKxQwZDdrLAD>M(_rF(>1zCfC$tc~a^m_8 zZsh+m!XhNR=D5Ukn9%VE%fK9nyx#CymTWkKQSQ$cl=!JP{WLnsrs%t2RAxIy2LCL% zuJ9C5r0(jLK+oFfj&fW$w8hiIwdJ_e+|j=&%;O8Qgc)oggw{{`FJMujUy>_g1uk?$ zZ-CU1>USLN@m27$XDXA~{t{bpfYIuABomG$8c;PpC(=_ITGng+CW(~1tinU24cw<{ zu#rWdgq#{$lB>o!BR(eE$_A2!!$El_E@Uxg3zXNwg$lyd?T4 za*Lo11OY0{?+OoQ9D_gm&6K$ZliGJ_a0NKy{KXUut_{kmfibp_%XfoEJ}w_WC`r*_ z%;-5F`tyeo#g;v-`NFz?gi+C_nbOP!nrbMdAglE|Hv^YL z!r!x2nL4)?+y}$J503wL6M(lujxr2E9pj&aTS#kwSj%kg*@LKqQV3@ZC^p zk$ga#iIo8w&9Cy8taN`r`)l$|Y0p-OqFKDyqZsQuFkKejJM$xnwIXVFu?(?HotSk` z74BcApb80mino2i$mWK7TySm23>cf}7Z( zRnQ3k99Q)KY|hA`MeQa4DX}Jn3?&`zVb zte#LFF)F9Aw2>|7)`ZTaZ;K0kIDniJyx@vJP8*Zq8E=!e>nt4ao4 z0D}3v*)zO|*YfrFzzbKk68sFI1-#~sA0-Ix9Vt)5M?Q$G`j1Y%DT{pU!8B^UuVm!E z-){NW+)p2UzONm9E<|qm$LRWhvYq6n{|!a+4zJ?kv(5%h97>Ulcv2TH9`2h?p+w7wAJ6d-f!^KMJ&MQYvg*&34T*R zQE!;}h@l3SGf%nm1HWeWWBc!U9&pU(kqPW)B^ zGAC9q)1x)J0S;0vq(S_>{Y!$zl9U)YK466`E@i(U4&lV4{mPWp|&c!+QMweAC9N`N{6E-w5h_;H4i?K9SxDLJ-Y3!EwEG1skd}c z`^z_rgIBnZ5l%w8<&PguE2}X+zpAG`2bkWQtN*Nh`bbRFu45^2nd)8n%hO$#v#}gJ zJ!kyl;Y!p$e;S#riVzZ_?LXok6~Z|@!cb0ME7^m~y()8%>XZO4>^M0qX&yjkP5PlH zT?825kK7WTUDj~Hos@JxApxf`z)dN-T_IIjDkY2n_-VO^(u@2)<}zfzw*lTBBxheq z@fF-$4@})dnLjvnomjGv?7et8*>fLz0KVOT>rcS^LS0cahwH3yFcj;nYrT z4j#irg~4`i)SD|hRX2kt?Qfgsg>}XSUe}gqt|ttzVeN72@zu|LlkYbBNbrd7wZ4Ov z^xKmdQbdBD$|)lc2US*z&{AGg1qBXB*1QR@rhu+s?P-}SbzIhNSvqCvpdr%# zCf0!;9meWPK}ZgQ$uP*}M2`+ogf;&X40>AdocyuWM$d`v1x7lpZm>fiPnXe!MtY8W z?E^RN7W7N!xOPRXuPdDPAHI>L*(~y+@Z+AHgZ1K~=|9dr;hU+v+hF%Nr{@DQGl^V_ z&W@F2>MIGfRo{@`G2wnRfoOGN&|r)SkUVqqD#4<4D&SFgzWvIPQ;LpYO;Pl=DT1tt z+h4{!+QhsdYhWxHXOmP*{yV8gA3y$@)H@O+a!_-B*D8u+`}dn|TI)Ty7YrBjVVV+h zj|d||px5pZ08T`-Cj2nHzl(Kw8YWEEvXSWr24eDLj}KqO{&~3YEb}o_yK$5rJVeN! z1iB_`k@XA(D2-Ay z*58mnslE{Y``zt!eN_{z6M9EL75{+Im?vM|LpzH{?FYd(zxr3#xGuf2liFO(B2AoR zhfRyYZD#auB&&iJ!a$habjq>ntj=(1oR#HYifLs%>AEu@BXclKku@&aL}*5sSvsST zIDcxA2;Owc-C{yl-hgsr5@vAcx&!n+&+W<)Mt$Cz3(_`sqVGlEO0fj5m|K>eCPaNX zQ9>uiNbb&NHb@U!mTp?^!tKPVQfm`|kI)NfvillkL?3&>$!%3UJZaWjucg=!-1wvM zq2rErCB3YZQW|xtz2=A9Oc$p7wx<(X_U~dF5`1s*wg!!M1=oAR1<5k^st1b3b~rZ~ zfyOyAX)xf}%`aLruG46&==eHR_!z1LMZlbuVC;F65vd*sJZ-5$-^A&t^-+{sjAgew zZCkr;hl@|iTd`tEN#&Cq=z`Cp_D>9asqb`Z3BBfpB4TMxA(ukKyCKf!`37t(xVg!( zh{r&tk-35zMB{@l#spM^H2*o~_fwg^TvtP&LP|SldRh5~wWcoH>GdkauVZqUa<;EO~*cF%LJm<1BK4^Y)J-%>r>Xo#EJN z-Xhe*GYt@q7)Ha}YiyC`0*Tw6BpRh$%uwDYsS;%|isH_Vh*w*`KGW7l`&>(CHq-p< zU*&?GiA{PX#iE>asrgyp>B3UefULv7>o(&U+e-V4Zn2{h^aWn3E}wxei{bnt0uLnr+lPdCo*WsXEjvdl{@*viN;XfR50@IsNGO z9CtmR_{DG6G7dl9S-WDBuZmXfe_>-rZOy#dv1)j!+n{9u$$X(r2bM|=WK)6Q7=L3| zrNeBs?9;)LhKmhbkq4&+BdLWDArLh@49oUEQsj1~vsQ*g-{9U-z*e0o_C~@U4`_Fv z!3Kwa?Yq;=e!|}y(&V?^Xs*gpkF~&4mZH8LxJsIe0``j=_MpSvq?jpuIFf6hXAQtn zl7CceTCyXlS@~);SY((mF*vUCMw_XQBbjas^;zt`Cv2n2Q05IbVvpWJavSPEYwzOW zitl0kJz?EQfJ^j9v|WZyA-vgESr2@ZXz?hM(I_fhU~Ji)sN@`!s9p%6saMVc!m zCLwLDo;C31Ip^*GyG6n|>8Sm2j+x0rY>zo5o=+A98fe%`U>;S*pJOrzIoVa)W??K8 za>G+V%bl$VGnBOyx<*H74s?-;PqK|lS(fzOYJ0wTIc>4HTWsd`pZg(H$04&h{OEdR zaEIGcqFC6}y=lmRxS;f7Z2?v0H7R3~fuCh%^~jPsN4Mi&$63A28b6`Z&28&j6W5B9 z-K_AslOlhWL9}M``MCKJ@m8}H3Hs)rr?Xn4Bj~l)=M}Nn?)b;kMV_VhW*dBS zb`m3FghTbNgf)68=^}6{ZWO?P!}R;sbY&o}c*XuD-`8X>*d7Xu-@iQPW7#ao7Yp-U9V%C;oj)VO|yRc3=egsdz z{!I~sS}9ZT;IMR#uyxKMgAK5FE=aSFgV`2!h}rItqx*xuy28irySe&(P-rwZOY6mh zz@?r}{kig(W<`h1!fCtB(mLSE*XGK98|doqXZ0Qy>+kvWTbjh%XYP>Y$Url+* z&fh}Xw{KEEcW}e|LHKq3R`J!q^iFQ3w{#tB4M533VSN2+|R-;3DoxF?bS)NCh zJH1;Vf@X6G2^?zU6mt4AK+9c*3)eqX#=E>~Znm?o-nc6OmW{Fn*wI{fU6rP14 z+)&MPUT}P4!Zi8D3+;RS$#XoT-fDz;^W zY(ueX&|!MKo^aNo9)b8Ch)sRmPf*sXfd@5TbW|Qk79W)I8N}jk8xO+VK!+XjP6{C~ zBoH)VP)-60l%oh{Z`O8DpCjaEU~@j+W>~!nUTvSJNXYH!XRbv>eA&@Bl3 z142YfpsIGFKcA2{!~AQHsJZsJIqNWMB#eI1eGijWT{xegkI?4zmOq zdSG|=`|t4y#vAS|d4P2Tqo0`k!ngKNk~8B$(r_G!+OobytwF&pA6DODj@cD;B|# zjJbE91=6jL_)k14$`tU{QKbfG;DP-C?;o^egw+85zRd!{>OfZR-P-xq5k=hs*$uu7 zt%R4wVd3&n!su-w^&+FY8nM%7Psncu$`6D{M1Q63zmMqz;?Gf#b1tJ}Zd-EGNd+@T zf{O=jWTt!(qz^s+<}RL}cU3sJq61gr5{^_OlNWvu6&^ZqH&PVG@O?b`KGR&2-Cc7l)kwZ6#fdcj;EdcDU@EkDx{4N zWpm+~L0LUBm2EuXnDI(2TDTIgBGN19w0I*GLl8)awtFr?0Hp$+t`m=ICiE zQCLt2;6q|>VT>p1Gu^NI$y1NFSP}~dV}13jPSnq!!~aj?G+*BiS`KHaM#Iu#)eYp3 zx0f!5P-mJCu^4l^Al#xtJI$tCuQPQcooGCvO>J4@76hJykbf1$K&cvHZR%CvpYeev z)|nO*n7UX-%Flwr3?`dQ+XQ7IyCSCriihzr7FvtSIdz+f@w-90s6Nv%%KpQ7-$ov4 z8nkYX_-w~|Rs|Q2#EOGl6`QuSKv?>*K<~O><(XnnaSp)*&HSkw$`y_b{jyGOmN^^J zB=el(Wth^{lfe(``P`q!D6Qkj%14NDa?0M7g*C%-6f9*4r}Z+flHa{;TQR%z%KK8r z>dYEFyz;1BXY?rYzIW*lT$ozq5}0BwkV!_iGU`gI)E^IJ3dcY*CNpoE<0+E-E10o|XBV2rGx+;{7d7R<%vhxkCCE&6s!ycUFg2l}%<^7T&yW zV>|mA-m+Lp1wn~?ds7a0bZAw&1ubLFN*5Vhss{56Bzm7LV>DVB40Q=|`Bko^qknW^=(zXJr|mBP%fHw%Gu9Q0n`llJo^a&&=j?Q}Qh1Q*$QstZ#wr z`%a+MRD9!K{=PJLjWj_p3Ea4?cS|6yZkoRSyJ&B^+WMGu>pQeRJtp=vjbKY>hwqefGpOc&jrJYVV)V~sVU2YLi$!49ICp)JEPqBX&i z(Q?pp2m{m(s}%6S&=g$$GN9r}^OP$AqwG{vR@ZW7@U7yno29cZ%1o||YuwY$Hz2(= zYur`IlPBd$W@T$>1EZLx4cQo?OjIbptB8*LVz*9m7W@a-%!`k9HFobZ8kkLY@+uSC zbhG(n<2PHY8#g4lvO{;CnzbiO2HD2t7Ut5Kw9dps{A*2aC>t(LD)bnSqr=Wp{ux%e z7;#9ryOE+R)(h+*(lD6hqQOFk*l*EAMm{>C8L^KtxO+&HvXHCOX_~ZM_uf9wvo#}j zM5T)cDv_*Cu%M&vhQ6J?{Hd=i<=W+_$h)fpg&a=2h|&uO;sO!K2c34Z$lx#O4*J6O z3W-0x&e!pU1AXq9upz44Z{L+k+UUIUL=i(c&aWSKa6Z<~eXBsIvA3c`8%gd!;kG?L zNuCPgi>IK?(to3AeurTmc0VvFnKjrn2%Smrhp+6k`+dLN!=+``3i z&nb7Cy<`ZHSWIP)bX&n9ATzhipl_dz}s`XV?$ZWscX7+mBO1c3ZykBwU<28rWr7zP`lZ+XPqDuBU zuO%bxLckQxppi?$0kt zxLz4FDf~9b9E6ExlwpRPMfn`KVv7iQXp7I6m5H8x3UECfKU9yrcGp5Sc|yHOTF*Lh z)l3;B*EmSx7Aq= zW2F;74yO5X$sT^aLfpfG-fQuJd0qy3-$dxGSeV68(#!VHQ##_M zsXwfVc&2k~@IDQ}$R{q8nsHf}fkqw?d*}YBE`J2#ang>zH)iZX7lhBArQ@WL{$}n( zok|k3k(g;T^$TJZ@2V zV>xXB+YNbi)eF4rr6S@Hb9YLP%PInx{Ed4Rt0O;a5ivV!$rupJDBQz@87N*dM;#cycs|E-r%qRl+Cyzy(*TwH}lk|tEa4n*aJYa8^8We^`q?4Ay zR0`a=xK3LjAruLCi3iWoyv}%63Wq8=>bG2^hDQ97cnp6lRJVr5B^lH&ZP8j3KVuWo z2ux7$ZN?rfb!ZIHbz3+vd!Y*TzSYIaCzx!GUK6C}99Fw#pL6;TUw4hObZZgObicjf zRy9P|&oWQS3B0DbJ-jyWJvt0sZ83j*c)f9qj^b#x9ARpfIze?V_(_Bz{v2vWpdY0l ziz=Issf)U)gSSj+w>2o>ulp-`key;3T0W~@+oPV&ThyCksIPKf_G3sf@sC$nW2wpPRx%0 z)Mj9DroHn=?o!(lQ_c>{(EgFOqp44P)SGWB(eLq9d?Wg#PGH1-w#L67b#02CFwv5E zw^?yviag=e=`|I|JgNN4&}TP}o|u>*g~98w@e9v;4EBWAA`q7&EhWxJylxAXsGoKqbZVxU+% zI#G3WS}VKvdeG4yFjXm$E{l3n|CllxKV=v8>U=6`i|^9XJVm?p>fs%QV<^yu%I>Yx zE3<4(ypqMzE6=iNE!Y@gD*2aV33uXrvdQL;@NBifrRf?(OqXUL+a)teBg<^S(v{7) zubzLi)vCvlMIdpbRnc)~$u^{(>)EUXFeoP8eTrxvlv`uhE_*%PZMTGbTpF<{&bBGt zeNA36O`WjrVvbsSd#qYHQ%BQ<*=+pLQ#fj-(KK@Fgavv|@!4p3g14H=nXXcbiUg4T zRmH3_1L<^OJ4JTkx7S%ztABqcy6JIKav(};n8|5VaM%6rwP)~Ws5-GamG33Jo@p=T zVn1%NQ4_RaFkr(9J?Iv3eE+vj#}OdAG-cm9Ng$CJ{XC+s7!P8-d}e|7j_d@l?fKrScE6btQPX+w^0u-b59PD;+SmN$ zUS^rwn<>Z(?l#Stm%u06pf#6)C;}!b;xiw7;bB)pX}Nz<&Q!UszPKpOTwHRwi)>v3unfd_!?$88uG{je)Dq%`pNfWOdgt0}cO-H5KZ6R08N?v%cBm$mN z^#4H zx9%X{-wG(Sv_t3-Notc^-3FPx1-Qp_CyCYB2lYL+Dz8_Qz3s*@2O0ec0)h@-+&#N&hUSE&&8K|FQjeH zqHZ53O$;S=w}uz`DbSfLo2HPP;ognC$e?ZGj`V}ub7x#Zvhh<~?f5!2`+f(nSW}V|gtIZVx5@*4zV)#IQU1Wfm9Tp@NX+hXv zL_kD6H%jR`dyTT+SkIQz=D1!pvM606gV1$%~Mrsk20 z#PmqVmG|xYCdt;-7}#pR2WiYZW-`H)<^ubTdxIN(c3NVJj%sLoixh0*yv* z<{9cMNZdO7fJSC(JDrzy%5a#T2k3kMtp>A+f~}1mdq@y77%qQzYpvf7Lz+JMOoTE< zjNL!zwW61B$I;kH}G$>PtaO*9e*|jT#qHa9^}70M-|!!Re9F=S- zzU7+V%M#3y8@(z5;c0fm@^oFdv=`e#(SH z${)TPnO#wvNiRxYODQgRKUk4MeY{ba>F(3=W8KOt!sAGv^t|S22RthkczD(t3I6dv zO=_c$e;JYkT?YA-(HdaiXxtEzhqV(VYgC01_flYtIItz)?l0m+q3N@%2bfjHQHJV-!><4Ql8{!x7LGqC_9SKjGX!g_{7?+8gG(IA{DTuq?;EbnPM!(nK z>`ASHLOHj_&SeZ)cIY!dd7L%2P@J(-M@)}fk(Wt*QIcTOM!8rc-(#&ZR&9(S7y{uR zn0U=0W^Rqjy+~}gFPuxaw|eq^hxKaw5>!Z(>P0+lmwdq=A2kG0bFj*9p>@EQayqb2 zJnG=~5t(cdKDGUtc(*~n0c7}rg~V`K1|?KOQr9GQ6~h|fCS2H(wn7Kr!8T+4OJsb7 zt4h2K;|uYI)3|0!-k2uufto_!T8-#jD%%Q@$beLfAjYUQ$F&c@WOJw3PkaZzL6=G1 z3h?}UB;u5Vp`dXnUh0*(_yc0E^}Y4#dv3G*wJ(-9OFSG&TlTit0q#nyPlKVRp2(^@ z>vtQ>sU;PEr0WaPmiS8%YTn_Yq!0KLy{q1bqnUc`1W{iUj1Hc(^etxX|tw?qpo8soQIE~5{UogGPfqTHu=&p zY8%E}-Y|kGK;g1^U%<2_-dW_&2L&b!_w1ernLoiuZSvjdlB>X*q$A3Tb+s23C;B*L zi{x^&%a|+8Vh+@qWOm|Komzw$3PC*0&qk33R2n>+!87 z@rPSWj_vO|*n8O#UXG{Z_VmdPyh3_yOsFOSY&iMvv&lPQ0FfZrRS~0kcb{O=$#w(Z z8c9%&e~B6<&^XIe8!%Y*E_}fui8`wO-ft8lpS6d-PrJw8zyp&Yi;so7t4&FdT44WS zFb0K=dQzT2&ngSMj5Vw2qPiUXcC7l1(o1e^Gr1+}2o{q-lAm1zl{n9vuH?m0eljg< zdUa&i@DKjv*QkHA5khRUzCHD;YL*X`?QaOym~+0INBO1M`hJS3(17hM7@pBRG6Q}j z<`XvB;@6X#SVz9+Qx|;qHW#GW4a6lCKVd_+L|gxWa&?@v)+=Ta7`hDcLzLH-Ns=Jgj>*0E z^YG#=2M$txdnm;9n;xz>d2k=TRxaPtT3!?O6O;PK9S2?E30_6}20QzUT&=Wxt~eT8 zy#`t*2tH8mj|@Et&pa0Hhh{w)6!}9fl}VM*c)MC*af%#_$_VR;)= zi{3H!R{F$m7b*X>cE0wCh$l zlJMJl1Px^!3((N=iM83d$fL0V3aB*+KJ)+5TgbtFzo&z+3ZP>HYk2$~o?P_U`h+ zP!sXzP;Ghq=fP8{X?Z*hSeyg@A+PXh%h3}^8QcG6(CK11T)LU~eN44%H~x~;N~CSq z>SE@u5RYWzW+s-z=XIto9^8lUKzqlh{JVZG7PMG=QHju5-=#51&Bo_^+wFO3V6I{K z4vyDieL3Vc>^g!baDf-PsW%P8u#C9W>#!r%g5npVSkjl`h>;!C-E$A(S&oq6h2QEW z0-?Ua_(&fWdT*Kf$cS zUiGelkU9I7KuCHJ(SM+rgNkY(Q-S(5gc_m@4M4f$05>hD91zXyxQ-UY**1C$ZrhH1 z3nFuo+V}wo;;u){19D3mBXcH5BUxn-1tjqXDAf-I zArXke;Vi6J(%Y@+gX81972|{Fr`sh@E?48t)I zDUiaEP&g!>wwWmSaR(zi0AnWpKT=a*j#k8XUaaU^$l@Ir#(~>f#4#smjctXBer;ZY zqirZh8V%!bFI^JNGmR3iq2p%DTgQ4W-$|i#tb(Ev|4>@`wj19$cl3zW zG?)5ssxa2NVV=gxui{1sqa$63iK=g#n#xG`!T6^^#MYT!)XLLpG|PgP&M%RG8SU&3 z)?)tvjEh`wT3oJKwf$R26r2~q4PJMPfa5a+--TSG`1~1I_l=jm^Ki7VsXCnYI1n4X#Yl3p z-|rEEu{a>Uhh7^vG+G7InN;NSQ;tl@&YJpy+Bk2;w|ZYZ1M`0> zqu3=zaoeq;y8MNbeu59CSoFL6N5umz{Q@5y^h+4OqQTh+9FbnuEzfdpDFwUNAp*N9EF;jUt(xojMiH4qB{+O7-&{jf5Z#mUI1@dj zEo@i~cvm3KoK|e5rf;kzDxB(IVZ>tgNVLW^i18`O9TRBHEX`^Gk4M#NrDn8KU?i^p zCVn&ZJy*1Y=eU~sUi}q3c41vk*xRw6Epw8=0#kWrb#nL8@{nOE(M366Kz?CeXMQ_F zPNZuDYTlRz5UFcFGXju1Raf)eU)Wwq=lIrV-AC#$5PfmEm`un zyj@Hfn&Ntty)r7j;QwLl9D*!sqc;0xRXQte+qP}nwryA9rfu7{?YwE*wymzeCmkI< z>G>JF5qq*@pY^Nvs;W^E?w_Kj&$!42z{vflZ(puirY5(;rcl3Irsj|sM*;)}dmra1`^4j}+ z{dIToq9W+I!whG1^hH*?ZJeE20f9cN!H7U3$Od>RAd=S=78C&oBuI3Bb2ymP_4}7U zursL523AKm{?=`>lr7KH>At`@hq-)G5JRiB$xGhxe8o*7DhAN4Pk5+*>hbq^%~3~! zJMPRz6RbaevjvCPq1iP?vb{$YXht>WcH@7&a2J$ruS6f$R0Vf-GOq6=$JKorl(=K| zD+Q8*q9f9fSrA%~SrBQ6%u3Y7z0tnEG&zRoyx_bv11dp8K|(?HV>j9rsOT%L5kx>yiC3RTw6PKxju@zTB@o-&d&U-gi=fg8-hoo86;knxy7!Isu*3iOy z-A2xcn~dSPxEiUL{SGsy!|RG&iWX~daYo%E98vdV$HQ~3+`_UNrI;+;1x_ay*@Lld z)q(ix$~0o@6_pqoT~VC$FJC}MYcUlwp@0KO|0HlSxEzoUB?`(6WJU%;@@z1*ytS&@ z{M&~LuDJfSwPdUF`Yko8cl#wb6u(U$k7gEkq%5Pg90_eQp=(zb%xuax<~u|KrzG@$j+dwYu$kLD z+t;k>h_hF8FYN%&*X!*_ThNG#N|f?1T~5DsHilM=X5Himcqe7W+z~aPXh6+=AqT|w z3FIMLfKmkr5gm#GW8=ku3MOE{qhv;lOHT~Kb%JqhDwwupdv7mj-n&$pg6v}GOq1^(58Vg!f z*rgS(u+yc~Zl$_Ill{D-=DcCrWmdYgxd%9(r{`#BfWCixp4W&XWiG!B6XvU~pZjd@ zrzSUISls`r8L+!-xK!LvLu9a8gOR4Ad!Em&??6pjWH3^9&QjFv%%lWdFIK)u@-)OT zw$HAkW^XMUM&3@osDN=d6}Ujwj0173zFtn=U)b)szntl%zV$y?$QhZjB8Pky!U>R; zgFw$lmq+p$BorxSJ%V>}%Yr4i^AGoml+$d4#Q$~B%a!}Jkt^)d!X-oAvNh|EwJB~J zy355Syd`$U-}+zn5+2eE%o(UFn4=A8j^8_5#UMm;;~yO9lZ=mB-8A5)%eM#K-_zPX zYae9#!UZ9eZ1N085}g^RI<1T{3Xz)-)5k?0A5{J1*jY+DOx`>3vf_mW35}`kKJ20i z172-;UY+F+;THk4%i_21T>kf;IlM1?JNWOt=U4o)CTFNa_#1$b?0~4_tX$Zmn{pAncE!3VUOOn9#&n$_eC9p zZTmI5H9Og#oeTfkpYCt}UXS_UCk}lr`WXl)7K!IkidN~~Wcw8YG^cW?rj2+zka=%! zZ-(xc5Ct=_q`?b`d#`%d*Uu0NB3;a3_m`XP7Ek@eO zvMsurNVs8U2v=&gpi@4@3!uo}WY2kDTk9D)8Na**&A`ouMLJdVjhv>_>J@`5bQlN` z(ik8QDT6C2!+E~!_(dBh{=2t3VyGSt>+mlD-bay+{HzbSVi%EhS4K1@oQaDkZBBg9vQ97OcucT0NVlM4)Ic~f*GIJw;LRZ zM>w#?j9{dF*FAjxY&W9%3kpM<`NP7MAyShTE+WZ8mf;#%8p*3ktLYS@WXEJ^5#+5;TpeW5OXRd34UUFD7f=4UIT&XO@;lGcA`nH1ovj zSRGdoW#iv=T3WKP-KC@7Y~*?f&{LCn__ZsJaxJ$av>|?`E<+~XP9q-3q(luP$5E2c z^0-d0rgWX^H$hy9dWD)))LOe!wD`m zwpr1VWDjhc0p7O+J)z`^U_6#$i{qErg8PH^49c(WFWq~wsCbu5ADnF3#g=q~ES3GF zj@9elm!S)%+7rACl`SLjxNc(ke1}q3`MK*EzY)o&CJ}J88tCIWb*3+?HZ_(mKtgf5 zH1A(2U2Cs?&Ns~Uw0kb=XLE%|h2@QKNBk;v-fkCXuV-WVL-gLCXk+(rIbfvgB8{>? z&fO}2t_}md-zKeKzw0vAT{pzA8&O%UD_KXD+5`txU|Aa-q_17)23Vs3h^+^@hmKpm z{BMmO@M7&(Q_o9o<-mDMLx#~!i)#jHXIzS6im`$z3zk#@W)7*tFz0`>ZGajocvGk8 zDoOQ5>b-*MOmHCSQM(q@lndR;44Vnw9wlU^U_sC3V<_H>Efp#Zq4JK-w-%<){Z>-+ zTelv1n3Xl}2utk})nfv6`w*WY%pGe+)2^(NRl`IZt%^2uHd0V5Tq06U$N*s3s5u+b z6ziE?Tz@1&auWGHqTi9OFA}-S==}-8AioJiltV_YRsQP5B0X*_Ou_=#QOX-l@+?>h zu>ZLK^L92-SZe7c5y~M|9xszOZtPrP+T5+*0=?lk;QthnNnLIp?>d02ZSGCnajC4W z*uP$w+jicGoO-Lo>@3|vZ>u1_y9l37&2D*cqWR}fcJ#77x}4hQ&rY~%JSp6u0vd1G zvV=#IaeZ0|t10NXqSFb$-ChfS!I?PIP_S;qvrq#q$xcEoGmO!LEBsIo@T_Qy8>Zg0HZQ8^pb%_Bq!$hh6BbaI9#h z;@C+=h_yUk`<7X>ob@OfW$^IA}oy{75GK`LdZ0~C2H3oMjP8YD< z$5ekiXH;dYg{ZB8D%-Z?GgdIz#g}`Obt}*^LkNUUuuO zS;I_iJUaT^_=rMf8{7O$b&&GlWi=gVp4yc4d-zL11KOh2Whr)o0hE6N2=#HK4`Gb8 z!gUJjZd;@&@rKD}od^61Lb%B!kEZU#8pYuNViT#Epjt$mwk0@3(_7(X zN56n;z-x5^0xUpmy($q(q{H2QaqxhU2v{>kLY#v4(xC1nHmwt=v{S(95g z2`;k8Ot_$PQ*Y1Q%)W-bwzZqeRxzX5z=)pPyi0695YK$$n4{dj=K&K$Ojkj)mAdDE zDkj;*zLkNgPZ9Xf<2yc}{UAgQ%hkHr&Ur)0)|17#uVt%cVcC}3gxlz2-V8j``Te$i zFrB5#sdT%#@o!9>hJGb;xkl|gW&DF;VL`#7k}mrPReJk8rnwPWDcUpNp1-AGYb9a# z8vikuPiR8I*Fi?pApZxEIJK7-+~TS}fqhl92}xPCq%?GDYE%E{x^K7^aJAm2(!I^7 z5IK?5NtSh8^ew`7`}wKZ+i`Ui?8JXfRh{v9t)g~2W2=YB_L`HO=WQQ$V#Ri?@oxJ- zSfQrV`EaOJK4e)xSC1Q$-*IcR?Eve#JaLS!m$-9iAo@Fn2<)arh=!GpKBgahf^7mW za!8=jL8-yw$a5Nrd}DWWZ}WiXl;=#PkCLfLnS`vAdpymUhDoZ6DVt6@p*;azZPI8^ zs>f9sgic)yo7%R-g0_nnCfR4Qd7%~-IL!)%SRCGjqh}Vi8c8X7a+`!h%=^zvDLdTC z`?mOXQA^Q%v;Z%hyANs7n3EdwX|`wM@5mnVxW4FP?C|8QIv7M zJ;pKS3{DbSVhSm;JP9W`1nDcuR2Dp`!3=V3nfl=HO@?Bh9E$7zCDgFV8k1{3y_^9emmImZ8uQ4g#0 z@WJ3T!3SQSR8t90DkZ9L-6Nrw6d_WnH6*i1yE(L}v?;Y2o+Vk8a%|!?`rXa9w5I6X z(<>Zr*5B@Y8U9S%g;_qN6-Fv{Z{&MR;fVT1nO1oO1!i``_q4ksIUn_naqpRVRv!zY(pBdwIYUF3eA zP%?TRC3I=)pOd!D(^Y^`StqFifX>U+j&brcfP^b|f#UASD2vOw&bTm=DqcH8;uG^~ zEq(fzDu^GTuQn5%SbiYaQb$f4bZ;ORbzM>Zn)Cx|7>*Hd)!4*)4^stuYo0#u{D~2E9cn#S=3{m zcfMxbc%OAxNtvMM<3ZG>n%GcJnL4f)H@hJ2jS6}DHpG=nDtH(R_ys<0(2&8Js8o`i z4wRaNJpQ+xy@rNqtq(65vZ*MYH`D_u8s|#H1pR@Or#pNWnqberRSs|v%0UMWQ8IC_ z3Soy+6L~{w0o^=wl~#cJeuxjd-mfDFvn499no6vL&@ERlK+{pppg-1hqnkyJi-cY1 zABw-ZpTyGpzZ|C=D-TR0BqwBzs}Q;4B=J5JO0{w_Qc~3t&?Kzow6j|nWu*_^JQ2~^ zXzg^~W}$YeTcar5V`4=&FCHK zNIJ>cT_tP+xw%@I`t9?aC=4@ugm((1H)ObFyk(GzrsosQ(#tsf?AWh1x}^N3ZxEgu zR5-aBnY@~oio{;X54V4RX1%-7W4_u_dBbsh#Fp*35dUgAxyt$d=)G&pW%iV--_9;_ z6aw>0sgVBPrK)`#E`MNCLl&opMU})jKJP6gEh@fgI5MoG1fr(%lU?51t;FANE=vCA zaSV5<8NF53`>kgOF1wfDYCPWk68h^a`50Ma* zS71|EbTN?@V!?0cybFxVZX&f)E=nW z4Pv^qifmGw*L<+JCvF#q601|Gjkt+%!oIq$ii_=hkMB7Aw66t!r}tAyy0N@}P1dRJ zMHl91&Q0~vw}|$%-w{|v7%svoQ&nQe$M>GQBPVI-lFss(fCHo>uFj@m&~y|R|1M_% z4fB-)BdKwr?$OhH=iwt!f~cwgU(id=2i9m3peM}~4Ha;bf@-oG%AATG#q@S#asVG@ zY|h_{xk_+N0E?v`^;?m0M2C2g$hfe6kb;pb4a*=zGS^Uo@hIcef~wq9DV=N-NZA0& zRI4DXW2A|*XhP>sld8dH&72lL5Cjgs1}PRq^?2qma{K~=t7c^jt1s5ud1u8^rFN%u z*rjkA;QMjAT$m4Wr+4hf;gaaI?}F-wZgpl0t_a~b$daHFD(2sA7RBmx78$KNLS|g5 zxU#6hDw?dKhQ=q?6UvmQeK<{lNY1z~W4T(0qhe9~j*xv~s9C)z0~rsxPH%Ms(nBuJ zDRPB=wboIaPt*jqaKy{stTTIyAo6(&c_jc>_QK7o{cj;PM-f_^Aw$Im)K&A^EHQu0 z5`NB7s%zmM28u0Ji0Uw027I21t$pU=Fu2hyUBOvOEM!P#Ccfw@GW_6H8BgH%l<@pK zo;baia0@khYrnfo6ncE1!*YKqdZP?=X}BbfRmp9LZ3&z>3U zKlT&ixIMMZo~Un*gna%@&xaQ-74FV=cVH2+IE&voIBo^x#@Twf8UVCNj+vgJp0RHv{)0)crZ^=-#Qxz4MuRHw z4I_lO!f8dru<<%d;mo@>ZZ&RrPE>N*bRp7Va(70Ozbj(jW8QS(sP>AbVkf4c)QhK# z8!Y!}#8M=^neCYmm`33*UZ-P9IKnCwxR6ki1fOi-@f3_^>HS8u0DgInCr7DyFC2#lR4Xw z%-GLU1NQY%N@jm^5$Krt%B%Ug;x$DIR-}r~TI*REHiAk8`cS~U0-D*i< zQDs16OcYg^5gUv$i*#|K)V{uOOxSsUB66YrCV)y*=QfPm$&WNnnx~U7sl4DHAqi>HP7H0)QDe#&7?OPq_4aNyYRErFN?E zhMGI|L;S=TxQDguw{*VHGgM1%~*fsa?q0_cKUACaH|naN+Mj<^6ZKP;JpSE zOx==r^VEJq^uLP7=&9tZbN> z5^}~$?R7u;!2bBWjrA>*4&0iII=2$-@}DsasZyB6#)#bxqVu$>P5eq{F}(N?dkbVS z96?2t{j(G$qh!J|PL^0v8DYhSi3)_oGFF4pKQru^A2S;K*!pXi!*Ys<{IiRG6Y`T? z&p=DN?aw`2OGgYd3)Q`@pceh)-15iW2G97P#n3BZ1U~@Q zh)eYi(Mc9W;#~_Gjz+3x17`cHW{+xp0tOox-ad9ZS3kNbP0A%NHQ_ex%k}sL>&=4f ziI*c<(hjA@tyE&_>ps5Ob8aD~R~TnPD3hd>O@fU?Qlv#A zuO(a=#u}3}Fd8)`MVp!}8eBuB409Asge2M4TD9G@Fxbiu$5M=>lZ(gaEfxEW4wyGA z%osz7{db$UK<-L{dzJGCH(wvuGjeOgYAD*AMcT8G+|1;aW@@?dGvYA0-g$CD?`HVh zEe?bysDHuh1ADl>0#y*cdyyNe680+UWS9~NIz!Ydfc7>EPJy_i5TTEn zrBX$&-lxwY^;-UO0gC$_d1?(-9r3&YS{?q38@LSCEj|m5b!J4xF~AatT`FP$uGYmM zBpnw;i>QS+REW?`DpZLO#7)!$H+Yv0Y5R9?5+OhOp8eG@m`yNboxc`Sim1tPR!c@l zZi>v}A8-zqdiNjBd;*b&FTQ`3Tp_Tb{V_G7`%Bj+}s?JOK%bt&v}&~Cs^>2 zGq6`|wh+`8vGhrh=^|)^9o~vv{4lqn%T-oeTG_diyxB0AoSEOhscz>}ihqrM=UMW;U2z^3037{me={<;39qBF zG>0{?S8#Hb;@BFQck>+Pw4D_6YKZk6-Sq^K&nZ4_keEYV>`+hgU*>qQ$H%OuwRpeW ztbRa0A$^Ayz2U{#5!OUFp05aasp+64d@+(6}keC(P|EyKA^!8Wm zYq!MYWUg${UCKZFtg#BQNnE3cbYAU;{*zGkktX6W-cOn?x~e*!s7+7ABPgz0ugVrm zkr-TUvU-hhzrfSrYY*~EU2o`s0EZe@sM2RL`S-z-Gi%t1dPJKg3L-!z_wTcY(106f{io4LiKel*ZGUo`5mwt53=PqrxD)1_H?f;H{JC&=0dG5iU+c|+xN3yp|V zSS1Nwd=lQTgO9#~5HR8@LM#w~|NKDAbeo4G;BC?W7$)ON8l87Tj@|ysqfYbK&^$22 zsnPpwzdNsqCT+*XTODk_wGty5*_JU1^*-P7d%}6TFqV{C&hI$08xzaJU@nt=m)mv@iBN@ee_w|GTa=1yWv_MY5|s)JWrV;TqU2TlAs*#;ToMTv@>QH05~XC^ zJcgya05E5^pNqO%wg)?zBmwh@w3x zj!a$KgyfQ9^WN`2-zUE{UOb#syyY#;wjX3W2SL;vebx4S@BeoM9RGhKU?gB-WM*Rd zKX^4WGsFKqlPe!j4;9hpQ%=_vz4`X+YUCD|`QTvII0PgHq2Fr^RUk3~>m&jaLO!eg>ZHUf8mS-Z~~cQxKBBDnV`%5GSCT<%4g3Z68k>LsqVndDeio1``>){ z`8sz@S667eo?oiAf*|~dQ-?=_(QRUCnw@dyhx?ZoLSXG5J#A$_wd+X#%VYgNhrNc5 z^W@mgk5%ZuW9;Q$59g@XsbAgKFMkXSVEYux$}4o<-^EARS@!iIN0t;s4`YCivt8t_@}51;Z@RmjOqY5?=yl)~ z1P-|6msnMnaJ9L7xdmvVV{1W5v-_G419wuykNsf2-cFfwm&BAXXiJy)_2&%ip5#8Yk8OtXwfrDC`stQwbmTw9ki7y`K-y>TU^4-7WStznx z69z7Ts`uGw-H^F8ozT#ShxCqJ@tTLnfMa<#biraBc~Id4-tO%UnLbjMsf9y6)h$e= zProN}><@>7=>xaUB`uO)5Sx^KMo-&u8T7T_s+E4rq=@xlykS~RfQU|oLV9veWy>=J ztZNy-O}+S*1@roB8C^Bm^&H=3fPQ6_2c1>JM{xCD z0=6B2mK+eXPR0weq5Lz>AX*2m8Hh)L76)xzzJt3MJ1BPrZ9tN$GtfT$*@JF(<0)VB z7Z6OJ#B3Od1W$a(F3Hd2#h0qqzXjS16v8NXL(&h&qw}xv&Oh<)Nqm1XLHHK;G@pT2 zq1)ps&I&Hp5g+W@|D0nTTcQKQ=j9GxCs*th)+s&xM(9^I>Iz~J>mmJc8za6|-k=4Q zpV-Nhn^#%cSmhvHp9s3PJ~8VkF?TT|4~Gu(B`YsVvc z&DdqGIRWK{q=ITu-m+Hdp?I(Qt1(}?r(@rK?SOmaC3Iyz4)+d~?)bhU5IM`NmFmKe zLtaL%xmBzO{{V%CD6{W#(uLYJfo}a>U8g*+O~p^-jWuu;e!)_mU+pee<9+8VRr6zl z{y0ev3IT>MapNW3Ab%80@z3k#fcq!a=gS1YD+#5t3(L*9`7nS875VEY!@n8 zxSuwpJ`9u--fA&?*%jTKU-cthGDMz)7a+$MK}$9LIO;Ew*jm_f%~D4_-LUW5>fTt1`eK*`v&3_5$Xa{B!r2ybN< zOt=qCH743zRyt6v!aLw^jv||20#{CszV%xTlGm|(3jGWT-dvg$)MTNzaCs>oxK6%e zIj`J;qB>>XlyT(V3$4Cp1gR z2vGq%u6eVx)4e=zPdUy$b`|t-HAFvJ!d{9C4}UhcA3D5Jd^8|(J5RFm0*>R}c<&;7 zq^wufz9(AztmxG&*N$fEe4kTLK3+SLJ|yui=5#0GkK)Znjk!zUH&h=U3#;uCa#E)jHnqML2)0dk<=(?K6c* zWBmSZL%rLy{;!@eY!>mh8~KUbM#A20XEgSH3bO%>q_sB;4YN!*_HuNP zHTNmQX%+gw=>pq;UuIoGXZe6?K@CDmzY1`>|Aj`hvbYa`N z<9MR$zSC&=kg~Jwz4O((@!l5%&-*!cga0+yauv(_J&G%T>C@o5a$Wk&^Hti7`;qhZ zpr7+~;XKoOyDv@O+wjv@S^IVM)QivaIFf1K&%f>YavNWG)BV$5e?ZR1;~DX}oZK|; zx?9@i_)8~xWjA|u5Uy@z)$z>Ave2dRG0sK84cK@n>eTKtnuiVkwPEdH+#S?4zD>A2 zw=Hu6YG31Cz&_(0{qnMHyNxR;rR1WdqvSLnSEMMJO4ew?%E`n@#mUyLf1h`_H!eDk zI<86yU;N2fZtW zE6;y!b51XIh5C5IW?{AwekiaE%@ z6(XkBCus;P~bAz{_UEmM~iaqbP-*AK6w{(kr=nmj^!4r9CDT7iPAgO~v zbzDI#B;WZ=K)j3v|a?95A}KfAEH1W&`A+1kj}@ z4nAH%@CFac@*?6b@~~NX0`T`Gc>q5{u?*0KjNrz1#-E@vr~UHv$npo~ubls&);gFU z^#8%JS6=Bq+5Lic5-ehN{cpK>B6p10zyF>v!0}>;ARjP-d>Hz_lKTYzb|BD%*(H!M z8N*0Sn?xyLg6&QNJuGLy^p!DZ!-=Bg098)U=0u3^AH9Vt*;Bv?8B9+UWk8QK0e5bs zK#L}JAc+}p`4{Ka#CfRmNcqoyWR3%znE{y(Ah!%3GeG(JUrfIv2h>e}C+RnAIuMoUZD7%tp}c-0QTp9C;xqFK19%GsHteg<+8g1O@4~P z(U0{Q41MID+o~QFiN%XxB{46h<)UI8vEvcpI%QW>L{l&Z!hG}v0j<6gqMbZL>MAS= zJ0Dc#1r73|qMfM~(0-exTiS#jp8lH)^1P{EMWy_U3p*Rgu=aF^F*tiuFP78MSukC9)y`bxog8ofxNxKI?9jq`gj-AD5h_Z=PR?320$lX;dRt z>ZL8#Ml|-crI>d2*I0L-BbnTPG;|m@+ZS7#oD?-XRV3kUlkVB=Y;4`(?eWhitnoXp z4?MJ-R6ii~_53~@@L|<-=D9&ys3}8cI`6az_I-8D{dANqm&zzdTKg1xhV{~7M}qK zy%Jhw?Bo_@?7dXA@B#c-D)o>}VjrGdm?r>MM&5j9M>IfY5z4;+x-m;s*}hWLOUs~* zeR?ghwNISuFjseEWyF*AP@88(oyXiTJ+8$x5!+S&ZZo=TITg9$*UgCKmB9HS`QUgs z7IpX9srbzM@V_Fg*s!hTcXH&e5OoOSru?}t`}Oh$vK*IiPBJymY`=Vv_WfEky5phKQDh;rFBI4gN($->S%Nr8RyKv5s3E2x<-pi46R7!* ztcHfXha%dz&G6`=y%qS2dG|`V%PQN-$~*gLvfwOh&*HmUk0*LSdYFH(oA4&M8RtQrpQi|qaJu-u9Fq*)pFIJ}yB(9S zJ#>5d6=d*BOyiH;LkRfs^XkPe7(Y^M-FCXBUN2sC)Kqp(K8&g3byS zX`XsDU+#Bapnz$3M6?xLJ6!ZkUpTPCV z8hOjQZ$L~U-VS=O$TFuy#{#KsNW_S%Nz5&b8W((VSAcsW#iqqCmN`-U{M&*IK zxNWjDpS$O+Ho;~14*}MkJD3eSpg4f_?;+yqLDE>C(Nk@Th1Cu9I}_@D(UM$2uac8W zQj^#ymOuLI)4NGngAAOoO7P0|63Q&#tvETKcmQMaH4$g5cJV z#lUbJGi@`QZC-k^JggeqAfCZ;K3zZ0Iquo{5>&BUw4Spr=nYH%{@H8(_OJPA|32aJ zzcc=&5t}M?aU?DH3pV8SAPJ%f;s}D}R)9@4;Q7CKS^+PHRlwO12-Qebj2n5oa>AzM z1u0~WdDBD*A%VnpOl}dcQH;4Q(9l63$6qAocd}3)PP2q*i?r^Nw+slSkp3=;p%#ShWDucH}0y1I1vU%gA-P8?61)Fo|kxWEX}zFjKDJ3&1gHKiM=^Fcj* z55d~yCFjuop_EoUM94d@6^e*$nPUsbMivssfh{%(t&?!oZ!%X|XxQ0g>%(~r<55$y zq2ZCTo6T70n`HL!trHP8ndw;BxVjj$qNQloL} zTXT0E=4uzARLIaZ5@VNynD)qRm2Fq@)vPNe(U9t=*Q!v;0%3u?z`_VwDd!Z<^y?`1 z62u8pvqY69YK1&WFeXzsr|bgP$FBBKhD9SGxf@3=u=``YP~za%j}4pPrE&mtV8IG? z3(*LQW?`0s;ZTO;b=lonk@jXyjQd^D#AyVUzo8e8I>*cF-69X4g1i^I8H-~jPaMe{ zAU#aQjh6jtViI0c@pmSo&Zzr=@Dwqy|5}EV=oQg&jcmS3%#>e50EeXi>-)R}bEe9$}KCVYbLah`FJwz5?kuJWbS4fB`-1RLHCvV+sCx% zH$?l>ttyxVd_uxz5Hqt0QrBfn{2Xp-dcUgB{#aX8y|B;trO`sH&2n0HZ|8%&a1z{#wERsK6?<&gJHTh%N5b#AepmbWKijEjb=J6}sq3>OeC6#B z4VU*F68**CF)7@o7_-n|(cn@;%w+?ZmOZphIpnSg@j1FL8(JL{SNp}C0+Mo3OJXQC zF=LxY*g2U6Mzvw8Au4oiTg9F6lL zhZc@)3@zO79?h_o4OwlI=4SC2y@<19K$tti`!2{dAW zPsu;CTMYOwOc3{yTcrTHz^_eTrz0pxw%lHcWP-m~<~BAmDrRCW;{~V@p#*Ex(mBNxkUP9 ze%i)-WFIVK8c(i7FDnH$4?>ooaJfJVucnDi*xVKIi^oY2^r~_?!x;+!dJY}IQX=iq zMJAtppUh@6V*G5m8~m2*)c6_0gGq3qo`r9%&bbpeIg#p)2t;_tc&W;6gjd=)3cL7d z^4@zwo!Q8#6_Q$@hm@WfITg&a*%~Ah&?sw3M7pi@2;!3Nw6Q?WbZZ|O8xeOUn*=Zq zdOsUD1MO+rUXxUzkVV& zi?|&`WeUow;1$`*`9kp}=UQR-ioOya}MTFk{#Rl zcF*)VHBMhCO5>Xl1u46dV{#NSah3U)7=e2cV-FbRVl8u4Hf$}J-qF8D5DORTu(ka1 zOBa=|ET6`5K+6BdFGT2+%}oPixcuYiX835ua+c{wmgO6ah}C=k7%AsbUmgZQM1Ns| z^!2XJ!fMw-pZ!*u;N%)(Xi27ffQasLUq- z_aJX!RRNca!9QU4y=-XreT3*Vt2mQiWCHp{?$-~gE>vwZJfTd~B=U~#4uA&wSE9^S zSv$~cVkEr0HByO3@i`j==yRT;pctRWxW|#G>7syZVa+x2oCB5Ek`ok+Bm5#nKy?F2 zu76KlD6J}0!$_S4HwGkZB1&g?*jmx$hoK62H0px07^ko?=N;S6yBU_76x%zOh~&u}^464`rN5ivuR*y*yBfc}I(K*o7-hqNb;!WVClU>^}AH1$dp4tzTSR z09sKQqy15GgZYwtcy!FE%%^P`cVNw#3oUhN&^yz)>P@``BbKVX$NaXWr10C zL3g_W1>5Sz!J6XW73wv&#QeZbm&_8!hR5=UBm3qMAa4(UM}L7B^Xr!--`pcq=WU!! zi$okdSvvTqF+8LSvRCx*zZ(EqX_R0o4W=jAe=>u0X!Q z(dQwWih{Fc2Fef}@5?+OK5#zpKA^f>eGW=POkKG14e|}%wN2PCw$7^tyc{q!j((yT zD;OudX>vr+mQWo3)hK&9Ia0P#u`n=XIo^m9Jt}?fuoI2#>x!#4X%uq%i))Bg$06xB zBC@KpaQRH}?-_>qpD_cFFLdcV=)fkQs4$zO{4kmCEO8Fblv8+fZj^)TBRF$Vy}-mE zZgCwJ)3NKFO!q&gUqQJFMcyyDCDVFLq1IEqZ)wikKB~!K4?Lrp*Z5Nl9RmSxc)wxg z{qnmPw{7g3?OW^{Z<>|ivT%wY7mP~k{T7;rEDu(p=xSpMK6;FjeKtI|8O3uh6Vd6T;+QF-VTxxN|mYSW}@pI z3#f*3857INDy76DRUKD@Mg>dy77Mg;ZZAHy43ipQ!H)A00nJ5;*iFYw@2)~uWSMo< zs7khWLxPhe1u=;O-DIo?@!;D@+GbhNb4Y)y<-lo(i|%NJa?jq-V>yhUg1^BT`Besf zqy8+K(OApPL)0e3XS7@qX{X`nNbxQOLGkXjXaCKexwUFUP(}RPEkhh^OCD#3X>)2k8ar>BqY`O6eoa3o$G6AIjfiEwCX<&^ z9@(?whvrAE{urdaTWgeEmZd&vV(!A}KLbost*|sp2y_ucpOEV>hr=6@m$Yu< zX7Y8+-h{_bu$JOsWMN7a{bZ&{=O*n$QV1ObohbqYT;sUJDj{WIAPuQB5mT-Dz7sbJ zY&+1;Y5Ei&)1)=+A2F51#wSt!&jK&zBB?@p-`EAx0PRmifPiFO6^5guRsG`JL$W`~ zDBUlq8pVi}g-4uj*`0#kib|;fDpUqn*g95`4#7`#FpFFLxxSB#_Gc9S!aFe}=? z6HJFb{zgb>)8+Y0gsdf%!+#F1NPLi{c0Jc@*E2V6Q>YA*O0bB+zVfEAX*8Q(<&q&6 zHutVv#w{ggz<_i)!;d%K=h^8uPk*k_v|N94=0BwPN?p8DImW4de$;gvE>~)pHVx5i z$9pJrNkR8Pg}K^=s%?c;r?drF_fG{HOv5K6q|WVcU2p47%!tH{SfOmY3{eAP7-!$k z(%}#&ryLG^ant{3R$<425&mX{0++-a0%g{S#xyiVl>R2vuEmmr2$=;uPJUB{scn3Bi+Z)>-ccR z*~x}6BXVe%pBcWRdO{1)`rzcC#C-)%#0lwe=x^ew>+#I>W7}psb~kmEc_?FA0X=X> zu4$u6r0dp16-Wxek_$B_0Xd-}ArtE#s5^EOM?%rJ7#X?qV1oM`P zvXT_Ikp@AH^rfHcw-byQ?ckdqo(l1qCt-(4y!CSqW-Y^lvNwV zAnBs8gtBkAam3<)Vs)MehI?)$#R_Acz98*Ukp7`A;POzEQsyO4`;v=I?f zUq3v08hvP8ioGj{W*ALwP>YhJ_PmOcc+X9WPib?qe#lTd#fgt8kRjzDM{^P5W{`sg zU5;f_^$T;&*mXqNy1}I6zfhXZaT6~4ZQo;c)69&u6?vX!Fw9!!aC*+PUdRBpt-9OK z0yM@q+KTUm??=t=caA}+7@n68@n+_i1Dq0#=<$fsNBUtuGt1u!sVtsxMMH#nihAZ= z=I#q@!@4OnQOC&}E`wbllJ+9*!67mR4n~XP+Sc+o7t^b*rc|x?_Er1v zQjZ0%HnG-a=pAwgd00YWWd`eD{FIRkQd@DEG$}=4>M+IcAzud1HHYO=Bx)M0j zHWcE%5=kKLr6RCM#d5wDpYL~~KS?vB*qG>;P*0MbVJ2FpTIQ~-1lK_z#0TM4mRHj^ z*d~{yn^dhEnq`#)&k6SKlHyn|<6YJaROxEosYlXWMjqeZ4WDxz+#uvVRpc(j(GIy8#rDScs7H<%@oLg_C zTX&g4D&OabK<8oMf#FkFQwUa=Qm9hMEKt7VXR$9n9#jRI0NH`MKv2^XC1-LouZ9Kb z%=K2`o}WtioS3B? z+ea3Nlr^?cN0QnMXH-(g7mq6iCOqCm`)bR(cddO? zy&%PW?Xq0BUhy2CJ-rxsd4E*F=4i=zVkm|{9|I-ClYNEI_erX7^Sz|e6|Vr;mX0@2 z6K-)+_RjKQd}rKK1C%&sHJ!Zv`M|G^ND8oMpq&98*tqG*vz^Zyl0;%2cHoes-K zq9Zv(f?i`$g4CY?!DU2JG!c(VUqcR7z$mW6RUIacC<(E((iHe(=ykE0&^VYim_JxQ zm?275=Y;tyvm&*axNw>bhh7RGkDPhsu=;nPo4XYNS>_r5>hsMD^ z{6;nOZTwGy{x)_Yzx_x1#+_-ByBr7AfwB9K!nDo z+jf;8B>i~k;3?<4waeiaWeP>WtMh9#Pm@sKcDk;0p4a6>AiW6|U0FF*yR-koqihJE zgx|nmso{11#v>PP`K)tVbpGU%TROmJ9yp1BzfGa1xUJseCbtDMAD|ksw|0n;|J=dK z2Vo$dbd{Dj1BI7wv>|O>)hxH+%8q9>=Mt*DA5p(?K|h7W{>kr2aMhQ%8DKVL&2`tR z-jd{bG#{?^#4$BKqQ}#Br902;{M?3rRMXa1Gr{l0(i*VA#&z*`oM_yAld%tgEB%l3 z`?`DMD9e5^8n2PUUP5A$eOG$PZXG_kqlQuyX9- zzaL`X>l#kAdEWBh*Xy$>v~~dDWXNHhTPFdD3`Adv3Kqpy=RKY2bV*%7y4hvSldA!T zUWl~?z^I*}*xI-R6AdLi%I!=%)P9_4yp~aB;dSYqxiuSU60b3hj*gYztuOZZC!wcr zq1ry=gG|n#FT0|pPk&YtCG{FbC*?L%Mv>| zSop|ukZYb>N7FdV3VRwz>F269wjMtc{7}b0|1sE6F)D?Wg31HzKiF5Qa})z9YDk>ZDe^T z*Lcp98bjvrOsDL){ToyOwjVtd(E)Jbs_XYPK^1yuLaOf=NFh~FWuVI-{d+>U_LB-t zIA%CVRUy>N^9w!ac_;Z237pZ&mrx;|%FEBP#-37Wz4p<#S&FPpvML7Ab%Zy5NS%A0 zk?HyewE$Jek;2f0hNco3B$-6-#3Iw9KK}Ry(l?w>*qWIVKCy0@v0EE`bPv@XD>Rfq zPPW+pp50u(<%HlC9X6v+0M2<33uFELRyHP994l~|6kA&wk&d(2iSrHs{@_#DI;C<_ z{S{3u)>z_``UF|W2#%af5t6DzA&U%Iex zzI4X3ThlJL4&g2k8JMlev67DCZn|cbjYRc_HVahUUsRd8YV05G3nY^0MM6^TR2v5yrtuf-(z1G&Ov!7k zJ2(D(l{)0zv!by3q(S5-kjC@+bfaV^muv3y{tRf>x}xnEe&5fQXxUOxb^wM%*6k#Z ze6_!?zk|VA&}XGDJrB!1q4lWCvp9{HS2;hu&yBQkhjgB;NTaQ31^XuS?PQ^yO}(0U zXLhTtIPKS1BwDd(?$XxI)=inj5z%o|WC)R7R+}S~tV`#LM&v&uaXyy&!8cM$gu^9$yXfS74$^?T3s>KW zZl1fCw!5dq%NDWnpQooE%Wl0L?_ljj!%Do~nly8?p2)BLbh!)V=;M~yZ>Xpp5&#f< zFcGOn8B@_lN_{AQ;y_Bx|8wgS->L2?rJxJy?;4Qz^Al6dU;=}F&>qyj@hqXN*Jd( zv&cN{R{yPWHN-hb@u@sC&b_oRZ=>!LDx@z_n7n->yk?8e&W*_`<`RpQ2 z6RsMFBa3tbrnSrEv3WN37i|0bL!yO+3MqqMC(Hu+9*(gCujV1XtRt%@tv^36WA=BZ zp_(|OA+3I@)@+2pwxCRhm3AfOzq>*hIsfL1D3Gvf_HIAU)v|82-f@3N}UU1qyadV#Vl~_EyXIY<-hf ziyh&85Y~WHyCA@)B~iR;XiddFhCjz(s2)UGBm~Qta-2I!i`?dFLRa`??R0I&nI|Tu z;xauRzIzcH);J@boM}wHVMPxqFmxC}dav}mCa^;Jq>_5cpDTt~B3->fo4Ad5Q667f zYjQT6EP-R4!Kap}``2CIc%0?smSF;VSv^Cf3q=`GV)<{D9$(}{lgtkJ{=U+@#=kFg zBiE&?46-o4^a<`qMVanBHOt`Hufdib=dbOt3NHg#O;(?^G;3%cCW;b0-HL|4fvN5y zkzju;-y5?a->oYXy+@LmL)eQG6p>)1i!91i*2$gk)Z*T)A;3{Gsm~j%=dIREQkS*? z;F#aP8klaOH>qHGdO!6~Adk~EMrW>=s9cyQ5W0!25xU2Qr&4!6>T@6Xt9Gf(nU0nL z36;aIUFN6)6NlJs!FRxgdSV`hjorey=@~lEXC6SR2xw$8&byAgJ700kL7Vupdd?A6 z=`=i?*86T2`24;~u)D}SI*?ae$s}j5r!R*Z{`_O44~6I*A^7EMf_bhVD>#)5onB#? zb)w(+?qiQ1=3h;-9U7b&>K9I==uG>rE4rKz3_DcT*9@JD+fctTCYtMor=FOxlH zw>@}&rFC%bbz1EZqi4lk?j;`k*5C=opIbj#kkHf&n}bOP50ud54j40oWf-yleB+PC z`e&#SXPD`b@W<&E}SrXerGf>8(>O~J2n zUn#3bzMq`uO>9R|qC{Y`Cz^?$KQ;6~3J2mvt4o++9-@>a*nB7c?yJ<9fe!J9Nf_ zfdAb4WaVx4`eI>ct)!;`;VT>ctE9SIYeQa3r(r#_*{IZY^7;0llf@#HwbDYn$*Rfq ztURP$1wOgLQcZ_{oX33#rsibr#Jbd?(n4LS$!W1Oq5J(M z$L(um1va)h>UEj|7FHJ>%W=%1H6sFcE)2Q|O8Q@TgNiXhlV0uD94XhOd}lW0PwAee z*&rl4uJl!gCk=7e9(FbVR;`Z-zC!j>jZ@=OuGejFB?Gj@KFu>N8Pw%4UGs-QdFqi~ zxAx(1pha1=|0_E(ElSsOBK!mGS9M{AWg>@ai%CIiMSgw6IGZ7OfsZkK zgE{SV4Y>t;bjPEq`EwgmvHW?2-jRIk$WTCrxFtmQwnCiHim$*J0B7xOv&Q}asLB?w zo*J>_=%Y=qdR>HXdHQBp-jU^@I_K(^HE~*wTHq#j?k*LD$d;9v{F9A!M7p0I!}RVJ^bgC88OSX!NU8|y^)s8JYwn`$ObkuFuNh&--dhBx8CUgo3EwrT>Krkgh-8>SpRSJU zN>w*5tBO79QN0f!3wai)Z@~12JXWX4G)S$A$zH#TG{4Gd4qg%((a8K%dr6D#Itccp zLz>}$=_o@+pKW;x1$IpF&Jim$79+}oCs0ih5Qi4j$&=~@zg6<3Cpx|UC32W0$H)1#JiFS| zU+mjvo0rz1@SM3M%-(}8D?su>8~Qan3Q(xgyK=8wDQvA z`vrm9hS>a{iXyK6PEqtN>SFx=L|s!h1B7rR*Sz2(SMtHLja!A3iiy>Vzuso+`2>H+ zg)}0Ho)Fmz^lH#tf}EJX+2V*OE&(-ZBobYD!Xa=klT*--Pc6V_e?b&Ujh89+SE0Hx zHHVPuZqhac)-8XC-et`n4tScHVzhIOl?6g3bZS7Wp8DH#mk&ESvK>Q;&&Dt-qACkt zvvf5cH{tn{D>PRXJ<+sSbsgj1wqfS-Iz()RN%dQ4f;KOK#bq(2ptG8Kxl%!yz0CLu zs;op_FAtySgqdWa`70iWhmy>5y}Fc0W|8O+8%uf?-i5W7s5?&iR5;sKMG>nSOi4^; z66G<;%(?X$R@C)ptPuns_{FcWum?PGCe5|(6d*C!9a?IwN~TG>b#06eEoll|J`dVY z8uUsJTwa zqYUti2qTM#P*0fbv;?G!?s@<`eP`Z2Kivf;_dJ)YO|QEiH7#qpW{g07fOt@XL12-P z|H|YwvHg_xEBymPjE~RsH>1>=5MnWluohlSP-OX9LGDJ#T?ngGP?g|{*({Ie(-Fp?RAJQo3T{vn zX|UWl+7KZpoJnMT=-mSzed?60kXsi?got+aZh?JbVhkpbJ*bi+k`SWT2+kBf!n1uA z@<D7YQz*R#G3grSgV8U9mv$ z3kl;TR$(yaPS9STIs*yra=DsdWiAw2amlV@O7O^rUl#Y(f>i29`FYP(fV2PB-}pW<r~HqMy%(d*(coH)6j&|zwXNwJr+uo*z88w9{zB|bEM7Gc9SfHl&$Xmpl% z(820_gqt6FTi*+R+LFMkLfi~)`8u){7FYylAA5q(44`+TKhB1OI@DjAP&cUsDITHh zt%FTRbr$vZN}-?)&HT!*#hR!T?A8??M^eZ~aF#!$g`4yQ1E5686CoqYBI*&blaLc? z66uPw4mN{s7)NyGPeQFJAA%W+c%Zn4c`F&Qvxb-^y}+GL7T+|8^3X5+N<$2h;Z-_` zjMKQ7xN0|r%|>Qcl0bXOAw0}^Cmp6TD$mKky1m||pMw;GRA@dco#nY`m?gJ`+tl-ez5f6O)Kz260ti2CmF;>n<+T-Qe;!h_c~YkBgu5 zmk41zLcsx7a!F+T$rT}r_uOhL0X~r4tP(`9zC4fX*j@9( zQ`Ao+*?j^esdfB!@gEMt>vBNKJ>R^RKwS7EXlgsh?Jx7!FNlYzMm+1|$K95Bi9W&@ zph6zX*|j8uaCJeNu0N$np~d{D=G0HcvMU61v})@xsZGc#QUas<0!{%1GoS(nV^_}u z7p?(~KGhecTS}4;)&~@NS%E&LP9Qt{M!uhgIZW4i%C z57asTxW?kVWuZfgN6#M&LOC^|N1QS0&6xj? z7LWqL|0K16)J8fBRfb!!-Dy;c(dhH@gnkB;W`e64cZ~-6uRftjV^^02M6j9@TB&+N zrgsXguNN>XP9|f9p2VhkPB}4JK zwdynFjs5o;*{#nPTCZCZ(xK3kl54FQzz&J}LV#LnvSH8rl&2$6%X~QJQY<IsiSs z%5xVNtwZ||Y7JHshqPqTIM5GJhd<(l=Po1fh54;Tl$Sl|l4`L2V{r#=ajQsOfXS)_ zbVE1dG~XuY#yBXJ@ImY{5K1L|AJT6ga<4@H?E+_Yu)PmC>A)ppX*4u=7IOtQpdKj7 z3NI8s1O3+>N;-o~G(1v6zd0cX{CdIqcdP@=@+_Dae$)XNVIo_wx=rx#JD{|}w>NPT zPUJ<(EkUi{0SSmS8~0-W?m5?jdRmevSh(=S)Qt{tt6kai^Xf<>FX>Wz?G4e%i*=f9 zIT2r+OKSL4;J|T!P_Lhm9mLrZDdY?43h^k3{Sg8Z=7xS&z04IQse5^^nSbGGw8e(A zWK|ETyQpV%<<)2T->vOyNt6;V#(6mNyHqcq$PI5lO1}TL6S$RxRUtqaG6mr&kCrCB8VPlEBYkb(#w$` zuQ?Pwz;K-sEd~u2KJ{Leu~5<{z{e~_>Xd5{cV9ywrRb01k9gh zR$cQH@qZi=};L_-p-WHDX@zpe+uYHL^X=KkyN25+aq&54YCBieHTR{l<&@uOKfy)00b9+*q%ttAj_eSIR8e5c^BtK-R^<;XE!AU& z>}MGcxyYvDYrxAFMebFWXlJ*Red<)dZF?%2t!uC`o z3*y*?MG39ceWU$uBtDG^Ucb0L-abZrW#&w={6Bu9n(9iLZgqz~*O+g4eL{M?=@!_0 zexY=oPVTZ}?}J^XcMJB+_}*^=eb)~b6|!b}r*=OAn@*Ilg9zxnH1-5&KL4gszi|x3 z4!M95pO@Zb2Y*p}neO!vZv{DpODn!E=v~~4^$2Pxq7Kr)fUfgn4#ZU>wl)WI2BMAR z&LSVjwHcAQCs`5uIOO~^NAgb0$ptX=V=gdrWDbn4IW&iNO~7|z5KM;NjXa~gn}5>o z3?SS#yyKkuJ+wbmIq4Y750xRSR4IEaqbQ@OC@DKCM=D#Y%#<~kyOeD!co)77w9USR zTBQ^im1L269+5kQWRbNbI36`SNVq5Ps`<$IC~WT~Xd_jdsU=LDTkM|!vG+AE*Aqk& zm8FhJwG@>TNT`^o$f)SbWaeuN6>QF$TXpbn)?MA9Q*p*+DmFbt&NYxlBZXaNC-=#b zMNl%Bz9-~9vLA{2}CVSy2Ox?u6L)!;KHQG zEMj28E@&F)Q?L37sI?`31()8v?$icbs>OB<7oGHSWrc=TLxBm3ZtT)zm4^Ji{8VcO ztsg@qXg4PT_fk(IV%_U~2LoN}!w67|erj-a0;;hhb(~@9)9ZEU7UR0d>1IMa6~DXn zXg>qilHRJj7H+p6HveiU4OWRh*SI^*zR#8DT=?!~8pxA9!v}Ee9(t*~#{w!%Q)I{T z5V+@Lz3pwf0;_Z0&Neafm)kg|@wlGOxU7yg1*Z9YZC2Xkfa?HDSNa$2d9D?%l7rHN zKO?{twYddPm5+c|^M6Wb6ieqz=Zlt06pK7dnTt4fAFtv|s{LD3I7CjVjjjLqz`Kz9 z>257)+v%sp`@e1s_~z!{y{8AlOlL{X#@=p_3kPhck3Ye#{Ay#%N)ItCB zB6C6j_axjPn)?`TShPc@YQeSxIP@vtLXm1=#QUW%!EO7Y-7vO8Tz65u;0yKucG%m2 zsrqp5AhErnH~e0H^{?<=kTM3mQGw8mNJUS&t5AvhFuy~}Yl+X z!k$aFF4`z6@h~XJo@lxU@h+Z2GLwig8fgT(Cfyu=X#}|@r7N6yMA0Dyz6RDaAW@h_ zOX4}kUk~W~O&uPeHVWzxmlhtZ9u8062P6#;O%OR`3@4s5;&Kn}l#YojIAn8(8bsu| z_#qHZ_Un$DOKxA1SBmg^?s5n54(i*FaYH6W%4{D`dPnXanMFu3wsDBpn0}4SAw`bA zPgXMa4Ffy${@!9nf zTra8mN|HHp+z@QVq&2Qun|#64oKf}n&%yW$@5Xp@L$(#h#?)gS*ag}n_8TNmpIlz` zXQKDubp6aK@Pg(MzQRzT9&qyK!SofjOU}25%k8BXwrZ^33$f zEinDnx3g<|*YXVQlh8A@vsd!m@y_ZS`<2);Bd|+w7yFF$$yBXq`cm?aD=;H)fblHm z6Ye|Rv#WPE@lN9t>^oI+XZzgp&hyDvvoCN%@WS?q^7XxdSaYv8mU_tC)8~88b1(1= z_%@di0jHyw(kHkGU9opGv?!NhpIZc2Sa}+CH#11g1yHP&bKJEZ{_uHw;-shDAlh)QxcO@1tae*VBw; zU)-{rr6pu6m)a*jL=~rNOl7o;+N3X(JKJP7yLY=>@;F^AzEsoebU0tf?=+|hUGsat z{Uczktu>q73XBYeqr-w2kch%%^O#(I+o#b0oTSTq zntca{#h}xzZ}eKbLqn+1{x@0>%h&BOg<`o<<$G6F0$8iHUpO`eczy<_ znKMlaIm|aH>DY=4z-lPgvJVqbvY~J7W7Iu=J1H9lO<6EyMnQDRRVY-DPE-1eXK!Z9 z81=La&U9VT>tIK=dSa5pbx`FEGW=BpYE3*JAs3~2SxOP4;CgFG>6I4Nbd%PNw#99< z#&3?%z5Q`^nn*U1zZQn8IXR(E_)wAN)Pt^3>=%dY&{h|^G9uVecuYiYOYFIisyoV- z=H5SWId{g}#1lWo<_Os0=7ac$c{kEZaZS!-9gdvKl&yJLoXccb^8U+pMDA1FRbmcI z;NA(FeO_<2qgH8zGqs}Bo0G11F?K~OYG*2IfDCM<2OA8uhuG&z5Ptb19f+bH%<-Fi3yB} z&*&~#+iB-;PX#1?uye&fz=XT$)dvS7!>4ZMW^oL3wAV3VD@Ak?qym^|+oX;}Nh&Oc zx2CJdtGc5D89NKyBcBt;o{Ijx8$2l89}*O8oqBm2M>CO*81UzqJv_+cZ<{?7%M>Hq z84Im*Hj!+Dt6SubocfI0xR@${lAxr0;>E5%-(Ef^@f|cUL3;Q^fB(R2aTcfSvzL=4 z#hQf=-6)CHrudRhk8<`ji%7Kl%zs=u}(#C-%a&{pxEX<0M*A zSM^T%>N|>$Hh#UmveosJE8M2!E|u1@^|pl!d(=`n0~`8|ga@O63mfB?uo*`^ZS8&UQ%x9X?W%sRLI;>4M)?=r(12D;l*9s%*n| z=J`ap27Wm*TyERSySH7X@S--!2kH#`B*TA2Yd`$ua}t|z+UJ|xS3n0IvH#9*qyeb_ za>S5?8ndm)NRLb39~(D49L-&jN5gP^k;0RjnuJgRmjdrPf$sVO>Jf!c1K2Dpl(VA_ zgiIZJ;bCA9){Q2s!ftU4Odslv4I>N?BHms=>OvGjqCvtzq%O*mOb<$n9)5+Tj++0{CDQnJMZQio&rmiqI3cqUVGbf%c=33Q z7Dd@~l6RdRTj%Ks5taNPd-gz|{3o&jN#qZK0A>}=p%E+3gsya)7{*^GzZe5-%nffS zNzlYCO?dF&=Lz~C!XF?t(Z=&sJby1w!e6$}F?^$lpaSL?ZeFu|emS0!ErPIY-y`B6 zN+6aX2@oqkAnRh>whJ=om(6@@WkN9{R{b~wo{{p30ef4*GqB!@SHxMNxevVCbPu?{ z&T+S=9+cp`r3Hqnz2)Px6Ws-&3yVU*!gK5h$?0)x#Y|P_pJ+ZMr78>cuHqMvIhrSO z2?7X&>go_~_Xq-_CUz0S^jWA2nv3) zvrp8u>CztU{TuvsI;`HQ-Ox;XP?ryB2N0pktI zZrRJhKL@<@Va9k$Dkeg&IDBCQXqTw-s7JQOS@P-xf|vje8YdAex6)Qj&CcwTL=; zxhT3MBwdmk7Zpy*jPn-KrYDV&Zm3D=py@QA&Px$_u0wYTuNPYvW4)aS$F$2=>Xbf8 z-1uN4DI4aD68m*Fi=1frHcxel#q~yL zpcycnUyx~UQ&?p%nwfLbvI|pLP72o$>0DmeD~2OFnm&54e7~lk)?GAT8FiqcIgu** zos5SFpu>}mtb?EA4Ld0BesXe2ua3k(g45SL}O8z+}q(S9D z*loN&ohUu$o>tdQY#&4ThGIIhlgvq^JBEoij;R>I1mLQRb(J^7@X{T5-V5(m^g8|= z?0hB)Z_87h63hMw$65_;lxIZa$waPUJ#(Q(xB%#U-!@^Ft(3wpbuH2@rk{yhq;e}{ z=f)^WSXg044i_?+IblbO7wut}gUT8i-y|@|;(|z&(*}fH!y)cUuL=+8WTC-!h_j-$ z`wIj(mu$T?Q*3=mNC-ad)qjcWxsuK8{h)5!KKAG=*vi3UsV!vB{eZAw3omH!<_dbIE8TNwH1_qKAvE?Kk{m6S;_%pd>v_^ zcNRXseRQBHo>!c%wN7?Y3iTPM8&jcT}m631Y>vZl#g- z{oINqdF?61Al_9-`LvD9z2l3dWuo3y$oZ9r-O8$?Zjn=@-fRU5)=P@w`Kltt;n3gw zkX=g@!jQk}vHo6u*6-DKdWtHz1@6*e@qc3}2gF|@Hw(C5C0cpLJG2l!GcWpxJDNHU zY%n*=^!Bd$x)tzfG~YB`9T3jd8-djUCTlH?O^w}ECg8sJwLflaP4cTc>c7Z&w2XGh z*2mGUjU$_{?zV~=!6TwDP_LE+--w-f(Aq=KoGEL_?5p!1=TgS3(e|t_>u17wMu#xo z9!`RB>?BM@!zza_v0G3yN|lHwNZCF2Xy3Ayt6Kw&WH=`R##CKBB{SK(oVZtcqR%m3 z)glOfXRzxq@;d#Y`EVteJP&$njwxCIX@66Cb9n;h0Xnp*h8K~UNPR2XS-ZMX+B5S8 z$koF6lcDAY*yX`0(&wuRUwzzW<%NNWk#>>{!n98T zc!bYv`{lX*_I(w^dh)My=+$sw`mh(I2l^Da{(ld#!xFo|YB7RF7LalRG;TO)hgGZ) zi)n-T-K5e!Im6+vf}K`_&R5AfgN-5kaXF#p2Jzn^j{AilL6rv8fJlw@TtK zU4aoaD~6B(Ldt4$&>WF*QQlEJcLUN_A%DHtMc@{hKR+nku+=4MRD$szt>p^1;mQn& zFhvFbvx{S;a8*cUM@NNA)nW-5thO6Ss4M+j(5i z;Re+AWF*qVN7@YW?F9}B%}X&b`xVbhJz%k;v91~_b&B_M9zJP$y@DrYd@Kt7X)t|p z(XEn((uT>f6Ysns<%O?7B8gEZFFGW02=S8Qnaz8UdIk5)vOT)42;D0U?G;rA-Pq$W zB%zbCb>P5~F^L~KM5>R;BEF8VXvDjepqM3CQ)dtE>fbn6N=?0cnI|?+KeNbXwBx;* z>9y^f+$BDVzGFo2?7`0Ii^ua@utTqjyaA67%SpRIF6sUl3v`X@Rmy#YDT=Gw1-Gx{hPMHR32ib#-di6e7jUz15JdQ+}4 zx12|*-dp~(e}&i*w4Gh11vpW78+1O)sN5=uIozi1w7ol*?uXi2UGFDeD`Ab|z7~vw zpozY8nBO6!^ewDz+)#B$E_$J49dILyl%GUaf)wqdZL3oM#PEdCHB=h4T9x1dJt=3K zP>AtNur|YZjsJbe1Dn6Hfl@@7=?#5v@Z;lWxqNJDFNzT<0T_Y^dOEn?0Bk85)qGdE zvI;7f(8#R=w$S5`BdwtwmPDieLP>SOh&7L;*azC*p$poO7^}Z7KFnW{Cx9!3{6@4E zy;kZ!l>+W}eahl`{tSbVfb|YAp7MTJ5M+TZ&cf#~c%#Jp;LE0rS?EzX4arzy*7PAP62dLqLZ# z-9u^VRjWmAjtlmOG+@5MoyoU(isN2bPz37#)s&l=?{=E1x{us^MC9>`T#=c@T9*#Z z&GLowCSqvieMXXY6=|$J*XMjKNwrTB(1+DoRTzbNDC`K#UNgeI7CXW7VoH;AVq|wi zcnBD{>C_A`IBT>6d)f>EeDRGc4>lp15$*GV+&;$t6T%&+(-S=4ggiQ-1CizRYu18l z2X9?A1;Jzo!>j>GTL(+qV}HjDKm!;Lm`Y57gy9DC{-d#A6m$}UVoE~~q*1>>AG`*! z_XOSl^MjPo`4_a13rMRA2jz#($S<4+i#J=p_v_$0dB687Jdl$>$DNklUst=oKEZiD z84m97Hv9fFzL+Q#bXz6&wLUD&dQuZ6sGZ4lfRP~KdM3F__Y*%2*{DyMjYG|qW)qwX zp;s4ZIUFn%xLILDBLG(~}{ zS?CZ~F{#w2^Z>QQiu~O9(;bs_RYjQ`SUQy|sEHzF@}SPDg;QV~dsS0Ok-^`gwwDy@ ziKB_8R0b^{zs^oCnakuWZ`dbET&TK3O^3(~6H!LXl;pZ&4Fx?@J*&qHa|eWl1UY{Z zwjOYN0cUBi1AWz84!U@L5ZK1sQ|vTobt{YLAw{YB$6km;h_adTZGG$?ll?}+tG~_{ zCWibXEp3%GY?SxR?(K35)7;9MG+ZJtXp^yPC}D{()Os=nPHsBia2oAP;u{682M%2g zU-uT)&z>U2S8zSZ;xOZEEq7+)*c;`mriFWp(fDSq^+g|g;c!+F8>r?)WqGW8cYK0y zDyOjBZpR~H!ei=Z*WF3!=*naRA&>F!lYF^nGqs5U1pKwdUbAmYO@L3tXRh47!Y;-}*|-K2T-fnFh(VBpJ&V}%1ii$Sawu=Y{4Jzp0L^Lh&$^KL-hjVlRHqe`qmsYUag!g->C%Hg=JeU<16*8(D z_vCak?gUuwamF9zDQBu(`jo!|+G>%$SvtCt?9HAZ_23&~d&sU?kL%QiO-HO#qy1&k z%4Il>X7OEL%6+|)S?CvwWmFTLFLeV~!!8@~(%d<6qV6__k=ef~STg?H)k$&4hq7Y9 z4&IH?435%cXjKb(_^2$vr3Fk{T}4<(C`lf5dkc&I+P7wU{6>45mgG0I<)G}$N9y{FxjMnA{E1YnfXY}%IN z5qk(bL*F2()*IX{?W^r_K-JP~a<2$F_aDtlnI-_@l1N88=)-bqo z@$Hk`MG6+c+`82dfQ;I_Gj?|%3SBAbcq1~Cyn|xN!xp*tPtlXI0m7H4V-v-#IA&5} z8UAqTy4OI`RNA08R9Pt*rD62?Aa^FN!3+{{s3CLu7L_7J4hgBL{3Xu~@7e2chWV0P z$c<@fuhZ&85wR}^`|hPx0Sd26%Q;PpDsECd1w6%`GA^W=D+@~I2NqezC{{jwPeQ}8 z%i2qt5jFc2+z^u2R1&i+vh4(YdrjpUh#G%v3iUu`oX%rMPG|IJX=mnbBrJmK*+Cxp zW7Zfq6DLjTQ%6q^jqs*~)hDd%cw|nRQzAgRd|)-}G1x_H+8>9oX)r9>!lD`dtyGE7 zc_}CQqX$CS5Yc)ES2JM+Zreg=B9$m#T@~wF;|kd*JljZF+4ak*`9MhGrR^zR2TUoJRqVJzG2sTdcx2wl} z)7d;5M=_k-z-P4r3f@O$_rcSKoh#Z+m*+OJfec~_$e%SgW`{=DUb~i*SOwA9QIS!d ziO#vs;<)E1-m%7BhodK_!*3)QSQ8|v!+f@jQp_lNiVKkfzmF~U*|Ed);}8g3!oq3@ zF{SRiAVg4G2nuI}Xz|WvVjPBLHq#9olYb>sj49JArFx*@-5}p+b}n|5*L5W{R)&4} z;iC4OL?;w{$zWltBuKb^4<-K9ifc3cq7tLKW1zsB%F;Iqi=`ABphq9$Z2>zFOzysgNj?)zfS2Antjin7~U z=~p$wv{biUwcs>}^Qgri9^q=pv+@@jT1=3eS=495jHbYfHHu;(kq?ZoSR?X)Vm&dl zdN>_Ku*8P5Qyif=JxL{#0?J5Q6<3h1@fWP89@-SsJF=)~vA#-hQKZ`1M2F_XYcALrT<8xRkedknoNk^a%s zrKigl>O|2ny1deiTk%rqrloMiV(EH`tZIijuF?2FEWKs~IBku$dzWC-j$|f@GW6)rX@b@hRvb?>8kw72eqdw`Y&GF^Tk4|34-G<^NrSm1} zCgE+LcH}$!aF}=V89LlqrNXbUx0XDIZe&9WrwAJi*wcqf%!^M-u#0gB!ZaX`jJWg) z(@XU9)s3`~?qmK%Lunz)xr%jOAd03efSc2L2E%bG8G&(L>W4Y9udN2L*0p6(m*p*( zIHlmvAzPE-9W)dsXLvKifN!go%q+1a6!?8@Tbv@I@2GE?hc#%#v1JSM{B@W#>b4Uu1D9YsYW=^y0?RPoy+D zzT|Ka{r96QUnBj-E|@=b#Nq`t!TeRdUMPEL+m^6@6RWI|sqm_=Su016XrKG;=z;Fh z?4Ia}jxp{B9J8Iv9m|~SqqjN^JHCy+BHxfB+C)DSy)&A%N*Sr54G!Y^=tkb!U9w7U z=?g5 zYF(A~=Ith3@D(*ou=Xz%gJR)jDrUSbZQiVbP%fl^ytP>sx5rBq4n`@goxC%8*08>_ z3tEsChbHc?A?i0)Rz3K@Pn&mqO5c8d+IrI+gG>mSoUtG}j~ zkdt0rwyv{ofNqp-pY98tTCX#yMVsnel}a*k{dS$$6}Y8bu5@D_Zbnt=T&`=WZzZMk zJWgd!_$G5*mvV7aP^)YQgypZTt+Isn21+NvazdyyOr28K(fVz|sqjXjuGe+j1?>GG z@jqCgx9)@_Sl~-XIf|pR9JAu+aL1@PI>9i^L*ZXV+ z8AhpDp8|fGU*v2R&U7UqK7E1VsQRLTtuhdUh+E9+(`q_bU8bh$$INFw4oN~R0{_`@ z?j5lfR5^QIuA?gNvclaev1LL(U~vS3h$73o`}KXh`<=Z9 z74GF`rcob69~y$c3wPTWakJ%SE*9Zp-Ucc)qgnr?g`aJ&eR9)T^3%G`N%2|I z!9P2b!-0-;5Lt6z=89#g1#3{EzCr$46;EKEuYmK;?g8%6?o#ant!kWOx-?mfN+QkI zs~SXWnY}@(Gde-5jj%aWQ&UnPKEa7xN_0A{ps{;Z{XAZSqfvrWR`w*tX{`qwRSCv@&}e^arhj}Cq<%|N|MfJ$G<2s%CitxKkH1Wbl$31zS#VHK>G zwzKDr2iRWYo5uIxa>6eOR+BBknvlR!RSm7F@p9r_#sQH7qXxu|l_n%SXj^7m&(@jN z$8RCe(Jj`GOc4+X4ojrP!NvBvqG1jZmbpR09E%wUkBe{`Se%nrRHRK^y1I`bgHX$F_bsc;b~s&wfE^(;ur}Blo`l73shG(%X$UKDs&Z z<0FRx-;^IltMd%%;2@L{GxBGF&nqXA4w}%!TP;pAXt1NW);kgtEa7=~{x$Eyl+;gp z(~J)H`&zI#wMM0pG+e_~v37@@s`NU8&ZuLmsOZS(h-jvYV=*pbGvUpyiFc7`oz(?t zX*kwY{LCYYki1$$RFDW%_*8z+Vg=&PAv@VCOMBh-?UTy z6ZiDo8F)uJ7?sdtc;NK$7XyKJ(D28FfK?GhPpO`=V5mQ=?I< zfpIZVoz|%bjatlEyv5c`-H&yXb+VD_97e7UkJ`}sZhQFPPm%ZH{Ogy~ZWs8b8KI-7 z5H|DVnrB#A%|~p3bZ}=NZ%4qmQ}kpD_GBUUL<`-0sY*{)s!4rkup>|5eojxRLto#z zuJz#CTE84}AjP_Vd&^tcXEk3@e{F$iwbjnr(fEXkr~?O32R!hJuTxxPTof&7K!#`{ zh>ayDgUc2}J%FtfRgBZb(9P2l;%(qbmeGPzxj_l~xKqm-kOm1}Sx0oS-Vt}#No~HR z_=Y$Pt<4o~eAtak&sCzK-D8gMZ&5Tla(7(3BR)2ssSI9=C(4`X)p)qq?XepZTo7%J zaAD!d2w9D>B+26<@p_bzNGsl)T9*rw8Qzq?qd-{^t8M*XMF^=uEottt-l8SZG3q81 z)kGYLM%p+kO172tpc7XH-rM*|V8h-$q~P2JLLT+*at+@p&>Xv35cb$dcI!5N}j!{jc(^X51OROp_MUT?qb8)9xtM%%18n3=sjv#V`FQOo#B!Wi}FLbxNPrFcD6RoDcC9Z6JBY)sjwd0X#NPae^Ae8Xc!uRZkIDYDVNWmbpMIqc_}*vgaR zF9^Qjx+L`xx=0rKnzE$q9F4YB16^}f3*BA1fou``n5k#z&a$&Q)=*l`%cX7nTaBdS zq&Yvssa9-Fv^G~WCW{*y+&zXIn@HV*aZQ+VK@${ubdN1sq+js0iN%&Yo;Dh7Y-}5p z3$0G8(MgPRS<*#H62><7|BIN~Z&fazfR54QOIv{l+RA6nkjO^KFCCRGNnGlt z5o!7iHIdON@T-}+k}mS;^>Wx`Y*9P}^uVW72`^R%ZLWAnk((=kdLq07aXy9AuACRB zHI`gWE_wrY^akS48#n+w_({tmWihDxQzV~Nn}j226q~~ZlHzhuelF~f#$a@gN(@wQ z%h4o7=5SwRju`kp4+f)hZu&!_BB4lR%G6?*fi25+2g6oyOS)Rfl$tz5@>{XTuEQ_nbeepjh5=Bh2lza$X14g z(iMfRypMwU%T6q~7C>dj=UK>f-&~+(O(c!e@EL|hhPMn%Yv^j|YGx_iV{Bw9WOwr! z#`{c*jT$|bG&#l=re3r=>!|i=@{R3Hy0vs2Tccj1*}`5_t8CP4GG#~E3;ACLAnKuq-ljDYbr@opU$Aw$v(qeJ<%Ve z1JFy=V-BrEmr;uwUfDd^LM)YZz{|2!B9%!@s-#=?SX-l}#ERDj#kqDIy5bdL*ij$3 zT#P;BIf598)8ga@w>%JI9ontpxWq#?o$%)EZ_U&$)URbf_ z5mC)F!t+*ZP?0paQD7P^r&O!fa3w8UqhX-iNgW(o_UiHgNV?Ey&7NV95e$*_jk_G_%cJm%p5hUi15bt$6_!u z6cnlM&?^wVJ4bDbL_~=A_5BeTOb7)NFc>9*zwfTsnXvXL%TE!CFhMCsPCfM|qX*xt z2_Sps@wv#Fvg$JQsYc*x`7E;l@ol{UJ<=we2zk?P&?4l-#Rp6P|Q&K0LQ?%WijihCDzH9&8gQ$d1Z7J9Ayb4 z!R!^hijBY7fh-mtwQ6*@@W1&j~4w9I1yMv9z6U^agU}80!yWXCflg} z6AuMyYj-fReD2`+QAX_PCX`g%FknBENDrUcrZ*8=i}*o_qcsx~xvetz#U7iZ8PaQe zk{UF#ig-eUW|lBDhbiWNvM0eC%E$7SFctZ}QVe)Z-Qv5+ef5LmC&o|J-eq^tIVyG8km5Inru1Tg?WoEsnYz(K?mQYB3rlyH*<=}p@Kge&`zen);vHtfCZ0zd(IoY&uP0uHu4P;0Md%bo4 zQ)d!9$vvkBrjVu!mbcWaYp1iU?ECK;tGqiK9Q>Mphu&)j1bk18U?X@bo5s1PL35T9 z-+^^i_ekiJ*fF_tgTAatJvd=t!=(|XhDL8PO=b-|EzHf_9X*}W2gw86{XO^S#~UY@ zMn{ga->-kb_<(t~WqNX{XAvvcFEy5%S6CJ%&-XlPTw`7n<@6+*jC#q1d!aauTE!Vv z5l?awrlHFo*LWpLaaA-lwh);VkP7Bpo#G-0I(y(~_Jm zEPG&4_0w+#epyF8w%og7VEfXJoyNFhhNWdcJ8IHvBgefn&$R5}d3X29%9_xy^}ZR? zPnS;n2FH+rdVf$kx#{IIO4Nz$0p-Wgw3W1Uj~qHcd08bBnl4U)3E4*!p%uBB{p&(H zFGSZ;d%5_EMR~iPSNFAz=F02*h(H1_55!5vojd>hMM%LWw5mziW+Y7U>AdDbUZ^>t z;n8C0h{mO(8E>uW%)4o3m|u{tn$-rNR&it>uhK?(X|Wtl zQtc|kQNuNZUN#gMD5rW2?n$+>MvByEB=qiODn(K%X$h6Sk#*>;jM9)%R3mz?Z381rp6b4`mg)t=A+8y_6+;^d(zDUdj~l-dMnH z3BBfb#8%luuljE~w+eY8k?3tyfEn5LQ-#(>1VLx5GWbL2pk6p74Y61Y#VG;tTTjY5 zgf`qovO+#a7NPBG-+G_SZjzYPm@I#z7WXIBAD2zO?>?TQ>{DU^)H8&gCd+*tQ^0FY zv3cz|(88KyYhmvScUimI?y?ucKx?6Gpxv@ov(`)*M;A|}MqcUk27}gUGMf#N5jLCn zb!U52WiWS-1a?_agUu?aZ%`C^9q8dxbUh*o0lTEpIHT;5QBiiAL92B}*)V9c8q8+d zVvV#|tTwGdV~>)|Rtw6N6lIW@-D1Y=l14+(PTOrZs}(ekm>7qpotE?l84P%jLij); zz4y!F&?h#wk}TUDw%Lx@{95z~YaOw*_MV+ab-YqWqa96=q42}mq*=I{cN3PbjA6OpaXp=Xe47vw4SEeQX*QCY}QiKQrptl z%GBJJ9ig*Dhz*}j+)UwJo-s^s-u?OB65BtyZi6_J%+ymaPf<72r<%OB7QB_Fm0mot zi>4nh)(qAUGWD~KA*1+s%>?~8($^x_CU+1(I^{Oq`|;Y(HWyO!e}%YK$9LtqEL!tgU>(>m1OA4vTl{`sE+9>N#(ww zVV$n@=~R1tmIBLZ3$tJ$pH7C@$f#p3q0?zSuM62Kwtp2{Ra{k!0Y$uuZ;`LX(k-F{ zLcnrz%w{1yxtilQlaTZr54mD>o6yh?V(5h*9h*ahb6}6lv5B+KxSWU(!HxIT{c*Sr zjmyE=Ia(1fb|6Q6iSaoR=twYx(G(q%8)1u%!TmUf7{`!a_~uP)_)J@l-jLvGLmx)uo&GSTa^MR)0aoh4`p6YOPA8 zRWYrs(?{xbdKFV?nM?^vF} z5m+qVQ&{lU-5-O7Azr+p&=|A^elU0)Sn#^?O0h^dC`9okwaVE90tMj0?pWa_{`JEu zF6&=YVWq8W-~OJs3OcnPLgK%ueVI;V`GL-}W|giYyK45-ivMaJQqa%v3x30u-8PdD zpjJj}vo7Q=O&2ZGY4lpUog-ri;aVNn=ycu$SF?sX@&~T%GT~_2xvrr;z8MiWF%5f= zaxondA{DDhPPK~abxzbh-6671{4f-9F%Hxj8XqpH-3)oS_ji~GNUGitYZR^vn(utv zlPc%1x%tf~smgnP!vny1Is?Xa%rDt=b|d3}V{73H>OMJ*#M&Ylg7Q}kR_q$X?~y&3y4(N>i&WjHUsxsU(TempJpNVTblf@iOuH-#nMNn&a-cxr^)# zl%73HRs_baRy9}+B=~t?9J+Mh0RxB6K=Q=*AR(4_Xs3LAt?oOJ3DX$FdLedO!~L;`8Xk{5-SGXW&l+kvMw7&tM0;AJ)Mhz6r%_klrO^OQQQBzDxU?CD z#fB4xKa78*S+kp&2)CpsH;c)1McRj^OiH0C@#&^K(@N6@Q_v)BFzqt^XksQ)Jd3HM z+kDaX)sgY>YUtEJml@CWDZ?zoz~f4;q<8x)4SeFuSh6?6yUQzio8~AM(CKcLk#jVM zZp7^ZlX(^s)0$X2fA%^HMW+qR|379lz+Dl$68?PcQqZRp)T7Gk+04~*Y+_^#3} z%_n?1hGcbGGWY%jzy03#mM+;=V9~}T9gdF~etgp4%!%X1ZuTb3@85a*!k+VbMw*O{ zWRLFN#%+qG*rzP(?i<#v$$i(V7q)3hK5H0nX_%khrR45jZD!&OF2WfUXGG##p=W$M zh-5G)OU?9YWReUdnPg^?5JAPd zpp`1xXK`sCsMMue*@7%;rD}bxOTp*Tr#^-L#1?I-ygtgSVv_frbMH(BvF&^R|0B%3 z-<*5aZ#&<2&Ufyx*qb|dnjW|lC;J;@zn?}ToN9#sbYoLfdVO)!mk(lO14k^E$x={Z zK`9G<*mxkyq{oNjyI1e*3y%Kzh3D5Yfu;8hJpJSTfu{|JM*ebl)7`HnM!y(+???Ct zFD||F&DW2<`X)%=qOp_gDd2h^dNVjzlyRParemhN+0pD?JeWSfcAe+XDmudBJid`<_$k?eSEx?u zBVi_S{bjQULBPR)JQY84DxTU0vei{7;Lx_7NI9_Bt%Y(0Xqau@yrLK z{}uo2j-UQ}-cIk0D{lYEj$78;g>QB5KZ0|x^fYE}+WBzy+OC)1e($C40B6ksEFIJL zx8DmsB{7`2*c>p=G8<~0wf-xa7HNsI+26sm86slXxypYy?;XRtj*q;bIzDxN;r@g7 zQ_4ZEyu5NBVY~T0!h?JzQ)I4m)ibr``OIwd9Opd$mC`bEhxt?E?_FQvGZqDBu@;kJ z1667x^RnF@B8a2=1DAmiOic7U_(& zfNTxWi1LOL)Y~MVan>S2onK3Y8l+l77+I*#40xIzdF94;``5g4^Qs?I?Hy5{?jQK^ z6YJMKeA_>7KKJN0%zk(A494=+9LD~}Yd?SWgEw9QoXrPm%mvQM0-SvuY|BIbEM_U& zYG@Ugnj-94LrjdA1O+KrVM^`q8@_U$_3=~e_1-D|8TJLf8UDrgmEI-(kiFX%@~<tw6DKVqljUn|*m? zd#1P~K<>dDq8amWo~uSF;)6vK0~sjOWwCt0$ccqYA6PMc< z?Te?FOj-aPUFvsj+K?2Zjj z;$`kfhjAY00vVT$emwf6qV7D@iSN5@X6IvMmUO`Mw9)W3a-+S$T&IYw-YV~8Z_wN8 zeMtVH`AM_jGnbinc@KLzFBx5#FE5ZIm|5BCmv9zS?sRah5lP#e*g571a_(XdvCO@g zu7&TNGCe@o#3g@TU<s;9;O4%yfjL*&eI35^wV zOmp&QPiV<+nGof}`QZtxDmGSpP6MmOh9T5&Nd$SZo$dc=CnI%eha ztc}(t(2Cyjiex?!NbsA8K%OB>aD8N1>MS|%aYB!uJE5%v^???1li&n8ca~~_b3`)T zwW;0D%y`81ou=xU$?I?TSn$BE4^Q{J^}Xk>do1$d_Md(Jz+=~Mc;ctmt$X4s-{Rux zwiVNM-H97Mx*y}s_iy}q&0mkKdy1X-*5Mc5c=^?rf%=;eVo%bQuiXcci-aU+xdX*q zEjyb%Waen>c#+#1a0@os=41^RS^WmyX_Dk(F<3J-Fec)|A{H0Yr80M5YG9Y^w2SF= zZFlW*jk!1%<1E&8V6q_dX>x8v1HG7oQB-+b5gBhLYk-3}twK=;;pbbYY3N!%iC7k7z=#be@Wkw;>l*eh-nx9Lg8 z#W7LJ6Jf66Ifex<>IU%D3`R~e^2G*3fAnD&cbGfQ84q)(IR~hK1HlDga~m$=Y7Dm- z3~s?-;5m-r3=V|NCI(!6&So(2q+cc@@3&dEfZT(pFU#g)N!ntDkNfPcx4vBefMwpj+{$y?Us=#bv>V``{VUz0ebVcTL@D@lha^T(?r-^d` zJH|=URnj2aFMYs%V&oq);zDByUo6xar;Cl|Ci8M`x$!D~xp+M{WOzV))%dU6d&U#S z&-ni`eko+xCCR|D97DG4Mey_tq97D&oAoTm6>A>TEKFwmF$(wks1A&Da|J2n&u za0?cy)PC`8fvLw-jF@7u`w;jcO~7wn+5Fr5x$Wb4r%UsFskM21@dT!4cO7xO>(Yr-5w9@5v$i^6%_X>1}tu9@J0wU;B{0oMIe1yeFS- zU+!^{+sAtpx|>qJhaJry1r?Y`xpw!tt9#Z&^yR)_IxOF)- zR_RthT?gTTq47^X8(o86{CM=?8x4oPeje`{9T;h2@~#^t=htoqHkd}ad-FkLfJtfE zbS+>dP^;Z1PtooLT0l#%7_^erkZ0ItIA-9Q;Bwl)<{5eo8x3Oyj{LeY!)l6#)I=4I z4`!fk2pk3Lm6!DX)9_VoSKL(3mE5=R+SOMb+WG8ADf6SQYwPdZF|w7}vu@p@2k#kqU!O;Q z2iS6zm3K;V#q?^lj`j(f&DoGLgiPL~}f6l`>v zC9_4g6q)F(V#4s>w9rEdNoEz#X%Exu+3wlpIqcy)EK`%^(kB-C1rv)qHL09w&^%q3 zR>$fH%3VO<1Da;O93Zl$-G*+lP3g9GyV^X1I7>7d%vZB5 zh8F2+xr>b$B2t$ux&0h(1D10Z(Fj9FQE^~0j}fo%DwwuYjuA$KbT2V}0k#yOAY>to z#-J%aV)$yO7W>Lu&$hOXA6z8f0bNRJHZ+T?4XZ^CWZXf|$RPd1Or|X|YsVeG_z=6+ z|KZMKqo)q;*>u~Uy|-@K!#Hs1T?3=P9eMK)-@&=q{Ko5Vy!DIMUxTJMjYheAz>6KM zyd%LM%gQ9>Vr9OoKeMOvw-J7 zoOPoMoONXJ79EwaA_b*Y(ng7slGsth)Yyv=`c`*658QS9ZT>oS*ll&0?z$r-WUeeH zJ?~IzV>3{-X-ECNowpxd(|>IJin}Xqj}5GQ>hWY^_h{7c!gm)h-aK~yqoe2UyrO>O z9J}MqS6+Yj_1As___}N~${q)NDaen07QElYlrs}O7cujhA=%iN)##n?-IBXK*AQ?7 zvKw<}Ic8;pGoKxHgtJ%WZp?kh_^$nT#?R!>J<0^8KrYX!V`}Aj%p7?I6J_3)KlFU! z`po;g?5`Os=FCnX_?;G`6Wl3eaa(E-@j9(ou?DTHtQ)PIHEH`6uQMn2JUdr2a?dne zh#%C4ZMu^_Rkv)&uBP01wuS-0(bD;mx(I_Kav=CQfe*5Un zkKOgvO!lX5zWMUMyz}0_5NqOAFqd8h?AXxF!HcRKSmAIX7vN@c&0IT|D!ve1~S z);NiH(&(@GJv``&TOYY3+IaOfmt1=3Mb|iUxsr$bE~|gMbZ+CS_{ck?|BYiO+1=3p z$@u-?dal4(P%mCC&MI0~5GmLo-X-2r^qAwRikDck==OQsljm2w=Qd6P%Xpt-mV(ERi2tOJ=r;u)1uF?Fm?5F+d!4QT4O!2%*a8?= zuFUDmVRHOgJm;@8<@vC$$QyKc0^S46)qD7&iI8)@zwYQnJkeK8N|k^&zpDChHPcwV zv6`t?FvdklEwUCIOB+{HQVx9I0&zK|+?;=`XQ*O!a>z>O~lZ62qB8$Xc_Aa-k0 zL9ldEZXr0DB{s#bI26`cU{P^^IOv=TT4qyE5WauI_-kk3iu;|NYv45++)3C{f2e5 z#ovGRfuyW~W4!y1>XD*Kifw=Rpmdi|02@x}hN@yM);3q8fv^KM!= zcc?6{{Ic~Oo+T@nOe^%~IHaPQ85>rv*mmX9gwu+~{>)4?Jb>J2<3S{maN!bSOdk%; z0AQmRJRI39VHUX*vD_+ws$@-8r2rLRv%OfxW4th1oV|+g*7EXVx3=~~Rtjv>=-E>m`M@Z? zD;idJRorsR-hKNV%GW4>$jdz(kTzo5cL#&R=A&2jpM`WFr&A6fSS z3z1PBE)pGI2*x@pPz}sLrsK!<7aZ?k+jSsuAd!dhtJuxwSr+rMX zZ@X`oZ_LN}z`so^1akIY6_0`^$cYQRX}9%M%DMo}K-X>?>hvR*z*0U=v6!u95<5W7 zEP#!{$=S#(*fi&9;>4S@El+(BuC#u^qQFQ6Va>LxXsb84}isgVH9viMfrvgTGz)uJ|K#zj%-IGM1U_2YhN=gU@iL4+&`VjhoXqXBKHNCgLYInRuC{p>_>o~Qhe2SS(X%=4diS7UIVhL2gc?F z+a;?-ec8qfDsQvf%MCoZ%DhFAiPC~7@Z?*^!h&thv6+s1Nm&y z_h9Gm%4@!A*sRJb^ZeLxgyCZuJ35ReTUGmkvE%6@$IIvM3N(XDE{q-B&688JkdWUz ze^(9N=Mct@@8(r4)vgC`pP=ceUsW5@SO zDyJfCA06wlm+w4luR|5^Aqxf$x{a=Rz%*u?FgfLMhnvRYu%#@XKlrFS|yG%lr{Yq{*zua_{ zWh=g4y5F>)IUxVi^qS=j$LZW1>R znL&%n-oO+z!9eHPHoT(0D1_=3P%X-*%9&Fagv3;qx9SW;-f=@?VyxCpGz{hy?Fu)Z zhQ{ctJi``GP8|(dG3C_B1@1Z)KIHqJ{5pj$-)Gg~g8Vu$=uaQMSWbObvLHj^QrtvS zO(W|uY$>+lTSg!F?W2|cisHS$8NCPJ`OydUqn|Nlc=XG;lP|3~H!6?(8ehJAw3TSD z{L#hipMZWoylJo1kFBH^JN$KJ&Sln}5*suJ0ikNyzvnR-D>`>ZL@u|;|}Nj(i5iVmFH}S zoS#d-cmBmZqI~Hb^XGyJkQLA;p!vN{hojgoIpK>{28B^UMun| zex}O*qMz{}U>f&X9YK50d4OpNni}mvJ9Dl5MLT0ZfG>U4iVM)}Y>7OwTUApqsLGS& zCYfC%kI{&zOZQe;VX#c&aJISul!wo&jF98EKviJBc&o(K+_r4$tz1r!4zleMTrq4sTeabK`@w{ zyJkWpJj5u4%*b4Bk(dM6It-J9!ARmCDiB{_-fqFj611$cY_y!V7%WL7-GK2r3$Mw{5Sk)Owg*5E(f%L>MO2S=`1FFpjr`vM`}PT$|f zBNJ)}+KmPVb5aADNjZ*{qy{jDynFZtm=eAF*#`8w{Qh5vz8WEax{6XxxvRBTd*$n& zFW$r-zllHk^_%n`%r9T#*SHvSHMEl(wBlM4TSJ4*=}Wva-!VqwYd9`}U%TfX`i?OC znt*6IU(ig-(PH|mzgm?BR0U;hP)0zs2!op0|72De-iFb*(Z2;(ZUcvt`GWt#!5rg{ zIhZ5-5eM@k|DuE0$?tS9+xTq`=5GFO2Xg~|gM&FIoO3c=LYI?SA*^sRvLHJdr$gY~ zvekrG>z5YxOU7bmu-srq4dg8|i-J{-7=I&wH_!6eG2Pi5&jVeb1#3dgZU2s9S76P_d1w}5OFfi zLbHx3t88MC^C<_xjcf*#SpZpBc#0hfVuf5`;CIi0m=XvE< zS4^#C|1AY@e+2|xw0Oc?*R{>#5aGj(?0@3Ll&fwCPF*i-78tXDM|k`({{_#yKwiA? z5dRF%tl+zNM&N;2V4N5P3JcT8%XaR@EajFg9_pe)Y#?WsfhXi24UO{zjE)Sh6`w%* z>pQS5^}3GKa5AYqLeH~%uv{8_-?7akUvgzz1KSt>-p z1ro3T^wPB4C0v?`@D1OFTM{|92i?IHvR@%H0(TZy zXS_3Ks+;U1q!#r`m^HC?21ZAp-9I`y@J_7tnbq%Y-TLn8XV|ae@5CVuGy4;7$FI0% z*EL(;dv7b;VEp5Cf1_q*ZO?dJ=hr}fgJ=%B5RrEmk$_ zLpsc()%H#u7LdcC=&*=pyNYyJVnWupbl8NZxS~2NqZ-$PI&5ZF*k99O3#xRH83%JL z^i6i1qp$&B#ciUnk)*q`Da_OKQVI(coOQdrJNx6rX)NnwSI#oa++ z2f%iBKZTtc`LjqpI_%0w_tLVPD4b2(((25~$di`=7t#FpQFtPSAEodl3hySckkNl3 zqb)fjT~3Xq1r4EI6hZAMgu-xF(Ub6LL7fy{0OnN>e3E)D70rZiae&D+1nE(lLxq$s zC|?QCESetr|E#Gh-7^(6!;>!5pU#tjw0UsX+M9yv;BPXTq(jv-bq18^g8LFE(*b=* z(o##Hz65;YXaKHlv=2S-EP}ezJ&8lRD&z|3Eou3qfFTu1kn*I)9#lbFAx}cIrLbOC z2vW3?-LytBf==jtH?1)WPm(luCvA&hJ*l^lpd$>^vPt^9ht@*wq)##0hp0Z5URpQl zQJD5BL0cnFNd7i@*ZSX2TT^KZnZ1hA`jhayhkhTVb$9BmNA$cgT9?*#D!q%=ozyWB zhHn~XzL_rxbw(&wqHx#h4(loX6w`!O<6IJ>bcs`pcG2>rr-VDY^-`%8!nFK=-fC1I zDS4)0a~uopkdxG=rH`96iSHrjRvP1VW|!jq^@Lz1TpXs_`|46YsUY(U4hR>Qa~hbXNy z?ocTX!}|E6lxkfxPcM}-jT?JtNo^#V+#OAGmI}|;>6GcFy&=4*(Ji4%a#y+^-Spcy z_a?ugZxY`aUs!KrHLanaV!G`--i)9=NKaw5pZ)@DYJ}~Sw^hmm>nLs$l<$(18Xak> zlfG;6PGqSfElmlX%f|JQ_OzQ)B!sS`<+Waudc*YTIHzf?w^3~MQYjfqk0RAJDL+V` zhbSiEdK*NBG%O}*`BaZnwf9mU>ZUq0)wjwE^lJTiR3rMXgYrM2ZarG2x0lkjL|0CS ztBT5?CPITal?P3ZCS=sL0Qh?R+cT8U$h<|rPaC= z<^vTiqUBXoLfcya*CuGYopNppV}v&o6x*G8ZIx&t~!iWgm1gWI_9JpRV z(`Q3UGhB%b%mpmYhQ9?gwFRtIiGErr*CxJ&r`2@2)?%NFC9YjNo>uXIh!FqwVC`om`U;0U|I`CbjgmSWhYMcR8rR)?KL=S5pnF^?J2VnI667Z=+Bt9o6}m(lq~tTybH`DIH3*Wr$idA!xNr z$96*3Re!7PO3M2^8Tx$a0$N0LYbH~2v{@oVd(=xYOXjU8mA8LPb5-ZXo(vtDYL`fV z8^v@qW44NCSX>q9-0=*)9k&twKBh?Tx@r9>zKWe!-yo&`T1w4KZIaT%<2hrHSJN~7 z6yv1+&h&V+er0lZx30N0{A*IxtMkXWhCiQ&{@#ej`C}d(`-PNC*?44bi|Cf1HX6;Y z3{$H1e1it@Z{T~pW-`7Q)%LPC{gEoQ?u$8q9|( zT&KXdN#Jh;;4>K!pK~diujiahe~mo=e;Pau)xd|8nu=<{Hz6NVdndI?dZE24_#32u zm2_@DU*f}5^Zl)PfV&D-}SqS=I@5Ks^FTW8iLTOiq1XPQZCW#iOO`&|JxP@sSTjzjr^aq zl6qG44Sr15-7?f0X%B@X>XT|qXGC2P>xm^HNu3#s_r~I(WHi>J_I8CU)mfor=pSUN zB9*Dlv95lSl2GUMK)ES(b(1H-rMgm`(bc6ciFR}*6Y7#kA`%~nw9Sn5BqQCVlK7CC z2tgr8kG89Akwmnkr$U_(kA}L`FysnF;bC_y9#K2{yF)$EL{bfRhT@@c5(*@e(Qrad zc7}RXcs8WQ+SMqu(i@MoMZ%FpA{I}mp`JE11oiiaJJqOORkTM<_V+~8!DzA*ibo(d z)<#MbxGMy0K=}}KCY6>PjPxX<5y%||pg%rTsZx~01|sng3@;gvgp%Fxh!hC-!w?gs zu|%vLx=Fjx-rv;)AnhwO-yMTSqCIW>i6k9rB01C*$;1R9PJ*-&iFZePXpVSnEmRwV z{)hXap&r_^wrHp$MxGCLMqz}Vk*;3ANKEaB4n$}MO68E+1?W(_BY?Y}Xc)4GdV3>) z#-4Bl8qv@lCCE}E>tHb5k**;X#+Cpgcab`}qg@oeNu6&JdV66gu{xsmCn9YcHY0ug zq_h2Df`7F=21AA#VNl6rw5Nj%JsttNCleKfObI|4m(9sOOQc>OXc zN4U1Sa(cB|wjdgg#|Vuk&|C{z=XTNbEI?d_GcW09^zWUv#mRW595nKx(N%o#27nii@}bJQ#5&78fkdA2%Z?vmNF z7tCJRVwTKOODB*bg=s<-QZWn;MxCToNcRUMFV+zc^>z-?b_nwmJgpv5hhqJtWSDR$ z^sc|BjdCCG1TYlkYv73}a5H2Nb;KhP!o8L1awygr0@jJGCZY!=ljn7YU~7=DU<8OA zA=HUS!b#wbcEJ63zX;i59TA#^vPHTakP|q5b$=47hHl0{3Nr>&nn-mDm_Ln*bYa4w z>OiQgKeQUSGL!(W$}C-}F72UwK9m{-j7cXBh(t(D^hUzb_GtLRk*k2k9?GGlY^bd* zN@xt66Q_!+f+WW&ZmCB2MyI->-BB_iXoTh)jK$X`G{&YpOcP^+z%%`;yP}Cs(hk(6 zp}QNH8~P8V>K#%whSxE4enS)=^V-J;M>LFmQ*b6x*KRnmZF^$pjcrb>iEZ1qZQHgc zwr$%^PO8qSQ}zAd&41I~yQ-@%_Uc-z_F4~gbbUw#GJv(Qq6a-5kOm*U=O@CZ)O=KN zZqE2wm`cl9VS?rEfXPU5S=at8>bpnI(3VFIjM`x*_ys-awD@>5HIAQxv{%p2_&W=Z zy2tC8-NQP?Yq0S!Sow2VjXg*tfF@8x?9IK#a=48p@&i@Rn-`bO7cVU>E~OPs8P>OS zmz&$#*46_=UTiA?O60_6m9D0-J0QY{T;Qy~}@enEHpLz;18M+Yw)AtptE zO{mRRe2Z=>XN_J}mtPsml>!tOvs&4NAB4#yJ_yh;BOL|I4+t=bw#yy4=QjSr4wd3a z!^Yy9pZLRsPBNs`_+95HC=ot(reQ}6k`jwb;k*-eWO(^`A@M@23SG=&IR%yK#lC%M zYPcM9HWME&ik|P=w^40)TGP2OYMm3hgtmuTwR6sex$K6h3(IiVL!y)%VU>aAegAsv z%g+06YdOaMowXbxGduHtILT=%j#>vWpmyG)@fL?buK$)OgrtfU9?Of6d8Q7qJt z6@vfpx@1=`#II$&Z^pXs->csSIc?#zD4OdYfu>;+3>jxEXuOfI>~G3CL`+J7SfmTN+KFRu&~vqgbS!h@i)s zeGMfEuipOo{*ydUl0(PNWPr*%7akWMYUSsQFA{-AQpJgWi8VAL9g9VhOxQe%H>X&F zUna7vpm-3e!Z?#XwDpI|3FDO|$w5q=e+yaPh47isq15o*8eTk9nI=}#RCagg$Z0?o zb{rdpxKpxIpGlHmUngIWsax|&HT({D-eEFX84P*y4$}}Andct$;O+^?_QEGqw{}=% zLDgbY@CN;k`~}YxjtAZ81VZ<)hi_E9NBF;k$MnAo9wQ+m8#@OBA-%MbwTYuCAsZ6| z`+o%UQUl6SYtij%yNfygcT}WhCgJaZYHrsQvi+cyeqT#kaUCNmXVL*8_jI>8Zp=y8 z2JvR-XkY$FwY^qL3Gp*|#ixU`*rmKgE?OB#C<#eQ`LhGecx33{U&J_;QQV(bUN)iy zLzZUtYYyD|-(BCI&)X>;+qh{g#MHUodyON@RbqGcs{S^X3N^kV~~fPBIr^7CL(srDpQYV74B2u zg^*Z*#D2f|I2r}5#kVBB@cL?*YrC@GG6!IFh(tX~^1AvAx_^D}NrAKV8*{_9vghVh zV*Z9BEHyqhPrmwFt;hNFptBEdpohkDEzg9Pn~?^TPb&I-N$)p{%xrdnIX~xg2_=0=DSAG6a}?b?$iiTRX?q3c zc|hVct;PUB3Hq|4`EH65+Bepf$-LVK)J9Go`e==zb%FU4nB%4>MlD3ynioVp1qP>s&n(P4WY$tAgw4?Nza|~##Zs5%^&BD&@XQB6q?>3rJ%8( z;p9$|c#=<4Tyk?-HY*m${2+jISK!j6_qo3Wi4 z%@j68#fB71U+51Wgv$_~ad^w$!O?l_q64=>1-o551p-U-aAMI>!Fd4Df%oH|`_O7` zR#s-^BKdeD-015X&uGoP8Aa=p>7CSX3b#OK1SgBf(X`t8Y-hK6I43hh+5sB%*PGL| z?1R%apuJU|#N2%$0F(QagzUSx`x0Ev^iQU03ZPTsUF421$1OiTY&Ynl zV&K_Kjud94NXVfHWdM8)X1HT@eL(19=0?xwqbUmOaS;2P}!*${byjer*D6Tif0}i@mtmw}qW{QZzxl|49A0 zwq5(1oQU-L2x1tMze>JcbrU%ePcQL6T^ zed(7=(j1M+&++QwCH0nS{L8R&>A))>{61l1a%5HQO<`(tW0-fT4G_+Dw&4YJeAP>_ zg<=`ocH6s!ecvA{p{hY%N_1;KT>nM*4o!yG9CD^m9uqx`T66V!NIK5 z00f~;wy@(4NV4yeacOUn$Jvn$>!=>M2YyeJDZaiDGb_uV&ILFeQR_5SAHW+PH1k_` z2OJ;cmgsNXqiTuiJn_82AK(Bl^KYAPpz(j3!FxwNSwWRi)K%NAw2RKopNI419jNll z?z~d(%GPg1j?UjV+$SE?=9%Y(cHt0}zKF z4;D4d0>DmGdsAi}FBsnPe5n(=Aj~NAHE18lQ`Lwz5xmI%5?NLS&|_zae)}FrUFfat zME8CXP7bfpj=U;a=YPktWJ}`3wQD0NpmLRf1}0=!yu6p8u1j|1Y9qAzca=GA$1~^b z!T<5UM(!})2d;~)EGSn-CsfS`fYng`M!r;61-1ng24LI zkc2Be29z3MJ`V#;8!q3G+A6b+q;v5wXW1-1wd>5+s%FP}9H)2U4=%~k-xfTKXD&Jd z-4GjJ>s&HI-&Q?f?|6NPwqm_c608un$Fa`H8es>Edz0 zR*%ot%#<{C>?6Qw7&Y?Mh+Au_{KxQtYwLy$OOO(VhP;t~r3i8}IHnm{9+EWEole>H$L-I{<7T5zBp@jOEdU1M zR?5J3YUiSFt}h2D!~J19)SLN{9p|C$Q60qL)wxU~Gv9f4M@y>mIe0)27bLa_PqrY5hvFdaIbK&j``cAw)WNip~ zLGH}l5wtnhJ?Pv(-@tQ0ziM^i>P-5Z28Vpr_emY6qaa~R)fTOYk6$1CNN)n@0sG@+f6pIlp3RX*0;HlL*d9kwn9>jL#M)G|32S_e>Z)Mxo2(Q&u zP`cpCMtiwe92h)zP_GKqyW2Ue5|a_K8a3GGUt@MuI8h+ck(@= zw7|=6`1z z!r~HfTzj40n1)};+Z&_d5rvH*GMn|gV^h5RLO{}0PkT5l{#;z}gQ)OPs`&g}T5zCH zUad7_T<6?oPuO)=Mr&Wh*A@R{q(Rq!}HwHQWi)(Ck{(YY>LI zYjswr>gPcoD#q03SEz=oR0Ymi*6!JgTPEUj->9>~*@sEZrU%E@H#5E81JfmO@V1$# zyQ#N_^N+k3u5*@Iu(ddvW|uOXH{jwHEnIS(m}acVkvr^S1`B8ZHW6|Uo9;jG|CcKo zXNVRNBqEc)XyLlvd6IWltb&y>(NuoDW_-OSv#z1sltpKT^=Mc_KV8YG_D1vTuG1m| zf;47XotSaP6e+z1+o0L=Off?v#>@O~?iS4%#2UoIXW18g4dosDg=U8{q2e-KmZeDl za|wP=*A zz+Sa;K!-mcoZ54`E<$T~!Ao{fGyRopp=JB1IR4+_#s?_%}ZN10mp{3_a{oI&NmW`h&>Ee+&Nc;Uhq2nMH&GC z9;GVh_BZ{R^GzYRo=mi3UW#9fBdkzzUmGoWS_PwS8F-n%HZHcZO>RUGE=ISlX6{=B z@Yx9>(*>_?d`>?fq`fW;IJQ7bNXPB;rJLA3-N9c=`VI`ha5u(S;CeAM=i9%77~B(y zNRD_crpJyB0_^9L<3>l^33@=I18Q7o7-w!u$%4cof#UW@E?E4$H;Y zCV&sx2M`CFUMzJ?$fu}L;{MvTwPej_q(m8~R{1?QT*n^liI(wL%}-o745}}~fzB|r zfj+8WAquCggPz4qVZw8txPfVHATxaH_b$+SAuP+tOEnE6hb^MX4277CC4zeq;SY(` z3k=*2P17cVl%fesC92Jhpp6=H6d}Zq`J=4z^z@|S2w+Ti4n^y>bvX?A%`P(V6-bY7 zAsQ}|gH(~|y|DJHVA9XF2Ep29Wo1rnTdkqI$Zr2vU7b#)MP=Fgj24B8c4u3)wby1a zdR)#nGJm9^N68hlVJ8z_oGFLC@IFAeRY_V62(2`Xc)XU&ITUXta&m#I*0PT(+Unn53BNFz>GUNp{dk%*(nqr6ryiIG#!c49(N z$#A(={H3!ZQluT7sdEOCIHtmHqPWnJ5Lp!732ipHhu{L$!98;gWnF5k-L2SAQZ9e; zV5ndsv*lvVZ6ZX>GwfBO20;A3*<_<^Y=D^mq7Yy(35tZgYNVRqzkrCM(A3>0cB77; z1L?t_;)F43E6zP~EaX6F6;61kWt{qzNnn7MHMaZZB{&xNEc!VMr6Q$T*YdAvtR6F% zpLJ43xhJQay}W__*4_Pi9yP5cdlRmou=F((Q&JchoOIR+qXBt4NZb=P9tg+8kW~-=D8kZ=POPMECi z-)WI&pQV#fJ>$q2nB)LZ^L%)Fj|C=$Z^27yO9}9{l8tjqsBK z+JEYz{1>Eoa3Zjbx7P5Rb@}hpvH2)T14=2Ek~@y8zly3_r}aFK6>pHHH)WM#we5&= zznJ3WvC8B#ZzHqd)xyiTASnQvwn-ZOV}R4P>AJFtO7SvuQ@OuRgEh6`M5P>&(qM`f z{OYmEuxJtT?gr%)g3*VLzo8BzY)KstWeijn(8?qBYSl%OUY^Qrz?s(-Lf>FM2U9f;S(^s@;^~7N0u12q#`69Y!6XnR^cn zr~1Z)r%#cVR4nE_T*~vrHq$sP6;!UG$#QIFZ`Rp8ZdAQk*%%H5$npxM>6|EPz}jNV zVnCWZRE}Pq*>Tm9%oj9IzCajKboo4%hb5v44WZe3KA23}$`374dhmDD}!&`b=(8zJ8xCLONoSAbdnGLrJIC)|VS}>F=RF#c>YE?!!%t3WETm2G znHW1Ay1jLg@c0;*$Yrbe$YafBRlX%AZl~SU-h1EahHwAr{#U;wHszu;dN~q*2iQDR z0_=wV5xi77EFhnjZ6_?ODFFP9=Uu<8^ko%Ct`qfE{? z>?oz>6jALMK9M2#mNoh3+_;!;_*l^8POsebGBRdLg2N(YP8nj#&UmwVCdB4NE<1zo zt0mgXtkPS%OTy}#AU3TQw1R)a>%YTd^v||P21_=>^u0O&#ukhJs(oc%a z^3RJxlnovs{94;*Gvn)V&JZ(}3aI!H=2(IXNNwoC^P_jA8yrWQoLW{v_N_sGcK#c=<^9Z9x8epIH8P z`@~4d%EZpW^8d#-OdKr#W8*HoT>hdieqBFjrfptWv#qXfc}Ue~=s*$?;Ru!z6B0rp zBJ&qQ3W9k6!w>?455a@z^aYDU4k60ds)C`31ks#`3?d8A|0P=W+Gg&666w1B+Vc43 zF}~yRn#z1_zUMR{he8Ar_iO9zi!Imb3gPRxif06}83AfdQ0}5DYYgFH_;v>P7XIyj zuw$;^d+}u9zqcGi$#rCxxdaz@kNR(65iFh1Z*>ZYpJw-{vx#t6N1wMzPG1g(WI~ra3qyhr2RP6-1 zSUm~h+j^HdIO9@2rAosM@f%L~%G+1#EV4}CZoZBwLXP+ysLt6;p$`gMH0{g{-FqE< z8R0dUBaxWH!=XY9g^2JFV!;oB3N{i9U8xrKeCT`Ep@(b{%6NVQk?(tH3q~c`o!>-? z(j8nx3RY#vjvHiCYmC?VE2sZl7?fb3MOeytpE)`t>;`DI-&=k_JQb8C4_hU#vbvvU zNdT@`Iu<-Z4@HsHGJuQ$c6c|0hyj>4&*+9;F`Nf<6w4%1_;wpxSCkOq3_Yk)Syhcp`eH8}_gkn(_p(YGhdgZZWt<*!yHsa4$RH zV)B<3Hw8-=uUet7;DN|Vn6;|2IXQQoE+VcP^n}>*sup*sJC+?2>}E`l)T;P*j#=lO zoGXk8Cq&28uMo-tkzX?;nG-rq1%A*M&w6jA)Q#2Nix z**#&4KCJ~UzE8^6dw}ej^iG-N3=HKp&>FA?NSQCXr)2naOL(d6hW*UHFBzy&|4TKo zQB)>y9sbR~+-C<`6e)X|?M)HYf}35??!-B|Tro>|yvwCMQudmCO!6JP3;FOS)n3=cHR5_aQDpqL*l|51%Y5pE zL}*NSP;s>APi@?1@kBi|EvY#MCxW@AeDdi&hm6wU^WKQ*vfy)~NUwS%1{+48as!hY zK+&!nPcy@A=w3l;KmlaLeyN}1&aGiRPS~1N?=79k)@GzTE3^ULk>pJ$@LgZn@^;7| z_ox!b*ZD0cgaCoGiq2V~}#BBNr zAa{}QxUxvlhEGQ$kcMZX!0W8lN1_etH5;O&d!6WSVja!wQ~ zrMZ&+=Hsxvpc%x1FR^U22k#8Qb;o4&!B`dWMj58!f{~`kj_H)SI&)u|svm6lqSBEF zWrKR22o{5M&s{yQdLrQxH;uJWSy z7%AtFvsHFNP7tRHG}{;LL?X5nt0>AHcz*}^U<7y}3U$GkA`Yc#2Lx(tSDTwpz-%L| z>4J{tFZgSACUMD3cg;^ikhr5q&P9o}kTGRPLnI8TJJ3C#xPyLrLATc<+p^%>3r6_M zo+fF$59u-hk8416b|<*N&-xL#)(tw{vcvd5a4$idO~2n3z%2@&b?A(Nky^~ayDs7d zG>0*5{=)7l;4S1vG>3dl`H;a8EH-PdOK}~ieFCw~Ke;I?Xo^M7l>BgH9n>;(t{Rsz zqH&jQx=(Z~jWVsa{K{p&v+?nRm}(Y1OXvI6lJFsS(x0}kl}@-9 z%~8i#>+vzkN{TakMMe4$bduwAB4&elO3gjI{}>sZYg|%b(*CT=2S zlQ5OSORP=erP40&*8PBTigbD%?H0YQO`WoJXzQj0tQt+Tt-MF=^yv8LJZV>D$8+hv zMQdlV`Kx6Z&(@?Zq+__9z>#l155G+8aMtw!KVtY);yIA}lY5^VrE7u4b+a^mq2>X` zJ8S!(<<;w}wx?J3Eaxcayl32}#i!0E?HlU*{>#{>!YAb0>D%Lr=WF^?47A8kJXbZB zmx0LEXs6sD-r&q&&7jzTM|K9~4u#X?1Zz1hpSj4yJ-du!{(WMGnbo8?r|oefpBW)L ztZ95*X`S`b?XqhfqGh=;#wKTtx8ZZ`iR|*ZiErlX&ySyUFGE#mFh; zb!*3dim3++x<$;8JStr#1?I470$eD^H-B_b816UhrX$7hwP5u2IL{~wZxX>+%wftM z!fnj$_m1w4=F9YpK|J}W^Qg{f7})UUTxcUcC+|Hyr*}W&a@|^yqnWm7iqwH?c7+GV zaE@>^p9}tQNSjzkinE!fgM>Qhn)f-MU!s*_N;{ExMJ7%Tn4aef!i7u11btB?ohxPGw zdaD|1f(YE4E#8Vxow$9Pc8)K2`wy4{*Rqk@HoNHIub|-C-^D`s*E>uG5L8oU3TPU= zUZK#%@xf1vsX4@4SMn?*>G(1O2QsEc4SLjCVJoGLpE;Kh>(9+S%igV@1y4McM(+ie zF@IYtKcTo&nx@TqDn6s1s4ibGPe{I%VQwD#UJ~tHw{{_Vu)SWY2YP%SCw9*fdP2#h z;;<36-xixfit*cTZO?lIL#}xqCh|hMJx|7cJli05#!FV5LLzn9Jk>+mGU-Wlk9&fIb#pm4pYYR+n|YA$IGZSHXH zYc4x}KHh`0SM1enVmP*9I!BFDEOTnS#4g48Q1#=`b3+}FV}Z0k{Z;=YLz)@$`szvY zJrdOPvB&Yb*{3@k+CvnV@tO0_t}iL&MtlDl;=@KW#7gy-P#omzTYmhEoY$Z4TB?W<sZZ>Naf)TT521A}8(PWs zDJ}YbdNH)rgb+JD%py!ZRK}QOuMOYs5zbVOeNS>%MeDpPbi^dOwZ|6ViNHtf>;tJl zK!&>;1~$bH&<_$ra`+trABs$sua7l|IK&-IX^i$ZK@plsDbA!o4DF39J5UoEv>abD zG9L<`O*T!`?wVamL7!`5)xYS*yb9LSM^PB}n>YiB%1Xp>)_;TxjZvIN0SOqX`PcG? zE)wl55!b4~!=UfTCz&uW0I8-^P=`!Z-yd#9cp?-`R|r*~j7^^cUYN1?Fk_i!!9}pYy`g^Lt#toz@Q#M18KP=&M_WXYzOBKDt}by zhSL)m!q%vs;7cMp0p-9XGr~sz%c?@edyl9jdXqWx(kfEp*f2S-^ z(hNCCfm1nFI$b)6C8$^t4XrfYyfpbt9DPvlLKWDpEu>2%q4PX*QS(6Dm}5ga=wza#&7Y}9N8S8-A%Sbu#d5iAz@M* z=NYfsUvj`{joLuB#(745hJOC_4BwKGy~BIJyUTn0HR?6wHQ+VeWH;QFb2|Ni@n+*5 zpPgTFTJyjzJGOdy{ea*e-0T2Nm!`BQEq>GY<%eki*OTlM?vw5l?33&htvk#&T{En1 z3%WgMbC7}LXL;0eqxp(qr?c^|g&2ReuV=7l;`+elw&tehuI9Gp-sZ;U&gRzU{`%(n z?)vunzT*|)h37-(OX!Q_%fOr9C%sek5ST1ZztX>eeh7T!e58C3eKGv#{jq-2e?fl3 z`6PZP^ZoM~_L=_f{T^w#<+~kzMfsTip#SJWG9cKMyDNE_|ET$}`M9n{N;e~+@};ds z(;?a3fp%x!`v&ZwsriauX|_l7pfNrb%mh2PqF)UwFC#1Z-OqT1LL~2=)dg(`u8qij zNO$|?jOz|;k4}qzJ7W0I^2PK3du@PxS$h+?w~Kr{h7O?LKi@pxNg)z&kMM;<>T&jf z#H|X2PUG*|?5f^Xyexj8JV?2R;uq`A)|~d7AicryNcJ3FWCqY2gtz)QP|WH|>)Yb(OV(LJzx^e*cfojm(S630q1M9$L(s_fGtl@zdJ%O7w?sj_Ul?mX0b67HcE+{PV-pQfvC!-~%CJ z*B|MUziXHOV6>ErN4vCT3b&LO7mnLUqm&=J>N=uE!zFDFg++`p*{I_g(;~~r3tWyw z^)Dm_!B|z2EDH&x`UF_jJG&~MRZRK~(3@@)nPm+SS#R0=#yb7Pd>e>kziw8JX;M z7%;Y?rYg#;iSKWc>7Gb0%J!z&XElc;&q~_U54Lo+Mx&I@6pEYcX;te z9!4NwxliSI_PEtdFinq@LK*iKq|_TPE!X}B?i?^LlP9kv`b#OUP%@D!x~?RZegal^ zS+K;_1ez`~){6nm4NzT7inDs{%nVF#9@gtR!7_=bfj8apx3dY0cr`DbTw~hY*=gxS ztTw$Zi&Z;i*+U_LJz`wlE8+LdV*xVkTKOoM%-{_{ImN$o2>5$=T(0sp22sD5|jp8)w6YV;wCTs)5LLNp9pW|Lv}NTp&(>o$K%vak?XvFTJ!0#&P10Y z`eapVbK(E@atN6K^-SE-w0bNA93Yi!(~oQtgq7!sg3Q*ZP}Qq| zHyr!7X1vamGnsz)?oj{Lo={))>OojFY%tt7iAcde3>sW@KpWm|MZ}31e^h%b^LRsD zVLGa}nmu&a+?pd;YOq!o79wI7x6U~_HJhl|B=pptQ9E0_f#E%KhANmE-9E)`fDlhA z*dBDy6;c)4I}*Ymdnm>JbI28OSv8Wr&mQF;XkFH?ePAsD#%+T8F2<`6H}vPjHK ze`UZp==@DMvw7OG)s%v*#u*}Qi}sk4^(z!Rm8kB@Q9bBHZWHreC5gglhGvG)1mP9I z%petc;=$gb_MP-_RWYv-kC^&GyxLCnXY?*42W8tKaWMfW`Nkp4ibN$DdOz>ZNf)*` zIy49ul+Wk^me_F27!>j5a0``xqG~9QUlT?;Z?7>0R~*2J-vsbdGBeA@JjNI@$l$@J zp>-<{w`g@VRN|@>+_N1y9MPrYN!UBnR3ti&R;)x|T6YArc66WIlCALUS z;$@5Dpz8mmDHg|$8Y*JZ7cj-1YUqcM5H+_{Ce&xC#@_ut7;5BKA8F3BD=rom)dONN zYx`+%)#@1jov(&suN%v#0b){EQYMJRxE?hB^8OrmMxg#p5 zU`MvMfjde+*`x&vR&9yJq)9h1GPT1&M9y}JVMSVAsI@3(zdOkGFz>b1ZY$H8SK927 zyY7KJL(x0A(1Xs(=!;v)z{lpOY(M4nkWs>y8oXcyjdOt2vMv~EEG>U#TZwa3qnV0ddAXQ2`J>Q(cHApEicqmQ?UZm}4VH)WRw%QAt&j)Z^6q%4f#Zl&Lj+$;zc$9&I%>N14N@fg={T zbpDp7&*AtOPfC)0jpwL07*FB@EG~YdNANWm>qZO?f;IeIvh1ZOl@GtqKY)|wB;TVNQ8low7P z`_Ks(_*c7-l}c*ay>6O?aAhOli(6C}^^5I+q;Za2RVezFJV=zZ(s?E{}sZ)~MO z{0N?i=O%wRtx(4S$^a?(?2cUz&u&;`^1}lX?0miGo3Ut97QQ8RHi{=vOFmbkP^)po zMU_56%&>xPq^rQo8*-fv9A4jo8yfpC66kyZoz~D4Ez#h(ADO_l{lWljdG8@dY^&n; zR>YPJg3+FtI?nPKHnA8ngF2_W;uVX!XOUO*T`y_{kR}EcxJU_0n5|e`yIOk zVypyQ{quU%J(V9};KXPH0yC2DRNrfb9VZ5`%Wwu^|)MD_=?_$)sUO>-Zug3c7D%3Hpj%F-D_)c>2Qg9?`G8WJ%dZ^ zdvHl-_Vi)Mt;0(TY32d+s8IZ2{4$x1RCfyW+$;;qEk7N`uZxYV!|-pd!zC0Iwu-Tb!q_Qom&* zdv3vrrv`#t9G-3PlaNeD^tz1dJeM`658rme#qi<~4fhPHJvMc&|AX+V7c3lQp0qXS zboU{6SfoXYbO}`*_(u!!m{*{8ZKV8_HdAg+PKW!?cHsG6R%&KW@3{`L>phwPVSsrhcdPfzzga6vGPw%mbC7@Qv5P< zahfMAse<^s-6R%f;IP4A8^6~=xKVkARBc~J>Qo-cljg3NViP4VJb@)YG*80TIH35s z()dW*0*cyV+7jy0Qvn(j5>fbp8L@!RnGRY(%`*sHL{KcL;5$aH*q9-@5GO}a9|mJm z$)DkYfvMgsZDHbzKHVIm6uFSXz;OLGU?1c5{>9=|)7F|RK*xc110klbf+M4{&y6P3 zvlFb1^Ox5&Y9@(2Ap-R6skKx6$ls`1ye zux&Q^bq-nLj`|zyn6{nd=Y^+Y6&Pau6vZSfP|O!nhgC`$bE2_HHR@e;f6$;m{$W+PVzhUpD$Pm0>TEB@N+*iDhNrpFb5cR`MFD}) zij?%1ltzge`zjra-ms82Ggo`gO=2r1-*ny>?@66&rhpc|Z}dtAQeqA zzsmj)W5Q{8$yFJ~YE^4zoq;0y`ma7&)5Q6Pr5@LLEWw{~s8csWiQNPr7MaUDUj>4< zaTX?{nzC$$-`&HyYsV*^IblCBHY}V&{WA4kO6JA*Q*1sVp&End;S{f)Q2xM&Lew)s zoTzmq!&Zhi=2Adwu_UUwr9i!KWQc%;2rkG}aOo(k-*{?I-I7|i+TVaQ&Z<}-5G!ui z2n`O8JzN1o5xuOhJ1_amDf*cO=NbvOmSf{yw4#6oN(_VY_lZg&)$d#Z>D`m4Ur~Nj zuj8{{+%(t`)z6fZ9BVG(J**ZIJuY^Q#fEZ@G&ok2?J?fs_5AR!Nb?mpNVvf$lmS)T zuk2pnyozL;38r)KcaW5Sx#|L_0tWzdc3}1EgTQSP`W%KB3S!TipvLrK^<2E;_vvVo zPp@OME87AZH(%&@tPy+nym-f3>sU4=_Jrh8c&LBVy&NN==EOv@VJYkYthXK zR$+Fm3rq3UerQ8O<9Jt?1>PeCMFXT_GF4Fy5 z??wra87zNxt)f0bv@Q%Cihp+rMxQpWNI?Gc1_zDjeL7dsEaz5Emee%p@k4wsTFp)$ ztsV*eM7}MSvMihW6Jy*yp*PQu4kf9`z4gZ>ja-X-R-BY7naMQo+Gg@GsVLnc+muWZ z)kp2mvVc{;S)v!Gxg`!Xeo)O7{<7~F4oQJ&G9p7-lyQK%%~BefV#cDilUkOF4mNBd z_#7w}uugjAAId|?G$skEID6ojH4NaCC1fI^GCq(rPv<~a~$t!8%U?>7vGEsiYy}gzF zy{Q^kMgsCC;(e&UGU3g;-PCvF>l;Ub!rAWXJd0ps1Bkxd2j20U5r;N{)kG$ zb&`zFYBIpqOfZxy8L*B*7twa|jL3=JaVy2EQwycbg)h^{OMp=+s4s#)m<|aBjan&PqI> zfi#4=xkdME(CgiWzHU8fVF4G`uhg>D~qoI=^Xd`;s^OX zp7uT6ZsP&%KaD?X|1id~)$F=0IuFWC-GTzNVIp0oN)Dx|xojMW2_#+{m>sUPK-keT+YkT~t^ zn@+V%JC>y~3W9F=`upD)x3$(`F`N4}EPL#hk@trMb+Xzt^2Wzjy+59=E7&sr;cv&} z2pYkpn)Tw$flG%mDMIaFY8@y_aw^c*suAyoi1ejiyX&G+>R6nrkf!Zrxl!u z>^5cv22f#{LC>|&J0mJ0Nu6Z3J3-|jXbFy1dNsJo=twe}5HWjrUa!P?=pz(|uS*;a zgE~&vHk6j4Rg@xr5=z@x;wJSI$~ipG%XGX>7T^Q23~h;apmwx&s`f_h-P(D+?bX-F?}U1gA5_Vm64OdXS_srLmv2u50vz&7d>S;sU+2$yPXu1+q>XI?I7mdI%*NL zmA9dXW5#rZK}u#xjN*pm54+sFR#2%`8Wks1rX;6OX_(K55SP}|LY|N4A)r7U;rFG< zurMUaj1afV$!d~`KP4D}^rWC@a?I$2QV~Tk%WDulqBv8>ePgH-k#$-jI!0!P3Eb`V zfL@1FcYeYUlcZ$YrE4e7-}~~@(_bp8EYDf}$t}Z+O$K#}CcW&n=uUIs$r&?Ot)4h; zR4LWYy86(Xhkl>GX#Gbk@1C-1qDN)c7!|tc#&6vpZe6iq@tw~P>xTCAE#kayMV#k{ zT(Th2Tl2K%UHA!pQt}qwt`B973{9kxwdB)d$S;%yE%rm|2CPZ-fAjdW#uw!u~2XURmggJ=` zQ-r06Ni5ST%k?H~u4iR>R;FiV=fSy}F3*gfp`ZSasd?tBlXjo%{UyIdj(2Mfp$HKlsHL57s?hP}qIw z_{KeZ8pjVQ`EJ_s6;sDATNX{4v1ZNH*F5u#_)BpW=!pj*!n!l!*eE43x!lM8;K?Lk=i+izu?OPqPLF-)?Fl zUUaGEY+@1(@<>}7{($+Usm&~4ut1g-N<|Nfu}Ms@wUwGAo}Z9}ZE%YX$!fEw{WK@{ znAOP!+L!!+3p=wmIwU$oiwPzB+cgtOBR_>xLJFeLZp}$P9LsMJtKO$dHe2lcU=6_^ zl_pzLuHiIhTVh#Wi%uR_<&cg3o~@udF<^Y^J1@uQwu>l`dw_-Kr0I(c!7z$`Y}9Iv zjBq?^0DdQbKV;w{Xlo=?q{eyN+B4iOv#+MV<&topOa#V;I!j%6Nak-Dst{ykgtG{x znF^tWu89~@mZYpop@&jPO1e5FMNr!nYK=FYRiy?3`5A#gdWPMb5tegekyM&brBaUC zgNRKT<20Jx7SIW=~kx`*H9j-#S+fQa9AxmtJR`W zs~t2G=h#f2*Q-F86Gupu<;?`X+^*`4(WFyKyr{I5-6|YXh z`JGXGna^D?agzjGa+3=xIL^y)H+Ov2@C4I~=$kC8AhUiG*9}jT$123)x7Y-~df74O zS7bqScjv^;ea}?p%&T1!{Q^3n<8ijnG!k{F26e~=LC7OlMqb*Gu`cwc;*I3}3dxd; z#?a%g<^ENn7yQzjeRKS?Lf2+4Q7q9d@-6YpMhFvyIf|LWO!Z97Ol{Ht*C2O)-@wrP zR7swyhpWV0;xEtW5vo%46=d>kv&-hT`mGt(Y_BRKB)d`A;d?8a>*MP0zs@z^)tK|3 zYprXGOBR+PGz$UP4OAux5n`9+xKcT9T56svXipCqf&rPs?#Ru{Gsvhx=Jl(TPGz>T zTsc@-r<{R{@)mMuBt6p)YC%m^>ZR&k>b>g2>Jw_I+ENfqLvY46u}(1Okw4(ZxK1z= zZAk2$)rz2u?GT{6P#M@hfryS13%&C}m^c+Ud|{1Fk*p1b{298;OyXB~Gf7yJo(aC> zKqi5+ejgfYNkcp~k8UE*4!xmg&B{g5kA}y^z2&CI>atgi9lmHh6FDvN+NO3J zJg?o*Z)*3*4L#9+tQ7wm%l(Lt!$cWz->X=de79zycA;*ueu;C5tI>T=urYl}hB7&g z1YPMiH~YmZ`J=%tZdxfb+L^s4ThhT|v4h(V> zA)~&4N<~yEmx`(^Sz!k*c408vQq0^=x)a%1RCQJuY~6@L5Cev*{?k$$Wl`YDQ0P-t zDJrEZS;b2O{-8h2pYG?ST8&OarEY(Q!k0x{dT$o-t3p}Cqj6>>mNIN(Cb7muTy?H| z*v5t)<&$*Q5=E&L7O>q9CK-EQ(F9+gx*=!uExGW+&lM)hJ+X?$huBbS!d3<>u~rL0DIWTQL^i6&yHbIy>?k#g$f)R0DF zPxjcHgu7V=QgPv%YksCG$C*QOLInl(Omt&K%#CTx`jA>}HwVIyE~L}+ zkl$|)d%OX20pk7ufElGCH&eN+z@O<4Kv)P533Fk_@37D31riWE0kFEPbcl7eb+0%N zO01WuT>=4NuCP=%A@G8^@borjM_n!rnJ*;d!4{QlWC9&*RraDG5Z17rP#F z(QKhy7%Xu8m3@4dC)X-3_dS*Tly8T$RVnAaMsGkF^agxIK4}qjUkcs3gT1IQn>nm} zRUXMJ%F4^j&axLOWX_MA4ryv~fh7T#Vhj-kK!# zVa{`NwQ)Ze&oJ}~1DleE4Q%oa9aUYS009?1lGsTI$G(Sjq_o)gTYLtO!E5MTTGXIB z1B5ziw&{{Z(QRqi-b`YLtaGUt-)v$qc|BJkBEcZ`gSiXd7Qbfh`@NMX^CrOgW;Yb27!8M!)@#qqM!Y_yM< zHu2ut>mL2^v@4BtLlK*ZQJZ2&LWy35Ry6~ys*=1KQEHwrypX-gurr&FL)GMzPy(S^ zTq5!m?8F{&+wCs5-4f0diy)h1r{`y9=jGeOrM*~@pelEk)ACSdd3mo&dubfUCQCyJ z7#jz%$%ga-1$CWm%+8s#DC#&L@`{f960*57-EQctN1giy0q}RI zb57VF$;{@nBwnQ}#ieuUvu)Xqo|1fJjxI-EZYy_ODydXPbP@eP+hF@(ho1c%0Ms01 zk@%tkHOVRFZADOSHEO%b88B-CW)r0WnJOTc%h)1F zJy;-u*|qqPsS5)!siUx&)Z6|WQT~;*{`BVIyalJ1-gm*YL7oA(t{GiH^PCfe4uJ zd3NFR6w_d&jdJ>cm1boJivro% z$;nDy8&Jvu!Qx`O!(s1Mj={!`n4+1gO3!6Y2DhB{=(OTu!|XT8h9zJ)COfb=BYKM?&{ ze4qY3ht=X-u3;PU7g}LQnC?5@m2uxQtHh-Ye>-Y%n9PXa@|ehNW*dErl4K&aT8Y8R zC#yvzOHJ3LrmE3m{h_!r;e?kSPD=}g?S2I>Hc86ol9G51r(2zv$CZWAs6%7+IauD~ z&bPbW4!hlFr9?vvfLhRKM6Br6m|X16&A0;7l( zARO@*s=|ZAb>SJ|CE-J1Y1ooQIfur|nrk(6+8Np<+7nt{r6pQ(X314ufU1G5GKBaF zF@#>@XxvejCLE>s{zP0Xc3+ScVsF${M5aqCCpxta1Hmfpjn;_UI{#y*`sWF;wgJJF z+e`jl87^>9UY<_tcyM`K$l{9`agsYor!8mRi4=)S!5iDlF4(*ImV4u@52ozz2JnCg zI0ek4Jra9I^@f>hjv9`deiwe%oHU#?OW!hlE_|-})Ue<5o$#F|$s$-ZdV|5lzoq#@ zby~|kE`LzDhCVBKR=!60uJm1*>`uB^a*u4Ta-nvi{sFpNBI_pYCd-$XDoccXO}?ST zB+H;7Wwzkg_zl^n9yDo(YNybwY1TIDn+!Wmt!CMJ)eFK}%|EnH>em=Hn4UAsMrwx| zYE7$z2er!#D@>1?WmVcLeU)K==@RoO)hOXIjV#?%qAJpM(|0#rsv00vX=KS#h0H3o z%FazgkUdNGeg0>ebP&pWRLRMBh31eRMzj zr(hH|p(h!Qp2Q28a3W&jExa|!0Zy$|`qe0@%`I>50%)51#I)@Z^^Njh9<0q7mOr9kWVg}X$CO+Vx*~T{L4CIua-J+$-R-5Et@+IbP2IMYycv2k z$CIP%hT6WhM3E!&vE<3-Tvw?_QWzo>7un(!Ia0Z|EN1qTrpOyRz=e zSy;5(w>-Ekv^49%oJWh+!c(D-L*I4(Bj7qYMY(?F=m+%GoIb1m4AqYUc9-Y_g zv0sTcijM#C=Hx4rTFAnPmh&5n10c`yryJ8buRQh2Ftm``X42+j(}Srn+t0Q@T;ZJX z>aZkyeW5>K?tvEG()DrvTIe`(#Qcp3BM}Lt-un7k2hjQDh`6~Y zzGjQ`@s^rZL*C~{y>z=9(7iB$m$iX7Okh<##Jz=9(7iB$m$LOQf> za)D9SkXlJn;@gL=j~~TvQrPR(&JPT`1!y5NS7x-@a}1VVGjmu`^@vh;Nne{%V^rt| z6c=SYP?g(nVwp~^HW{}+eH?8W?K!&lK$kVUhpS!2Y>iQ?N;bL7MM||=V$$h^1?gnK zF=pSv%@zO-cz_X0Du_68-X%Y4(%7%DWd-i%x zcz6%PzbbV^AlbqRfePm00n^TZ7f{=9r1nUyAnu-tUkr-)LVQPrj+eQXw$k(84E(ol zrWgh`X%hQ4%}%AOHFgp?e{yq3S!i(LeAHav%Eh^*^Sy9l`-Xi5^>+v(;g$>rV<+mQ zfuKLX%R!BZV~y44_^0;A_s?4~YVJJ|mYca^-Hhm|Z?4`n^w}Gu?@>i`!1-?Kty@Q} zD(t!97x60_)vg8Miz&Agk}@uXD_BP=}?D&L7DQcmt7&8R>JrE#PUfnogX-ww7N9sdB7iB~Ot{uKXML&S{n{kYs5_Kuz~xIj9; zGdpLeOs{iL_F5qE@;LEsJ>IbE`--4=iiO;=IC9e%iR8(<7Oly;r2fiv6(ehozINbF z#@2Yv_LVDN>{FHV$cJObe7wGi?`dPw`P5-CS%=SGGA{43e5cxG4>pcn`rg7ER&~sY zRbw7rIjz?uhu-4t*KgikFSB*P613}5arVA9lA)3-3)$wh$L1_zuMen9QponBwPr&R zuG-CB4K6e&nvuDM%-AXjYWCMIFd1)iAPzM}X^2`>8Og30v zC!ZmoBVQty$j!OutaEC`J!7V|wTVyq&t2gBA8qZ4-*1atWMm5%r-W%Ln{Dh$Wr-Er{RwH7Kbxx;-*%hGm9zhHZxZZo_=zF3B$4F@wBbs8`o(>b3kHN(6&o zj2I$D-bAfNhuLX&q@^2+Xpte;*oXEpR2XZ>XhXH}ZsRk?cj()OFO0erabH(03=xP> zs1pRO&Yq&vyMwIM;dA+B`Y8AW-w@v}-(H`@w=~V?3#QrKX`qyfP2?)MQ%+U#o$^ES z^p8k^p66UT3C}z9Ivu)< zG=xAVv(98Pi~n8MVKQRc$o|(Z=g=Flg@Fc)E%dsG!xR8QIDLTQWx;^k!hT#XZ6HM& zNKsPqG6@5qL#qWdnrCe!Z;zQc&BPqZC^Sb3iVDngvoYcI6__J|V1YRhQKdQ4>eA+< zElFFIwkPd)nk;QQy%FbpBcdy#0WUK|vXSsoL&Q?3G8`AbhN|97BY{Gkpl@uJxb!dK z?R3E5t$C6e(K~fymyYNHf`ou%uw;p3kA#=Jgth5VMTX!4U!G$#L(pdCviBo2Kk}fakd(NKy@iz#KNcJ>Z>#(jekMN)9usz(M>LgcO{G`x zcm;Psejafb6jW+78i%_;=XMw5c?FH&AbC1M@+hJzA)pEPxx#rwxN591dxR;MC@CtYh2 z@rBHV9}`_rP=o~+ypQ=)0ezG#iLZ5kVd4Df+UT?M#r#S3(l4JhM(-AN{2QjxV@Yq) zYb;A0Wo0fpvZJHx>!X*Wz2fOqgB1PZw_R^)YRQx5===oK`N^pBd1S>l@Wj5|WOTCM zV)-^ws5O^w^$@vNo@e%&^QL&GKjM30Wkog}xd|&dbWm&9jH{pmWJmm{_uywXJjw7+9OG z&)+h9;@jk4$Qum$y!H&Q$3p~<8aT5&&#TQ1gnWTehAWU^aceZ<+d_m~-oTJNlGj3a zZb7FWPz#ufsN4b24Av}RpH<|aiv|X@on+e?Cu`dhU`uqDg7|Kzw6qhyp5y0Eo#*xb z1QTTE(a6=m}ho=5nYnUa^JFG z7%3t7|Esny0c@+d7M;0Q>(wq@?Xq+wS>A1Vk+&$Zl{j$-Aqz=N$YN42a_nGRjx5Iw z(8j#>mC!=V79da_=>z&ope$J+A@IYa0Ro{7{Uj79ZGa!z_gd1Xyg*wL+yBhmD_OD= z+P?q3oI7*w+;e9+=ggTibI(jxWaOrrF;2|S$j$RiMMhK#@w?gIq|oG*tW3TU8PFB` z)kPX-1bWLmF&zMEwNpKa`&2Uh0ep0yVhLWSB0Jr*Xr20nupaAwVN|?&5FbO1QWVD0 zZntqnH{q3*TGAe(STyBVGY@f2lgBjP4v||v?~AK#oY5JQKWfz&9i$#h#*fQg6G5ay zx_!!ZSR)IE#hr7xo}M3_e~4O4?LMb-{CJj6=WSrcUd4`~B2Cf7tazc)#*_{nPwD*FoAH>$; z?L~;I@v|DWpDe=+m9b^TQLVO!|Gv?mrz8(_ND%xn&}9Zc4*Q$^%lsSs5Bi_DLo8kDcb%D) zHJTcy38f^DWRyOPlwjgVCeNZ;xSW&c_L@}{D#`r;#%jrBf(O(?$O|Zz$rs5JnB2Ad zYbC#EGIf)@;?rBR#7~Wq$g&0Wndlx}&tCoPoA>Pg;1{#DFB=={d|FT&?VP^r`^z8P zGeku9<>)sTJ-cz~Xma3C*Vg-XCa!zNVBEf-r;&4*O`O41@<7-42|AztSCesBbj20D zt2dApnR4L$YT0j*2NmJ`r->c=L`-80QyVs*^VrC}#Tm9boi=O0<5jX)BNS-cH3x9l z{sO;R@WWWz6)Ryq2(e1FCeLpG$}#e~M>$XYn=P&1MH-!s+zV zYIE~!Vxxg>fuZxXaq*3yZEQ>MnXT@JRl%_@L%_?=yu* zm z><`(XFQ46`F%}(|{N2-Do45(A9dBNPO~4~$w0;IDr5AY5eM9dKtc^vn`; zcE6v~7|7!O=dm&XUbVg-dbjWc-v|ERhkjS6%(oWW<_k+gOA6bB_R!kGO@>X*zR=B1 zt&J@04_o*(maDAShI$G=cgYnlr_t&vHWr&hu5TOfH{R{o;d;dS2;c@`>S%ECZj4x! z-s!Q6>mq2o$zQD0?3F1z|7!OKHTtM(%`P9l&G({@@wv))e*t0gt^#Z*@DjeYTvx%oVY0u{!U9?Na6;tMsZIpFqO;|LHCozr}QF-B6|^p_Js5zXE1dd($Nrtwc}Oq$Up|-Jy>RSz z_dImsvgN$pR66fk%)WXIQ(yb91GOI`CuIY@KYV6UNpA^5#^EPmDlW(JFdd2mDzAei z8Qo#K+wHIiyqqmiq;BV+8|*Fe1HGX;2mwFuMOqE7B!~XneQIHhoFR>|t1RRngE`^> ze9PX_lCiXh_-2VdWa*E%%r%pxztiyV9O(y_o@!TBE`G`;b%MQmm03kp%v8TPh)Q58 zA@GG{Iidh;nV>4)nbA?1Av9PkPRpr(mOU-X*;_MYjHqJn_%QkNty_OS{Qlkae(0SY zcfa$_-8DlRhR&E%vJ?A;X9x=b>dCjX(y=-y`0?cJid49W6<~M1yt6b4t2oFIII)Fcp*#klp zM|bf!!5`+2gDR5oPJhYcSt7dR40X;wb2`1}hB{*BD49JrUI8j$pPTo2nFEubWK=zv zB-n4u5zLHaBBki&CM&=2BiqN1Uh}iL7QNA7to-c8cP36@!_l8%Zng8|op+va;Rhai zwW-G7G?|RmtFimFXF+rP*NxwK;_+L_2>%PPO4ov9M$oZXD5hO5ACrGWdt=ou?H=vE z(w9n4lyY{JL9IP%GzQd>3RH!`tdu>2P@sZQ$q(RI%!NU6^NRu~)L!h*L&z*RE6N=T zwTcUXEXKGxRE7oDaVnZSV!E(3W*xG=X_Z->wIc`d8{+o`o2wNGn?(Ky??!yDe=c8fZSg>PSGcR@I^7M$n`>?<9;6ulDs_NC-qI?EV6+RsOTG8bD!;&$`q7;QN|>T5umTt530UAb zqk5P6DK%?QljXQ4)yLIxwX3$mKNh?#xGVTnPmcEVqTH zJ_tyHPAnH(oAEN?m3k&Pwad1?u9j#KrZ!@(sm|Heb)z`;tu+;xILM%GOtwm4zz<#YRrl_d2XwPnTK)M$vxNgw{*; zYeO};57vgOYHO>j0u7jKQ;-!G6#=^&kW6XhRBFL_%7I~=cqpcsh5SO*;mYHcOyvRm z`@M||J2Lx%#L3m{@wCdPUwllLRQP|duVuTmHNog|%aw|dTkiB>m(nBlJF=^N>T}RR zq?kOnU(ot^(ZpFJet$4gPu(d)G}AvtV^w*n??QOR@;ldc-n{-Am|^%P{z&KK-xygx zH{74?OijBl7(eG%FI@1wW#fO&bW(QRb>+h7_$Qeo2%6G;^abF#O%79Auv53iN&?Pm zXUw_6+2u?*zv)z3bjGWBuvQgX_0@8DKx^|jcUZw%WnX3v;JcpjD0Es5;X{}#fip1K z(92|U!Mcpcyfg30ZBx#V#&ODv+0CDyndS(Hvi;Gm!CK1xdXaY>}8wlTjsG^e;ZvWedm)bvBF2}ui*kF;ynm61<`fTv6K1^2Hd=*tbn91EG}Lj zDlRSv1Y!Oh9M<|FawfVd}hyziN#~O7j3Zi8-(em=LGDZ_M zn~*As8IC7YMRg*GgZG8<+iIV~yHE&HbVHG`2qQ!)BVUQI5z_1O>MbzFftDRokEt1> zT2NO4K=iFb?W{Y5A3$T`>TzZ#7U_Fr=ZLrim#h;@%fr+iR`Tz%H{K+x5ZB!-lPC6i zXA|d}6MH@NV(hFIV|zJ`_wYr{NZJj1ll*H(ZqiGBf{riSyf>p`Um6#B^9*#QUfkuE zZ3PCw3glHGa+pnI^7CvDeZT;${raxccGSWHd&eK0ktjR3I3`1`@ z1igia-r_**u}G(N*!m4C44~SpiQNO1&eg=qF*~d~Os0SXfpLSdU@{t)84nv-qtlt) z*Xdy@m+s@2?BBQN_U=zf?@pV)**Xg&E7>Uvc10_rh|My*`=1OJy;HOBtk$Mkv*t7f z>a7Nn(ZLP{i~%Ol>J0>Z-ax3XQcSEd z)-W}#;hLJtaGspr*r3$D7zD=faX7 zJF@2e0F=(oM48P7lJj|bZPDC_{u{dn+NXKjrUyi!sMz7;v@*FSR4gm>VY$M|*?qW3 zUgEL1Lo;AmpGK@ksj+?rO`yRxr``e3^CITFI{b` zXn0je8x;6C`~ebR#%;;-%amY)naw6n%?YkkPV6KDfsvYDw^i-}^UFzWuc^Uavb;pW z8$Sn1{vY41a#1nk-5$A0sZyvIg+~rjR)Jm-%(H*4DW*Y15G>+-4wND{zM3v|(V459ZZi+d~ zenpJzFO30CLUCAeT=9Y8tU|6hfIr&n02Pw9onde~Gv2K@gn!G@?G_Nh3{7VM)5JHafm7%tv#El(~VhG@4*tao7;GdZHkx`mkTa75nj> zG9~gwLy7{wL4{SWnlhvpyoNmSOR6l-S)IKAOwF$J^6#11bP{{9Iqa9aw`DKU6lp7o zb6YueZqo^vaJ_2sS5FrPbG9au^BBZVMphWeLhdDdRL*+t;>SmB_}{}5<1c)8%Nw*u zC9;-vA9(BDohMH0yypblxpUq6)bZs0iOFXt6r!&c*acB)(DdDY{LR~LfAhF_rkZRm zJ4((}i}5$;ahZAQKe6#s(#RC?lN1S&0j!IUz+xi^y1Q@Ncm|8Nf$>zZ)V#|t_ z(w&2WQjMP1YB;q@uGC=*;`K%@KNLl!3a;4*$`Nd8Vp_X7gYvABQM$?zFXS77%Y)*A z!`YxB=qwxmt|MzZJlP~A?vbKLsnG)~#D#e>Iye6PE{MP*lf}+G^A%_f>YM+#@Ob?X8s4zHHt*M#w{34X{c_&# zEvF;@G4F!qT;wnF%o>ZrCT~*D^I5DmYm#Gcdk8<|(N2`%zTc*63g6C2ohT*VS6JDi|%c`eQ_I+CW3b)+CB?v2#I-l2sIN ze$6$~YBF^)z~X8hE+sz7881Y_$@VE1#KtTqL}^d3Sv)?fp?;oO@PsTOdz00NqV7f? zt`{IM&x2cAv%`n%j;1-Y@@B)}=8Dd4@YVScKi5PJC^DRif#eQA2fZ}=_eJ>#=Xrke zx5z&E37QWRlP10%6zkrAZMJ7>wTXV_6&({AKLK|6WeC!GXlv!So}AyY;b*VDx=m%(QRhmhJ-9RR@UAOYOuV}NiW7G}!ItKMsNUvv z*_^Wr8yZV%XBT-47Dw=g%dY*mc!1Ztygvr{wO05lo3ER{G#nNpy|eqb5qZ4>#@{H} zV})Le<)3$Bo!jMR9_IFQFL7^ir#bl+{kQZx^gqmiGvNDxgDDc06JVuY;8S)(V z$YD(QcyBo|-N{L@bn*9GdP_Ok3MYQPnQ=~rxa#Y2a~h3H?L(Yf>qFwIFa3ztj?-P- z#7|#1FR0C31-4ni$fLU|CmKdJx4lx&>x>Sa@aN5UK0)08?z|M{ZM8bL=+ zt@JPX_6QRuiS&#GLdSJL$2DvxDnyepEhpP=V~T9pr820gp4Em`TCG|YFo>UbH14I+ z=bb`7xi2Tjvb75N`FUavu=jv5UL-p^_T0U^7MSf1))qe)O5 zS7Ieu_A8pc>^Ga92z(~(RUz&inXz{JHx3^$nk_PgJYR<_6Ph6XPcKo-gnfJYY`v6Tz>v`~?5R z_%rj*{BH!`sD3H(Qj0+av-^7k?8V%~sB4%Yx`t7gF+p@0W1=`}h#I4uC2EfPqe9eG z6|IiuM}yIldC`_=Z8Q>%#?o$Kg%uTr&1>Y51Gr+J&~jh1kt`~?iF=seZ_{e!$cBlF z*nI|hLe3D!FnGQQ1MhQLpPOKwyn>K<3y{+0`x_~r9bZbOP7vkTu? zz#Ck?iBE~K@tui-6Nl(ANE3hbx(t>AeB;FKd<#7Pm@ImCV>iz0CW}HJlc)Lk<%#bp zZ8~WQt8wC0aeAe*DZ%!+Ohum%yYP?LBp$b>wW*-@oI!~F1N0s{`p+1rCld**(sRrU zlb<8q@yhJ+IU0by`M`Z8}Da^#%di z6)YoYv>a}iMGagtm*7~=<+QaYv{>tOjErSDe@UJhr!(ieOW*5>l>kC09?HOo%bpCG z)qx<<7-R|JclLlJrG>|la{}+Q<9O+jgcvMxoIb@x>9589^cDy9?eXt04fK=HIAW6H zpNk5A@%Wq+-EqH|c_~SNSBXc~#5jIL_FGhi?%jXVd@{f&LHwWf*4hG|K*US-fA9bV z1NjvuvynB(%htu3L9riT9Q%==S{H*Uk0a(sf(sR%sL-B}$@481{)8)Bk?;2lCy>kN zVqDJZFAn0bWxj~g-3T-!JHwpeu**2^aGh~N)DAIDAGZQlFj-yNY$0bmnZ(1ZrO%tS zCbD&do|H(O;4>#B!gxpywE01`**>qz$LU_S271a41j0I(mExFAj0%;CTy-Nh}Hiu74Q)a{Cr9m{G=Kxsj(b2^tt7Pi#5?RIx$ z-d9&TomwtU>9Qu=+i2+=iR-%=OT_)0)3cVL8A?^L-Rn(DdCDR?_rmD6FFJD->2sJQ87% zM?>nZ#j3X}gR+#h_Edy-AUfH*eL9#IAWf8SvbBd zIG^I@Q@Dh})f6tLFl~z}tNyC2vb0(0+H_l1p{-~L?8_e1fw~|T(4%mzLcJ7Tf)Z#D zu9So&pcc4G0!+dVNbjQ<0;KfA`xOAqr|BL4k2!@iH51TEc+!tXGC0GKwg_UeyeiZP zf0d|Qf+93^F1*nX@d|inBh(>9-&z6r4a1d0TOjP7QL9YeMKeR20uDZnAxuuC^Er<3lf!60d^9Lv` z38lK>et_nBEu@k1{`*uGAeGd!59*epbs$s`;GW=g(GwvaLQ_{E9T;HbB5mlSTuRN5$#lBd z${|YYA*ps-GgO$_dQpZF&_dGsA$Xr)cL0{yN>M6Cs7wf`lRn)_TbVACw0TPwWk%?` zqHLt=BT{aF;)^vQ(%(;|B2MKsPSZBhTnP8#ti1(n9Kq8s7~3&Jj4?Aa!x|DZJ7#8P zW{#Pe8DnN%Gc!}{b-?cZx2=`4`JqFPeK8Ch6MXMJC~T4>hJD zrCeNecaTM6f>F~W+ z&7*L?c*c6T7l`WhR_EpJuo7SrK8$Md68Fd%e=V3EO=xjY5=U9AnLEWQr0@0M&hK(u zx>&bcFr2jXS@KK%D0)0_y$b6#?ah|@h+fjDV5k1aaKwExjR6(hv@`a+$D`LUX%UJx?&7?_|H&2m{oK}ka z$MFuw5_W;7AnUw(sWwKDlAYz06h~i~s6>AOkfU0@(3ZZpaH)}1S~mDXK8tu@*DWoU7I+|lMXfv%{Dd{f3e-j)%jyg~)ioI@m)RHkzv=yPF->|A@X zZ5{19m+B_wFJ0y(D9dpdC^hWPlnZF(%(@-oN=r@()oE- z$u-Rc&qM!~Dn&Y4GP^hb;^e!=D-OBDG4G}20uOl!bsY~CjU{~SR0M*I)B`oA6;km@_8WSU)xghQ~iZUV-U zk&Lh4}jPS01+vC(si53bDUO4))PiU`NrP%ncf6NTON z*)~#6HtFstz%l#pr3E!3VjLsc5Ym+|U7F*DL2 zE>K%s?&4fr9z>eM!gkBgTIqvZ`aYhnz;K?n&`nZ1VssF-C|`y;Uc6q~&02Im(V>*Q zz;MsI^R;)p!pZQxgiv7Bu_a~~H-+3NEzmD*a?eWOeGXCRoD;nPZ70)U2?!!)rsF`P z;U1q|;$Kki3+j;pVR>5+6#NaAX4Qn-Xc6|miXPXOnO8Ux25E;(kzX5X$*LQn7TYRV z2`N=@ixFMOMc=sxS=b#%#VO&YulfYSW=B5?QKJLIuh?vZt%M-TV`~;M?7i?tqg z__ek6ClPfCgM`ibbI_6(5;Db5L2A=j;~|BilD_o{`b!FWxaCzUm1|!`j7(KkDIg7f z<+>E~)z>uE%67e!%L_EOua1r^h6FRObt3{M&=nT!3?2DXPU5H!N5WpY(67%)$V42( zlX?q_1%IWh_|A1wnhI;lMML7DO`E{7zz;gvxi@^VTFd;r)R@po*-cUv{TS3nEfgrY z8UMim=PY&Mt4l&B;Hw`38TO*2+a=7+*dv?INg<4)Wx(;nLzwTx!C!)UsxYhqzQ2R? z$X9p`40d=8F)J(jse~>UM+!Nn*g`JRaTXv-qfD418l>o1^jxx|+ZEKrwjNP~)(=S+ zjFpzJ*~ZN|OH3q*?1nTr05yQ$F6x9dEI~h-)N@-s=kdLG`0oS#9uosR{E)cJ@e#kE z#I}$Xb&y=JD@&nG;OpPwUB#DYX+C-ker&Z>(k&V-3S6-L;=LF7?2~quvS&l`+r)L@(*y^Qeo9(c$0Vg*4LFUH zOt?WBC1IgOPSK`kahME=^|rRGc&%}rWd`*+Tn|RFQaj^$Wyx$5Y1O(NZotSP1j*S7 z6Gz$h9N+NjL;F?X}jcj)-zppts;m7DL(k6%l5ysNU>HASfkT?w8 zm+hmeQmQ^qL*rV{)AQ%j6(gD}@~=}pRV&DqOjJm#D{S2_^3r)SUd@$^)|=9xsIcaz zJUZlLb3Q&E)}Wr#)@@KG^B{*oW*-V;v9`qaPp2mlEn`S5W@^TS*y;YO=Lc`k+*u7j z({at%{#+1R6WeB?F_g}LT6|l)oWvbc)s3Ot6X+mNcL63_AT9x?rHd%&orS0aguVy+ z78u#s^IN|6lH>eqvTC`%sc8h=b>24%BUJkSPENcY4}T?c)ll%8-3J$+k9Gp&qM|`9 z%^f{&dEw25HxqwtVShl(v~1d;?9KEn##~V{j-9|z#E|sPmd1D z3uAnq9#W^F`A}YcLV(w2724AA`IWds9HKpg+5MLIM29u>JtwBtOw8w=C&2l7$tqBO z!d-Too+)C+5py#krzcc({xH)K@^HtR1M_=gPLDX%wmyjiQ@5JTb?xZz?{Sqo-~%MM zrz>ydCU~HvD_3l|?5Nt`%5V4$r?n}SLvJ$}JlLBC`QXL*r7-~O-&-(2+<3HpDE`Rk z-P`=&u5wh7c?0@EI?hr)jTt+KSL(H>*Z2CU;9f?gPaH|IzR?JbzIJc_{u#eKIKZN{ z($SIg0ycP@RxMU4Rx*8VP0%jf5SC=r^CW3jk>8(3t^tUQCUG~Ft96bHKNjAaX(>wPc@n%InDtTG4 z@O_MBa8ntnez?8-bVBui*sk0X?Ucx?U;6V(Qv%{Xoe8^Ih}rQP7xAZu)J#uBk=ou} z;hD^4|Mk&&%}6UYf5|rI_@25ap;q(aylMCsehab#CBsEOTjVeHn!t6?{|>On`F{qm zN5am@`o97ZDoxl0v7mO|Vtp$KgUd3fBc%|=ix45EJBLNpP%1WxCx!j!u7iqLgwkNo z#l7^hEnTHun4&rRvXBCZDYSDjwK%dXp>Qm)E@Ipdub>^ly6&-w+GsF${)SB6oKeF^ z9~oTt{czooBWZ4d=UX36s@&s_)e6$&v8a&nF zt2XsI#dB^xBXZ4oPeCw@u#~JTCZeBgg5XO@pQu!!Av*8=wnC=+zV^M>wR|G4zYe6k z$dKzT451V)XIUVgoBSHfO@3P~yoRk7W@LWVrlU0PAMChaY z9O2Wf7GZ!*$wMTWhbLbLoZ1+=n2MSj+naz}{vcud&n+is7ZNrW z&i_S>T^eh4_}r+zm+Duno-9MJ&~T7X=+t(*i{a}Bq_aUrwuA)@CZpCIAFsKj%^f4rV<3&SqvY=7AZ#O(s+g2I*L`p}kcm0&^vgP5hP7xqSxD`Fe#HBN}#d=_lu}ddQ@Mp%c!Vv$;r!Ivw9`!w#PhaZgq~e zqveFs`#?aQPzs<#g?nfH1BvZ(3b-1&VEuH`;i-KQMRUH?W1J&VvY`e;x2<5 zR7L4)7Q^o$~HDdSa42zUmc@=(Ob!-~X%`0GdLD1lGA#z%d+P#vVfI18n5 z9R7EH0B=uEb>(T&kiLv~U{7tyQlxCRg>1J;QQXqfS&QC!BlhdUe%cA;vx75xZOyUW zXB!GR?1@%tiPEI3>9sSc90$&h@-%ws&^-h1&o<;}P8#=bM83ilpT$Jr#Qn7-Yjm0< z+gX(pQ1|)MlJSiB6HUVTaVU^~+Ic2_Q(_zL{l(feB{iiQKThR4-SH!jQfAtkh!+AM z6Pwpx#K~_T>W|x=e%$QCvXbM!tqLAaGK6h0%Zz)D=*BtbXws2YqAz*=b5Q*#6AZhNXO;e&| z%?g#tp1}5gm_+g%mm|$ZC4@W{|I;~!wDnilt+@oYKkIu3x||&^T0zR6)!Ayz_c z9hI)~j}gcDf0Qod&P!e5ze`G@Jdp6iw(ZicE4D%NP{i9qW5ksEVYpU1L-<)eWr!F+ z-Q}-f#Plglp9V%&NkkrYdj3==bD=DCfDRXb$b%ca6-BO~`1&-AAt4Gex92BSEGbLB zkP}Frd`RaUHW%0-i%mHrC^6dC8m~J-*yljobj-DkP<5fE>TTL9H|v}D_d8J1Ee(n{ zl7B>AIwUdC01wUWkB3t+MbQ-;ZZ(E`d_u9)6r=5!)NAFciJup%q?n^R9ox-_$|9bh z9gNe?7}B2N7zE)W+TM4;Ttg%T$YPG4sTSe|Q1VixS!YZph~-Aj9>HEsCz5cd3guY& zIZxH*ED1WKpAwzhE|V?xi!L2B`BNJR&!2wy&U{UO#<%h3H50*{>n5aT5F#BeQ7oyhfN z4Xf)a2KRtnDhPX7(L5jKE%E2EFENf~S6u;k`)NKdODd7IZ1~YxJRXeGqPw4b6eK4{ zlAl!6JXf&JELp{P`y%oJS$K}ISMhvjsj9YZvPC!^tRQVE)zo9eT)3Q(jipKa7pR@g zjw8n7tMk2@T%DQFquKJDV}-xzDB1%vKf=69Lv8XMD%@siQFjOsJadzIg9XFa!mLUh zt)DoY5)(3lxr_mh;8)&M#ZuTwUgPby)A8B#Q{DIB zk&<`wun2E9*)mQnR>!AD3y5{j82x~+QK{Pd!!06+?H)CSbRdScFeJQP*Pu4oZ@WxA zEBy|sTBPytnXQrn?=TjVR2E!8Z-Q~qqKGmvFUp7Ai|wYrg5VJNX8g2CELNh-M-=}g z*xgts*xgAks1FYAS{#h0qz;=Sy*PEQX`5*UjU0YK+U@AfBav3Ud)WU{yvkoD)fne(z zg5)$D2YinzzP4|f^ibW5dRW%S^tj-|55aBwEr&@SsOapm^xc~GTE8B{2$T6!NpAiCWjM@ zrwn!h!G!+*M~j=G9heDj_F!K8pOeD@<_p(<$N_Wc|CJnY0}*?$w`m6!9UGX@N+is3 zrY4q#!uB5j&3rCaHWF?C+rOa{44uFYNjL!i)lkXQ+1}O3*wpzy3>Ncnkx+I4yH)=w zNwEBr%)jyeNmCp=#eb^B!PPwf)m!`@CiQ=3*+@A5`Ptyf#o0-?{$X1G%W{x#{Zp`i zSxyq}|9dnACwpUM)Borivx2BNSlp%_E+ouSwua`W!vCF${C6q^ru!cS|D}Qo;1=K_ z0$7pljjRy_Rz1Qc+ zTmGLd9zCCeApSJ`GKYsefI_N_3E=#>{}+~u>~{?)YI3T~$+*2>`Pk~~Sc>dHNCqyh zKg`>EN4Wo8hTq5OrvKYvoJ8%z!s%cC$2ZTnv7Wy-rFp-JKdw*XHviJTz1{ct1?RCY zJ~$7$y>Ao$eb}}C{`C5g^k?DeX>QGtb=l;5He;tBx5KZ~FB->bJs(f+#H>yHneUwb zANTg(cSe?}siLd@f)4`wzs;aJ{nh{e_r+iDFK6gYI%hNHWzjhET3I?VT2IyiTZK)L zl25Ug_{F25t3K-lJU=7;3V{*)EpF@p@lQ=y2K< znfcwZ4QqH5z8MlP5kIZRSAu*IuF<@{IBsXZg!wLdV4jh4yMk!Nub8GgD;9n@ZV?F8 z=O3jg`2~NyeTaG00r20XyRP|yBmxi-&9uw3KH6gFuIJ28&!ZH1Ml#KGo~`*tRBp*b z(3Mg;?6;P(jTWdENzjBN)^uLsn^E+TEn%c0HhM$q2dkdwV{XEcH)r?YW3DBE$*cR3 zjoZOiG85h7IuiS+M86(*DdbHg0rB0bWp=i)$8+Kq)ig|#v|Db`-%5y8c=W^mUk3?J+Xo)zgmILFrI|BQUn(>0yuLMZmy0~IhY$w3VSQCsCDIwNpw zI+W_(ev9-P&3Sl;p~N1ApLHc{cKktm3{eio1FLub(Ps%OnSGA`2y_6I3qDB;sGRuh zX^3Yh>dpEf6Stp?ya!7&$ETa94e6Uw9F5>{k2Nh=Z{ZtY(P+q7M{vs#&mZJCCjpxBR1fcL=$|VLK z;_MMtkPFjerh~U&nrSxk{0h;TYUoc?+TdQ1h4S9Cnf!iH)LYpsNKJ1EiE)_FC!gh( z_eyg_nmuEtdHxzGhr;gi*|LvgWzSd8wpOPtZhUJAWR}_qV)MYFpS~v;;HsE}^`X$1 zPpsG?kmcl}w@sQu&Q{Jhid?i*$m2Q3QNuUrA*{PEBVIW90t6Z$%kdCZV%Kd-D4d{8 zFzDuy+c;hMj@=OO@xbb7RbNhD>wmn2l&)-695MS(5llL|gcx{u{bv!TE{BHsVYi$e9N>}j$u_c9q^2vC|ein;7i{fL~&seYE8zLJ`<)D z#y#X|C?9q-%7io3!CTt!O?E~oh&G%`ZMv{F&V++PHri3bKg0+OSk^A5r~Jb`k1WR$ zJHU1l_ezug5YII%wL4hi*aX|+2NVXk!cBt`l}arYpeFd_p`WNnyQOuwGVUdu)h1Oh z96n&2_$CJHEZcUjdTj;iFC^cLcSpmU?yy$LTcBc~(&t1#Pst^eXceGPD8%IcB^Qnq zhTU=c^~3>SU{-26)Yjq6vWwuy8(A#i(a*8VMt5#U6D^RA!8*DI!JKj-BP~+HW2nM; z6jWd*kr_|5;)fggfICd|me_Rj+wNiK)S=Z}&$PgKj--dgiR-zUeiq5Nwkcbk$prS=V1(&dq%x1~qzWIR}3fc%16c zxon#|gcD{6+L{veP<7%^>hT(RNuAXk=e!g*H4M;&iNka-57Qe#GK+Yt*-I+S)Q2>_ zht^k4-nC?`9&ek-uIa=zy;-oAM z1RX-nR}RzCLS!WMVTz3}A!I<+*j4(ubcFq|h9A_YtzXyTO^@F#l9uK;YU*__yT@-` z-=*tM#b>Q@UjwAqslVFEpRvJ8U-mWXaYj4uA?&IDw9vAbSeFojT-0gkB%I1!Gtap! zd--*^0OBjU)keXXJ~FQ7Mgx8cJLVh*V6gUqLAW*2fY}2a#4&9A49(r0Ar+-cet#K zpFii8MNpTz<)O>=6Umw8c|v~WLMlksQdN=jIqj>lP|4|Gy{;}*G@k%ER6|uY0ey<1 zr~`Wpz8=`t_=;Vr$JBLJ?5IY?HP<`GI)@nW7`@WVdr+4OEyjIq;2%*u!gTZHb6_U| z!ag}k|6sXMwPkB&j`Hcdn4*`sROG;cN1Zm@S2b^9zk!ypV<_#4T10xpsWE0!y~h57 zPvZtxRq%txe7sh}9DJ@ZRw_q;ODaP8BeL3^5`ryymcs&}9Ag}rNsFiv3ur`+9SU^X zo}P2jH<0vkw4Uemw1kR9%gNNJvv$Lhk!npSUZEqCbrIhKhqq4 z)#`_0Z>GI>3qivptJ(!W3?VIn5f4MY!CxM?mQa+wFT-e~d{v&O7UeT9(fFmSQBW;B zW|;)&xP=~Z->Lcy?0iim>A}%d3@fD|#Wz;X&b+~42XLhw~iHP$N`rV&rQMp+^ z(lm)@#on{vqu(L?zV7;*OP?HjA(Kzb$`AlnZyLZofy?1SRz{tc$pn;`xS=#2rf*NMOC+IhOA93@{30c#RT=po}YPGDrcC=|=<0PIt z#xkr8C?F0bLn7tbucij5w_>h-y9e~o+7X^LM}vq7YgQDA$!VBOR4g8Fxx4_aku%-` zB?S_50-@>J2cX>uS;Mn}Qq`}#uv@r%^K6-lq#Ee@qeqFBslC`*mY3Pg4x|K0WS4HV zvI!x27AJ0)IKm1ejB;Y$QH01(dZ*nF9`adnqvpD_tTM3v%>;pqgew3J*$lZGQQRcO zSeAxtYqn?C;06#C6Ch!%_SVTVuA}t!KH<){TV&SLfknB(=~4E_;PUM_fT1AH5vhjgrKNx87D`t^`GXHsNME48y$eJSJpEPk1iMd?b==iiE*r7QExHuk1Ktm!1 z)>}&7o8zkQAK6!gv1IgHsy%qtO*7sO2lvNxd*!D=X7yrIXw~-V{W9r^$c$~VYtf(| z1N%q7%Jo)BJvm!xy%6sQoUJSh`%It((wKy6D}JMsRc;o?s&0YKlLPkh!UL0*(VX<3 zAKvnpMNw)RSd{Mi8TiXGVBnYo>$H)CDvxCo-TX(<^A#ID{6jI+W>AHKTAY3m3HS^2|u~Tf!Vi{R|OB zFrYv8l>6d(aKiu`f?AG88LQ+yoMg7a`%$4+Lp#((Pu{|K0kfYx24JLc$L3!9S>^}- z0{sw-SW4B8)5(yCLPRb>eR05VG=2!HJygst^vP@f6UyXiXRI>ux|ynz;QYD1kb5Vp z>5f{Tzfl0G*w8t#U+xh#w~^I-I*_{9v2Jq$6WyWg?N`Chg@!7wPqVIFYaKF(MOKsZ z+@Q-J9LmsqKG`(x_T_t28@huGCLP4j@^P1yFx@A_ILZn}4`WY%Kea=IJP`GWbcgm|WCT z`(sSXLPpeSA(z_%aJsTk&y}1`*qv~+C@)`w2px%Rvk>tm$2n!)KEndmLT0d&{@|j0 zq;mX{X;_mu2GDnzBVmaut^iti+BogxM8P=I+Ld-)R$c)}L*&RWYsisEzZHqm_8g5O z&w6#OZLAw3p!)Qa9tIW=&P%$c0J3n^VThYG)|uSD$Mk@tnX$tVWQl^rNS`-$j1}Uu zh(JZmE^`RclT{CGw+P6d-rF-v8iX?RKWZ*0`T|hJxw}K5`WK`b)2OlQsAK+X*TIMob@cv

x! zB_3iQ0`AoBUq!@e6jJ97O~no`IAzokJ%0tuWHz}pxB2e+2{RNi3iw{fP%)Ul?BE+V z4MfYFa=+jhz_OQS2WcgIqFnJtnYi$sH_6Xre8_bT-4EXtYKuwUi&SW|jBaq6X3Ax> zMBh7+su}(KGr86x@Dr9{J6`lcxrC6Zd07RiyMA9~Dpautq}x1{JNZ46`{rm!L2y0~ zwIWh~DW~#1l0yFr>k5zY`*2Q0P%qSyLCCa^{l&)MxrNmuK*4mNH#-ttHWSHtnA9`S zv18QW)eD5e6x<7iWJuTDYE^@GgXE;2q1q5%rSwBbDyh6WIeb(0arA!O^lz>(&;G=1 zDl0);&zn7K!CM#cSEz)-Kp1uU}cJAG^;cekBT) zxwjWP<2EDmdySVL)Pt*RuGV8reOxoFv7=I>6P&aq&I|obO4#pQAN6zwcqh}=-HYD+ z0-&mo=Y-W?r5Pv!JkvWs*kxB13dyFwe(N=5WMQEwq2|elLw>1X3#C#IrlG$c|NAX3 zew+M$UP76AFpd5xGiJFd|8p|QnN#D^VD}N?;zWnQtrbe~Z<-f^2+Pmg7(3&0OpSbv zK1*!mGp{>*^Ji7Ong>n=eh1-d-UAq~Mj9qtKQnij%@hX2$JpsA4q{&=)1kXw`x2GI zKU^QZsrW7P1W7zWlzTHAQEO%IQ=ht@;f#yAX1vT4sI{v5H8ZceN|Fk~ct?~X9k;0< z9@21Tb2Ewo6ZU)O=|hlK<{)5uPH*2#P@^Fzs{D4JaHJ*q*Xmb=)hJ4b598+NK{iA1UpX~&XUCBuEXg@{9 zPbHm0U>umQLqax5gtf_&o``~mig|8H9j1sB4fd^Q-M-mvHD5IpVJj0^Y06{pGS zo}%H611FC(FkinII7r+7t~kEn?_=$lCld)kg`Z4nSwfo-0a!%1f^z`>~d*ZBSQz=d^>jQ)5p=6aWfJ9*BfmzcS^u6uab93U)}*d^e2;S6>>jj(PR*ey z0=Hm6Vk?H1auF{LRRgc>i(zA*m*&$(U+3rUcaESy)FQb01xJ8db)C1^T;jbqLgWKX zJyd!7#<}h|?jVZn6Z%p$XE-5Eq1xUBJG;=<6cV5U6$Qa%%4vx0EP}gc-sI6P0#@4z zS@pVNyYFG8p#=L>m-Tn_NeQdc_pN6YOII8#hO>3#9L)ikpoA_2XjJ5)#Y4`?$;mx%V!BIx|s78&8X7z;-qz~;E-#%_1&j#Bo zvZp#H=R4nIpYIMR5yOpH8~kIXnGV9Dgcy#1ll!?Ynjbnh3{GMd{vPA58I?Q(bMY}w zT93`I3-{2dOb@D>cm!2$BGFb1v|aOIpDB5hV8a=Klg-~H7jDTF!-_xmK^U!{lFK~a6Z;Sd}_QKq8jD^F={&Rhe z=CCj5;YmW{5Y&^9OAJLZp~FP9{A2*P>ya_>{Y%h;$x_H=&MKeaD**$%=p^TJ_79s> z)8r^a({JtCroHF*?wt75^DN7zOkd1q!aX|vbj>K*a#uKQ8QYR9UY!%Td!VMzLV(sM zDHT<@(!KDER7-Q{E%cReg_Hv0MlnB~>UjGSUdzdF))lPLq~VPwuW)&#(Em`2iq2NI zyeSz*WMJthlgpkrPDbli$g&y|w)mQ^0;JKS{3Iaz%2UcKk^X`7y-D?@y@IV2ko5!j;ndMIfC9%{EP0omeFBGLt-NQ0VW#3E1mD@ zcl)ADEHn+WqYOm&jvp*fosvmM6$yf`-xyUNeLz*>fxoPpnapw5!;|5N86{jnQ~BZ= zp{>!N?RIkgml~}ucK_x@>4mVYtu9bcFnF+OO?#y`eX7=u( zO{w%5e%<%pLL>M0{K8Movc3s5b1eG!*lX+`xG!+kx$`b?wIZ{N(&vD`--~4dKI^ng z>82kO@xqnH{xM!O$o3oPV<%V|W}2|Lrc(nl>nG2_S9QNPy9@wmJjSj?dY|CeP&tp7 zC#aYfkW@bGahJ>zb#V?LcE*5W7{XT)!XV;u%g6bHq>i${_Oc7M`$Z(ecl|}AT=9Kw zS9vQ!g(;Lv+#GIuQeQ0zN{vuiDG*pO*8eGxdeY^5eT#XVHD}byY2E@~z7yhk+Sd&u z3T$npDu=tJKm8?IAws^8nR_)#RGR{CHut8o3^5l7z#AfnGgt{S_tHG1cG%X~PpfQ! z!0tbWzi~qigs^Jmq}_M=p|-(CDKX$@?pcdfwb?z_#rT!}@?2G^a2VF55vwZ7w~sLg z-b^>a8BM2PS*7I9d-d(Yb5o!87n^T~#ceEKy6byGYZD(nANV~W@l71@XG~_i(p}~p zOB-A$dY4IOu2dS@eTBqwM*DlQE43xLs9X&6-dez)^rY z&^jkLS_?_3Q)MCL)@t8VdG zh~hfRDH(Ljh2}bFcsdKU$Ft1Y#X_BCJNJ4t0rrzsg~!dN)2Si z4qTV#%5uoQo%&F)?KV!l1jb6dJ@E~1+9o>_>Z=OwhimxPLZZ`eyojue+uAdzZL(|S zOy~%?_<6;=*nRco@O;m5az3#S)T+v>h3*)RSrm5&w8ZEV2hN6ym1=3hc+Nh5)DgK) z&}_os9q<)%GMfr?{}D|shN0=LuWGZ8>Y_OLwQ_Qua}nF*K^`15Q5TGO8loJ>%>8IK zcmLG#wffqyMJ?+7>Bk6zoJGdh`^e=d7HxApA=PwIc(T0e8v9qLvKT@XD3c*!?=M}~ zR~Y; z3&P@O?M^oCFpJm{TqSX;Mu5^MCKE3i0Y~t|Bx+#eixIuuS=byv)V5B4PB>2nk)M%P zK+`w!lc?k#hwrvR0H&$VG1gfd*D(T>SL}k`-8xI4;}7;8cCeJLX@NfyOFGV}2*rbH zHQB6@{9zVM5kaU~CVkhRU3gE7*zfy5YgHb`a-pqpLW%1$bN+57_%3Xni^6LY5=byXErTZ9%*frrrnRp zPHgJD&TiqCk{LJsbmw+ig|+VuRoBb`eP(l2n3;*xM+ej%36;oOeODQUspD4iZCLbA z;BQKj@CI=ZTeYh0ZCLQ3d0Wv~QmWz~j*SD!MKFDlE5Ai^xlZ+025Kf2VEnPXloET8 zEFGI##+KHhQD)U_N&k1DPMb z=S*dqh5Mo{R^6=^IT#T8c+|Q!hw`t$;;Y=x2l5sSGnKO#w>PmOpB2eZl%ghsf!WNL z(^s%%_VR7Oi)f|3q>QPB<-7&eTODpvOGNYL&gZw5kFzVJ)k_r*ON{63u`xZ%iSn{o&zH}WIJb|B5G%|+qe2Z z5BpvXLRT=O>-Ce(5{vftOh!xtMtEt$JVjD?HI$$CSf99M~{H<`<3zK574(hHlK^K5yJu48;JccX9Zm}>5@;Let0 zRW~IrOnp%yu#HIMIgh6}r&XdiPr75{Mm+{UvfDEN2PON9AXo1`$ps4|{@ zcloa#dUl3MlXU+Pd9);Pa@oWwYo54@=_UoZohN3B|^Owa$;0a2qIXHak9HhN84 zseC>s?I}5|?W)7Nq1S$8@f0?$>uf)yJBA+0CEZ`Pzl$l&Fik+#J?ktaRc;_3P)KGm zkaW(1z$8@c0faPaej`_RM6;5)9pmFJlF37-~)B?ed+^7KM zOuY#m?`gJ5+7)~twHUnj+%$H@M#e)GFug9mwB$3!Z>^T56fdL*tsN}}%PedEN3$Kg zg!OjbbI~5eDviKm?Cp3Qw(>;1yAFeoQo3VKTw?s?{eu=}^$Y3zqSXNv_pB3Qo9{2< zk0|BQPiX28kDmHw6nm@O6};In;&X7$UC~}ipUt1Em24cHK%=BftL^_+G>zE#jNWCUJ z^KL{XKL*!c*z6|kU95)DaMOSJwyDJxK$!m)-x>tn()m|t14XR?720InnIVB{d&L!` z$BR#`9Qxwc`iO-g*UvR946kn>ljIQW`Z%pK&H-P#)RAqkMf*7-X8HQmM;Mi2Yss$J z-<)^j`O>P~9E4lhCl#fzXGZZlaczn*Su=2HVEK!f4P7Y{~_beA+d$z!P5N@A+ z){9+b9Gib)GRQqex37*IJju*1{W^hQgYl$i1^soUKeu`Mr}+n)hAmvZ>PCmV4%K2n zq{xlBX}6RuC6em`T;&vrgx=A;E=GH*yZWU!)tz~2BuBw_iD#pA^@GvF{4N;#F#=p_ zCesfTV`R6=8K7Y6TaMQ>bo*g&^aA{b%=f{_$%oOdH8}$6591ctroW~!J>e%d#w+Hw z%k4fzmzB8bJL+;&F$;1Ok<7a>RbM-Nclj_kRjPqMHLi0pZZfU)6XG1pwQfOcH0mM* zn#Bez`>l!>V|ERaq{FUakCVgQVFQBb(;bJ#It1HZo&34RY%I4P0(wNAoUB6i)2od; zs)bKRmxf1JmiQP{UNm}gvI@mn@mRGb!zLgTxy7N#Gqe!;#P*$~!3+7e6;8>D20}!n z^K$}STlQ1psFd+PYA#&PWQdn(!B8+U$p4A(Ka>U<1@Ts zB6}{@xo6zh8U(Dm_+xJ)yT0`X`l<~*!q6+9Vs-G>N@`@x)~@V>aUcIuJ5YbTN;8|o z&M8rTi{DcP`Z*v_$hn^ED! z=V*4vViU{R(%_%7CE|}a?^#0Zrn7Wa8@k9n{h5wuYKehfEH4A z>)aWBK&x~CzR&`xDxRnvczRS%uGhAl_z7l1@`lx2I%*w1DRZcA^f8zn=EvuqEacNl zC>zKVQ&tJB1E9f0OG+s7=cRNB?Oe?tBQ~A~!GZ-T_rW@vpB3G9I{TL--r zAD~aIbF~&XEqte#kFMFz@waac{5WY5Gce}Oi7J=2)q)SQLf#QJM*C}J7>4<<-Wk7C z=O_}{$EevAxh>?Qh6rgSTH5~i`46yqP~vTKzXDt9LJQymo=p`E5X%vlOFM{JtC5vg3h_0oX! zd9nrW^SkE~j|}ByrQj=5{2vfdJIt9N7$Op}B(%{5^z}>HMS$01C|s}YJ6RMj5WBxH zU4>H}S#W6-(AmE{kdR;H6@O+&NtY&hMl50QxIg*ow1K^c@6n7~_T;HA8`la(a@g!( z5ehT`0Y-Km&~+*HRoOfVe&7i^uqOS%-hL%K^uV@7ryOn%30ItDfmsHQGye`K@cpJ9 zvCi#$;azd!mdy1nuX0dlE8FPECXyOKb}6^WHI(PJ0{YW13#_05R*4mb#*K7@fR7{P z++oV4Z#6&gimr-hVI%h;F9ge6dT}(iO5JeCdhx>GoAPfHX~J3 zzi6>}hT>&jy?e9gTDs6)NDBd6%q`|rsod_2y)Oa4Vwf?@-r()YHL7?YP*tHj6E8&s zCo$eJy2-~2ppsS154vs!a|AH6?w!|lXT~~r4sd+GmYsfEBI_7x?UcfRMg0mc59-WX z5_?b`+6SY&oK<<3bWzTIPjIj+YAF>yO@~J;8RJ{506ZG+TZG{$;G&inQMtArv!KnG zG|Ts$UKjXKrsAU-w5=O2q({g)m5wG8twES&0=0&{vtz+gn zm)yOks(WdCQ#?ZJ*{w=NQ>W=RvQ_JOjYg6FFWxV!ef^>j?dF?v?j^XUnPMTV4xbn& zlFr%{Q$8wPHVKD@zRAuwkR#?LAn-h$-+KnlCk9+9>RL9n?sm(X5aZDtz{z3X4|c)uGRDoS|7XbdlY6k?72r#1Y)moFK9u$eD@wy#?7p}^1J6D2O~NL6qp(oa zNcm7fIkk!U^Tv^Y*ciq#I+PO|G>{Dc1}#+kGIt#IET!-dHomz*h;0pb4Et7##`4PZ zH>!%VKeb_WiplZBzR@|rv1$zTH!C{H2XvaI8{#RCzxf0pptwqS7lX%!m>P*~v1)V+#S zM^-r43PzYo&YDZ3s^U>uOjepWv8v*g8+V9Y1ndU(B32H%JZFfSUCQhFFa;Sr5c5GH z4b2_Y4di5MDjBH^2MyDlENevwP8%*D*nXd+?CnM6^ee)vNG1j$>J;l@Iag#PRu8EBFFXo1DVp{ zK)P4lxYfiRVe1GquNlp0=&6xmfYb&`rPmkd-)l_$QiJ;z=Va6FYfjfjbsJWP9kxJ^ zbnB!~OvZ6IjGk(qVUvdD-k*T4=EHg#ls}z^YIQo>q$lkUXZGDIuDrR9?8n=!^AbqZ z6Z_kjK2Z`~6m2xu2J_&Hw;LM}+3|JB2CV~QoDTTrXw6M_B=}&)7_ocC*{25 z;)aQKDT=EoDAU^fisF_j6bf-^`eXEJptQ-%^rVE8c2X67$M$Ux(Fjl@Z^X>AtJ=f6 z)+&0#WwcE~VN+JqUldWLdlwtPi~@9{d_fF_l|1IG(sA@m;>X~#Vvazy2+cr5bh*LYq%9m_GjT1|Ll4|v4vtYfODelX{nqDFjfCLJ!kp6$%*$jT2JrpTE$mX{M9b0IfGlO+Pm=p4TjG6zvF~E~FOp{~B!i zW^0JI_}f;WDH8k*!LEwn97*TFGHTAM2U;~l;qmiEdv#mZ;WCqjR#wI>p^^HzXx)YC zmvfZ9YO;Hu*vH64c2&m6xVX01IUF3tFD}t^fa{~|2I7Gxz0rF8sD62>}p4DCe8Ckx` z6DGEgK>o>-0b+vx5+*j0$(#vDt8%kW1HiMwdlxfbxqQH|RyoI%lMwGj4@>s~@?M-R z$F$)y&(?o$p>;x7NTV*{v$##V&iWZzlJh5yI2mVcvR?g{iny*Ec$X-oy&(XGC z?`b`b@$q($pGy<(*XMtcUOUwIixn_O@$kox#aPCmeU{?3Gtnrph{5&luEF%%#v$0;JqBk-&57?3+$A#<0cm(>%NYp3+}hfc zd?DHejz&1S!w@ws8E2Vv1sSKXvnWS74mUl{MpbHdJ}TTj=u3Be6yxKw$z<1lA!2L( z)+@kL^R*gv8P$r7SFSSabk!czeBtoR0Prix=m)y4gAi>ui`qP^z()MfLmT43#T1C6 zly~NlqT6FxY-Mbav?IVs1 zQ~{nVfT!L?p;fD9)0bf^-eOeI;v&g7ut?-b2`$)|)?p>8Q1)kK|G-Z|fh31}7Fr6u zRsTVr-+es95GDR#<3HwHd@5k2!+5pg;gEb`Xjf~SK_aR=EI1p*I$7T{eUNp_fx>x| zz^sRfK*EDE9HxzlpjKPy-c0n(5{N-d?`9>0)$Z^zBI;x^A4XK#Wm`Q=Qhh6*WHhuC ztD?yq2u;kz-YdbE9Qm*{MubEZs6eZTSvr=rUm0N}y{p8JdlT?%rP3IO$4x4q zU*4(Pz7BqM&pd~Reskxq8$lAd4=i;{_*+f#bOy(jz4IhaUp|Nr^+ZY4flCu}f!e<` zHuz^;&y7B-UBzVKI@I5MLlVp{^4JJH$u_(?(Tqk0m~Ddc2JU~%HxK!B+H}05?IjAy zs5l^764VOuJX`6$QCKEn!Cl#9!Z0i@6i>oK^LiZd;zac`P4JAP#VXZ_*e9dI^0eZX zpJ`~_i0jQ!|L#?16&)Ih4~^_vQbahLVZtE!^xizNsG3VO1~y-pi8CzT+t_~@5lr<| znl$|mNaa;lSV5OOk0wx%6`Wi*wdqja|9x|g#d;q}_Cw6keO?YDdwB=UHhb8odrQNK!Lua#YDT57csid#-H4wFYKiW!Btu)iUodP%c-wbE z@U#HM@%Ac(TFavB>_~lP?e#PE`KWqa)3@H8!drfsJ5fUDvbd#Jl~bhyv#!8MW?@l}WgWBNwC=t93(lXS=-d+fSc*ur z7_3X5wP_f1q3NFm`Q!d5pc2Dw+Kh--g4YXy!A1)5m5jEL(l%XW*SDW;z%NRgm()XR z2X{H^fgG%8Y~QP*aI4j++0KdnOHU6@ZkV+!tY<#5x5+ezQq5U)ZsZmDS>%!|HmM~P z9pk>gZ)CC^7UD&~ZYg+(_OPo#W=<8$=Q~~c)U3}Ch4Ck&(X3d}1DqK**mRKa`^AJ4 z(7Yrj4!G2I`om=%hb5D7heG|rWj&J;l$f#8P4F120I*-F)r98RI=7R7s3$sPzgtu~ z_F(Sp**4wSqmMUQ&7_zdfsojXe{_6K9yLvK(zEu0>kqT^tYQ(oA=2~EK?@FHB zcxO}p`3Qj!ny5MYqoY$4E{ZqRJpW}VL#zq z9ok&^$F~>|3#L}D=0g`4{ar4Xknr~m8 zK2xZ@^gq$_e#=K}O>54-#&wrVcR#u2`3!7-dDw2AgA5Opmv57Y7u)3H0w+25l>LiL z+3(DLRa(a>-C>6ZqI7(op9GAr^PkT+hH)tkt)-^?E<8~_x@&>0T6u!~J|9OqH+$7% zh%2isL;AthlIN3jX;(uJX;32H{?38T2y zG1%7@k0Td7ySjXF!mk%-5Preuc-%8~gSz{`f0OyxZ##FRf&YAKX1bVqnR;#>nRbQr zG<)cgn_R?Xe2O=(>%~1XC-LvB>is$XVK$g4nGE=Ja|FbJw<10K_;KPO#qlpZe z8v4&k$3o)}-Oo)x+YQu%y!BPVx*La&f@n_PH29{us$nNg3(1nZ2ivESp)DAx%Km!C zoSzIV+dvn7?uM52(Y3&UfB4Qn&yVDOfM_c|xcF120VGY#e(rhF(=B@6{1j{WElRez z$&ChI`80DTwzhH2(TdUSvF(mPzdpIIq=$*ahcIyVG#D|Ibe**M29aB13akoE9^&Ab zwqsYTQ)Q#Vgz$&~7Z-mNEk$1=TJZbG4mF6`W^@I-0i7pcebTCLolx~U#r;M1vT3)p zpyZ2{L6s_d(_?F){nHIswzGRj>6b`bxa6I^^>RZAF8%f<_5H?Or(`lo1pgb4rLGiI&g*U?T=vG zG&&g@){eR=)ZS{5tJ+(UMIJNF9P^qZd53ku9(z&BCf)|IIvXo@=9Qr*z7xY!pVjSC zMF7Z`!gq?KV&kr*%zty@be5l$K3EDTS~R!!LwZEb66>EkK2Y9WYUD?$F7J+KGc-9Z zNw*%!>fEeu9jwTVD!pJeh{aCrlKy8B+t}-s0c}(JkhGE%ZjS3Y%ra$_mOV03@3Jxc zcRBnn*sPJ((U_RN8gYW`VrgG}%Bu#)BftC_Oe#m&mLy0a%kyvGQ~5*TC(Sm8+S`J3-qMB zG=))=u?4kyFyky9Tche4M&~ylO4b8xl!;RN`{scWX_dv@fZ)pJOgmnc{2M3-QqP>5 z(ZyZ%P?v1BEJW|~B{G>O*$G*VXB0<~`g~rCy3Z6(QekDuMq&YwY`6_;6|kwog^}(dDta69TG|0nF2S> zG>-Pnctmn0iZN)nd=B_K5)|$E4AE>;)FBrwORZ!xP1sCPXB1zE#yYXCIp5jYn;Ja+_i7p zys)+8A8KDW01kcwB@+D5Jp>!yVq#$1N#@NRn9MZh%^76?O#63?*#8~$3-(p9453dl z5T=hmjI4n=HhMm(jhbkciBPrX;Y=~B<9<@rY2|3sKZWoYyfes{GoOFIX02fKtfjSjAqYU*rBdz0uf{+h2? z>Iw+o>j>i?vUTljwGzW%OjU)hcqfr2DP>`BS_TRvZqPw?v!Ke*ufF`ikxe^d7`?|P zS7RtDbTi1gcS4h&P!;0V+8o2JnRzbVJfnys2x=JchS#m?j92hFRnc-E!>2ZFlGJ~k z6wV-!Y@W#B*8KBPTBkr<&bY9v--)a$#*;biZj6PWJW6|-F%+ZbAoO;KgwfI`ZUt{L zDkX)++E_~>38f-&+Jnraw)uV=`oYS83yH@y?gzPbPfiXu^p8-Q+TWUzQ`C6Ay4G>F z%xd=)B9Qs{RcN)lR-R?*KBPZ%8p#7+d-|xe4aJJ)?B79U%Se&ns~a1MJawKU?M#_t zZWAm;>NW}NFYg|pkkPM&9U4B_$-X66CCagEg(Ya6`X|NV3$-BFgx>`9FO~8yU8Z`D zL8eU4cgea;72z67=h-d!9pI3hKbG52lhaR7vXD*h)?fj5p5$FIJ@H@o>hQF_wUg!K zZs!O~zfjm%wYvHnqc^$ZNF#Wy1muIXbYaJZmpJ03&LwUEYOSz zBVpMs(8yvfqD0f$8Qd0C{mkw!9fN&kadw$c!f*_G zZU0s0H8Q!c&(w{bLDLsDoVzh+?Dlvph{{K3yF zj#`Mw2xQgzZ0zR$ek3f z`$5_{OgP*lG%b`N&D@=HBWE#Qe--LwlsSXXpXc%%+)fcHtLHsnF0D1fT@3^~-m_^% zy64zBZ5?w^ua%01r!AkWe?GR45@mYr)Z?YE`YfW(t9u9FtdHY9n)3gcMfE`!C=?dJE_4cHdIJMR_bmqpZr zIhTY!!TmkoDQ^akb^-`(EirE+_2@it+=H+(l8U>BRmQ_~XNFs6;b(?@B>)oiq(U-8 zfojr6Vw42U(CbiX^RP<;=PXiQjOb1C6f#2ub6L(*Sf}w#DzqXWHMr2zcsD2-Xpd|h zmYPv*IN=MP*(qjRvCDS5M-hXp!}^dH<|Qqc*zlYx>5Wn5kORLs7cq*&@1APR_4+#D zwYgHRJbW`^nOfv@hru~P;K}Yu=i))MLfY}Fl}ci!fJHxSiqP32R;!Le_`r`DrAhRt z|4d!H7D%`*T~~9mE!;G9Vn1v{oh~{<8sxMh;$UchC({pkZ7bxdeCiJCn|C!?u5sVW z6Zq6yn0l+~mLFFZSch@2WOdH+@Sp!k;1V>KO)s(2?5s0@LNiz9!f03+Ok0A+Ny77? z%R;NStlWkM(CC%-0pO5AJM%~>;7Je6xn}IUV5x8Uu&k}xihqZaUK`z%wH(pXcQlmW zUN;P_(o#Q+Ox1~s!LWs=bF?Gg8G;fR;d%2{k8i_xH3X{}P48fkCZmY{-xD3E6)SG~ zCF4M?Y0k7Bx$Bq5%^XnDh@E*S%4$eQrD;>9AEt+x^iRq;8fA_GVwt5a-S{mR`7OsC zc?Q(=2Wx~n`74}iZYs7r{}g+<_nFIzd#_>>B?sIhI7Jq-m{LWz*D+fkP^28~ zc&3R9b}PhILQtYHc)^bQAE!$<6W>wsvl|?JvEi)rVYg5IZKpf!#izlo%Vz+|jV-!6xmOUs&A7KS?T`#)7xuU$NnWfDZ&YsqN2 z1uN0~teH?LQ>1qb$iNuIGt*-cX0&4*ZPr21*JR9GRSU}f2+*bVIE+L;;ZH8lD){T$)F z@M6^mYX17{=0YUH>9dE)4hDtOK!jhL(jEJ{Hq3?jupuC-fJnQ>^!S@ZTbtrw`v{`T zir#59|K5h=F5V5A+IdyPJ2JkJlck>3pR**pYwyO_czE`SUe+6omdkIE`|Ja)ZlB5z9oQld;mQJB=n&h+dR=yX?y;yMjIK}hO zQ>~d?RIT*hm{CUDdbmpNdu;H`#2@*}#Iqs$-*WK!ITvIys zhDFjJxbN%?sbx5`$O^?AOGgKF<)4}}A6}8V)QW!H2)WPW26Z65uQJ}yJH+nWHO)*T z6vkp9Cma)1aiCo>CqJApv0Of~@$s%du}CLK)09;n-1KaY`Kj9|amBPHP0?=2 z;vnErVxoZ@HD!6OY`QFq0!-K$5-TQ6E}rkni}^eAudOzLBCl5Uq-t1=z1e)(v@|7= z+O6&2A@vVaP}y``Z1WleLsal7X4gi~d~Hw_`Hy-&^12E>4TF-I{^4yZ!D zXVcv5zkyxzD87GHmCD(i+ds0~i!ZPDZx4@wocQmOg+Om_ag3F3Pxt(PA71hYW{uxY z-{DoPokzTV+D><5T*bVA>%KneUu6d=6Y)l{Wtf^{ifu!rAH4|WGCr(xrC$glM3U+8 zMH(pgStUZ6vL`J~kN#Ony@i`IDF2u{-#X5c(L!NklP}J5+0M||K5`ShKZC*<7qb>k zq&Z41N$ME5q^79~Lrrl&PIV6Vsj;b zQ+0tY^|=1@o?cm#B>50A=Hv%LfRz}%NxB`F=wB77d!Xp?)Wih{wiWA|>VX8K8?y5y z_|K`q1Efr#p80!iH^U6owYC>?C!7$K2G+hCaZ9>E)8(7pD6Qu#rgvbR)BPcF-yTU6 zMrPVvc1h)i_77XMdSQ3FhRIESJFTZLa!Lk49cS?60$J=TYqJLvZKFVZFS!`$A6TD* zw;mw{zZ840mevjgmH77MHRbUpgRIdH-Qs4`?U;JQ(#w{&M0)osG9X(&<)If-?C=zA zXuHB_Kha(t^y2uO0xLSE%reqZo*%R~7TzAnI{!`HYmkc@Z>MmR@4ZkmGW3w#s3lMu zXK4)%vP?X!CEJWPj5{oX*|K}{wi7e?$L~MiWE&UVIfxSkKdG_-aVaRIlzQWRBbX3L zqoAJ7MGHNJ$agp2&2{HZH~0%TMJ#8~YX31kO{PBxwK5$~T~j+%{QK7a6RKWKk^Mg5 zag#wtLk#lJAx7%p5D3G1ix0ZT@&Yme~NSU>Kb1rdEmJ_bQJ4!KHfJS`p@cK z*e>y414jRLPSMtyzIJ#W+w(i!NVnGZQJV0?(h+-Om?T}bw&AnZ8E2LjEEuKM+7#%J zv^Dkv?MwR2|8;yVHxSQwr zJ^{OjDI=B`dpq5`csm+3ehqkG>g;98@0BwQyuEd97>M}pSTLn=8z0VeD1-Sh#HpTY zR{kH`mT#J6wMn^KKuVgvPDNt@jK#_lzJ$^&a*=Aoo33aq0+A)rqP}_O)O1k97{VdLC(JC)lZ8Q^lESy zMH;%JT<@rNOhN@NPcxZxDv==cIY_$YF=J(9#%51anr~+1=-&Bm56z}~077rF`Ji(xQ z!M27N%~*wfRLBv@DVG+nT1G+Vrz}=hbKb$_oc`wx$+}6gSBr|iXAwIrh|>`QB%R3Y z)>ByfvZr_-C89B}KkKcw0Pe$bCzz<}=uz1-YvZSN;C3LE|#d&SRNQ z+B^*f!hd3%Zj1nF(^2<)T<(8PlQtfyOfyF8axT&EGUN@quZe57gBy$_>3^o{ppQ4^ z4Zg3r-?i(=>I0w&q~&dZFd-PtJ>F%l1ebXu6Uz!M!S`ww%RRTV;gvt{=j3rk8LJT> z(O)fRH0F<&!TkVYfenaL$Z7oCm1>n0m$|sj*VH}^=Qe$~3jkZyUCq3T)MXE$(C;|d zIXsZT61inzNt1p_Lpbfp76izB;%O!4+uuB#WxEdIf1;o&%76o35C>y^wxuCPJ7UAg zcdD#%z6e%Px9^d1{)LTfIM{N7y=N_cb<1=QDAOZ4Ai=_j?HCZQT2gUW%YxYZN^hL@n_gT!sT{bRL$+j31i!~1!L zE~MmdeQ*U?6|W|notHs!gprUFb&YpzlLOB-hMet3{$DHVxJ(Tx&iJ;Kk{eZY@6p&k zTRHN!n;%>=TpC0$;D2_=c~@(7GB8s-&SctYqW$Bn=SeDAt5`4fI6e#OFjcNsJuDIQ@t{m5^k<9|bX+;)Tr!~ClzeS#Kt>k_e!SCj#{uVrtqIf?in9?rlm0-R@r-)B%xQQB5aV5IdP2vaXoJUSsG?5hTmwqlMG2LcD6E~ zzaF!O=NZ-_9ANfcclzxG3@a)Fhv*@n=0_Kfss*O$(G(PsaLi=yj5=irsCX!j=S+0Rbh zK3*d%k<~eZM&y&g6pSH0C5{}ug9U6c3;Z6h$GCVNL!JY-s5QP;^UZWZhoT?m=D6x3 zm4fS}%ibwu>l1ZQws%h$4C-0|j-F^w7(!*CJ5W!hxvGuzS+%C`C zJMW#_xLu!vN`JA@Gx1nOQS&=TcuQ(=thjiQR^rwoW16{ZZ(YVVU=g!vBbR!7*H?zN zvK1V0=sD!=TZ|E!)L8_Me4xZNJFnFo3%R@MWE7ayL4caad2Grwt%tRhveFHr0gUlY zADKYlo0HzL+qQD43Wo$Y#_Y7hG+*nub4^8x{DWT+Et?Y zA6M_PA|4w&H1p+*_0HeDG$lk?!UWaFK@{o7amX*ov(%(OM-{i9=@^0S(%O^w$8`qk ziRZ3`5`p6DZST7qn7VmJazM-3H#*ckAIv?{?^9p3!`Qr(Wx`%b=8VU0P3-8HetD$U zv1TJ*r|y`MJT~%2)fZkSWz$?>YOc!k>kJBAUB+Tmplh1V{lq-Z7&q zv(}V(0`Tz6x&ME|CcENj+!R!TeK`_%&~djr^VBCG`0FEs9|N*uvTud z`#VN2-{rFD%yxgdxOc2&fq6tFrHV`ci!@w^&h~E)FX?sxM!9>zM1)w#aX8*x919#> z%I|_Y?q2U?Eg5t%`j6-Rmd1h&#^uQEcZehoy4~H(hzXN99Gx1-TSO9+rzg;u1a_i3 z6RYO0wJS2G3PSF^AL0@;1lUh?2u!$i;Yw+NYGe9cDMfVqIkS7n^Wmbl`UJQZ_!N4_ zc^@SxDC*TT8_VduHwiz@4~oVUvndt(VZ|H!9)SwSD&bo#{JvBD6W|?@31IwYKm5I* zo8i;9kT*)1%N|v#tRXUOC8E*9KWO+y20G={nPCp_6!MO12j31n2Fg#J^trQ1*^^u$ z8|v9RWQgl!d4>V~tik9T$1InJgc`>j>^KYQJI?#3!_K$5Jq* z)T?zzZ$K7K^=d_PJI$uKyW>@Ug4bfP#8p21&UGwZ{xkw(71$mJ;9dyB_g! zvPAilOxXU9E6-oBZNn>*G`52HK7wQwceUcC-lSbt>h_ZA(U?L_5$=l zWp8>)ugpI`R$HA{S>vS}Q-)0D_Zl6w_IIIEGD~e|9N0SsQ~e`4x6!j)AK@Y8c7^}0 z{R)1tDe{QkcD|`V9W2%avD?Miz-Nzo7)n#TzNM=IeQi0d&fQaRLrpD6imL< z@s}g#VS4{OB_>akb9t)AnHRpOX+S3iXm;H|K4oHgFL>+o6+~pQhjSRLFFko2w0#Z% z<`BW1GOKut_+w?^^a<6y)-Rvq5}oZrJ4ZFq{wkRQ3_{;Upd696TOAB}I|tH2`s40@ z|9QX-U^fy}!Zh4X-D?h$?{dpo?HOV=)-dY2jy{R!?+~i__19x07QIya1QmmxZ&fQp zoyi}D81+ZgM;$+z&i%kd8q_NlXc*KX6~1p--Mtz>f&ZgXC8WOPI%snAC~|Nha=( z+s!E4$a%CsXUO}GF?ei3S<~L#;1tqr3dd&>M}~k{DYP@^jV~{fneT~{LIMGsJ(SS* z{Vsh3vhE-$jvRG8-aZ0kim8C(ENae8TRI4T{Vy($x}90z)9S(|>nW|5 zye-4gaL!|5w9TqL+S+1XX_oHOm0d(^X$M(tE9!)-^+nH$zMh3tVG!3LQA@iyzT1zF z^C|ByF{5eh`{Q|wM4jlkZ!y!_{VQnZzjf(N$5mZ#bPpJB6!y*#9xWsz;Ef=k9Hl=oK#?M-ZBpdkF3@fYboOM8uVlf2&F69Ne^LiOiL>QRaOp--YncJ=L;V#JGO#9LTkLqOfb!qZ7F~H|h<*gMF$S z-ndP$ZqwIe!=Hm2FTDCl>g$>DP;b3Gy~OCM)w-b-ZMd9%%h$bE4XRfC)D}sYBXc z#8qnuzs8e>>?Md04wp0>W>=+F9_k3|_VrA#%qg>ryIjnor3P1<5;CPd3c+SQbu)O_ z^yM)>do43v*`00UA>k|kgipayq zVk_c5ZY~o-DjSF<4~9P8w785CXWkuus&d`#fImzUo z+8r0OlUmoqp$)^muG$XZ2v1SBY!0lrhQ9w$6>uc;-rXxUa-wp$0vLW1tL_!c-FtXW zf|t4|?^Xz2+N}bH4=z{0YNd4(XLs7?^tztIgq^^Iu^791Va1;;8xCf={-@x-JSj_H z;?yQDT_u$5eA&=^7vxEJe^Pr@2!2vi`d`^rXUm3rB6}N#=7o)I(lBkd(q-wz+a9+*|^l{I_&|5aay*=%d5KRT}M6?@|}3scJk zu;%ap2~5Hy?MbzGxnUbXIsug;jNx9V*Xqt(qZt>c4$~)#pCa zicYw(D=T~5$y#@JwGEGv6)WpG?C)ki*g}p7j%RwNY}mi*aC3dT=q+>JU;^wRGN_n; zo{8zYC09{BjakQ+2>AY|n|-U@m}*Fd@_`<}-T3PDed+n)CI+pLRF|(apePLF`z4!q zc&5PYg}u1G1IC#mxbaExZ_Wsqjf7~uv$8428OeZUj_~y4e!__EOj>q2S<^9et+D#K zoi^0|MfOZqBy#1+xSi1Tp!*iM?wta!sYSqqacnBJtrOa)(v4xh$mG&1?cVYbcj&9? zXaX(i0AEQ&;wWQ62IDg)^wj*lgLl#!V_FOod$@iYX{;p8?wFE9(a@7?2`d#b8Uxgq29!xHZpVsYa&Z~BjFzQ~Ku2eD z#apEwo45SsJ~V;ShZy2yl6UQuFIe9sVkmlX?RVAU8vtC1Cd5scQV~ZUv}4-vm8j=V z^kdqHIdP{>&guCF@OZ*@9@Z8I2CU|rquuWPRlWV+ECHHYis{SyCf2v=>xR~b2?I&; zc9SRfWcgE`ELlh*R}eej?{WKD(_(r7SJ!xXf0^#vMA7t=Etm1`k~n!*ManO?$3u~w$~h8ryJTs5$<=+4}fWZjWmK-p!J6eBYO*QtOi=|28XE+fd6NaD>34=-tZJXY@21dNhsvFs|0XJF}d> zMI4=I;z?VX_YpyUPL_FIR8k?^HijDO;zxZAQ*+5Y+$kVS1!3H*tWHr=jsrz6x1s!|B$p2&jc7S}!_ofD~UFu!NE7Q0hQ5pDWgq+Fiqi zJiydoq|wVr!^I`jyO&c{m*yKX$o_rcZP&D!kD+ckp8_iLx=CU>@%@oHk*ysVv%Rt8W1npx^=Bs9)D3>o7ii!YHxWT+ zJ7&To=vL{EEr0a24qyb^Ut)xevKNX9q-PQP9)=cnL&Ddf!p-RbBIe%Kclum8q3^TW zxvdUuxkf>IOw2+k09`5P2%?&>#OZK6PnI$5@KfP5;x=t0()_2L)JS0h8X1W>iOCx$ zZoT!L{xO&PhNgBwdzMST1zZ~XW#+w|DNV7)B>1-2{ndpx)Cj~Ld4mzKewLQ!?8)m1 zKHec1wCt=&G!%N)nXo~;vnH82L_?w7QfR)72U~eYFrNzg;i7H4s#|HlG@v6j-k3B?trhcFr+sgYoi)c#QOUtEH+TPd?vuN5I!!E)yny z)pSN13E=O(n42aUFriw{&@$zSTHSIl^B(y=3a~Ssro(maV-7)_wBDd>b7_)Z_F*@! zgfpty&&JO4b>h8swK+}5PYSUmGTH={&;b1UNQ&H0OBR6kWL%+2r0dT3s~SiCo>SK1 z{?w`~!M>e4*L1rNen=9Xd8TU}bjpwQ>w1pBKeJO(*{7$W=Gq!_Rsnb%w^T5zD(`jI zO^KNE?bOFX9~|_gc;O*};~z+7cg+$rU>x4M#_s#V<$&@M?0DlT`qQkZeJJ%h6|#T+ z%)z%s0(7(Dx!Nj^5qAJK1Y4Y&E3Yc{OKHOyHky7Z$HGy7Ifww=&_FkAbd+RMMXTFU zU$sFTyHCAbOf$g7`STkoRam{AAg~M(GKl!3$=z7$ym4OC(q?Da>skl545@U)biNJq z?gT-iM(dKiJ+dTD@~R2ODr4xA1kcSGr$mE}VHouKitV8M-aI`(2?p!CHBhyqwc(tb zrAE!Vn7trG#@cqiZ2`HwoKALpc|L4@u|E`ESxf#1nVF13`zWO!Vo0x(=V{+6R${>bs!OH`^f=-Qbr7(f_03`PIeM1r4_Qt%2c~|drYZgGu z7t6(us%z>TK5D4k!)HYtLuF=7^_8hz)|uNa9w;#^%Ljzdaa`^AqM79^9JXhZN4YX9 zIa*;8dHXPuof6xXGhG>wYPtKh%j5FuefLVI-h8(?t3GDror%~*QLAC_kApC~Qyuvw z!<|oB%7`3z4RBAG+T6S_0vZk{W#~PAZf4Dh-btRe*NkXa0QnTUqbJ?pO>4Y?CTIT^ zLlS8m=jpmE&rn8l^2u`s8Ypw2U+KvMlQ+RB+A5QkEutyY^Jnsvw(zr?9$t{J#pMXH zryJj_jLUVWMjLyCMq%pd6}6zzT$9p4Q?YuSc=qb*Pd}St4-$JoSg2Hh;$%h+ahOy9 z?oDGYP(oUd7{W2Z`MY0YWR|bT4b#SkYVW^V@Ua3Jj`)ql_LB#Rb)!RN&do%$T-iMK z{?|UzX~KL#pNS#-T-vHU|9Ym{J#IgE?lL;AjlSUH9-a=`g=Kqm|Ab$&Vb?l2`~z~f zi-tLareGIVI6HAVzSFPt6^!RKm^bJ$k5LafRMVRj;aYu&)|wIK_6%nQ7<=t(PWV_o z51Cn>I{x*0JH^8CgjPU8yq+>tQ?gU1uoC-locAW^JPk+xYQ+$nh*A5p)ktz!=>J`j&oeg=V6{-T8R2vxGlp6C&r^{wzeA5Kd zZh*YatY-ll#6Yn2n`mR@((YXMd}6bEUCz33FKLB6t5C!s4$ZiA&;iw00@l+1r5SX-#w+Nhz4A7Zjfch9YU#% zM}HyGl{{#$u+3EMu3B4sN!4Iu2vks-3;)e)YqzR<{wO33vwtoV4+*Y_4vQ~`HVaGq zak~g1dG8P0If`EeZ?rHq7H>Q65IKe#>PKz6`~7H>LOEWph8hYrhOh0zTaGpzaf>$X zondKAJd4Lwcbk&(ET1aO4_;6*9+W)sp#*_xHsK*mKnk4rD!=%UFg?@d4E?$96xV(= zhg0m~A->8bJQt*E5>#Tsgt@&9^`Ms~_xa2!B)Z47j zP|xJ5fKN?@Ir&+ti5XlUPvQJOTpD6 zDYHI8pQPgaqJm!jdpCpLt5&fB0{{8lF18xwAb3u_840Q}ZCtU>=e5zZWLm^kD60dc zV1pD<_%8B=!$Q_#%`NAP^!g5)p+CoL^s5!Mv`}lW)_9mK*G|L8!)&4=N%LA<$Hx*! z$pUu+W<4}p^<_`WqvVlvZWpqMD|d&lVF|4YnYs%jjaE~KYSp9rryCd?GK<;;ay9`=Fe2+hFrq8i;Dp!w|YeV?|q zf7~9&1K#cnJvazq!s-unPeOckrX*X|#35waLoDLIx$*5Y@-ma$9Nq@hptB0&wk**- z7Jj$4DdyR!%&0&9ySX7j`6>47JJBFJg^MKA8feNtIop$Gt@Ks&f0Z*QY%P3n*yL1o zWPHWEK*G8a;%;Qc0w!3--#?A{k$_p&3z!}gg)ybPw2i$vWee`T>lEqW=E04%qOAF| zcE3uk1vUI6s9GlX1nTmf86%5(Ts$P*{K$T)06VKF^@u(H)b0^4jDB$I{sB_eYS9oL z!^aflC!#j1G=xQy-oq`5na{uDE+uZG-(to)=PkJDihttptEQ^q*0UIB#7Rr| z`^xZPySAqu?r>t}u3U({N1oz5#xI*=2&^@2A^(}^`1Fz?scrp<3~@@{ArEDH@Y18N zz;MN~TT~2_oyfrult)5HAv)kb1zEFN<6rV-+f2?GKuS@KuC@jMu0_9)EcMysRpWB1 zaxNcUMJpbm9vyrHg^2Id`2R;6?LL+(e$xxrfdMa4HE-w;zOB)X+yyo_Ki$ zVR@?=J+=T5yZ98cVh=AV&fyH~{J}nZFKxj5f$OI9IS%{mxBVyAHy8xe?|~48skxm5 z{dFW1B5N+2)BUhLO%W&NTxq1CFHW;gtaaC(Q{g$kUqJy5awM5_BJD~l6_lRT(Z4Z- z%<(PnEb8zVcFeSrBPr(8_~bg`8TE|ho;d(!Zy%PAZ=@_qTN`WiI7L>U8=L-UMlpZ! zDqxBK>p*efw==gZ-xT6?VSORo-XQxPqRZTo~H2agYU*-?-0EX~(C2MJ@I*?0$*mxq1X%Vn>e_HLY`;+_7NQ{IY_ z?oh(?l++F!(@lcMlod-Q6YZeBZv6bM}vYd(Jz1I78ptUEN*N zU32?(SN*E`tz9?zR{7uv(dBqxhc5iAKC*6`fsLXC9= zliPnCZEhtw@a#t^s?BDO+{?APXskT}7I(O2XPN6SSPXshPshA{HR|a5Ghoa1R#No$ zTXNVNO=IwZpl|fAs!=J54Kx>?qf>Igje2Z)L&GLBXpyF6(n3!?rl_!cLlncV8-g^V*rj z_JyUBp17?rEWoNgQAI2B?^Q2-XrCE_CTGI(fm49KT7ALddyZ>^(Dt(<7o9>&gS+B} zkpsK*FcG8#V1_v&kw95xi*+kjU{N9$UYDu3p>>}wz_xh>PYwSa?gb0{C}!w_Hz<4Y zhxb-}*f-VoiOi7N4RXT}jVe1Z(k8;?)FXA-lJGb*AfLq781QN%N{QBK^8v%Sw`53@ z`;7c%C%B_1E_4Kc+9Fs`me@3N)^v2AI!dXF`{KR?e5ARA)8;%r>pFF<64dI&CxSq( z^CNe=rW=_2JIgzakff^1(>MnfwKijj*;H-raD!RoejgZ}tH2IXe>*n72y(lz-T!t{ z;n_sAuwmyij+tS$EQdryM4Un1hmnE)?oVAW+54|V(=#~4U&A`0 z`$^C;qhy1OT-wRdV!26vA_A2Ds9Dr=V;#Y^z*JK`grI?C>Ovp#HfdknEgymOibZEk zuy!_EPme>qM6a73N;3{r;y^~-f|f^!<@wlU?iNo>*Qrsx;VA@ zntV0<&1>A|Yop+lS~328GTQ)^rNOKmW^t$0-_A?hHMKq}0twM~=OYygoaGL*@f}MOyL1<3HOOoMY&LKu z<#fE+9!2x#6ZaiRUJq*BFFnRX`j9Xj=q$+#DDY9jB&+gcqhH11<-Mfo3GQ0xHm62% zrDY|?RfnEW_COtB6?+=b(agyNJ^p}Yk%-GnVO^tUo}Y}?ooC@<{Ac+^P~m_j5I?Z4 z{?jssm;A)xf=ZllTi*`i(z?vFZUbz=6D^zFpV4&ZpPnSu57$?KH}2s88K)`qyQNI)ca z!dDY#r1?hM@kQv&tUNgiz|$zAfGWE^g#xJq?sI-0deQ2IJDG6Cbgyai4$QK4ajpx*=pz7$}%xSP|7JO!EDCm4lZTPy^ z@@Na}X$d;|T3x@)xr&KZkO8 Agaq9Y%i_-89H2<)$eR$V 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 literal 0 HcmV?d00001 diff --git a/docs/UnityConfigurationGuide.pdf b/docs/UnityConfigurationGuide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..5ca1a7f9a31fb4e079d97f38bad777301f9c7164 GIT binary patch literal 253175 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 literal 0 HcmV?d00001 diff --git a/docs/UnityGettingStartedGuide.pdf b/docs/UnityGettingStartedGuide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9d03233c0644d4f10206d076e892023ceda7d72c GIT binary patch literal 166200 zcmc$_1yo#5w`^2+ri$&4&vbr zK&nYj4j^EJRD=*f82Ll0LBrkN!T)ap5Fq@IUNqbtJpe#)q#Swx0X+{72tY{WUyMFd zrvMR&e``4YYCjEu&N$6JK~X6JQZLSRtn>ZVhKW|)?Ydr z^bIE?7l)Nb^t@+t0-)zDl~vW#-GBYZ9c@trOZ7Glg#a5b;ICc(UG4uL7XI(`^?!`V z{l`lG5d+U{oE&@rK#6}D?q80iYy+`z^KkkvzAYsBU%c&q=vMjwG0FdQJ|RKz|GQDF zt^ZmCYG-X@Eog5`Y#oXwn1jhW+6|1^7)$Ecz{i)NYAxsPDDyiuu_qO}d+)l7mL>R{ zgabWo9v3h{(Ek~LPAy7(4O=R8h`=-c^Mq^oEvLB3!HS*rl!O$I!YK+mI?A*tHT(b5 zX2{U}zXD#--Q5G?gY@CQj<5L7zdk_VrJe>dp#KRWMLUR#hx@;hIGrI7PbmQbh_knc zAH> z`m1{}Bq)hX0{_;9L^fo}|MX}*2Oke#Z#$%q|JCp_e~6ks1c`?KaB6}8pd|8cy?@N9 zifrSbWK}_c@ZU<2sHTcUzrR5H_wpau``4xLUv2)!eb2o;?DQS}aVr7jV1u-*gFgfb zmtbUMDgB!&|C?$cCHxDl|MIrKv4>>;V*vT5Z~qaO|HB~rH?|8&2#W~)z41R$uQPb5 z+F>MN<#ot2Il9vq1`YdAJ_i)z#E=_>)HAD0Wl4)Qd^h+H)?xxSlEh=X!#vZ&D=W@kT&? zlTQ2IeEeuP|Ig*tm&oLyH-Bz+|M)&Q#Qz|1)$$Fic+pdG!`bvsjx zmPS8uKg6r?3H5`eJN2}Z%uiuHsJJGmzfbpy(SBp@Q4xr+82$vK19>K5(!FtcHuqbk zpT}-ZZ|(7{K1%`qxX%(UF{j5Z(POe1>|%&T{dh#;gz%NZ&?Vqlc)ix5ua+s5n24c% zpn1FH81j`~oN>xvlv&QvReH6JtH8JiU151E3{DHx=P-&z<33BlHMTaZ;4a8!6iT3x zG2O{v;)|gDAH^p5UIQND=2RzSb7l5*+RW9+EAJ{Ps!pK6z+!Yk9#-6}6HTs@D zvT1A@%NvoT8p~zh1K)x+d^~<i3XqR=pBG1@f(chE{a^v2If zylWb2cwQ11Fp;g9Ae)+2(_<{u{+{MrO6Nt3m*~%?IOm3DlgbV?)39DF(Rs4-A}UV* zAW6(AhhJwsbd^PApgooHj6qM(_oMKxvFacjwZe)tW$ZP+;}Sy0r-y$1gybMr|7#JD z)l)G#fGvzN;+pQ%FV==v!9;84Nm+z_;?j-Ohg-Fw1g##)jyJDYT*o-QBnE~M4bEc zMLyka2}9%H`Snx%;|CHfe}vtd47a4PJ8ciKPk4Se55K%(X+%CC^fR3~+K~bAE4%cH zux{PDaqXG?BWn`*QD?g^Jzr)O9#BcJ7a!?#;!EM4+3KXFjvgsRB754Oa{tlEx zXQ>sXgNx0xtSFzJTlTNREh;YXcld(|bZUPnoUWFuaRg#DO|Cy(#d9B{ZwTzC-xtFE zoW4=(QFw;0JV6mv%eNudSRbRDpie-NI6T}DIHy3Oqnan`E`IGt`ynEjhqbNvmn+)r zoJ6c&sWq9LY3TEd#TF&4CQHX(jRAb90{9+@E|I_xK z*mpnBMGrmM9S<{AWcFXFPV$wxA57$CMwjY=!?XoTv9frjvK+w?|j>wT$lgksfW} z{XG>7Plu$21q$^$Y{6Pm^VcCEQZJ+jF;1}Y1*rhwGnLrh8C%y?C~>6cVSl=ehuVup z$08x0s*+9>Pqxav?D_QgI1CioY zx#gx??;z&4CERn=5d-fF!|=z6)0LGPt=gYjpF{&?@~r351oTbA8XGV_b%{IYuWuM^ z&)IBm1TzG8%s8G`8-%}_@ESil5cyPM$W+_ktIBaF1!E%ktQY4aIa}~byW;g>4%SOo zjk|>h%R6Y$^Uw}BgVb4}aJl&)velT-m-%Q`mT+X81hvgKTKH&togJ+^xrs}x+(2on z?Y-5LZ|>;}&gN^z23z_>Yf#QHu*fga*^S``P*XX@bGh}UAKD+YYFt};8s2X_B{U2R z5Ma zETUaV*F&-I4o9({r)^td#_{PFDiP~&MB)pL9nrqf{ znLOF6`PBD0?L@;q_XP2GM8bX}*$eFZi1)kh*Dg|F`ARjvVtqgJ@fl<_@#&l#(oQ5x zQmaU>Wl(nbSFdb&eP{E(w(dv>PVaUWbnW331(Pr2VXYNnAJ_RsFz+x)p7X8tRj_wO zO=w$FlNwMD1Mb{sA1u+e14LZ;2h1|n8a8M`2oSHcYwwDD%=*C*P4mT3*P;5^YTpvD zJ4u5&UO{RvPdP-L#-)YQ_x8iG$tVvzngOK~c66g6;=(R|Ky!1~tnt^(c|Iq1p}?;7+>(CbCt4{C8b$n}F4)qDa%J1Hr|d`_3GRL- ztS~>~7R1KW_F5v{vmqDfKGDN1YT3C(xK7bo(fH+x1x|R*q?Gi)@4EFO)SG6O>Lds9 zMWtH1G&QtU<}A-S>2%nklGrm0kOG=NPbtc7*1I37>|1s~P2qd}!aL`%3n-T?DHDB1 zgv9Xz57-?}@}i3bAH{w(0lYIbM-&Q!}PE))(2|i)g;jO&-+J3c?~1 zetka}x;Ew4ZH-a>9BAL14#^_avB5RXbH=WW#BS)gbgl4ty$3aa^XX7*(an&XF8=iu zXWvk04F;uhkg7F}T8t#Bl|~bqtZhm5nRtO(yn*l|mYWdI9OxpEq~KU%NJ${y#h8&` zgGr`~6o?sx5Gk<`b7mrrS~Vw7!k+rB6x_33{T*dL=}q8u^#!N!sgRilQ37ehqv`Ln z>M&i{ZLG_fJftJltN0qf$_Tg|rZ%o5HHE>`+s#R$l@ER;WG^#=#-h|1??dAnNm4j3 z1Q-uA`0mk#uk?o}2you8V?w5OBnYUt)R?7RV1j;qbeOM*__IcFm*dH5ucEFwWcntd zD`j3;s+*L>pxx2^$hO}lEZ#2p`nXJ@yVbU0t+J#~ZHX2e>qM`LT}-jllu`86`^OJq z?jm*b`JTClnuBk`DO||&4GRe1GX&+%e`4y;C%CxHrmxAttAO1=fE^>D43PBx#w;hp ze`$p(S%=;J>uve-KTV`)L@)Cuz_2Jnf*ADo4@(ADGtBQ`c>Rn`NfqD+`M&RC4N7A0|FBX z(4F2p1g*d3s>Ne-Feq8&OD13(Nc!TtZK|3zt~uya%yISu+OT{C`WD#wy#tQ}yr=Z( zvqb?*ZkFv{uBp!Ntwng4=cCIQ2`P#l zI_ydgS5w{xl$;-<`oC`#cOG5|qXJZW{l5tgjb*6a7(4BzTj#xBu_fHXI}`GPA58Yqyd!mzte9`oXY0r!SJ?6Y&hC&#>X5vC{|n#!4Yo z8QHANHh;?}-&8GF!PG(_6hREkI*2jc&!Lc#XdT4C%@!IEq2bW`!8T-TM`8K;XH73{ zz@7hY(#ihO7lwg$40z+MaL2?!@Kq4wsdwpDZpresEVUoO)LZISw6uIH)U<;T-J>lY zhMK3df4ucU_7U1Y9NCV16qrr6)ZQ@IN81t~Writ2pKP^!9rKZX6VxHoGBzj{GWNSR z*gko%-`;Alkw#uuVV5Xp7A^S4AN67LHzm7&1nr@)_!A~b13)t+3f8sQZsgA9(8FV=0cu(f& z$sXBMhoJdsC{oXyhA1NReH^5FMHKu>>JLHqk5ZwGiAG(;G$nMHGcgN$tSbRU4-1r; zOmGA5@q0~958eDe&uSYAjnxOUf{yylOiJlBcU6$3>0!M7;MvKitmILDS0QXBc*vYp z&9=HDyTc6cC$H)sRU`2W8jiaywz2ERRffvU!6{cyXCAybq)BR#iq|M2V8 zJ#Z}PJt#nq31hO7m1t}dI}KCaj9*l?Ym-&X5T+aD+4D_?cWdnOWM++!qw34}+PNhI zR?MxS-SWnvX#9juj~|R>_BJ2-UJh9Nr|%vsnKgmC;Da_m;_e+vS+nfdQDl zdsioIIw+*`2KX?ewRTLS?>V)TcGetE7-7&Xf8z}k`U>26?leohQz6lnCV}vaXu?qq z$_mOlLrhCq5jfU;27ZFC02oZ~lq_3F<&Q@Lqyv3b!?Rn~ZNd(8c2^=2G&WUB@REMyKsax;Xe#Y9W z=d}23p-fC3%wrE{T~3)gvYmt4C6F$)e=%o8GK;DDCABv_D3XE-;Luikm5o{-AexCC zgbG{OeoT~=;`!Zz9b{AT(2w}p%@JpH;GB>DbT?i6B>8oj-|9UqIAi-3>5k@arp1Xz{0*v1 z%NC9kcL8_tBzWGR+BJ8U*HOLz$EX^8$M~ca6)o7dycNYefn$>r4xS^+FWWt590SIa z7l}HH5^17H6`lC;5aRRM6O{btSKyZInz={X1EZWS z*-%{XPiz(nZ@$05zrc8qchW46zxS3$njm3sVNUKdpG}73}M9R5W zQtAi7$CU&Ic3210?oz7D1$8xUPRZr+MrG3JRi4CO(ap)sjrNoCB{yBli&l(5#ra;Z z-FjZ4PpXftX3EK+&l&whgg1*-Epzw|Ddv+da99WfoWgsnC@n@ z3|k2KwpTOsn`M>jt6D(JI3C9=xN|8TB&Ce&;VY;+0CcN&rJA{P3ZZ%HR3bdSxZt|h zl*#4h@a~i`4E-3P%ZqXHOp`DMv)2Mv4MU`q&ZL z*fw@Cnb|MR=&tkQ92$bUzlbU<^_^$r*TPlANn~QUV*Zy)}nVxCnE$CmqK$)5+%5DS81>R)g4+-!P zpDaI>y6qP6sbZ-VpIRjuC5q2Gc>XJh%1%Jx8)CPwz*4=hQ92$3Z5pO{G!nma^955y4B@-Ky&u7)N|d4&dAJVL(GZt>kk@!our6) zf9`PK!vzF|;>GWYPFlR+dow~u74E7ix5oEeuTE#9)yxiLWZyflZhQu~|!n;~W@!0cdo z=T@>)W$6>ch7k*rN*k0Tys1c``!YYCC0=_w#y(AxoVmQp_e~68o6^&(OVxF|Rg}cp ztDVc~hw#LfVxOH6;MTI8)Om>r=8S@$c9}NMZH#i&lk8za7CP7oYNySOfG6jX7GGgC+iuu25~OM#mCLYZ82#(F(wm$8 zHUI~u!pi0SZ7Q*PtyV3bWWJHZT6d+`0E-d)Ub_v|PhQIAZy09ZnA!hvbCRZ=VL|9E z9F0qdyhe%oDo(nmcD}gCo}adlfY{z?EP4?CBGfsQ$ElP&*h14}*La6k?K3q1)2T!W zEy`)Clz@4UK1m~UAG!4%Y(Ig^^t@Z)Ne($J|Hc)z;>~hxk`j`a zLA>K;%#%$=hu^OFd8%QuX!qn7W%r}McON|dTpVl&WUO^@5S2??1;w{S3;s|)8Jfb| zsixhpVwP8Errn>@wKW;?KX?E$n+ukaS9JAFQ6;x2oGw^$RUq-#KjC+pYnz*s`R(I0 zkyF8CK(9&H+S{AFvri5*e2i+>{+mv;ild*i`6V0k@(ne{G;bMuX9IoHB$@bJ+Z#;w z%gBzkJ~1V|P4Kj`S%_Q${rPtN{PoiD%QK6w%_#fi9luD9PsQK>WeAz#$}gt|g>L!UtpTf`?^MhN!+D2~UiMm@%M{!H;B_j~~KXc8(w8Y%G& zO8)C?o@5Q89p^g9f>i-P4r#ItC;oaJ%8KmrZz-p>=Go{ma;rtj;1vYxm3OR1c&~*~ zd%$<}KQp~1hCp^~r_#aH<|Fqq0Y5~YrH1vuK+rg`n zDGT%+&Zi9KfLW=QY0r4Ju&Ek8)9Yaf(&EK8lxoiVLdHfGrJ)ZN5mZS zH#*PLMIJV? zu6dF5HWCyk=`my*MmrR;uss5TJ|5?`k4j2+2`a(T^<+pDcD1Q(tE6QR8oDHc!u}Fo zjGk}Xc4lJu=p+OEl)qn~M)8Kyh?V2@yO(%6#74AUpq}t$9D6zzKEp!;>E2S}q$;gY zsC}&M1||W=JpIjac}3-y@-`uL6!I&w%t}6krkzK|ZyEad3ALMr&E7?Tm;+hY$2qU1 z_>k*=@`}%T22VY0tN3N!T2N*UQuFRcjpfPkXSopw4P8L+gvp1icoaeyW?=%q7ivc3KY zD!Z0*THxhzk!nI^+!c{iTN??r%;Fx9mHwui9AkqygW&5pe>s7<6A1yvpo%j~kY{pr z;UH9e`O%zICnT9ka%<4*DkSx-T7)&mfbFF7u^h&*{uhC7h4+jv`OZ_aRy-MOCJBR^ zGEF+^#>o>>?7kZh?AR$&c0)P&H{l*Q?{JTyw(`CXbw7`2J36MLFPh2jDl#7qKn$Em z9MR#M-`CkMXWi)JSLVVp^wiF`{nHGef{$NqEfG5CUHlpZd0PGA3*J<~*Aq;8 znFQCr1lU%COiB*$d5pjHZSGKg;E&ExV`C5cefY*A0DAqc3n3NCOZFC(!3gl+OW-*D zgiD;r>%%;TB6V5|!`5f!-NxYDGt$x*71z8s{poI;61MA&a#45%rbD4;CyatT&s-~( zq4Qi0qaL3MC9ubNA$w=dY27k%rP!@FQM+y&)%GWwPZ>12=ijpIPNyn^9N(`SdRIQw zr(TLn+9j2l`t7M00V7GoY_s{rA#6R`6I&cGY`9GrBq>XKRlsqTSUlz==!-fohd%!| z8*7Kfq16R1MnSjRgrN!OVPubF;cT(Qg@-c(_h^rX>VwkVyPxZDF`Rpq;C%YBvFBA)>GQz_zd}h}C8eD>&OFKrw zgg<<{s1Y7pP7aF)dTTF(h32Z^q-g3!T;3lI-imqjZH(_)S9~kxIFvNzE)@&+vd`%T);niE)Q+ix3=KON zInYK^G&6g1H!7bImVJuhtDXd@36NyG(3vYHD<=!Dh|)SsVQlMh#X~&vZ%?goS2~AU~!anH=8R#35{dDdoV_P(v08Z zt@26VWe0SJ6%Q{Db~OvjXoIg?Mt)si(JMT(t$CvyXe0=sQM<-B3LWf!-&_8XEa4Pl zGBV!#^E4#&`pa(>bw|7s(<~SSb?FH}%ahiwXH4@Oc+4|J;!3tM`k;~ilAhnkjkVSU zGo`R>+NfW<3!~9-Gi^^5q%S=V97rTG_X6%e(ENNHNq3T}E57~!Q=AHH$EXw}B*w5= zIqtA4-fF&(7vd;Q^e;N&;P?^l<*mnGV5c)$j}YQ;2$S3`F;~#h8O7Y*F5z9y_0gj* z;Nft%c~nLg7?lGwUYUdNZbR<;;JY9Fn@GVX>MyLO`SHU zC=-SU*sy7=lyDJB-VdCVlPS|WOd{v@ai)jkRx({{l}f_7zz3=hf#a~Om=%NlK0hL_ zMPBCk_vKM!#+Wkc%+TDUMHB*CfP+T|a|Hd^rSA?7MJ#r;3z$v^OFbJr?d{7cXR=S> zea7!Z2&cmVR#`dKgPtCU1CBoVm@QhMD@8;$A)qia&N0r_r5>TEH>;}AgjAl}b_Wh+ zJHu!J@*qB>nF)@K<;+!a8HuA*sJg(?*yDtL0hC?zxs!>(Ej|2g;AL3X^3im(f$ttG z4r^z|D!oZJ25B;iQs6UlBJLm^%y<2#&1qOtivS5U<$91Nw;d*MrIyUf#d{eN$FMhS zL@Vfc?itR8{`uQ!wWKt}NTOdz;=UgvRmf}d6L!CgD-IU)l-S8#y~fKv3UAw`))1?n z!S%22VcLfprdX5?(=Qpd$jtvi~uwA;IQW7>6~Cb(7s6&Xu;WHr5dYtO@z0 zsb60n0aMT$`jB%WDiIS|*rtH4XsvKLQzXk2$C^Bq#zZ))~&J4#NFfw1N^ zupw3+KW2RdqyZSI+&$yuZ`RCV35agsqtYq$$0AUnhe!0r6FNzYd5csQkwl?!*T$7| z;F<2}-Ojwn^aO%q1SFB~B zsi@Pb=j?cH?oWJlDa6QbQYxMMS2TNlUTS`N5D2-tosY>yOdl4ehRu=q`=iG3 zcWm`2!Ti-p&i9`+&Sow%dR2O+W&62apxIxy=LXbK*a$^_NgC?yNeoIjSw>ycF3(T4 zKB&verYkc(C6V=C?kPEnFTsxz&R^BFRlf&$Y1D;&UomXgsKLTh(LknoseQabW<@El4X@m}=<-7F1NjD?K%A+uEf`_F%pm!YL@#h%R!T*0jp zLMKe$9CtxmZi;m3=LAF?I}aT1oO2t-DxagvgY^cWWKK}uD?Pd!PpanKf?w{)C#pgskA6U}a(GMRG zhq=5CuT8}GObl;GlZiL5TjLMkR~>E(Y;Z&C^S6h^%s&6H`XflvELgv$j7UQNwg+8E za;Von0o5z>)0MA4l3RmdWAXj3;VcJl$|!-PcoTM~EyeoZ%!4`Qqy0M*2eUY4V88a;vuLYW>uMZ+;*&59`p!TBM@2>Q!N#0aC_# zw}m2NvCE&|Jc*x%mKwjQk*)79ukNZa+ENoTo&G?P+mIGdxC4Mh<#Tg1_002+Y;cV1 zbyvC0ZE)0udm9FupAh0?RVs>7Fz{Qi{-MSkOzP`Ooko>H zKBS~hrvM5&SOQDPG(ZjwMd0&6d?(kh7N{#AaQIQ}m{-o#nlVZPl1`KCp|@yXWUcN2 zX-X%zN6wu525B^}x~dhm=CZ}SoVyZTm@0DaSE-Mzq(isf zc_N3kvFR2w`fj{E_Myiklnk;2R_8gqF=c)L-BSDKeqo)sOkq`aS1VmQujPaE zUMUu_Fco+>alcPzUn_-Ho?Vtde%Td2HC(aE;Q6u2|;a#x-__Ok45MOpP`7%@_O!M!jXU#-!Wos(0a>NY8dt%(qdIbH@WTTlwV?0 ze|%Y;8`<0vEU>}(K+CmrOwgyAK7nXdUfrOFbJeuZ(D^2hoY>f=@Wmd>vp z>|rgr)=>C%1W|Hk&?)M#RHEu5BelTk8iXbcROchG&<4!H? z{yMf!9|t-Los{i}N|V`(AfD@sp(u>e4PeYQCXupfel5e#AgY#;ekw=fS@}r-E=lxb6ALNmrzQ z1eY8RhmY^`PZB;sK#kNAga>ZwvG&P-UHaa7y~uVbIn-P$B|>gZ&0+U3_aOfi?|(+r zRobuiNjP?0uF@mSZ>`~&pGt(@qYCu&#JJ#-DZT3G+1ZFRbWFPIY?uJ5C%--xy(5a|v0s+jx|QMRA5^L7Hp@uyi^_WlKlLfYC-#-{yd>&F zg9Fs63jJjsUuBReK@d8teR&h7i2HsU_85|_4dOI?b*%CE@3Qc$LP2BnP2#i@n}$n0 zSyE489CG5>%*oB05E*ZFvA3&jEIQC@s zuUc8Ck~N}3F$p+?#(y8UAEXB2gJq?2hSyLb1P9Fl>TNOy?^Dq+&&wL{PmH@7Jc<#X+TXj>~TgZQ`vJRwhC$utD#* zB4Mj|n>&hovro=~%raD?ok+Xm-um-{YP~#dTk>a+jyJeudxe{K+MesB$>wUCp_dz% zZ2yYzyUNu8=MPU=)w8Zdz3MXh_CD?yUpR9ny-dH!5KdgDW0VdJ);#DiV`D1jnMiHF z%`>TGp*oq2wuTyQ-l%bWRQewq@89mPZ%WS?wHslG33+kyukgIGZv>;ZyMR#XsljH= z!fk{z>VW?3@6wAEwXa!SXaSdj8}}oC@62X05|6$#3jK+D!O} z8J7l+h3|=G6-k!1%ZUStdN${O^!&A8e5&Y9CcgNK(?@sKDRc(1h{e?R{*G%I-MW({ z{SIvDl;^*Wepa7=V%w3+>Hg%Ij8W)i9$u}XM|eL({Q_C7N&J2kknI|q>W)9RZe4P& z@F@APX5Q}+V1MI$YgL6N0N7eIuR_aA2gORg#q7t890-ucje9?kH^xD@PCq>Dgjj~M zD>DPdL98cDsh33c8Ic00i*Dq8$QfTTnsQQ(c6vNwfEko2W zK6Cg{36oA3nx)Z9HLIO{U9*IY?I`c}W(6uMDn0yF zDCv?d)X66?60;pr=Hz{?(Q8HKXItFrl_GKGUUGDB+-oK2)#uA5n}-!x+MA|6a@Rg; z=^Aels1WbwKp7us#qpaLmZFF4r8+Nd@Edvpx(@DzZkkoAaa>AO395*P**rC)=O0z! zjS?<3k^zA-H(}@)2iD6|!n0v2f^+K$pr|Z~mLcatl@sGEVM5*1;76*09QfH2(I&Fl zudBUWxrHA6_wK9uU1`t$#N)F!+q`xUL|C_5!|}`T_Of~!D}BbTO|20$AmmMiAHS#8(kfn%VhHz z_?Wv~`j5X$?<s z<=@~aQ9z%t9PuR6R0%KbX5N_W9&JB^DVxYP^+@u43@o5Bf^;_<~IXAjl7hA*` z%B04VpUyG{PwKd#jeXoNZSM+OrTn?(rLA=KD=TkCnyuc6MIA3XgjECW-I$6>)zm(I z?IkAX5A;ebrL54Q?uZr>82#!e>?UrkPrn!{-1ptRmT%rp6N@C?y-bU@yWf zc6zbWVeH}WsIEo7_|jO~x63aTZht)zKOZo^p{)xR5tAPFHBx}4>N_{K*`yQ3k!>-s~MgiXZ9466*0>c_0+nq-vyh7uCGsRCD z2Q3_*Pj@r3fi|KN#ZwHkqHU;4@%}nyMig22w-*Ppe!yqwZO_6>*2XBJ&*EM99O~vo zK1g+T(u%UA0vMzcHcRJ~fT38gQoki+kzLkwtOnV7CYbu5&hW(4S__-*9i|tfi{4*(VIuc3ELW-LH#~k|@isJz98(178s2&8gGE7i;Tvtszz1 zkMiX!vtr`Ii_+k0TzgI7pT%m4FTD~YYrZpJs4p!i=Dq-GNi%qH{-zsW+h2u7QeN;* zJhW>f>^m|jhFihgAY|>F2$h0Sa;l`wgo;VQ+;>s>C-^ko9_O5L)HgadZp$=D@hKBkh4s$W;DF6z@_T6L6 z42kZ6pdlR5&a3@VuaPsG2zuQ_trTpD$@Hzw6tC7Cj-dgT*QQfWWn@XbUVx@P2nYi$ zE-H6Obn{|3D|LhMbbYHxOc|uCWk~bxGai1fpU9G!V1~AJmJErUp>nRcZf$)bTU1#Y zatiyy&Ua@IP3?yf^^jn`)7ASTgK*FKr3*t_x2P9}Nm-Q`H1N}P5`AvP&EWwSc8(%; zf8>z3T$f@IGtMO2fGb-cj(7NTeU#C+>g%3M1$WgwkC~371cB$y9x{Kdd=%%6?(RcS zHwXh4N$-6Rxqv*Z7?sH>{mZGv2Gl9 z9Eq{qglz&z(vO7Wd`k1kUd$r8-sy~|gfx%%?jheBaLO^q_8LiXe2uE6qUH473EMns zbH=0^v6+_($vEgJdA)>b^*ZK!=Qe0e3sf#(Hu?;S-)+NaC9(;hgh$crcd{rErB0MT zG3|@Nhr>C>=$@#sXsPqWZm)nlsiS2fjg=z2yHne&}!%@(d{uE4(JaES5S`OwbhVhncyPV3x4wViR zMy@XMQ!9mA#jrx(#N|(Y8{uqdt*5OOzXX!Hosn;{__CSYN!dPO#4)8Pu6c=+te(dD z(jD9FY3O@zSt=@y6z}4Ty8bXVW_Y zo9~3TQ4{L9$Rq7s-BO5ER9!@CSk4}f&|yF8Y&%au4)-5od;efmeG-~=AjJUibe(N|Xaw_avjf9!-w8WHYRC{GIT_3q(uwL;t0Qo*Z#QS0=S`F9n zU-%~UKP1dh-&RC+mPu%{I3K)+k7;0^ijp3WL*kq3WH{VGD+fUmVy(tFJOYJte8B#k*88JmbK~yNa$5!PncI_zc`UI<*AgXRhm*UnK6vJi&6J741;OMxe zR+=swRWi*j7OGf25xp9}F|IDciG$I^LlVP7x`HbVZ;>HH6BrGqv#;i))T8ch2fyaPMW9eeB6X0)9$` zSRjH(B2U`UVD2t%6&a*s#PFJ8HLQ2peRu7HBJZBMFVk?m+s;bQmVsNJVXUtd`;gch zqXxBnm$9{MxK{=vAI}Yzpwe zS}jmb z#cdvDSpP8&n10LdFBGQ{w}sy_UXqPBoI&OFE~oY@T1l0FW0%sXGOv}wJ1cMh5&**t zKVbHXYZto%Es}y`88?q)dGWkG_XoGC8}mj~l*H`jQ~qC?9Lu^gK;~F&JS6%)b#yJaj$?g-|1tufOHp_@mc2! z8UoxB)B!AELJlx@f{o89-S4R|5#PenkY32zP)Dl$N)>ssMBpRMqS_J*s`RnOFSrjc zuR!c(bzt;$;YZ)s(uyd5c_2`&KpeV*m{2b*^5K(z!bLlYbcu$~Ae` zZaOgBw&7Hk_Uq|&5ua31)Q@M$++NDxvlj66733oK-LT0b^h#TMyHwy7cC`ELsWhL> z*QW%BmJ8GRf!CTq`dE2vfyw55X|sra3~QHAC@LFx!sql?18VlUFB}tVGPn{l;}Kcf zTNp;X%$nN-$L^50t<)&4MeV2i@D$*)W%}SIMVcyMI9#1(PXZ1R;M*S#c%FZTP! zTeI8ll3bP<>#=Naq=Rr?RK1cu97iTxnd2Q7dqb)$UPR{yGy{`wp1|OD=#_oLT@XSc z=D=E`Z-;2gplHS{SX)Q5^2NII=*6N@Hp%XHB=pl7YT%j*ENy^XRL4=`{7SRRRnxOl zeMqt!_wCc1cMnQzD0n2x&V6TUaS?wmcnx6{_%{Y|K2Ytz0QSpJX{~f8T+=e9ZNMW) zae3}tPs|8SDUXRYyMJBP)3>pH6Kt4OQPeU%+ESE8T-I`H8SGs5&%aLV-P75`(l!0g z6&wKNS0Msk;Y~^Ef>EV*D=ZWSS?u<=oOz4P4S^$W`GNzO_CXmuATLxJ`JdU;os}gk z&91f=X!e?UayGcwUbj%$I8GVl_HLtrgvAu9Exbut-9rNQXv{mBfS<=Fv2u|~%~B^& zi9GV67=hy2!^|Gs@x*e1P9FA1iae}P)(gMkdS)ZF^IK~9S=STHvR+=E{rOfPIio3Z z0aK@H^NCXz8YF5{FG8f?MAmi`;+R!AYuDbN`1>D9)AH=&uvgW;_%sxn!T9J&@x zQbOw_k`B{te4a)HC0ilg&5?pkOp6clN`HI5+mod05XYqN-x8%&afJG~3Ol z)C1A(JfBgP|-ES*2Q$v#}Ni9gVMH3h{3LL^ayY2X!jUSo40wX z27i~(@df1wQ@Q_o)B0BIOgLvfDfd=ScFk_1uww>c5G?Dz#?PJq#LP{>7u#KBO{`{F z2#1SPz|k4JZ%+^7>-=l~^4Mnbo1(Uyc3U_U59$GfuvD{&B~88v`!yJAvFvLqRm|wLYf(Dn+!LMr20f9Dxa3kdNsD>6uO&u4^cGp;BL zOEDbN^dU_0`)jS;8a(DRO{@4*3_R#!2+L8$ZqVP5^`>&O-1zkz{__J9+y)hbfe5=1 zmR_9o-~q|e+*=J0(7oDj7b==Mi%Hhek)RxRFAE(?i>v7=IP7dY>|DS1#tZE^wNFU0 zQdg1C<6{zhwZ#90x?*l`iYLRsi(DWd3x|~C-=+9y13 zsdmCseNO5LVFepbk71J(1fHds!&PE$h()7&idhWItK@Dyup>(yW45{M391~JI8zl! z@{1E7l;VH)bgzmyKv~L9|Nhf9PT9*a#kMjPFB!aM^1mf|<}O)31|_?QLzIn#ogygz z@~zvFmx^^a`q7kK+Anb*O`Ot|C`>_fOoK&Y=F4 zTbo@OK6(lGo1cx7clN;b*yu*9RtHuN6oBlfNVG@!n7aPqw)zZ?lC25pz~C!9ZnKBS1` zvzF(aV<~wul!$u;C7uawx*>%KT3J~FSg5Q#wKIeDqJq)8vF$lIxL*_JwiAS2TMcvf z&bdc#yA21z{;2<&NeehWaMl!q$bB_YlPxej7TX%CR`;31gzra1iXlc8aI?>C8W>02 zXxKK@HZY28#*BQpXCXrj&!qGtS_d$8it8eXc**JJ7>CZRZPyt; z=wHipy8G|9lmd;>b_gV0ul(zLhWNuGSUAiwD}d8B#m7v?Xl~ZoGRzVykhnG`LK>Iu zB2I+ElevK~-=AY`!*vBTfJ^y0e2kQI0~MUkqmmb}-|@_0ejg6q^~%Vl|67+}b=9Ad z*QjxWU0JegOy1@h9`p^?XpoXtH?)#dfO$~Paz@-oDyr({0fm_Dmf#1If^AhO_}o@} z>F3MI2V&ADBh>ggJ(km@{RHRh0vKLx_*G`?sXYMDQ9U@_#;N6wm`;dVK7D}4AWR_> z>5j<3+;_fFz5|^3wNw5DH@x|wUgQP|g+Kt;a;Wz>xOS!VIW^HQejJn_?g+uhq|!`% zf$>VwB(KhgcJb?xWo1?X{#nN()5@G67PwYkc?LLB2AK8+m{}*GcpwRqg<4s_mrzaf zL){R^6H=xNy|keYiDNpR7<(HubO4gthU~>(^9)aW{06uwIHzr!*C4eXw6GI$`q{(> z*$pv$m5LdD2edY42=3AaF`fBb__Fu3TGY;kMRNS$5#re6yn!iB@hsm^4O+H9T=I(9>^z_)H-L^MmK+T{|GaKQTHrn9HzgJMI zfx6Xs_uD#k>)E(Ne#WR7Tq5bX(fa}Yd|s^O&Fy`D)$zluEXId+eg*+P?$O_f$72hA zq76{7=J*eWlfUFoQG$D34$tIG3cli=^BSptrs95H1!>8Q2k&nCzRv6Yc7Oif-u_gg z^Z^EH`T&AobND|;eV?Cu8j<}ZQy)J+f9=^#UT5kK&h&pC!-_{^ChSIO_>o-#KbLiV z6?ZR_UYQRjMcE=uHL-pM3-t4+iF=<|Qx7O$lWRnb&7Vh0BQLesM=TbqO{W$fW@6dE zYaUOmV(Wd2D(H<&p~qb8xHI=9+cl?#d8oG1W;WO;bdixuD3AT^n*=jVT4t-Jp8C-y zRd&(&4k#&vReN&~(+?L)&{5hA4Og#&jn-@J*=R)M$(^~@TA#-@OiTCxt`=9~e&1AY zpw3#Uf` zA6`aH-)NJ^n~oyx7@l71&Qh7Y{6RhG&k4evxHm`BlXOLwt++GgWEu&a_nIR^dYhyR z-uK7Cg&Bl9BD`{PK9Mcf83>0*cH*+oW=gzGq3V8XhIE$f^w1EyoU@~hJS%BL9Jmq* z<91-wdU+8r-1KMW)o*`svU%6qiw64brC3^x?wiIG@)w^e)Z4BI@7oNl3v<#v)cnz~0>e$5{?J(nH& z*@S% zdgUYyno|Du?z6~>ulw7!T$&#}GVCw+r&zpy7h=8@oPID!0>+f>)V}!9Cgptp%O=M7 zALrKpLHEP>&qK$^@lQ+lKlUF+hJUK9|84)d_V)BqIa#^moa=GF$?=^qAr`nX84m<* zL`pR92W}LUfdVE027xw|2&5q-A@PT`16LHZhSjR+5~`VEP=Z=*Q5B%1tAVYFR6uKH zP1#)4B4OV1%*_ZcdH(Xd{^$Yt^!?+d&vKpf&bG}tx148Hfq?trumuCJPSIqqL$~)@ zK+|D>ldos2x&KxzQ+5G`J^|G~mt50Q`=$O_2EMXa`dOo$TBH4%Iz5^K<^dDdt@$n` z4Xf*rDn!a7#aNSqf39kIiTI`-2wz3Z;SDqI&Vlo1=|xJdv$ErI{&TD6^}-DF)`=#| zdp$`UieAAV@cK7Jmim+5UPsUug$?=V?=|lCb3)O_A&?Ow(ho}in%w;F_Q!o9@B2Lh zNziZaLQ8$3G4G#VL*4e$pX65Qo(w$MKzyRx^0lx?pys(D)&o4-H3RvlF`w>`8`XRv zQi}e5U`>XwO*v})q-q6-M9ecD*?F=%{B>Og!ZRVN0kbzK83nwM8Vv-r9c5kgsK4i2eM9M!Z~>T&K-lz;k8rA{@(CjLg=8IC5TL_*Z|z0E~$57jpV*ST{DA( zUZPhtllg8-mc2_PxR*#@=lzdTUc@WO>b$xOZh`8C1EF7+RsIpxM4xa2Q$f~U7#6x` zK~EfOXlCJk(@l0*5_Nm_!VQ5 zcE`maO-4?N{J@n}`#kyr-m$~&$p?m>J_!c|`EsAs#}A#*JNuG%XF^Q=d{7S9ABPd> z`{lTZew3XNFSz5WRT%`Phi&Zv<^FEqXXC>m;1G0)nn!BmeJBFvU?E9P0xZpqql#3tjEWY!@n zLPgT$oSHBi^Rq_%BH9*mt%}VlziC5kS$1=rs4wC+k1q}X-8BqJ6 zu7uw}BH@(FW2U&E-YTWDfzu`>6~w&DQ+ZL7x-8{ilB%&O-F#qL7K7r+_XKTm%JqAH zi&5zw&s~Q1!j+E0it_A|%#hL}e`Ve7IEifo?QS8I-tF*nsj`M2NGcIIo`Jg!o;`YEC)wOf`hCv|NqI#N^@S}2d^yttC zm^CzB>R!NYlly@eg2*k|_Us%~?z>168T(uqMFp0Sfxok4Dv1Z(r(ziiHH0d2=JfBX znHz^rqwNOAd*}$^#83q6+-h&7ZepdSMP@O*L{6)x^y;hZ?e2!RBN&*dQGG2Q!$Xq2 zV@hRdsi{foQrWuh>Pj!MndwczSnDlxcklfgfYMGX9Rg3%oPG(&zZUR%ikNo>De6L%O@;-?^Be1@8@Jd zP?(-*5V z+?QkAVZ{BgrxK54E@N&8CCx~@k-THca4DQ5W^Q7JQo>^Tp}a4_-?ECjlHLTb2Nv!c zzo|jPT*09)mKRJn|5H9G=RE;u`xLxH#nuVtlaL47A$EkH$kW(`BUjz&oGNtq*{^y2 z8D4&_wxm-zoNRCCnJ*0&JB}Kkr~`*rWB+<=9w0(;fuG)QgCD!v?{C*H-mjf6>yIfu zzx|`nBgG;PzoYwW@^8n_Q4|25gbExP7idTpz&Zqk$j4 zh~|4;E^yYkDvp*b)s^NWsEe=t%U$2E{vn8qFZLmjp%*V9?MzHy{%G8q{=ETmqsV5C zzvZU0-L(Gf1L-w3H|7dLkOu*A0N#N(Hstya(+9D2aOTeV6`BXm+yK_ffp;6Y>|oA; z`V*e52s(Bk&4Hc=0uWGF&gb@{fX4;pJjmAJb+dYk~$>Sj;}UgWf6v;0jfI>ZC!x z1~6uShwlN=H`0U=cE27+DAO;36DWD-{fZHG$nfyH{~&!jo{@|(gL1lGWqAPKBQ?mw|*pVi% zR4D#2o9O|a>7XQsNceyv2aw$`M2c42u)RTX4kYpdMDiolY?!WkFzE)ksRod;1DERI zsd|_yM~KyZnd%Wu4(zl269@d+5w7YnPY!%^15mnQ(e-fIc8n}X=yylTRs-s*em0#@ z_5Pi99QA!EosjExEN%yQHzV}g5xc7a*I&V98xn5NS0TQ4Oj%&w`{s8rI*@(-vh#C| z2XwC}pU8Lt`a@B7$XEy39I*S?>|Kk@zFMN5nwAsGlu5oxWO5X}E+&3hv#qWR-iAze*R14B94SiZjXuLfd@V&16Ib z>!TO%yD%-(_-qBFXl=ES%QH09wGxl-m!sIysYYQiN+DDjQ+G$#;Mgy_#CzILQuY3o zmZzI(?&&PG6wu={&r4{PE>dZ;KxU`=CF~^)j^E{xEvCNvDeNUJ36`XTR96w?{DDbV z4p!Pe;VtfWd+F(HEF)VnlyCu{au2i!krD5Z7Wpj;FqQy3ME$9m9zG2j#DEy)OQJb0 z8abFidg>;=ek{+qC{W%8XOFqjfZTyK>>j+@%Ei(1z0K9&{?U>5b43#0`!p%QavfxG z^XSM-4G#NTn}@U%kyDl~`d!Me1MA3}78iH7-}mgSi)5Sa7-p;BjosJ4ZSGRR0az}z zL9LpuhbiaQz%R={ENtR?FeWLfcdi#D+E~&=u*b%p=Bw9X-FNpp#(#^;9t~)gA6>x? zOB0nArP`KhHL)b@WVD2yJ5=hVAHaP6lJt7n=k(=TPh3Jp^T;iE4o4r-Zf=QggHHRL zSyh&X9Ec zhRey=Tj=DVf$AzzdD68oVu`Uh(vqD6moHp)``P!T*^H|zkG+hV(mrW(PHA&G>*dV5 zEt9ud>`rQGdsMYCEP}nKS^^U|KO`KXc8-c^O;J49Y$%ZgykbdeEubzx%KKmuNlla z3IBXVL!W`ub7cT$PAU)$Yzn%TKtpU^Y+hYnq^(temJlIzQ2XYk(yXCeSI6DNrd8IZ%%V zs&)}72DbK?g1}ner}|LKttX&^XY+avB97V5F=(%}%O0tHeBgfFhM&40PLf(;VAm%FP zgci_C>>Xw=K7+vN&Ae$pV9UPkKBUav?J$JRPO+tRYwcU9YGq?>Z@hJS)atp;hu*fb zt^TMo1Iuc^OtEFQ%l=rAvDmu#VU<^zLZ-`kB&F6=;3)h7QPG37)n@qII%<2pMY10G zbhfqGn=-I^RnuF;s*Qayuy66w(ljb(qZ4#Z3WbT8OwpB{S=Y~Z@t32SKmC(HnxLc$ z+6GJw1U4X}U&Mf99!doSG(d;|MFK1u2--&-WG9Z?A{TKx^GrAE)N`!TbGOwZcQ2iF zu1+@djJD|1Q+bKUzC82HHRzPH&>~lVBJ-@i*i+9q^GtP_Crsec!?uJnRVl7QWlbsx zzGUcR(XiTuA{k);xtU|8rh_HSY>6gQa)~8~%vuJtrcoV!O%0+s^UbvjscjWfCq;qN zd(uw;ZqLK|6!5Ce3?8Nmk!ZF8-ilaN2X~ANJmfYuko+!{liM9|jT#TKG4zKyVRn{M zg3!86tVbDL#38%L_wXh#aFLDIiHdzS?P@mkxy+dm8+i+5b1huo{46sH@N*IP6QgfV zR<|ODd=(}F(v}TwSBWl<*$v9B0PByP75^HDN)<0zZkhtPE3Tsrc`op~-Q>`mwfP1|?4QiAdtC}+ zXcfRGi2phNApSjVcW7k@MkTqHBkK0#LxWysF@?x&K+4mq&?nlr6rYspwv^Y=T77tB znd1D=?(kNzwE^*#1g}p`Trgg+&bs{LR~umSM-?BGzZUWP==~M{?F;cDsGaE>UpMTI zi%m!8?-dH=3wQ0<3FQOUTfL9Q+dcn3va@qny{g5fbJoH<+VrqG4HdU zXxXvgROAY*3wZmvXvF+^dEdJP)B$=u=7VF}6*ej8!Jt(n9!Dr&B=}Qr6$$ZR%AuFN zq$2LvprxaemvsFvhedz< z1>JXf`(yFu$VQ!K`gHq-kvIA|Z+J4E!P8L*0FB6=Md=XW1agz`M@{x&Mgx`7@v})= ztin+uxrz`~6Fl6u>0D}_TDImg;j((4eu|keiTtMzrB*5BqWPT|J!DnVwW7#W43;FV zYTeDcqh*j%({s>wa{!lpx51g@8XS3_9*b;X&v7+%)N^i&8L7e0>~p?dfXtkc&4?CZ z1(RAfEo&)xA(wEZ45Kuu>{g5;^X451tmHLB|Big^CTtp+&PHk~!Q-qlE*z?sPv&g- za>Dig;FKe(nUO&<7u(&dlSqt?MaF@kkaV;&Jsrv?uAg^gE7wf}mYF2W9yi8GM9)sQ zYO8Q`PFKWCCqIXODVY#Hj+@5MHZuhy47}$9!Po#;e(gWSoRkd-lNM{P`bN9 ziR&)DYWx12DCshye;b)ilcS0#cnehy`*?ZjGwu8&rTBqy>-{7#=_E&`_ zP->JR4erJYvX0fRY6$w~@fA_<4rl{(xO` z9N2rv{{1inyo;7EmX^&jbBklf%tczKGL~;FLFQe1n3lm^F^HMoC|by8JY-Y6O%xuo zP%JZvmTQ^C9>%#-*Ruos9wH7w4${Nv1X>weA8_$VpXcqnGD$8BfXRWn9ubTFQR?_E zGcDjPU^W-3^ZThKzthVOLBk;FaMYG9{hWqc@{PFPB#U8`4L~jtVJ*hSz)+z>6t;iG z&Wn#22u5qP@rPN-uh=HT@!bX;p+aYMnCX+b6fPrQJ$hQiMQ5t$`-yi+Dh%GlyQEip zz6~gE^%LI20`c}SK8?47u{mk&X#Jf9H+8r=*1+jlj$s5}0wHM?f(Ik%mQ_Nst7l;T zynBZqe1YOPsy?}9!k$bvj5f*`?tCB1(JkhJaOn>ZFUh%oSZ%oI_MJ^m_Z*C%d?z#9_P z;j$XHEf3B&W-{U<3-Jh-wP4R4rU%UnsBYvzK1DOGIV>0cix$?Z-1CPID%z{NVvt6Y8x;rh_%kInx4x&bbxXg787f`AtDQLZ|S-0zt~2 zgM_8zjv!@-Gr2g@!=$9)ID^f^*~mffuyOcrL?ZEmK{IDbx@EZ3Aq%kuOigB82IM(S zB&TO{b9eX?B%1K(Gi%75(P06UoYuX86qhZDyGZU$u|N<9hPG0%e(0)f&sRJquX6fP z1KsDu20FFWGY^i3AIBxrU;V19wy@teZwwUx!i)Wwyy(QPtqG)>iQ6rL^|zv?Ekd35Az9M(FtcX;hKu4($6vZH9%X^o;_(y{nw zDCMPDxgd|g!MBLvYhQ^BlaVrht-LfI+2XlNVh~if7vvMrQ3XFeH8+1Y96dN4t*|79 z6RzT-qvO*THn5vMHxK40cec*9+h0H5%sqdbE|g#*rqNz^7B@DTe{|08#eF$h-Hr#w z%q-Pa&`@|gE)9vB^KjbeoP7?0qrgT@{xiiTB#}^~Z;auZbWzFNm6TPb6BcXgD)#W){HiY&ubjw_}iKU<=htSh5$#VdmNK<`9gzE@S34DgR90{Hryu4uRm>6 zszA@<>+t_bN-`@&RY|sF%2Os-#MdZUGU1Zad?|C2j*=}RbSgBdI3i6ifr|uM-gR)L zG#xtP7|=D$lgslf2Db$bs+D~3O&weE91<<+OGCJ_1u7Zs0NbVI8m4(X8Y9GnmdJf- zCg$97)_?VJW^sMtAYl^}-&j8;Cob@gGIF!~8L=5YCk(duhP5?nJ&}a`d;Yhp;(6f$ zbFvVpycN7=Tg70oQCV;ZT0ro?6W_gZKGp)Zkq2#Lf<^H)69canXeM2FF# zF-Gh84wo_JGYof-?{m=e%T?JGQ;5Gtmr}e!E(3c3X#uyP@?b0&D`Cr|N(<+2V^6EB zQRi|ESbTD}9cA5e0*c>AP@-9hYX263IkCU~?j`l4AMwdho-1HGDSA2Szg;>8HOw z*_*i6OlGkiw|3R-v|9|fdS?)GFan*9e2d6>e5so6SF1&p?}%RzKe_D>dzmwy9+(%U zdA4t?sa5ZQrMj4rVNoz`8gJ@vnx)`WsL4sIv~?T78ag${)vRh52^%tr8|7Mp?b}2L zn($}#j7bkTQZDBlGZS(%Wws5U4as}MkHrF4YX=kmL`X4~em5)3<@i2N4`+FG?SE>| z>K$23*O@aF`M=Dwm16*WNhC4a-;x9_stL31l9|b2iDW1h$eCBxRZ-#<>Lav&;+Dsj z&6n4f_bMRR)CKjLZC7uW-7KX-)yh>ZTsJ#P^{(UHRGRvAoY+evc&&vxw47Yu98B(^ zw{f+Dsc&S~(;OHE(&w?iMZ)7ydZ}i!{fDX=yplj+anWMA#H)nepgg&PUvYM2{~)-Q zQ3)1<_ezj#x+QT-oXur0+6ylQ}6pI%@$xInF2|D6@lw zEq8|C?a->Q$+*usGncFyxxr!+cW^U(U=h_y+@x*Pdm**8iB^TMVR=|R5*k|hXy&gZ zSozz`9mU3_=SX2m$xpeX-l60mILau(SDM>+W!mt1x0-&phN&$_XYM&pS+{+^25jlQ zJ#|(I6W4ZhuTGn(O&d%$eRqno$1Ku!Sc+rByx4a=PZB59*R*yz%dXhqp$Nkk3p7!8JdZj>6%%a$)BFeuqKK3mFO^K zL>yIx$${CoxZ1Q>3-KJD4s)ZplRlG8W}*CB%#`^o0&@)*S~!oyq4mb>zns(h^Q!$M zVS4e5Bz&BNt@&&l=Ea~Co{%}jA1sz(o@JhSnt{=pT7PJm(K_gF3TWyQQTWQr-AXnY zIa?ZxZOnwP1llk8`>ns*J|unYm);!vSru-?vo+HJdt1Jc=YIRPRGN^z;0~H&s3J_{ zjlT9UrgGqxatVBB!&Qaxs_;b15qD$Cfh^Gw;JLP}tvp^+E&M)edntb>(3t&x!p3fE z^j%EHn%D5Y@8?6Jm|tQ$-QCY`!?fj%R3B9@wLWpNg>LscD*Yy1-;dtX#%P3xYLAk* zJL&XY)`IXkaFqVsB}{Plz6A9wp}nP&Uc1{|>Nvr!A%{$)C8t%WISA>_w+sG({~00##kiD#)R6=pK4!S%xzde<9DEmW%)VMo4CHnweQ>g5158tLD%03@{cN>~q&|ZyQ&w8;zo=G~dMI~R z^sCrqT3a!?X0fdNk~b|eF;GpYL%S`2ODE_i6FX;!rALbSNDhJ#PGS=|!lS^pQe_re zb|tDhjyhi87^P%t((wIwoMA1nO((tmXuWJI0LLP0e?dO}EMqUWGD9GBEu6`bmXpJae0(9izR6(xp=gKPM8EZ(nKJ+ zX8}6fQ}9HRjk32yMA<7YDXU0|lc~-MECGEkhRF+tI%=2xI>Nix+i{^qa!#Mq@`RWi z{al{T!-d|v88F-4l-B^5PS;NZJR>@-rnK2+DSSxP18h{}78MhdP%?e!R`Bf2*Kvas zTxb1*;etsyiP%(1u#RFb#Gs?Q;oP10ill2>IAz5qv1|u_$V6$VIum*aaI^cIb}o`b zo2#?BS+CzNBhh<E}zei$avXA%fKObwvAFxVtr_F0`e-g6) zE}`orTt(-UuzK#N^~%w55@uAidSFl8sd=z_lVaEpd>T^VIu$Bc*kP{nM#D#iz5aoL zy{W%yzG})o)ZbR(lOBE|8HPh!x=t@3enh;$8YE$L3_nh#(s8X-Q;)lhmv-EkOBwnU z#!eYR{vo?^Q%a;>`Evs%*KU2?xltP#naGm#27}vB$8twxvA=X95aC0hL?n)=@{80- z&+dEuiE&ZDlcupt!d7O${$cqe6C_TTA5eKV($y7sq~@N?;$quddDKz{INVx#4>Cw8@x&ZjYF6x9c7Z?PSFX5})K>X1iGwo*Y(W_N_#iE^gM#k}Q#H&$Fo zk*FS+YFQEL)RVxER0q9{6rkXHlKJ59GeNHL$3= zeXn5kW<*+V+gBqy*00x&>=pjAtdoQJAe^DV2@LX7VbihlS{QUe1s^MpI1W(^r}RncVKc4%fzEX=)bYmrJg zwi(4KW*She;=HlogcB=;`c(HX_6#C$wjcii7EVDkhZx0PG1QHF6~i=Z$d*3q$ksT+ zI%rlDCB2%8^`ZIxLyV}`9~~~&6c1KiT7|R9ok|d!7Bj7wKUNK}QR^ciq8vXpb{aic zO>}g_MJ4R^2hgg*!Ms{%@T+@_DuA)$iSO0D8w8ryY*iVB%}WF3Xil!(G`;ifvmZ1M_T2|n zT{1&L+@;E3l4V@II0Es5XlkR?YSNV8DypqB_1v_~QZp12W@9<4x@w`c z5GEI^PM12?Q7v1Q{wuTQtxMBJ2<8j>XA_`>fu}8Oq;DvVzge@p3LA-%X5)NPQSzwM zb2neUZpO$?gJZuy=tqk6uXH=#8dOb{hm!L(zo0|ovAN1$>aI2O<^WIK!JX8 zz55;g<+6O_ZGxDhJFu~de*nT{+%NP=jdZHeMY^S^AHPuZTYGTy~^{M`7h9!Kj>5c?9Q?CP|zH#Qq1)S zpA@u$SgoR#Z#;M*=eCNQK#uLqQq~MOc~OgE7_-renS8Om|t$B3^EpGdnP0u6kS?e~DHGWsskIvZE)Kxj&BG2MnWfc~=IxFiNjTW<& zMLFL;m9fvNxUxC6Rcf&dFhEoK0{!XbFJ7I?sEeKxu$*DmQ*P5TSnLj=>4JZ&xZqkx=-I5Bug}Mvwgq#q zR<(ZMUX#IJgKUkze~3IDWV5g&Yin!dM;AoaP!!&(4Q3x_@uF|Qk3_vXa;2;2Rk3bL z&g%|Wn`=El|4y9vhs00!^N6bVk80tI{)BkkjibP-bs=)pmA`W{N=x#t)o)szDe6M4 z(-q|_vSOEIuyZE3>ipdN(FB5kz* z`U~~&^ydyLmVL?{G2axI;HA)`?LuoQzz`9$(A<(G7S6&+)WzQKVV~^aV8-ZL*2sP; z0*kZVxORr_0KF#YBhKTzuaW2m5=r0kx6+AmEhdh=f0br;pV(`RzDNJtcF}B8lG@=_ zs3b{mY!umRA-WMIUmQMhl2Ts)b{lma>>3O)^I#k&jFW z*51=@$1+j#+h4o8lr{|DbX@|4KUOMsu(n3UfSR3W3VWEC>7J@2tx@6Mx;uwh!p3?w zQO3c?>c8ZNVbvC(aD^Ugp0ZtcGnPrZE%)DoIf_2fvo*hAD6^{m)>}{{xjvz|8pnL%6z$Q+7cNzeHbrLeegX z2GiAv2#bTMkfZoiHW7imC1}x%G0g||)}G^4{(#J9aIZO^5ZY~?sYyy7x-&l_&|sDz zL!`c$al`}HDv3f93psTudOTLFDPB$QbZVq)vCb;0A|V4fTpP?tyOPo&Jt7a;iTfp7 zNxSMwows+IzXPC?Nm(kbi40uGd!F7~^8AMfTJ1xYN_1alAJ^_XtO#fv0xe%@3>J7H zm#U~m&`MY;Bt|(R&98O8-~JupVv_&b2B!ZEVEsRA z10w+oE62aFw*Lc1GqG^~n`QjJ;pnR#Paox#XZG%A2f5P*%fwj8OtO&Q7M8FjC5sHr zi> zyy4Hr4gFjTjYv!AzbcH$cUiyoJ1K#I7J>U)PoKHP5y(l?dLf~zX|+M ztR8vn_Zq(rFVrP5h5*TDLrO5nWb$||#${FYf{YJ)*%F6$EFl8kx4N0B!!lq1>g45u zpVc2+w7T=S?91KGp3+Ac&H?Ygr>*LF6|weJS16ZZJ2MX+QWau52()%TiCcb=D#3Q6 z4oJlN2Vyc6zyhruwZoO;TnjyBArf7)GIl?H0V}ystrT!Ix6MsVSwCR$58u6Aveo;I}#i({0$XV?F$9lEt zcwyTK^8{VEep;^+oDGRg*Nypka|+~I1o@^;VH<*{@`wB-Zn(lMHci)$x*%Mqr_Nk0 zPZh|{hr*oFKJ@)9x|TJn7xwHU^(w6+&AIz%Hq3)lglY+02-zATxCzdf*9{LlzIEWL z5r=Aa^!g~uS*V@78~&0J^;dMA9__J-5jXBJJ|XiLo(Swa^06}Zm0)JXB|fSq`=Koc z_3CyvSvJ5$?k9R2$6E&)=aDry?KG@Uu(HF*Zq4YKwLRiQfOQc%983h?3ySPP+n=CM zO==GaMPLHehby8zATCfZot$INZ_!PI^dUSKrZgD)O}Rc)*B?Q{y{;Q)jS=Q;=eHvg z(}n!J*7JZ&a-E&Wk7l^}UG5(B0|U(a(W`Cz>76|)W@ea1v~iC0VbVVQsrfydk%z$<%(5z{#Nb)n=n}Yb^*{Dor%&D($~FSZ#howN7Nvf zO%vFg7Z#=Xa3m*-U_ui`{S9rmJdThU3E?KezwlUCMgWySPq4Ya0eH+bvb%5^YD481 z)Ku6D+cVr**@Uez)I9ks`h0rx{GZnu?~OG5SBUtw@_AIeX7+FLHc zaqcJ4Dy2zfM&ZppenD4yP+<^-wyerI?yTndkP{csZvx#ACm!wb>U4b+G#{kK(mOC$ zA}QE94eQiGVhK!tcB;#!EDIF+%nJ>TxR>f=@qAg$f6Q~&zSuKE^!`}^wl%bEF%8Yo zUxO`zFQoU%7eRy@Q~T+?4CBE&mvg30_cPtOhk@zK)pA-qjvIkAb@$MzE zPky9d@=sdvz6o4{;I-8sd$d3Nz`SI(LRlS@pFu7xIHP}gh+KsJ5>E)VXHlfC5mX{w z{DEr};tg1?gz(oC+Y4<^g3K3y5y0CE`#_0u!*d0mf|Sr7)N2L9I~E_xORy?06*tVK z`W?D-VzJ~v;{|618~#C@;}U|SOX|Efsf1#ixMp2Z|E8GXM3|!Z!xw%igNlySSA@eW zO=Nrw{Zai2*}M?$iR1~dZ<5KSc74L&EHwAh^0$_k=ue0X@nl2&P?&*(N}Y0HJLcJ|s>;g(!jT^$OxQ`{9qhyN z9fTRYeS8z+7o`wPpZ{gi-z?gT*KeOd(`E@ zgSdWQ4=Y+s=?}9tgNxFM>_KCo6Vj^?3x+Ul!ES|r)Tq9L^<$lkd4-@$ z0is2NeW3OBc~3OXtAo5M-ADHM;n<0O zY5BKW0&n6d90MHMb8QFz%7}Nx8mx>L$?hjtCWN6Rx40i6VRP%BBW^+Y5fVQfS%iu5 z+;h+zV=B9MKIna+ddLmUkf<0o0f6Kx4lMQlolBiBgdm1Lx6IfsBr= zND+Wc5s2gl?l&|wrtCt&DaLYE;)wB2g{+^@!A$8f7uY~Z0RYq}Vui_RBq^S0IOgOB zoY!zW6Ru?K17Y`jO@>&+V4Kz7hwb26kBExu^aDxLU_-Bh9*Jv%MhRz(^MT-wUt5f= zs3&0sD#=T641FLFk3v^{KsWnC1~6NZjW3KAZ?^4g>+)VuCnRVeKanpnfj;m-8v@HU zp6R`)ev-|~qw9EhB>ncmt5SW``O_`XYttFe0=+xY-jR=J7geWG&bGPcOE^CxpUJL~ zA4dEOq5RMuW>9$ouS6`%VRZkRYFVG0&nLYGc}+mE(#!ILeS$owB4-?mgxZMS^W*Hr zZ-kof+#GNi(Qm)F7Hto82n4zWyaoS#aH;Ei3&-Shtx$)}-1i8miKSYg@jW1*2B_0~%ob8LJ= z!1&2KeasU;5KbK&f&x*mZLs8z-~55iZV&7Pk9iOM5r6#P2fn$L5eXUG%Ohl?5*BlU zQ;J6r;fj|Hxd2JGk9m6_^F!wOqFM)vqdJ-SK&KSf93Up$cCdYGd9!}`%YSmg=5Zs% zG9lQ+!vo?B=7H2Iu9KzS2kQ)W%-(P_1DJh8{|1E+=F%>ihDOEgBBOs1%Ztdb;8^o0 znKKGF{WM%Q4YsIyV(&-(SCBw*;f_YJsI?D!#&!hP--7KuOqcRq`ewPFYWWCyguO%j z6||u41EeYOL3q6_l6AsuMPHlv#)sr-KMSk%Fr z-uAtRC#`{LNIX3#m)*}%40SYKgps!m(*%sQkji30lq=4?jDJC{5xUF0jBME73_dkV z;ER?2?Jgrf`cQ-vOeycry3o#qFy$upQCakIiGHE~gV1l9Tt1~u^mWNjG-~{gJ`5)V z2zYWWrmp`&T(?J9{7QHqHB8S7T@QN0X9RE;!Yxh3j}qC2gbQjk{5Sz4#eFVuKK*cg zt)0dFq#8{#A)j3!&vnP|x?f`+_La(hyy2g>n8%cU{m4H>nnSG3L*d^|KcS8K4p7hW z{VZXYMI8Et)`H>xvKvlUqCd1in)-hLVnCh0iuhTHAEQ(`zbSDnjtgLGq9S${@vDfP zMf{3%Ez$+Dq|9f4IOmIbf#OmWBq|C4n!cFBl(r1GroDIuD;|SF2e_ZiBumL7WGxAj z6C_N_>D%;O`UNA5F%9#w``JRan5|_Wa6RwMhwx$iQT_yfnm^08@mKk0{H(M~dPDj_ zx*+T21lc7Q$bIDr@v_j>mW?w350C&pvuW zcKi1D4*1^l9rk_Z`_^CR5BR(IEBzz=xA`Z0FMaR)zTiAP-?pCCyX)K67uI*G?_A%l zzIT0j{fzoW^^ezw8%8u1HU1iE2sebo;t4gZQ8>4TY$1opW#rsj$hl7$G;?kaa_%Aa zEGOK^`|zQB8DGv<@pb%VUdun_-%CO1Rq2RyKFT?d9FQyjCFjm3S0}G=>)kPKhue*u zOGnOSyYr)*8;_iO7CE=^D$e!u-0E4@%sC5kE-ocG%DKvvQ3~hW|Aup=&7522TjSf< z%(;WexlfUE1nCfyw*eUYG{A z!&tZlIyHRJaH8Qz!+Q;<8$N0{ELt|KY*^9oQo~yOJlZg`VNSyX4dWVe0KTpO`07OD zss8D?h{wOY_4J(6m%iL^`fkjPgiq)k@V0)w`seG^bPl z$ClcETXV}*Sq9I-9GJ_7!gBZ)=D|a-2%d%)VLgTj3z4m};ZZmbzrYfB0v5o2I05J2 z8Q2KF!LM)u*1=2g4!i}MVFZkXWiSd3!f1FK-h~g~J$N4u!FO;Qd|`-{jr^VLCHu(hWIu5bCv1Tri6imk z4RU}akVKM1lF6IoEw}`i;Vbx>xQLs0ND6tIyhGk42g!TneYBY$5HCq3KH?{b$r17) z`H1|3e2fu78figVl5{u&-;kql3{Jsk@HrfZlkf?ALC%r$PZ7>Bq7oY{TNU}DP@#XiON(()l@^Zq&3x1JvC4xHBmFQP%Dk0HqwU1Qai~c zS=2$DG>*p81e!>bXfkzCH(g9UG=;P!+0;vNXe#wlKTV@8XiJ(-Gw1^Ppk$UT^c~Xe|J&m68Irbvk#5S`nY%ANrcCpvk>+DVTE<1#}`XM{YK4V|7 zFWEQjEURPZ*e~=K`YZj7UZB6zi}VlrC%r^3(|X##v`okJ=v@ddYCV6BKhIy_8~BTS zBj3bd;+xT{Y~ew^mDiwW-p+UMo%|K_GrRb1^wWFzYy9tgFW<*s=ll5^`~ZKGzs29? z@9=l|LH-_ppC95M@WcEF|B!#g|G_`zNBJ@S33{o|_~-mMKf%A?C;2IUnt#c^;$QPK z{2Tr)|Bipp&+;GmkNhWI$A9MM_<8;d|CRs7FYw>V*W?Vp$p7Gf@=N?OuZOKrLl=@< z*a17?4LlufgY9qt9)Q8Neb@jtkPTvGtRL$SzmxCiK7K#!ft65)n)w_& zLW*E1=}e}PhtXd=O74bQav!N9Kl3U+na|==SUDTaZe>GQ1)syG^1Jz5K8?@g_wf0A z0e_G$l@Gpk zNX5`$mBV4g$Wfzj8#8v?_zAa9yyMPERg1S52S-bAp_0K*3!iE<&ZelNOetAo9Yt6Rp zJ9fTOyKDEWdtUqd-hHp{f8)TLZ@vA_y9eKU|Ii1AkHCi?{o~`K$3FS=v(Jy8_~PWL z>#^hY*ztPocs+K!9y?x-9k0iZ*JH=)vEzRiI|e#;4it5|p|E2?euunvxjETwvohPX zZk3VVvPGKTm+DRNxLwIfi3#y>PKQ0#7Gt%TO-6%Wr`4!cvcwrB(5l#5Qt1x*D}&tc zz46A@BJUlJ1;ei>s0_NXsO0K4L3gFn%zbss0JgmCnwEh`%RqBWVs;loVe3}zVy`=R zsGHYaO9uBT!}OAF-g0-aPD%Gv(#w>z0n;82c5oLv$98iENu|3uSTb$w!s5zqc)P7S zZC7vC(c0FnV5?S#Ngbww4)3I`#LL} z;rL42n)ro5=zEW+CO$r}D|{N_i`@(Rmw7$Gq6BaG@NS7)ZLqNKJ=@{}?zpRKTDRJ2 zwnP}a)o6+)^oA=FqnqoLl+s+Jdh~7PED{5y!GkdtOn!}_Ll zFe4+Fo-Ra0)fM*?=h#Wfw`<*MS}pZ@Cz;(ykbO{!yd7R%kcsT~c*F)Tstv#h%ml0Z zltuDx7?Dr|fy|8ZAgvTN`|MBv?x*_~PAaZ!5}exb?nMc~ zlEvl7tFfe@b!RV_m;=rs!UzT~yk;VLBZeWCB32`0rJX3b6EPF97ja&x2{1>^BRPRu zB#RWXZT#)oN_Kc8JETI%ZW~k{p*{OVXt$dp%?cvT+U7=z+jNQ0v{n&n^<`HJsx@Tq z>ukr+{Ro1>B)k%O08E5{3)Zk$2qGwxqa^`m-InUlUcHxbz;J*O3`u?EZLp4 zG)&Kd6;pZehiLJhXOhgf47-BVIFX9|RMZdtSnVt~(q+CV12tnxyyqf88T-I^Cn&{`4 z`ka1_Q~O6vUVip2C6SRCO}Ko~gd-uEu-db0=|?q}TDofK*W26~t~H&r=*JL5P#o-I zy!prAMwB8d5t9%yrjB9i7*r#cA=V&*2pRhv!#>Bb&q2idh+~k22p~!kYI>vwhpDB9 zYy4eYo$d4k`ZhR_sfXx03VolxrO@~2n+kmwX)@A-^sSm?7j)KPJzyU*QZv#_te5EP z+fuEraAynMi|ldXH4{;U=#3bLSc;J8UYb%f%4Nlyyb1@^fGum_tU{lMb!rHVcLn@i zQO4Zj;xD)XQ+QeJUhSs=|MHcX6&L?Qk6=n%{Bss#N?iQ+&cc+q_-~(vDRJ?S8jmS) z@edw`DRJ@l?vE+F)Y4~ONlkO*^`1c7olW#^9rMribFcEK*%as)v&53{ss)s*_1|fKmL#J#L&e4M$^`KaL zQ0@2P^)Mo=+?w)CP%zD+^)otAnlsEdvZaZ{luUXjhm&a@*u^Q|YEfJ8w6^mP!=HZ`K+{=6AEHYk z2{&R{lrF8gl;o-_Cm@-l)RBDf6CctJFh$9?gG9BUxsXUVASW7Yaed4RGPu#Vf)VPjf$)=sIj}sqsy_;F9#*#h$T7qP^ zTWPv0v4d;#L8a*|tXNg!x?hl;t{I8lT@w>`*lkk;R;N_ zd+u}?)FoyM@J^FPaJ%am2LXQ#d;KhF4TB1b}im(e4r zD!sLADMkI}GIvRWpe^PuDK7`7eOi&T$lA%0U()Sg zTq>j2jK6-ISEZAJ%X{=I3vNs*4`z!*IH|lx@KF)V?!xo)`QmQ7@FylfZiM1C#q zE6Q1?Zsp}YYRN#Q9k|Ia*bXJ;7p0v#8Qh{BxYfy#cB>-oeApk`r3!-WG#cj?+~h%JBu4&flNf1ZINj97a2nfW{I@@&yJTdLZ5_); z4iV>oN^kLKL}hT%w6V@$^$53n>&Wux0l{B6V&qsshmQ`Hdq;N*j`VhOZ|ykbUsMkf z)g8Uvw!)C&{$*Q-1V(qO=@{r(>>b{%d|UU@+`OyCda!w{+|qw>vr=)hTrpPnynj)h zC#t)PvGT-Nd19>Yf$qv!pvZV>*;X}lDaWu=q1&iVi}G5T;3@B7H&5!M2yaJ^^Ztb0 zTzs)lhf%m5Pjm)^sA}E0b!Sn9Iwh)%;;rT2M`2-9`e*3I+7v2t;uonH;S~!Gl2f_WY8|=gxJ_|EpF8c@enhOR;j-{U;YY&j;W^mF-U&B?4&q@Xeh!6ymOc%ifY#XK zaaakb$RnB^5WrEYvE|b+8CJ0hPQqitmvIIjxEtrdp(h+7`)CH%74PzF zI2b;FtrDRE#=d@;bd!(o5M=K)N^lG1#Cj48YmGfIYt@ zf6)8!Gn2i=OTt~ih*b`->97%Z#1Bux)9^Ym;7Z+O3VDDWBVW_5bQpb-e#IW+FY=F6!*SI^ zVInMnP4EY?k`AN~xs{A1_mTPJVX~4OB1g#gv@`8bC(v_jEURL#@he;l5{mF7*)E z^-)!*ma2BDK2}$Xr>L+4Ub*sB2RY4Vv0}CZ9-=us4o@r}pga$QQLHCLNu?Xe0y=|i zr>W9(xg+gJdck=-+CN6$qO0je+L84nJxD(oFaD*f_>pZ~{LAk`{sz?XJ-D_H@Xpg^ zJ-MHrll4$Tlz%r(-eg%kgS`izvr|OH*TQkGB@R+YUtpyu1+Vc=QW<#IQ}8mYA~RqI zEe6oms~4jj_aYn7F7zkadKDJ(PoN(Zg%^j9qI9=F3%e3VV0?N8SNSuJa3k9XIiX&3Yq*3>!u6hlKH(R_ zE~168;oG4%?1AT05)4;mL0Z=>~|q z86cq`g2avg1}7s(#yPk?25?^nNWpQu(*aU(-M+5?{Ko*&?geNu5Fj1bpWXn_DjlG8 zCxA9smN^d~Ydt_)95?3!fZSC8?Vbn7>i|&D9-t%6{{|eR=$Y&IzYdhe0Pa~Ae-sC= z<2tV6|7&!m*Kr-!aUIuj9oKOk*Kr-!aUIuj9sk>)M0w#NiEs6*pv!hj&d91-x-t+0 z5L!G|r`76adDgCQW@O-C6@@*`b>=f?8qb_D{|rS%JZEUMMUp}@?{%@}*h^7LY{;EKkJb>@q8xY{CID5)TRYRS!OpO+)6@Dpn$ zwsLvkqCo%r~d1L*N@`cM^eJ$h)xvv>t--5Ogfi!Zdz@>x9XJji8Ftj9u0sERDzNS21G>c}G-1l!+M4fvIvC0bGlTFNj3atBpGZx{x5!c16$lCef7b{ogN zaK?<|qHu{TZhK=Lu~_rlX64}4+GJH)`}TP|50wte&Tr2S9jaR7?-@7zRvfo8siouT zM3m=Nfw)O@5~DpyPaM(-+A1xXjF%Qn@b?8 zG*m9+tdPhY@01BeK!qf%RY%uag?A~cGb=01$6pj$5 zMcGM)6qpmpTpYhBf!-H?UjiKwKRSU<&<{7#!TSD2+TPgBNE71JDh}o}iv3$cv%ihak02~oRHCpcedZd5kmVqsC8 zH9zx=#gQ+>4}YKnm7tx_fljntuHT!YY)eiy7aL@xDzO0aDM_}sO?|b)`n#vBa_)-z z+b4xbLH)!C&Y@wjcA|B z(PpT?NRk61GtF7%G3v3JO7jA?%>1tOmb}k=-mFtgmh!{=6lcpg;kASWbfx-zs#AKlOi%P8Z#Jn8tLRKswTh}9H68mT zvb}K#{B`0M$H$rL>cCl47++U(M&WMVe5p;w4D*5cZJdHAGGNKipKm^Jz;muf6B?^stPa3AztQTF&^emlU0o7d`Qc_*wpys z+Rw-@D@#%mbEMsuOURy3H#(Rs-*xwrMJS`oQKHTwe=U#%=`br$%6W-*p!YWK6wMrs zJT88!G)Xf>H(Q#mlhf=P=1faZwkK&cG1lbt^p-6lF)10jx*|e{BAW-$0d&(61Bv2$i#{W7wd}ZB6^sSQBhF^6=X7T z$lRNfirlfLq6#`xexZ;w)@HTmWVh$r_umkDot$83!QuT)zI06d(i4UgE}}EWyFO1nG^84U8Jiz zvhfykvI*2UQ4P_=yOPY&eNX;t--Rh@-t@LvUGE9BX9+5`td`VV&E+^}ypzg0tzK); zGC9_6v&Yz(oWL9&Vm0E$sZR6|yVl}?40Nd(>G(5?C_>^ur)Q0|Q4|rMC%b(_M$%9) zo*|bu4Zgqpt|`6lefZGa&{mTF@N;d8dp>b{ug#(NrQNYfw~PoKKJY>)^y2XB&F$M3 zpMCz@Khl$h6s$vC5Z~j`!L5NH{2|$c|(q^CZg}Li}mIR1A@D zE@_pN(aF_mBrVDB))H-;f8?!AQrpv9aZ!YBjfJS`nTqTRW++*q`v~FKQ8c=7Z$e^x zVq7AV^?tK2*6;GGecbQ$ISol3u$y8$*w_~1R$(qh@_9(24rRnB&=ek)fX+BU84IseLSKQgzQhb9ygWeIWE_ z_3%7m5j(jabtgrUsj<7jAXGjkHkY$xjdqRph?Z(4N_A>f2DeHjS5zB_f$Aa~Dnu<7 z+oD{#4a99IHB=fV8F0H;42N6CkCiK?q3e*cnrif{ z73Ecv3mYq%_6gTgBm_0bvUk7mRyfzZ@ONyu;-Pv5%%kZT`7SzDUSL>Yku?-!<@kVy zCz~`HzgDaE>nhwa#2pieDUGR&;W5MyJ*+#G0qe{aRTqV~Mft14A)q2A&n_%u`*t{( zO_seW{*GHzlSbY&zQz9X*B^NO5Lx5ga9`Ic_p@Ic;%X0$KPh$-y`|Jw>?WBTXvL)%y1J0|VT&Opxnp^=@C^SM)h=<^>%CdYv{gkL0SJDT<(0K7YN_15Xr;Bv9k_qXe|b^8a(m3O_R*T zTuTSO;+863X-2g{M%HU5bbOVXIXqtXMlVwrX)6P^nRo)OdVhY7M7U zqf&F`mSw5Jts`z-sjgBtNms3tbZT_Hika49&!`WM7`F_?HdkF}HqIE*6A{z%HW3C9 zp$*&Bfs%YQ1N(NCK>=)CzVqYV)w@)vf-U@|F^ zOu}TWNdCFCS!bf!r#QuO6k#G91F<~yHlw@WZU`ZJX7QQGn(F#$jPyog4Df~YF&H5M zW(F$bO~hul*%BNH37ng`P3O=h@E09Bjc*y5!{JPz?xcXFcT8_bAihj0(+n~XundbC z>=@=87(Xaskz*w_$0ajnP1b2*{ca3k;;WNLlF2W46_}p`|t;$Pv}81 zkvzRW^xTP4p*1_+A%p)O`Xh9hao2!N=1EO3MPEUn-gz#_tOnYoR~OSGu?QPX|8sG=?TM&rdreY#_vpKqh9Z}m~0k{ z$zsxLtO?W;Z`aCJi`k%;oEnYY5g(WAaDXR8;hEEEG8xs$e&bVeg*$apYIQ10O>stf z=N0~?DOAP1k2~WOX9QtQqAbK>JR0Jmkl-n2zOhY)gf2!fwb>7Vh#&%5b-<@Kzk z3lF@1@4rOY^li<$AmMiZchh2YLtiZr6=BOfcSN8|}PDcdy}I(+u;} z)G5AsY@zN!!$Q*%^W4D;?4?bbFt1WA6X;v1c#MlXjanzZhJb-+_EqR(PV!mU^pe|Fo6_4>chG*nGJNnMoM~!=bmT}QTvu^F3lQW@3#~stA9-ea7SzJRF z>iurzc~b9yL88gX9#Hn$m=Y{B+8_!gH zYgV367BxNkZl^pFjR__3g`ot=uzB<4--HybMXM^#05+%!X#J)#UZ#Fm&F#W<*wJ<5 z@{Z~fezSU->3QjUlS&WNQcGVAB+43_pH{f-#BDFN(@Og!d$pa}4a)gS^wnTrZAGl` zIk+bo72=?UL2ks5DkccEgkW$RF`!DEtAxB3Ub%l%sQ%**LYF7)@4k7)v7OTHhOJ+O z8lHWK7|ycZ4K;grjMz_XV(uEWJ|#GJE&Lw1F;gPx(1Q82nffe!rT#(ngPLXfefsly zom*e3ryP$mcv9B5)shX*G#K5xsbr&6(hw@0b!#zN8LcLxsanil*CM}EO{&$))R-qE zV4#5(`NJq#N>@`#MTx~Nl}a=VBa~$rww{+Hj8YbC(^YPWL@8BgDylLBoaQPge5^OnjvB@RF}P1tF&IMA&n_$@81erGLunhoA9`#R#UXoPOH^o0d>5?5pV9SA$`CNdc4LW0w9q-JKf?@ zR9svwS+q53v*Y7>Hey8B7$4W@>{UFv+qcb@yD1_RW?MYNYy!qTJ+F)puO?`T=Nruj z4&bHmKvU|<3+{~x_r@Z&(5iLThA&1o%!h^Pe{EPa<}_l-Hhn+}bWrwive>|w$Ogt( zk;LR+peP=X67o#wZ*QMUjqji(jvqei?M-a`?Hi#xUJbpMrgGRq@1jZ+J@NRDsqAE9 zeCVg&7HwxQW0+L2*gd*?{jyPn6Z{R0~)=iZ$MkErP^AuBVf?!^lo5%d()+gM(wB} z!j3t28jSlrLW?pk3QLBjJ3_t{mJEaY3x$@*7S3;zp++5>FCeDOTmjF%ok2eLX* zJc(B8HF~}~d;wVa0#S5Hn0%smXN_{&L*QBVnt6ejdwTnq{FK8{hkhcuI@A z3?+$QHNHY8vYw%m`|g{vjBIJx)+qi1#PFA)acEY51P1YVdMgs|b0Cg)?X0}aX?mB# z&;+~qi=lB3JRqXHo5SDpMBWKnKpsg7Jftyb(&G&A=`9WE>39Z<%}XdqzbU=KP?0{~ zFfP3^YoTFY%T@L#<6ktyJ|DNS#m=}_TO5cx+~T9yFIuR(*@?^Ha%Qwj&&}ugt#0Bs zwi>7|&$vxJE@PU0zW!bPCBvl*OJ1&#aC2sAt|QxHa}H~HXG_{LG1FLNTxwix3>&4@ z#x2HkMrJf7GDj`l7_d7Zw?WSOMf@`n$0?uk1Vnh{Jmu3aH!bo)rxR7&v^_S~W_Nh~OuX5_ zq93=*lxn-V@OW%f|>Uu1)X;sd2qqTQnSX9vM13o;=r9lvL}uk zyUw39dqByixxHrfvKbBWsXpx;t#2r=a#k(s5g2}Ro9XB4=ibnPe9$NX=LHcPRVj`cf0b7r5jClr3{@U4dS(oU@T6b{ zZ%P`&SSUw1EZ_!^)-P_ngqEo^{5`8fsgH+4f$kbTaV2(*>FVeg)6Y>EQ|Wk;KFL-Y)|=PI z>(z!h?RYwljhCkCCmE^@&+B(+c4~L%^>+O{{nwNkQ-+!DG|ev(d;&qcR)J<-BLTt&;G-FU%ai%GVBn}~@cm}kJ(6Kpk6wG3U zTa(Vc{CVh)$!8zje8ROQZsy-+UblY|>J0@ELLq-3(GYTf4+Tw7<5mtzY68I!YR?8ELCb+~@jOIvVpu+&3}b z*v>hAjQd8BAiK+z5ii89N4$_hRU4XWXk#y+?F>C=v7y9vQ{o`)K*JcrH}ZG(%jAO5 zOk$Z)XEvc^=~Na#(PBDh4gsIVzf!dgik`;?QI~f?| zg2Y%lfK^BpngP1eY=U&BX0%Ri1~W0!H0x*5W!uGgRa4AAclCCctq;+=L#A~5|+_LT=pDusw$A0o_ht$qPm#Tv+)cb*3s`(WhhZ{;~7QJ z@DN{B7=8C1Ik}Un$xXr*dF)_Qd6dwZc>Ic8WJ7ni`gzyc&^cl|ag-QI!}r>nxg!@h zeop)7I}CjAz8A?r$Ftjs3vGd(v>f)VpVxKl^CEhPLHAURCqoBp3nbe# z#1xkqmlYR?n-uq?{wc$Y26eolg&`QXFOJ8F)wPIs4=6*)kPhbq zl{%edYo+tqZqXInWKB|BQY)R`*2gM7$JWxV+gl{Y zs1yrkcH;q1*sp5X2S-3i*Ni}CDKXKcElx?)YwfW)z8tO3={({fW=FtL>8N&a$6Y4k zgA`ZlUejUIDO1?QU8W*aZ?uYW8LjT}2!+h(r6}YDaSW~!N5hNaiz~wGR-6&EF#1@l z${}7`D!wxfrHe*1)6uT!4MfZp>UrB1U3S;IW-M?T$+Y0{^LKo>WY4|Nk3PQU??0@3 ze#U(pHs3paLs@(uU-qcMdBH`b@QW3MEM8IFF#gZO(>Jm75BKeT|Bbiaz}=q@z`j>b zpIdi<9mT>B>&W%-cC47~HgG0hN~AjCavf@m-eO}C0aK!+vgx#XpC*vgJ~yl(`!qz; zOF6DOa@*$y?dR=ul6{RmXb;=Do!WfSmsQyKy!eYQZshD~;Lt0!duhbdN1umgAd@nb zFEA-SP=uI@xEW=m%4d}I3B;gAK?Cv7au#G%L|$bnj|pNeUW>vNIo2|N`~CZ-z1(B_ z)Cr|a3egSz`bfq4ry7URwe$bh@1YruucC}CKou)g-fyX3Mxdg%W|?M6ic^Mh_x%{%OETBWDxU<(AFmAZef%_+_wn*K~LoG=v&MB8-fEaX?+4S5Z=~QA~I$4!yF)c&A$1|H=Z}4fg z%XGx0E7JAWFnGIlfYpGRs$0&!P^V_Ux;&60+J5sBp z6nK<^z#J@*IUb1QJWY4xj@(*XroEd@)qc*tmQ~No#4Gz%K6Sp_K~rStZ7ApEa+#`J zGlSnFt<=0Ff5eZ;XXLZ0Kjcg5SgTemF~+HQb*52c2G75~$O|*Zxi9h(O^Z9v)dcrf z{Ka~;P6t{p{%DhwqDB(%x|R4Pei^zRoe!uF<37N1NN<$4IKAOZPxssY;=A&Atg7kx zSoDC5?%9zqo=@^zWp|;e9n8xnGlZ|IX{ZQP;g8 z@jblRC44w09}x$Pn}t8Ij)L|!Tfd}x(Sl1o}GosxKOyquSqOPVBA zOJRwN|D}nth@la8QVdQ!dZ5)n_F))Gudq72Stm0xB3h{!-^t2K#0q9_kG@$(%P9NN z6M5mSU7*2(d1svgE#nz}M)RfP8@F^+y6C13wcD$4Cb%_>d6N_6*hC$wAd$WCac1oi z9}$1io%&E0jlN|TVyPt+JDk2{2_ykifjFQ!ULQFEM8wO~1wvXF#HIRb$@Fc1DJq^3 z8qbI`_=So_<(Uc|3zV0wMG;Z5IIjGbgi&vc@!Ry41Y$MBHknHiwTRWlDvwni;u5i$ zigUiwdaliWe*Cm2T=yS*X5%*RkWP~x+g>*6mRSYd|9G!qBg%Gf+1Z#zpT2!q!Q<;2 zpP)6yhHlxjMMTbIUyFqI(>W!&7#jEHD{_1);m5mf$#d+RICpp(RgU)?U?qoD4)*f{% z)_-y=jwYvap)hjNMYp0ni7gZ+uGz2HWs63u)~d8jHv28IF@c!0)+oco7eY{Z6q$}~ zA3fq;!La%3rhZYmw$!ZMo<8BmDKBvU6I+TW^~|2pIEBu;V`Aq=-ftA&jOvE*a2oQ& z0CDhopu(!s#_7AuH>wB9f=Ue6eDbcR28z-rU-JgSm&97rBFO>T!@Ds|y?j2{$|bS8GoKUPX28IcIL}EO+j`bC)bP31JA?AR!452p6JUWHTZ}NkG|@ z;bxKy+$Fh7LX;}DTGU$C*NR;}*SdV#vM*|_)LL8hS?LpNwV#!KVym{awvYN%c}d=X z&dgl`sO@_t+`0dpIp^QcfBt{wOmb1#8eyHhzIc7vW?_qLDAD3AWk=N4{BM`MUHV$Z z3IBhMi?>YWBVN`K=Tu?dCV%=T@#X52Ys*XxnkwVf& zX}e^TQrI_>%=A_xbk1^pB9!a+T=hCD*ge7ga^07iWJQI3LX);y50|H^9S_aDv+u^E zo73-Hz4o?7&%=XTAAcm3+%swvJahA$nn~`dwzKtv2C&B}(q~(l?YNS& zVd~who*Dg1{IzR-I`F{Aq$jo}AKo>XesI(v!n_r@5%c$re&yj?KV8Uu|CLvM^0Q;V z`Wek8Zh&;@1<;NMeI+!n$%hpio@{HeEwpvodTc41UGxZ|AUb^>(TO+#JD3|FNvykF zz(S?!!#+~!`OGZUyY%^NmU=?ja4JFf%~7G~ookjVA?3v#F1D{>LxS!)Fzs*FJv_vU z8y+~{n7{6d^Dnqy-WC1|Th09g7tVd8cIo_$iIHQJ|M_F@b9;dQX8dO8YFnkha;|uh zxTtD%rCzyByj8ru>S5pG4bO2-vADFPxOrK_uZj!G$SOjV8CWV=FRT~WOY0r$<@L_Z z!e()^wAry)-t638v%l6&pQTkznO(J3TI1-h>8?vnPE~EMx=Z?wd}rO=4c};fNP0|u zu=b(4eKkL=DVjjH4|pqrYlYfsS+bR?HH9`u9%nx(~t_nB7ekO}35 zysf;^F|ibvRs}-7l9s?>vTiS5H5GauDi0o=il>&&prdM_n%_9%$P6-n#`YOxhJrD! zLTZ(}@||pQH9b?n4=jfY>ttdD3;MK%KUHttE*gL`z8<1^f=%4SiR{+GVsj}7)lRFJ z425QmNAW5?g|k;W)iNa3@nyJR8XPM8a5{{gQ*b6gmxd>HGO=yjwrxzDOl;e>ZQHhO z+qV7f>|SiuUwgCH-FJ=ZuJfMf8E0*WRh4s@7(kH-ytEJ<*R`bhbv6VcX%cxuUu3+HEI48o;T1 zd-k=!Y{}bsTvTuEsHmv?ud8vVd&6yCy0#~LmU=f~4n3Q_y~soC)0sL2epR-r_wHgR zA^B3hMUF0aFR{XuZmq@Vx;vFukhj|6%GTJTpSKLd+80UEX;K$Xwj?$P?N=S|FVvW; zB!Z7!LlP9n_?tY!_ro*5u>g;4V|v|+tb#^)<-r_%PH?Kn;%Huq}E6I_~|mx z*_}lrIkXoKa202AGZYTVT)zd1Utqxx1@Bos9cx{$BDW}RTD(s;zdS!Ak`^L2*+j8w zdVO~NL3%zqB0g_bXIAkE_O%)CF~2`(iCt-JDT*7sz)Yv@Uou~E+>w$OKKbGZk(Sj( z*lE2`G7g?wmp<*1_ox%M#LlR?<17huFWG9KNKm?>AP#4 zT+cPit5GgCtpxlwz2pH?X+H6jR_32bBm9%BqkbC=xyD|&M z7$i={Dc_|HFD{j@3W^jVa7|^}HM3UvQO#I$9i7;Een&uXqm255lDnK2x6W(=vcJ*A zxJ^mN|52ZN_`J`Hvs{DbNZ*^k)1>3yeJsaxn1sE2?DIPSr#1bsoS zlx_ZMF@L^m@#0z154w*GMISMc-uNL|nm_C7s26pk`}N7Wg*R7;&&b2L6R471H)+7<}+lffo2!8gS@ zkzJQt)ZN-|Hu2IQ`- zUywdYJQr>ne17o%CV%5p9Iy|+TK|)R?(v!cRA^out`J%D2&5AB;!Gs(-SmBEH`V>R zF81qR6k?BD%K7i_0wz4Wc0Pddq)c{5#~qp%k6pR`1dLwSq=NFpmd+N_QWFKZ*UH*? z8mB5hNU+UZCYf~P=432imULE<07fH_7iFh6v$Gx#2?upzp-g5FGU1#Nqd1z42e`ObF|~mO|i2f4}VWJNvZ@? zx}?nu@u3%I8@7?T>345cOp?Fst~dtn?4xnFV>7lZUhmfIc}724P1kQykB>K zOsBBOoar`s6M0X6kHp;Wt2QoMS|=1~r^MhnRid=oxm}&<_M{tbMV`c!%1CJ*t=kV< zW&OQ+2z$sX*fv+ICQ$zjMp(0hfponN3&d5R2^T|7a<^Dm{{vrNe1 zPTyF)zsf=9x*hE*#f=*}X7GL*ld1zK?;7r=`&oF$KIR?2Y~JM5{Vi(M8u>KdHh3M9 zcR6I!s%$SXMJ5M9PMxqVyOr<&>>)@Z#ftO|8IEJ$vo|zjk^VTzL>{itgWP!lN-v@m zitf3Yy*ifsF9Z>}8bks~5-Ri}eYLrMsRtuWm)sem;^LQgonvk4;x-XQ`&%pNHA$I# zy=5;ea(=F%-ysi9Pbuf$OKs~07uXT!5mIj{v%%HC;6X$48c=lBe zn(FGs+u*ml9CSqf!xi`$Yn5p+yD2%zEuIyPZQ0K2$QkaN zrEM>(>l27ls5rmohFAa8V&TIW{hg?#82j8AtND}C&8&W}QkPL~Cr&3NIzlqU)u-8GiiMPJ*viJq6dLhG$RgSc=n}%C{ve37_l{q0O7ncFZ^J9~bSh zn~=VJ;j=2$4dD<5zQdkWONVS;TDSEAGFYWu^Cqrc`iL=oY|cn85j%+V@in!4lfW$r zJPGl`5Kkl7#+FV|E*p}9JnxR0R#A=#GI{QZ%*c=s(1Y824{xdv21}O~Ps%`?EB3JV zImY6Nj#rot-HGoae$DCfy}6MQ^nk$=~@ zKSR#qlq;=tv~Pya%V_MJS4I~l41JcNwd{+C1lVu3R-fH47v>LWABqw=8>Jvl(#Abf zgNPYAchYlPq!X0ouyhh6d?G^Y&Twez1) z@F8`sTStR`A$_)vmQFqg)HWrF4)DW2kgj*t<%~H`2$CJ|K z+vs&3!UWvQ$<^(0vN#McAGEITQg}%U7~^g}9t<`9rp)t1wEnCKNLy+VG#8d7 zFJ<@qmHvzOwhbhrSnj5Gd?R2r4#dJwFLY%W1`PKd27r$59_l+Pu6wNa9RK(IueULJ z@1*$6@$GZ`=G&&%5!MeDJ|}I~OJdmX`^4q}E&h10b@?wofBKYd_@Q=wd;8qqsfqgS z)8QLgX+3k>N0E=K53Tn&vEGhf)^w#?;E|qXZB4_;BmbJZqV<{}6KfJs4Oja$AK zXvGz*e06qBh0OT2CE%K~4STMpa|-%=%eu^Y{gFUGK-~I1LfQ8Q#;=+W4Lh@QlOT)$ zvCHL`SX$Z~U-+0~FJJV%ugfjcB{Y<}uA1<`vb4v11k}*F#u*>7W?+j;;sfG70bp0; zqwj}&4oUnM#Nuznd<~hq*Te{S2ybKAU)g*QCO?yW3$w4EVRUCc3zSY;84i>1@bCDq zirZsy3h6LO!NH^M8*@>D{-DhUR}QV?d9_-9@827)iY^>Vp!PR@msO$7^SWlHx15jm#&EaLjP7Axmvn;C$i#3Z%rEQJ|o*SzEM63LUwV4 zm#qPcbn6~9HY0sHJsdD<;|W~ZYRgUYq- z2W^M;vFyj`DA)@F+kE&y$x8^}*RI2Dzd}WuDm=Z0L!-&V^2r2?JTpBNMx$BJF-oGm z63EnvMx!ajTfIiRYPxOpHSVWt+IhBrk*C+Y)HUx{;A;n1^n>2-fT2z0lik9?v>ZQE z3N*BC2VBqTHR|J8KfGwx`FZgT2Z%Pcl}!YY7PR}C_rtSvkJag8O5NFN)+K6RdXESE zDXS0r5d*V2^kZ-TSDAtNr51q;+p_p_zy$tS)t%B09H@=?k50v8uqZ}mwJ{bXi=AFa zTN`UmjLc?jJWvuXv(^+3mHD6J|1&6JKq;>ak!V60_zz8vp7_lKPOXx1pbP%_>jkY8 z^J?}|PvTy~PEps>FM7Lwk4bEDh?B5(c8I4f;u!!QSjzM!2rh4QhX)Pg{srUSbkya- zNi2n=!iVEv{mBLtr;VD`xOZKCO z$_2#=GGad@1YdPRnRZC{)j{>NKqF=93&K(~0LhhO7?lq$7OXpuQCt@+9f;;=oMcdh z^aS*(7&7liO}Ww;J71tBuZi+6C&+-EX}D?x3-evVGmME4LMqKaD9Z`WT$2!m)h+bt z+Gv{yU@0tNf_~S*g!P548C`q-J-Gc>akaX~K4h{e+dP(Gi&C1{fPI6M*3ii4yt4x5?h|Lcn7gr%!DFn{Y@~k!a!20Hhp8tJRibC$;#AH zt~R82yNxuw|D$wWbEZP_q#ki(yWN|J*)c&=^Q@U-Fm*8g7ne4T4XZT3;AFAl_!TqT znR%nTY8i(gR2_CQq)8ss%JxG7C#KuZdTya5oRB@0)s%XXTcu>Mj!~@}vrS3051VvIqmr@N;=S-y#|TS&o!K0xu?6Gs$X|{b{oB8M zC?F<%YbDgC@-`C5tJK0H7*}09D391$oyjD7$u9jx4DK@-E4%yJlNR&rYPg{cPfjrFM)F43aVV)261rnVC`9%R!?r)Fe_ z+QRD;W!lWzvoqPCk;;_RHcuKpzI5IurrgVEIiaNJv@<2E*6--g$FelQnL4%&G{}t% zxsyW8G8Ok3OvHe7U3<1;8Q9`^B_qse@PCYumPECx51NhWsaGTSd#^Vd?K3sDM1IF9 zRUspsXXfbz=Sls?>qzSwtsacY$b8HWrx#adS#0-8RU-OBi?J8EqjzgM@i#A7#hU_H z-;vsb!#g;}Pg{ePsaUdfj;u?}&>qt)N#2*>pQJZKDTUW3So@FhAK=gy}$N zOh&Y+ptTS`iYNZ0X<#8+67}@V$sH zPkwQfo6L1=5caaDmegl}oGeQE24-xLxwMjXY=7H%zy2c&$CQ~0x(LyQRADQ9vWohJ zBrju`D}B_cl1CDeBy6Q59JpZTe4)#wWFh-X9-Rb+mI$0M{j^`?yql2v=Yk@wDT%U0 zo4mByJ_@WvNtB(E?6Wx|Y7JcFJ>K#!s&A-nZG_8lW1e`GW{uVgpdY6;c~%+~F&Wun zqYf_Pq7VHx`09Hbu8aXhII})CxU})6;*ckeiMf1N3_mBsHboPvaD)pexFKm$CtB2C zX(s^=I3hC2dgCsLHDj8mB4Wf}n6(0YSP(>FRovM!jEafn`(Zh?P!?Gv#RcRAVo}c$ zL#@BG;NB2Q{S~6@SFFvt?LEB9W`99_K1uMKk<`3k1#(^XRaKQEDuiM!3%W8A!)`bK z_~0&Kz+4Ipsk90v7hh-#rj_AgstLA`U~mfAi$p^z+fF=W7Kzfs60@CKaFx4eZY)78 zB&|E8UFcnh2afq621yl1Y0#tc<_B&okAqv3kd#HeBW8&;>t0h4gO@$4wDqfC!QQeZ zd?Q+?CFB(veJC{OT|%tnNwe3bF(sfdUhm|Fi66ph8;z)+W)xH}c`hQ-GP<%x73y*q z+Rwl?+q5If4V6ci)ag!kuB{eYr~_N!FC%G}4dtG`6G+o@)>xfH2eVWX^qjhG61ee5uH1hAi*9WyHWLBY@p3)Z3hR z?;-CgOx5<2!`_*m)jX3qWqa5bc7TUGo9}Vm%Q{{3k1cVSmbHYG!CdHDWowb=hbr%3 z^X7fx=q+8{>t;I}*u>*PoPfseCdmO==rhANGRWs`7>7{W{Zvsk1eS+Z1Zt5~TLafF zCG4rb7h*4~GM=0cVp0l_O>!`hvaqh#hDPHNd$k-3JVKI&qwVK-kbeo%`J;U zS%+N!mk=<3rKydu_rv}HVx)!#>hYIb2ts6IX;wCJB!;41$->O_?<}WBjb;&5W~8lP z7fn>RV3A{481Z%Ji^KC*`;H8qYb2A7tzst;wpRmR1SJ_k`a=O!kBs&>ZTABt4aT&} zt=S-<>U4G5O z0iNGFA~j?~je9=WdH;=LNQu`Cm8gG?IqW|N0RD|UqxXNs4UGRkaRUJ}Gy8vd8vZ26 z{EAZdHnSmdW-^H2g=Oc;K2=d7(M zHV9spJCvYXxxmY*VC$Ypi~S3WYx*aBvXMXujlaGx%uy4Da8_iCG8es zL;{+S=MgEn2qYz)#3G=JjAKy}Q{qxQ6Lf||xQU!1x_keS4PzG8V!E~t#lk!C#4XZ3 z1SjO0J<4Qq4i~r(T`-o^6da}C7)e4)&IEOA#50$6@RY<2V?_qMjT(#$tc?F@)VTI^*GXPp zxzqZ@obAI*gAbeVCk}`x$O|y_K!Mi}1A+IG^a~RzU<%7KUw2Z>2(4sGU#6X|n!AYD z-n64`-XFf$k(y-bhGYBJMd{3(;Mmjr>JFc=>an}~`uX$j)BDO()41CBy5U*ded4Vm z@T;!RBTnCVxnaVC^*hkxmm`{AL%GGWlYW=U*?aW?z$} z&Xwq$Y(*|Wuw_7D-CZRe4)fUf+&+1z04au+5Uwlwbf*FL-MkDFYVA|LMdz@Uf@fKU z)`E(MeD>R2*x!#(eqPfJ6DuC)Q5%wnj3T$Xy6sgTp9YVsi%Pe@G~`#<)mDAm%r@Zt zD75hPKxVl8t1k*VC$5owf;f6m`wlPZ-7{K!f6gPcfzP|eWlXOj=QY82K~K$AKSmJ| z7J<+GDajmn!|n}qcZ7Ev1pAU4Xo{rAuUtO7!zYKYsy z^V0Q6OHUo4eB<{hGmH{yLP#$Z##FQN#^?vh-j&nJVGCZ!0!H-{mE>-#>%yZ$J&&yH zCU%v4ai0M&M9GF0t^G3Y2+f^k-)SQ{OFmLYBE$gL2sF7%JfgR(J?J#a)9s-cP`Sqx zx3|hIL=IUmmW7SP-PwM$oRd?uzom|k z%%L+RZ>KzeAUR@Pzp=u4b^47|^|=L|@oi5*PA_rdT!7BuYDsnF#?I?BJbp2ie~0NO z>%ccpEGiHXV5%W+TZ@eDLtR7b7o|c4IcB~q<8NWP>DBnX2hFB3>vti6ls{-2dXU|2hE;27cAL6-N>{>dY z1ioM_C&a$vfLED0#%ol6wJA9KR+dz0XXY0jq#=QMIQEx6w9;zbp}jw&FmBE z-3}YJ`RnTlzbhG~up8;cuJeR#ebr(8zA=8*p_g$3_4E#f@+(ZM9aap=m%tOQ`QJs9 zh<^0D)_Aln`mQpWB<$EjwFb^gQ602JLbwc9EKZPtzb+UR%mD>rjOc`h;Q+2$)ZRAn zfoID2a8DP{5(U=@(eeb*CU{tAl{q}cFs2KH4(Tf!So6=X#Uu9eZnPTxL*Ud$zIWR= zdTxEpdruhZfX-uU6bN_x*l=t@%^qS7I$mko`7vz+|GZ71H;b@j$37a|;(G3(x8;S- zCA=UnbN=aVaO(=0+vz=p#XT)nh?2#0wMQSp+0k zCX5noLcvWT7DG@X0J-vu?I3~y> zWrt=z7Q`;7^I81Z^*n*bB9;}R452%?QXumjd(hEZ*5udR;3H*OFWv#R22m}FRh+Uj zq`updj%W%|8^RtC4VTt&mAasd#YRW;whNq`I%0R=ujN7+{d^jJl{h7UNFJ_Zh z6uqhmJIkPWCS5>x6y%j*FONJSW+3s*5Yl@St0+pEg1wG+y)M0c8MOxKLxa8=Ym2u= zXN$L_Uj#fAzuZ#}J~x+c3SJ1BZIwMEzS@IFah>Uo$MNFHvyNVGBfTU!rPoyE*a35= zfwU;fnZDPtr|-w4A^c*&U-w@8JiW*7YDZnOft<14u&$xT{f^+VpG3BEc!V2|n{!+G zItW=KvJ3(520>l{4IinuBB$%qoB(7pQ<|cUr&HPLI!auC1u&D;WObE+feO*($ke4J-JT|!^#{~vxM*4GO!elb z8ePZX4QF-T=AR48n(mtq{wC|SHJ`y~_HD1p>eg+a(QMzXCilrduDg!6-rBdjFMWXs z-{`CIJ7y+MbsWY{0zp z*>vkph;P^9jb~_V7odM0Ar=>KHY6FLZFyc~*(dFM=+=f*JFv;v2j8%|#&|AO{-;CH zLx77!`xx^9xLv2mdhZzoFnMh!-VV`$ydAhryp4Hte*<+BeuML>dc)t|+UZJ40fh)P z4;2m-h%82;lQM?1EaGYCW~gG=JLDfei1dg|jZ~S4C*eVJ{#?YK$oHAzUHLr#45TYK z$hOfLiksIRJGZkszr!w#Fix>~r1@a-Pz|z*@RjotW7oN5Q}5dGucWtw@V&W{isi{| ze!JGwjXuA_9o@aJeT)tZ3XBf|N<;|McME#9z1dmn%C7Evd$F^!ld_}Q-Hy+Hcb|qF zqL|h8GgOkupWF6xBI;3|WacU)ai0H8m1kUf6GcL;7UJ0au- zP+zdE{ht58_b{w?s9tc``wnHn#dWY3`kYpQsB^!b=OAV0V5tpIoBC2o(pl@UYW$q* z(75)2+MsKSw5OKsusZfNc>-<=!KyJr*pd`R5bh{^!bTMYQLoPg$SvG(_y>^PkO1NM zMjT@LBx3vIZ}2_@hXlOfMEW8^Dj)# zJ9M7F`LhAtCnMMqL;k2h-+|FJe2BQ#U+_b2AyJIs<1z+Ri*wOX0`btu^Mg*N1A=Km zfsE0pSMUckAA(D42F98sE@7>$hFjtt~5e-YCn2JJyh>Lt*I3(_Np>oneAVulpc zVleM8vkbrYAhUuB?+9@Mk?;7tf{^WzJnWg|`mNUdInM@lrUt#TB2x8%KY{OnY)3%46@!KH3`yVL%H_*4ou!L zeBtT__2xtQ_%r|7VRVG1OV7wny__7+VOr-lKNv=)!{Vo-cDzb!LL5|91}BGmAQ>4I z;lh1kh+HqStRRwxC0sroueSSVeLRbU@O*d-eRP#4bymq)RGi;0soBz7bZVmpP5)d? z(k;;O!YgK%IKM6w3H1b)!N|FIao@uI!-?lgK9j2|^d`%hqvR^y+6Mzhhk!1Kv||&=xtaLK8ZQUBa~e&EHpsci?ZVY)LIed;`aXJh zS^(j2(?vqEXF?R0`ET-@!vPYKlqkM&WHZ-4f|hL6am_K$Al%J%Iep9S+PPma>R?qQ zPb3w3l9NO-OZlIN=GIncj!cTJ|;1#cxLb_LQPd zX^kwEiDpsU8=a2_nREdVc%@XgW2|hZ{y#$bG$LZ17$`WO%Un-Hq$a12gyHhjGqKVX zvXDMLp~W15?2gqN2@1 zW|q_Ou@Vx-9LrK(b}q-EUHm(}Eg<4J-N)@42E-ve9Vs80T2DQ;+OJWsle7JwVR&sqOTAqM1wFfK z18lX0h^}CHJcV_{Z=#EFV;Tj{w&?3|6wAO!vLAgQ8u)TH_<58$Qc+(+Q!>r zuxv$VpUTl|m=z>l3E?F5q);?bm!aI|4I7bqX{Usa)LmJf+}-+ugN`%o$D7deqOi$D z*YCzi77cZ)y%72B?NNr1Uy%s*iBk~EH)x*PmxamAXnk6gZF`eMH;s?VpR3O%h}cgP zP!7rrW#K3`ocbFDd5Snqjv+8Fjv%#9Tz}V3eRz-7`jwr3{p+8< za2lW0@X0?J`-T*XFy!`jTrUTjL)r zANtzzaJ6G~r$Mbn57Bp+R$XF8l_PLE&UB0!rM;lJr@2tI;dJP<=y)r^(RU`1ld7ml z0TK0PsXP5eGPGdc=#f;*8_G0S`*pao$G^e$*W)vU9zU;G>1H-rt=?l zXU)G{XJFY{d1ZORx$frUHba@x+ygLq`ZG!1ei&^(B?jpK9DhJyxb}_GTx@U@v}Y3J zpx{?AA(SJNV?f1&aY9QdG-;X*+ND2NVEt?xiv0GjrX{s2xUfE`#hjhuLf^{g3`mBT zMi-er&zhK4GrQg9#|*liO5HVAff@l4oY6Nbzd1zjSRwdTYbOjUibvInpg~GE(+bBBv*x6&kU+cv$=tfKdI%q zq*=1VrE6j=224$g*ACcth0Z-i9W==nL;MFgTBn>9!Akq8F2IvTmPhDih7EI{)+)l@ zgJKinWee^Yu?w$kCj~#H>)KY~Pv~#y%MHqPIn|{VX5=jU8WnEBxwhf4wqPj_fHQYc zynL=(K@Yh)!3*3v+4YKPnJklJdZ$C-qYKCqL zk7XPapLrw$$_5^j=Y_{903YD<>-G`wIp|B~_w0r#8agQe3JU}ioG~7S%%5VG?2b0BV|Wcm73?uTd2)O3)GEr{pJB}@~d(|v@(6)Bk3|h%a!iX0R`+7 zC0-*anuRh|3~4Op3CvzPTCKuaCmQVX&M`N4_UNU<9A%4~HaKvx)Rq+V)Yz;IU9gjr zNF*K%An_YF#XgUQ0CAe$c+{7geb+p~pFt^g`4F6yPsU|oW{}b&@#J1%6s>OCW1#Jf zcvS5a4J{g^?Ya2kIohren|W+In43O1FVxsP%?^Ef9V8#ux6A#6r3x#8o=hSJs)G;6 zl5>pWg=pMNS_)F_2O64m8vrazxUo2r zgA-?m1c%AF$xKuOlT(-aimY8;Rg`NCmZYA7uFDG{kPxOtAa6Jg6%!9J?_x1oTmQLV zkkflc@v!ga=ke!k*Lv57k1slJryVOiUm*>z&eiS51vOyR_2*l$3wd%bbk=Ti1C*e* zunU$eXwd0aqf>rS2WxSP(-V=^$$-f;fhOYIYBSpLJ4me$vXK=(eLS7Mkj@dt&Z+e8 z@87q_CUD)iN%5lOBpeVXc0CgMnCJU);zC4t&j2vyzXj;pGdO81&H(YBfPAUa;of<` zM>_qn>+Db&$8W^l!(Kec8MF?>Zl;)-&iM z3eJp-Dkg>LH2O)ZBg={!u=j%$%C(CdmoDX%yYaI4Gnp_V`9j;SOv&!eWYZ)oAC5Sw<%ZTZy>B!_%0T>3*P+FSNV+j{yt__?_ z+)Z3hTnOAy+)^CV(343=)XtQ)jWUU|Tv)T*3|ryo3QFdSuhB`Llk)h7C7<{bpM<@{ zOhI=|F3O%N?X_Q$^{tck1l=+iK$^c+-!+T5d5w^=Dz2c+f2vK0b)Rt0-|z9+r+h(n zX&&*rr+asOVRm91dz4GMc#Ts4XT3d7zI<@oqn?+g)5D*3Y`ok;2|whL8^DWQ=Uhia z8V|Hn#^KEj(m7Q-r=%WV~o)2WoJdw3|wWJ7SC890I4u9Ritl}QsNq0PzKC^efQ^}qJ)^Y@aVpcZ>29aFRB|o-3!E5t^tXK%!4oD z!zi=L^=3Xk&AnV#4zwv*zHEy?4ev&(Z9f}~ma%wDRv{%Fsph!K0}5CYhj^7m17~qq zd6?9d3i28Bd5C4m=x)95+>_o)2kmpq&N$GeH|WK^{FiF*EJ zjHSa@Y0pi@v*>n909-8HrqlTh@-aDDihQSo@XrNA#ful&S1i+(=Mj(`#l5bMQ2DU` zFxCL6%TsW^@kBV|X{Ppc!Z?nl=?M?dC~L&HK5K_0b&`z4w$Oe^eZs$JlhN^4YO*K^ z2XU~Hpr!``BV0Un2oNji;07XPHpP3AL&rS*$jt&LBFI@Mr>M`J|T3m>;nDDoGuDc~orU`L{xkQx^Siw%mCWbJ_j>V_X>?>}s5hkB=~A*rH6h0- ztq2{=_i?9gXv@%s*_O?g{g$;dUrR8AhiX58$P3Z29QNHPh)9vgm~yLvF#JHJgmZSv z?;&QaUnN#UCq>2~WLm|cY;iLy6Rwu?O2yv-3C5vN-;Ay!=mJA-iiV8_sTjgf1*IH) zohDvu?k#vPCZ3~XGI&eGjeAbr5OUoh_ugo32^Xqsg@DoDk);^te7cy_b?1vgu4n%N zY!Xk)e!~}OwD6mL0m3)^d&>oo2=j6ZI{-SQ`y>AgbBfebO5H=mxbpsEC;E*gK$11S zI{s*20xS4k#!*&g;j{GV?;a#|lXY}PkMN*OwT9&)o8=}eSW_EAW~Br?J=5lN!*JEQ zKoOn+Z2z2?=`Oc{kmlG;`5X@M8ZI-|m>%VvM80FxbW+2?ZI=B2e&5ldCED}T6wS^P zfgGmFWm;C6|M#~~R#Hr?{F!1g%k9qSmuHA*;65U0(IRBRIl|5in{#8wpX5BbKa~yb z^GQ|%zZ2aJ$5jzeHsX)Rhna-C^`!Vq{-K5mqw8w3eQx z?3{xChMWes2DJv;!mAH5I&jIYR;`(CTW#BHTk@Lmny6OSXGG9iV59OhW|yJCEst2H znk5_&8PLvav1l?6i*+4 zU;pra$Lp#8IaxqYQBor@!ng%I+=V^VjtTP^CkH0ajtNh6uPc&8+C^Ecz=mqJh`D9x7VyuIly`nB#f7xVx*`q1)faT5MntIA?~k09`x%lWjO%fTa7TxlqSAIHpTJB4d?J;g0h?xO`4ou37$GUR~~BVRiC! z^s}~s|0y3-bZ$^s(i&p)HcUwqnamJgAsPDDNs3?HOJ?b;AnC2@?dvV!EyInp$BhC$ zyBeLGm}Hg=pH2!}4<*^OF|ANYvG&z35a%U(hsj5jJVzKDI10702?)d&2jvk02RaE39`Ip7XiY0zo=Y39oEbQ~= zY4oON$>YjIaBQp0m)YN~J3_5=`k$Biwkg1VzOTtrN{Si{Wrq6ctxx-MrYc^$?bJb9 z3W7^E&Ze8*y~*V(p6Zf8O_KjlA;L`}J*{np9!F(QOjTYqRgO#q%zoUV>@qPT^q{kJ zzHV8%PKmK{N%`86DVNE|cu^qbfK_~?)xK%sdWojcjIW&P;AA6cslFC5?_Vx=vsecy zgH!l`Dh4z!Q(i9=+7>XVp7gH>)Uh{3`H@+h;-dJ0dn=lx*Wp z!ADJ+FtHrs#I~+8ikLY_dW9m>inCCUPhksSlXRP6?2XHgW4U*f4{LE z;3o+Klb%VYqPcuOux0zm?^&iul&Cxp7ja5OE%z(tQtW3r(YkK2QnNyA;02d4GcJ`4LLxKI z*Yfa^A5I%A3OvwKN~*)I*OL_=?>e2$xleeU3OUMVA9hJ^i7vbFu~C}7TL1?>ISge=xR38reE^# z%ExMW-31$2osUqH$8anXm(p5%H&wa@$Fn+wgTRP(IPbh4{k$uxaJ2u{s>ZI;u1Z)s zI9k^+B=sAn`lFyjNq3SpQ%m7~fh5J`sjAv6cZ!M+v#kQJbnY5~?mOQ?q%0C|+#s>h z-im4ug^=7VCPW|kn=sRcCJ8waXKN7GDQz6%^&P?N(be}c5Wt-TGL8K`eOPjP;rSv%4rn9Y9-Qbg;Tx~yKwbcPP%85Nadw{G54q#GK*2uY`j zMP-&WqDz@#g0eQsOb4e~(KL2OH8)FCsT5uONN|g@&G94S@PX8APH4+2bW=Itk^W0h z)>c(|+7J!}}Og20e3nN9%yhf$XgU zMR%m#rpH;dOK4}wNFz(uT835(EgP?!ahuYuD#{gTua@EfNC{OYO7HekpOT9#osgfu zOx28+Ri~|3102-V?{@lxf0Jf4D0DDtl=3`!zf2vpmuq8twoaJCsFQ|P z3@Hw+3vgU-m$oac)(?xMlA;g)!hO^kd%zUZWjRp>e^nGkqyaACfw*|V@QmP{%&}Ex zTWei&UE{tMzslW|-(>A%$_9w_zr~`C*QeJ@8)_SF8nTbt#BO6-#zY5=ooAa`ArGGk zJ{mkyKFXWIP2HcIO%|?-w2Dvis!ZV26D&TNrQ*<;!>0yXqw!lwXsT?4-s1WsB36)2%=jb+->8lU&gfPa5EYsb zr+i3V+IDmwQ32F%dAh!1z6v&LvqQgE@H~CamwN(>S<&V37oSexUQxP|w3&@3BC4N# zy`~0>xgrWKT%}mwwS!#~0s*E;rLAX~&(|Nie-ud3z)*CA|WftMvNo$lH6vd{(*%6_sy1` zc6ETjulL7NbpAT))TXy)1hh9j-)a7;a<8SoAi3*wRS5?|Az5Oae-m88@chl_ofLGq zEZv6(URdS^Xhr}19V;v0pS#MICMW*{r?%UW|G9UEpDj|uVn10w|H1ZnneOH-fjC8Y zJ&3lly$uj1JzNjh+d1f@9=V~ix}P~#Hziw&P^1ZuHc;YE2DH#fcHkARo^d~^JA<)N ztdS8)F{d#JC$)Fw8C-DbUn->Jr_;|7`A}^|QcYz0dv+^+g&xYZ%bIpX5wPcps-|;* z^t!s4wx0aJUO zb*m7w&jYbyGN$!3T2;5ewcv_jnulODtD1bdf`(kc4l@mUkW#2mWRQ)UGP4CP(G04R zy;F7cWMup~^7uevN(=0$${eQOACW)UiN`S_E;M>?WzO=|9$X4Q$*DUx+|0|wRnm;U~zk)^v^ z&3D0Aem4Vr>BV2Y>>QJ%RIaObU#>Olw4&sXCKwOwLESdV;HDc!Fp;K{IBN9PlzO4{Fxp^k+?4l{o&>}b{U_rfcOi93eW>A??J&U$mG{UF3~5cVID}yN zO!k`KnK9cyiSLX27c*#B)crA14ECtnH2wWA8RBSJ?U469;kIaer`fRDz{D)3!EJ)Q zK-e8Q%|hX_j`DcP?O>imErCE%2~|H;_S9xd`KJ29*?Gq@qXD;E-D`a&7!`Unb`W}_ zd9HWPupf|g^4}I9KZXo2}87Te;dtVqHIDPMoaENYQd9_S-a{Q`$fo(pr*5GmzsxHoB8$jzoBk`u8R>etzljZ5f6`DiT$g6FW3_SVwFK5vwyaFLMu{E3Bsw8 z+w-Ruk*J!WiQRl{sA&xF$?;*IOjE}0?;YLt1M6d3WeMz}(<1dE^fOO(<3Z@M&}9*A zX`B_v3X}}SpbbTan4Ee;UD{_>Bx~e;L&4#{YzsO+e{&g^p=O%vTJ zOIk8ER1ZLjeNJJS&1vasO|jr=IzIw~yvcIe zyKHxEB@cy4rHb!G51w@JCWp_rMd~wpP8D|@3aUzO=eQ=%%TX%ZhR-x*iz4vorlkU~ zHjFS0CPndcw@G#~K-FlEdfx&(>Cv`2&Z`r|)L=fS>W!M$Y89hsi1r?8i8Uluh<$_) zwn|bXc((!?#`ikIj}$+tFZZ||+i8&-Ery`zhnRh}3EdDB?V*hOBp4TjyqgVu=>nzf z3%CgDNdsC`pVR>pA8&Y(L*r_{Zztg>RbX~9;5K0$x|PQC;|a@?MQ+gm-+qqWLQy{{ zURxuW!VNY|BxpQ9rDfz+jMEiJygHMUu(Xfcfmj+OYTT}`QvHI=Rr#fIbE{$B*kH27 z2J5Gr#ubF+7J~^w308T@6~Wy>P76d;eY8EP5!vrsB3iMN6>?V%T6;G6?^=bm5A6TK zl~JJ9R+_nFshEE&$pEz|_xVzHx|B0&;%jj|$d1U zOsn{eg}2~=c@>I_CRVS^H*1HMiI3a-@>Zbc+}1pqcQ`8uCi{X(itSWD&^j&-=nuq3 zW!|sAsLk~19Q%p%YC+EIz0i%3eeTzoi8>Q_&AnyfSV&PPQpTZD0j8S0gj0 z{Fw75p4n1QT;s1)J#KE)u$d;A9c3b%o9}ZK%`X<>Br=`2wXzG0ePhUja_6IKbC_6~ z_E`PIcUb&jNp--Kvwg12YqSWG`DC`rTK+56pPtCi(v>XLh5t?!^K-#QVG_xv ziz|z^!aFgPy-UR9BFrZQz^0u=rt{lmPKZq6VH9l){HA3~&1v#8r*8P&hLv)gv|FxW z^m67Z&OLtlQp^c6>PA&o49)NJd!lJ<=KqFU0{%0&B|dHirA%N>+_OxTMqi3vqe zs2HbuCsN4utu|y{o<7MAb-lBRRIHGO_l5KJ4HsZ&^|+34ZuW3tyb@5H&pg`0ppyaS z?qARR8>nb@T%E9Kk4ZJ+-=c$tpkOkXI?q(NB2q%LS?TB?dkcjt`f!NMYBlM2yYS%m z8qvr@=XaeDSCk7qXgfEis}llcnq;^p9n|)4%53_<&aDEIKsreum4QO#9J>wS03i<; zya`^6L>mhBmHRy5P|Os5=4zSO>bD+LLkdd{8^t~johPASokcvRkNX)WKCe`QWRHr;3WS%)qA#sN!@@Cf*BL?)9~#7S%SAaQ@v#;GX6-%ZWY# zTQAxK9qr2-sk+-@DJFU%EB~;c8oQXAz)mgo14>MsO!j0SJ^mMTFa#l%WfbT8g_n(R z{(z;K{i*}!-e`{P!!#};-fBOyhO_in@RQl*IeC&QCR-UuyXYf3dK&FG2oVCdu< zXq<3nT-Aln##1F^SP|}Td(t+44)!kU&S+q(L#~li_w;+$X4CDZ9}fsC?Kl39E+8Ko z9OxvJ<4|+g)m*9zP_ z-xEHe9FhHA6EGSHrP;SQzTom=iG8ag|2&(+>Hv{qgy?zY@%!H8{yQnwCKdX+?N@e^ zW3jm_*07ZL*j(AFPt`8xY06n|K*;QueV(UYTT0vWotP;O!iWytQe{Xs_ZGe7qizn6a1}*s> z`#qe*NgPM~ft+1tR?}wLBAR<3`;}8427W`x(UTXHBkkA4OM>oFk+n->fi)@StQD&_ z(#4X*^rj3hKBl&aW1h||*L%&9&8gFQuyy~`CHM#XmBcZBa-qH2`Gap0BwGd72mC4e z2ZjaCW+9H~M^$ecUF2BEcHJ|%;1mmi|I(+VO zEi*dODRvUlrZz=0C$o6s994?N*QH9IFUsZ_AIFizoMp`EZNw%H#}u9~AQkF2nu~54 zNfmVVZx#M714fdyhW^mr3Y3;*6qZu-ztTAxY=&(2%|N?zhN*qk)OiNUd-N7`v}D+b zZBK6^wJ9tzBwhSKz4O3dg7l2TS^5l)&SeqqyB^5j>EO!eTcm{(iH-`+K5pX;AC+>l3H_{ZbL`;4OxFGD7R$_r%45PAm4~~ho13)%+KWBoG6L-cIib&hPR^X z5SVq@T71LjQs;_Sn&vV7(eq1muWQo*1I}F|n`~_;u5pzrv%%WFZ$#}s-oA`Me@KDj z+7lC@&{+(3ZE9bkWW~i+WD6d6)mJ+9TNJzD6`R%kR&>?XwvoSx$En$WqlTC-#K)!h z<7EGX*lH`Bpq|SqYH#iR>ehPwQTiwyoMTbsTI%rf_s7P!EoH#K$36_(7x%pa!f*c!PYkc9zQ|2(tPgQ7wsM3spR9X9 z0WZ2qH<2u38@;r5oi~;zjvd%qLAh+Fs~$aEbvVNvZilO{S6g~Ii>CtbHnTT@=kM#8 z6087)`fre0#Pi$k9EtWFQZ8-HvRK>FVSlUoZb4pCrHU@EM9fO_rgAtO4k@%7tM=gy z_nUaFI|G0~>|*`(TVzcU?FX(G_#j(%LH98jxzli- z+FsBV?KwRF!sEy<$Z=y=B3nHb!?9zJP&;DUeA>NEVbE9l%F%^m*riKTm`$iP zdybz&_xlU#W&vPFD&5J`_h)o3xxN$$9gt?E`s&p8V=1Zx8wg$`x&)S$0koLu!k@mt zs58CQ?da|g{E4Ae>fvVv>%7lc#w>B1xHc^WIb`Q)={&w-W`)s|W&;Wgk&~}kC^eqN7 z&-c5p$v4_>o#3v#Hxg<`@3rY>_Dw$EFGQ^&$8O%fRHZPFXqqlF7OZITE!Bs`X4yUO zL)#r(E|_ZZSsEGQ#*RIBSPg7-Q${j%GJkX|SZ6}oXh&wu63b(i>y+6;w?w=j4SdO% z4(6u~*mxkf;pi>0abfnh@S=;&Z6{kb9j1Mfb$Of~95cq0;z@kc*t$-NcABZ_tl05G z72<3>)g*4Y` zacR=o98SgoChv?vTQ@be$(>@fy}ibjIH*;@L3r$_%u+WVj4^9~6~F>utA5 zqu{iAfY#*fK9lPePx$OH;Pta72rUrC4ZM0k;;Ge>UZ*$t#;76!JY|H&M5PA*)R+L( z7}1$Hq7FTx9_&=F!;)jI=Ve)^rhIw9lJu4H6bQVYx;pR#uhw6xu~>0BgE@0|{{Bk1 zHehY|{fxvJ@Hc27-^Q+B+#{;}a^1B~g9nl$?M@+|5bnTvHDDes%M~{3)%OD1DePDw#1bD;A9kz7i zsol-h9xHQLd`-w5v@wKhw55;wH`^=uoylhVwB%14883;Jw2Ex3yKNq0J?hsAVT?17 z2mDtEk5I1hhdP@&k7c4Wn`Q32lQJnOES3tLW@jmbzJYtEMy7HVB^}2daLTD__1ZT8 zkh;7=Rh8T2p~9gZAQ4e4Mb2JXgYP4+Z5_QfkScuOwE5z!H(}kZS>FK%2Xj!b0?9W; z*q{Mg@G`@hWU6AR&uGHL$}wcCyq2+mAzdk2QIH5TCX}h7I<@FN;BB>5q`cic@4gmz zpVYfVxz41)g}j?v0sAYjidB}9s#0rS?ViieukAtoXiX(nXRng}1}$l>^9?iyyt|@x zbC}!eA}Ec2dA+U7EAj@qP%UDrZ0=oou4u7sHNLKnStuW~aBQ@+);^I&PdxjWq_+C4 zyL;j_q9otTZ|L&=G`UG#Gi3T(H5U3)9+QzD)0BqA#Oar_;b*R}x3S7>?1nM2U@?I; zP4ZBVQ-Q@MV7>G@y)q5IkhM2P!6676{RuGZb;l%qf zD#_oME349+Hm-GUwa4$cDW$eAR2nFiAfBuJ6SWE}Y@7 zbBO9rR$qEGiQL_pqtn zegDB6;W$H-h#(=Uyafx_wf3XjlOkn|^zp{B%T?pcRjD;~rN&GeGmLw~YTBs^Hq{qO zh?{ncbjaT^OKODl)24`N)tClNo+t9@>M>sCx;dMaCy=X_eF%n?kLllHQ-PMjxbGRLK94=O4e;?3f0)k=%MnW~mkO&3i! z%x-4Y%>u%c6O^r&D2go-P0SOy)QxIMMuNL46p83w53)gPf-1f5BFR^2^d{CBw>PYn zY&JV-bCc1O%+YjOSU%JR<&u$>K2vj?Tcyij$)_WQhysO z4bQ!;T$n-r_Ex=PHmX)>y<%7^STt$Pw&`#v&}i%2c+E1_EjH=+NTe?~CLQRkt()Ix zFBnrN4PVr+lA&tU=<-Q=&*Ri|lTg+0^y>gGcbiZ3+DXp~i;unAplh_`s-)C%z%+Rr zFFEOX{S4mshoC${X}PW`n9M@BS75fYPxh>BS$a;BubNyCy!^C9U{MQ^4}@Qq)>Z6? zKO{a5!@!=kvcC_#-#N8qcbtV*bAuOeBWL(4*g{M9khA{R!IjUql($do_Uta{40|(o zC%<$Vd$}rM8Y->3GodN-#3|JGmlX#z>Qs4VBjuHZI&bN|_ekk&pjBOq&ijO)X>b$M zEo91oVCrW~as(-sNw*3sYjLXL`F0f*E(?l$NC41q=JrSd+4)MW;b#|}6=(KEffu|s zZ=rfXfJce)sr^-N#$00vwkHGisF(c5!Z6cUZlCpL9L@X@w{)Bg5E~a;=|(pKNEf5) z7BlzFeE6(CLR0zAZahw34N_m01OP2i{-j~I`_hbW9dF~VCVmD6pt&2P&9grln)B@4 zK=$tnMI=Ss7tvxy2XXA>kzhv!=DV-MhEVjE>B~L?QswWo1QKH9hXg3CBuf;v9)B%qbEZeqfn-r9javs_C!g)ui_;v82YX+ z#fnNdu#P$+XCVxy!-<`#Lc{E=lPeUdPR}3y7l0kU_Y39vTSCZN zkxaj*9N?GEvOXA+Rv7dQdNKo!`}h@1OFgmSORsmn<`aHtdTxqo7zu14Wkx9EL@WW^ zlMru6tX^Q?R%ogg!4C<_uoQxtoCxZuQAZ(s+!#eA<%fp{Wk(MBH0My1PFt6Q5God- zzK=j!TnpiFscgjZ1n>D(i2MmZ+iC=Bo8{$M)h*TfvO>E(h}v513X6);wP{UKWv%ws zDr>KeVAQzmtzW#6@*c$(0K;|$oH$cfeZf5r!4?Hc)o&;zVT5Bf?9QP$JAn!JK^~E0 zpwjr~&iZ@84ICs3M}$9k1Q=kn%T);|yG4{hIy9LP5oA%sV=Wx-}BkeTH>NSvb6M;cI%la>{Z zvm~6!heUE0kws-R?k7cE{{@X%n<5?={`0zQJ|))`okAb6&%`+oIA|o~D0DBY8BAp4 z)U}oHr?7aaOf&x6SspRcj>gnEok0{`j*1{IbT~vBiF;g&S>`S{U!{N7TwO_r!fIzT zHuN{UKS?lDFoD@pk;WFmPxKSa6@q$>_`#VZqby7g5&s1Nj{Za_B9hACDqjD50@4Cg zcc0kxT3%MfJA?8g`l!t~_sG$ZeSsA?!R_WTif0DCK5C}e&Zno~Sdf$G$4sR1-d0G5R#0$OO5<5N}P9;`1tIu$uj`I7fvu+&6ckStI%ehH4G6ZoC@`R`~%@HP{v9JV~N#3b?u+?<_45i)Ne#y4* z>EQei>0Y7{#|6Z=UquWRhNbu}ER8v>M?H<(r*}dy1pQ~T0+j@gd+;fUz+YZ^@s`pN zxSa444wnq#&hNfKwO>;8y0F#U8^*`vxt@lBu#>~9!_|-p%_~6;fT89=S5)NTcY-=9 zyfbmZlRq17TW@a$l;dTf3DEc{Ww!OSV$9QULSADB36)YuF5uMY@pd9=va?D~|GjGe zNv9rwo^McIhw8wI)Bww@f=~EPWNOpD0r@czj_ErY8_wX{$V7nvVq{0tXy`caPndt_ zCu3}cn;6jcuwLlOt7snAaov}{{4l*L ztq`ec`#B525GRXKDw}Z~nF+5NUdsN1ltaTdQN4GRL9}Qx8s47f$}^`S;TIQno#1?LzxXY14~=< zVF`tD$&a?4&ml3E(#gj@iR_aDF;6=qW6v-T${^#YXJCz|%pRQ6)o|G^42x{N2gSkha%^vt1d;CQcl>;ToD!Ay>gt{U)Mt(!)1}R zc8*U9&QEH-o>;Xq5MJwMN?ALTo0-DqS3RjPWtsisinGy%f)b)!LJX7)6dVW+cES@1 z?}Qx3&T| zP1BhREK1vw*>1;3Oi6581zGMx<+VxmE+=>7_#WaauWL`KVI|~CILEjPfTDVp-x-hgp*NxZgXp6ygzYeiu{ZV0LV;upvC(H}-f)Ud%qKEi zXd^W)$D!$I0V9R`v#=;IzUeXj3}+Ob*yW})raUWAfr!mNTCnv5^E=~Q?!D1(ee=UT z_=!pN`P4}s6Jw_Xx0engE*}FEnJi@=S&W&?ikF0ht<Oc2&qV3Sr0psi;^|q6yMPQ)hdkDh0%S6@!Jj8S1MIF>6k?XSJazC>biU=>Fg!$ zV{f<}ER%vC;tkZQ*mDKx@U-s2vEY9lnV)H_ll$L@xtn}t(X`&1=r?!2)=4fh=9(tR zE5Ssy{q->gkADYV&eNsQPKdNApOh9nK8_!J;uMaLX1pX2ClI#!6LCHudk!md^APdc zfc|eiG5=qBQgpL5!l#wdH&<}9`tLvuJtNy!o)Td*OGhL7udSt?qmiJIfsNr8r!+nT z{XeJd9USrLnf_<~k`7fV8!VQe9giyG^lYJoAzQq<-O+pfR%Z}#YuL~@%!`YN6cWMh z!h1ejA{SMHONtoTFzP5k%l9c-xazxx($er2gM@T@x!<+kjLqG#nH!;g7aG;$!xK9w zo{-7THo(+g-*XKAh6`t%PtA*MFf>6A;d&dH&rVBg-$LtU0kncE){g$(t3xsFsF z8j`tZ6gU~u`}S1k#{d^wm&ewT=y(n=yV@rM?jT($3gZcy=(DreNu6xmm0K(YI!K`Iq9tUuSs(7m-M9bVzwWggqn{ z)esY7y7Qy>$P6qu1;vu0LgSfq586-RSS`Q=Fv|?;*w^$48ufFiMG-59AR!8CCNa7f zQ}OF4#d`SX#qs3vuYMRcf#x`66iGGklUMtbT6D-_(+Mo9>Ln;L>rLyElSflcf!s7L z45$dUSI8UkNyN454q}oz+R}xaX4*z3%$-*S;?J_~M=|z7rfVJ@1s*pUS5k~%1x%=c zmj#JO7*u>u4+(O$3Y<)5xbSmGnO>2d=Mzk}+#N4Vce%eikr2o#)Ln>fVzoBy9u-DdF z(vao0DqFd`vGryuS1^wLcEUsMzH_sQI!&?tBxR3HQ@n6?rf;I0=2aiR5L0h|@U#M$ zJE;$sSn{jVTIB32AZWu80S#Cb|RjtE_y zd!c!1gKWR0Pnt@YK?;H`BzmAWRdz5qq=eC+{GOlbOk;Z%2klQTBpC`4N7s5~7MA5{RphvsBzkucVyXqW$6#hGN+gV+#)zV%q2TiexdZ@P7 zTURD{i{NssG%*vJTmwfQa=sjFq(Jnt=-j=RQSXh5dIUU>1E5lS`uHA4{?^oHQFeM< zHO^#zIo`-Kxt_QOlvd4u5MRa-)teWc6jQ?=VDqiBdRh|oi>*QM>u-sE_Fzk-P+TLW z2ts8|)Z63_T@fBO=WziIu+ynwXW5GZgRm|iGwa~2{(Prf-SETgc+HHTM(Dw6e_}W8T?`B}f!|Pne znhwwjt*Ukq1l!7;j6-tKE3W#Tlf=-;r)ya-X>&yv)kK!iBDVL$6e{N)XBMw_(FX*S z*Z6<=kN-On8K1SajiUp;20kYzJ}uwB{uS_PmE^_nY5(n6_zWD)Y^?uHA~SV#v}LEI zbu_iNad9*?a&R$oG%%&Hu{WV5|8mIqwEQ;qhF=~>utc@K1BUu=k zS@6HaVfva$Fwy@b=>LDRIO|z|DZ$z1OBesSIE-Ife@k54OQWN4FhepV1Wl>f&EyVY;uRbpO6um>&Nt1=_!Q6lTC@{IAZ10skoT z-&96?#((Bie{Q21-Oja(h^X~nGcOpN&dYb)?y zTd^;>|B>L|CMf&G@pTCOWym)A=FtCPx;A_UCI%Mzf39{u(aVv8q! zy3n!9!m=;CKr_W;zj@FU;`iZ|OO;YskyZOd;0m5-d`u&eimKl@M*6wq&2J&jka|W4 zz(Vx_e*<0;ew0t$op!ws;eFo5s8l~RFMWP&yk73negL~Z#;Q;8K5n-@pI&{Sx<1~0 z-VwbAWY?+@*X|KMpTEe>JWn1UQevf^?-P49=oWQd8PuNMn5;AR2q{N4pD#mOpMc;b zm3p4rrLK=PylaaCB)rJV&zGgor#&A8g8k3EFFKFU+gz7+SFijln?|k|9a1v}^VUoAhI4Tjc06&LIrnr0R`Df$FO*;G>V- zy!|k;^u$RilEOi;tLoDMV_~kmXeAx%zUanE5wbZDx&C!gd|^hXu?h42WQl9?Esc8D z!hVp=j^8fn#Q4lx5&AsHsNjP9y4gt4l68o4PWDc`bO&2uLavhX;Hh`k#N||c3|Aqn z8uj+-RQ)*7+%plmMyk2WM_Z&(Wg^$eh2N-9u&)H8jpy7d1}A@Xyn|9(>N}~TLUpuu z_Ob@qsbwB8NL(dZ39JAVw?N|%UL19@otV6=4(Ir5u;WAAB^*>d0cC2@dsuo^$)VLq4P0FUH7+|1?Ny*}#-oMra`c ziHu&H>QT-uv-bCT>HJ_qdG!vH{)K`<9;VO4Eb=*0f&`UaaM6XV`MpxkP2GOR{BY3E zC$Y(8fY8a^qaD)ychY(DtG7m&mIw2~2V|7$A~kLN#Za}4bL?O9mf0)UUTX7Htfwd> z!zlA7dIIgX;xo7J;hSqeR3Oh2%jKKdusdpZCca% z*}ny7tfWix{Ib9B6*7a?{}c%#RIgfS>()np`*d zln+josM$5Q(lu6rrhX@~iYsTL%FhY0Kb^)EKSaI)JF7a8G36QpRX`Euzn8cE+T)s+ zuyiAvBu^DK#Umh3RS*x!KnEx}aflD#es?J})yb*sMkJ6FdIg>I8}{pQ{}I3Y1c}^G)m^3X~&YXv?WOX^e}D+ z#&9QrIgvUbz(3);y{o%0%CM@+8`02{es`5zCF#n!l?)kZmCqFG6j!JAtL0RILEk5q z(wjk)p=5WI@0r~fi@7+c6BbDnM2#3}7#Y-b>7nwwLV%XTfdD|)N$XI7ztYZI3$??}!QerXpq82-55~dtvJP>^NVVs2m zd(_n!O0!(oVpwCle!{YZ2+i1sPc?9EN8k}Sv)O%RB`)p@!l8Mzxqp(&`}Hya2pm1m zF@RJuvDr{?a+=X~?`gMT8sqB4hD>%wLd;&UxfIr=WA7poV;zT5m^=J*~Qh3P?$6Yg=bjL zoIVUr^G$D6WD5t4o`Q-lOW%W;6vJshdiHh_=wY+X)o@5y*6xt(<|{CE;|~aCPEk^D zl4PGr7UkNE23ttc4MLp?ittP7LBbGLx+QI})eC0y^Gj;aP(4mW!oCTHBChT=cauU_ z;-bv*T><~-bwWSk?q$gLQ|9bw;zFg6Wi`*rR|$d2_=6=qd%JX^yLe|#*YUQY?MB$# zJ(SPzwPHnUmHEkazWw)BCO_*wU5C0##vhR!j3r}v7mhwtS{$I(g47t@Di)1=lBQ}7 zCIR$NM!2>kbTQW>g}a}T_Oykas5mc7*SK{817`eVBK|(75=${%k5x7jnxLH{h|fZG zi2rRHG+CT{^hX1b9h%*$*N8e?g&LfTN))Ta%l&8%)dxlR2lf@ZtSzol2@c(sHz}58 zxCj2Bs$7L856Q2xS90it4&?n)ZtiIr(@5+SULF8}i%m?6WX(;clWQB5(V`g@CcFp3 z*^$EUfHOcxkRd@nr~!X>hW5wckq@v!LQ>j*1x8@)MBzRNN>tqYc2nl1#RaB!0q_Vg z%SQtvXpm3?n>-1)+29^b`J<2ZL{pt*QYJ6T_=EooaJgrZ4~C8cFGrK59We%W54Gjm zPpHHn(x;MB)*hcS@{ur%olX&Ifvp81Db1>CpLtgiyxV%|Wn%Z^E zWqx~4xbDQABg0}orWM+PelQwfT1*s~uw4pQudwz7c{#lG>9QQV{i57gqOFDD5UO@Y zIderd|G^IPd@Dy^+&{7KhC^2zsP?}9)bN}@^nkOzFLzl&dh$Ze2DC5@}+&d8F?Q&)`7bR z+l`mMl)P@%ebvQJ#vaNcXYiD%t+EDc51O06_%L@_rOVpHuhLfSIAM96g`7-EOo~EpB_@xOK%Rm`x!pxO(p*GGRXI9oL|pGHep50ygWzC<`Zik7xxdV%pLb-bC%! z-(>Pc-BVfMW%3{g9x+bv9;C9>t_6ds`ona>K!FQ$Sddu8v|Xr9!Zz5(h~@;MU(mNK2+fBg)*(-4SZet+I>9xK2rUKB z8_Kt&E?x@vWEh`HplCMNy#4daRzCA(JU2(x1$Mah-O3(zPqwV~)~{dEC4HDv;VKxz zL2;lOqSqArYY`ZFTGizYu05WhBGn66)t+ksQcCk|sOY&w_jGSkYwg$LV8I0kTuJ?4 z!AF;SxWiGjo$ZDqVbrQ{&p|j;&XY|v!_}yR_rcBu9YLn2XSrmP^fv8*LRHovyr!Mp zdRSxW${0PSv7BmhpohekzG`TdHSWo&n&=ksoN^9s#N({N1%hI>Y_>uBIR49C#OPfD zQ>sJ?Bs9$@!!wB^Hi$*l4Z#%o1cfLze{32qVRP?M3nPOId{zt^_j}p5hkM+qW+(kt zU|1S-5bJLvBU9-fE6cvRg!4me%9uWE6o{Cdk61T=i2`}_ck` z#X1$Pj2_|IXO*@bg`Gp^ouV??zr~oG5nN)eCBHa{0C~mUkM!iWcz4I-nOeqA*o75R zNVHZut`%V;5{O0$@0(~TTN##E6sQB%+vyv_NHT29ozquVF$;Q$RtD!S4(JkQw4%P7 zRl|Q18 zc?``N4yY)S zJTy%_L$JqWzxWn{8xe(-Pe;c~(SJ@~I9E)aCFwy6=qn2?VD|(OYhC(?lri)%PH0kZ zU#TsfeCy_dfYF{B1Y!VMuG|N>F6jhN5G>_pks+9|qZcFEu^hEQTgD{9CQ9>e<%OfN z;LD%4bgjE3$UZbIWE({~#hGb`n$J|pK0&ecc6z9(QlBW;6l7U`V1K4@T28T0icGte zUfT9uds4wLg`}jZtN5u;vF2bbwCQ$tn0tp{O#=AcdwSGd^${d`*U_&T24fV1x?VAL zK+cI|RI5%@cwgITjyiP7L#(yZBajF@G;Zr$93IR)dK^aROFSU{{$jA!9DFjl|9X_1 zY-hN9u@7md&TSSg4V9mQf24i2131S>3XGYPsD z*t>MWRdXe%O{cr`MBL5JIdd1pWOCUqz&r|2z$-Vea28FXVTB`vSe5g-Sag&^v><+b zQ!%caS~^*(oGot@ta9!yoWk^-TWS_?ICys_cNa-qlVbkFWldWOo{YgQ^&?)JiJqSw zWBhN_Dnn^6%#cA4KwoQubrjl!xvC?T39-{G>I0iazEZ6dY62M9gl79}@vc(RQn$Pf0eNQ#yKgGJ{0wlJ`jPQ~bi)&%MqwnaefO3m zmPnwIO1mp;m8y8S+lY=_eRJ;I{`G#zQaNa8a|NKB)N_+seX`I%+q?P>i-Y2`VA)zs zFM6zz`~1?KL!zQX^~eZcil-LX*S>N>7Psi6kD?a~R$ys^K?`Jt4YU;U`c@R5>1C9Z+)2gSMCOanP$y zIVS;S?=kC8fhmGVSoJB9qL|WQ$)j;7qW)mdy0Pcz)=+jQXAEiWqlZh+TP6UEA7hIb z>RFW#1%tqiM|Mm2{g%CqPTdlt<%?#dM4U=a@hIofA*zera>I5BF!x9@QWC2g@UeId z8gwa|F_}*y1t(>0`YEZ9xr0n%Xdao==e|j_1EPyvthRuA40DeW?xq8Z>)S%5GJn=C zGA0W`?w|jz5G;<~c*Lb1EI#;d>#^=2vklUpmBLG=tfM*uV89dWCo?YT4tm^jAC)Bs zXlGr<X(Z zCBvCI{+P&lYt^}AWBiV382DAj0obj$FtduZROZ!v(&b4zeD%%m&wzCF?%CC8h{-8P z7j>JQg}0ORd}qsz_56dY_-_(V3Z?-WFkxR6U4$&)YlwyKU)b+`G3s65uVksGUzkvD znOu?Cw=1@D%Evny?qVF6o^^-S)|8u%3}+hkb{@~l)SfOMM=V(~TR?gG-cXG7RM+ON zkL1IN^3p3tBUjsX+5sqAMdtvJQ50F=+jFG4g0sA#zjDLU0l-TEn$hPk7kX%XpP$5^ zAzOg8T(2ZDPFB+EVi`7rK}N1qbCnhw-5}I`1~IWK4*IWIK<|_8g(I20u&ug2TzGyz z$qzlxg!wd{p>sPJW1*mPYvTd>`t0kjxLZl<7>!5=$rjuN!qsLQ>LNyP$8l=rks!eo zF}?nSKxH}PA3CVLj>R2B265PC?w)c_$;;VEiiiBG*jUZ z$j#(^pH|_QsnDrI4g2x+ntJj1^m=m5eYm4JeC1nv@fB$vMPNr}WHjU3Q0q-Qf)`b; z5Z4liRBBm7c%u}52(Xow1SeN?P{3~OU41|!JcT=Pt73pZM!?bH$r-~Rz&SzY$Q|99 zCBnyNeyH83h;8!|lE4c=C1EFN=Xb@Fzk#v{pz`w>w+@Y~9#I($FQ5(b6TrQ`b+VSCf8}a>|T^?|EsMwH!<-Q>%NM5L@BCjHw5iLB%@- zGOFTvlo}*zC8{E^^bf?-f6Q0gBB3~v#5p{oX)sl#$w#K?Taem$aM~q2@#a>hcg#rXTCRcR?%pen=^KK zKhmN1-s`XC(BBEnZYZod1*bwVi*Gx$4MlIra^Ii&cX>PyIneSpvY#h~thO}QsHU;4wXix(@U;(67?6dm2Hq&v#xx^9J8oSxMQ*|$RV;%oH zs??WAbv&8W@o)6;@6B297{-%j)JP{?5?k0&>2lKvEdPk# z&C{$zhc*=tR|!MGeTvVgmOzRx5jEqlkX3C^*;bDPCDxb8 zf@yZ5zXBZI|MsGi9QGvdj!aW=2slSkh?bg-parMa;S>J?Wv-Q@PU);g!XiW|D<|MJsCpm9Ys)Sa*?3s=^aUmr_mkcHX!P&co-&;7>=CDdne9oPr#BChKSQt z%gKvt7guV-vy%2YQGMOb1eg-zzdR+ohEQ6OinSa>g~aVy%eL5xOjZFPJCs9r<3UMk zVRKOena+Muw}}Q6o#0rcMcy418Dk6GNN$FdK0I?-zO+mNU673;{H+agCgb6x75(FN zM)PcSu2kC^3i7?9y|80KRWO`!L!v_J(2b0@DgMcw7T2nc^1zJX-LTb)`PO+d6HDb2 z%{;6|Hyugdr@H7V(*C-dRceRN@kbQ*P~1Pj>W$a3*!_BskJS!Z(3-&0d(%czZ@iX= zy!R>a-<`AmpN72r$mkoOzp?`lA@}<(efw)Y2f%+1iZ!%M_s~maq_%(ri{F%Qjm!IY z$8Z;|5?v#1$C1E*RR(c(#V`t&sh?S``@GNbj_fRHG^B;Iv&ghE$;ST>gHPO*ainF! z1dB|K*20CIpJeZoh{YZIzTMrMSzYP+VjcU)c$B}xX?@p$Q4$4?tvpJiY!kabBfEJ+ z50`xujKuS>UJKm+W%XM-)gNeI2E~Ude-f>&QS^Z>hgy%&oUITn0pU;>LqATeLH3U z6gV)lY#(O^&NitPf%uC7VRR{e9v8}ZiUMK^>GcnH0TZiBy-whS9)a4C1HrKRY|>>KgHD z&CHJ9)8x^rGM4vXw}P};Fgntx2zn!WA!`n_<-+O8r&ufh{|zy*N-k zX@Tp)R!0z?B;Z;bkvvR3RsEG+%A1NG>TU{bMfjT&*;8aj9|;C8z>PO@3--PIXN739 zB$r#@LuK}%^ZIz+RJBjW+V$IMh-V}n|6{_MB&t8CQ76lo4dU<;sN;&nCYsBgLy+G<#%m!fH;rU}9iDXOICcjA%2K2cA{eVkv6cb6I zjVG5nB(I%ua(7Ijka^cqn5SLh2Nv zDipPbYOH*xkHQ4oE*r6n-8qH0!6lwWM^xIMasY+0>)&sAAjOheuf&a%2RTIc9C1IB zx^Ts3#~2ZXshO&MfD5&;T&-EYR&uXV)GWTl5W*|xxg#w%IowHIqY<1?P9;XzWI-05 zAJIb{+&a8)UKwK>VHQcC!ebjop(3VofeR}2DHEQb5fn-@LrY8EMB)kt- zO|FqaDw7Y3{4zC0&f-YyhT@h!%_vI3o!&d>6umuia}y4VT?uW?kd_%bL5E8$)j$pF zJAYN#nq1{yn6up6r?EO_U77uo#es?_*fqnK*Ond*tgoWMtUv+_gYLO8g-ip9#H+Oq zag9_ptgEZwMbGiolp3k_!?hQbnGb)f+5JkRo!PT|YV3}SxG5RSo>MmW^Vz;9l!^<* z1KhuC#(HsVl;<1(1#?ZyB5I58FZ7Qo8zoF9>rbL6U*)g)7Dga@TaJbr$1KvRrYDta zYBr*`x+JDZ?cVAoBkUzNyOPB>zTO{Dv$4b1N{Xe+F0sR>N|^HF3gvaAf~~jI0lcbU zLfxFrFB3e!B{c))?M_!g2teuGX+UvdgsS9A%TZ?B2Fn%A)!zy-Boqi8y!;dIz8VBq zqDsVEL^)$NzfVyGV+zZsSrR($_4g8a?ZAOoMi3!@6{6+lPKJ+QE}uKxbJ$CW{`FdK zpSO@D2_G&`ez>({xOm-)9f`|H6}Cv+p}MIktiIT|qe=hiJ-&{-h13(S1~j7(NB381 zQoee0s+=n5(fui3ZGI0iH&!%v6Ijs*U*PPNKg&~0wQhv~ik(Be)q zzL&mYe>kNn`ZGjX{Fv`r&=^-o24b4_exPPr9(DEi{lkN+CWK?Y#` z&=N=DrwB}-{yzZyKmxy??7YVd!nQ_DFZQQ_I*#5-+rCAh+YFAD^tymn3xbMou@^k9TXuW=amLJ?51amB$mp+?@Rnn0ybBo}i%?w1=vbKK zLPqP1f2xG{^XtD-!ds5z0{0T$&nQ*Gd;ZqFg!eOQ3-iQiU1^A6QI4etDNZPhc^Nk6 zV$+n_fP7|o3Mmsup#*=TdtME36bP*&XJpYzx)6WFj4bpeJe{7Ag}#Y5P*S4yR|fG- zrJPHi8}l(rH5Gg;rXhrH48sZ@#kz=fH$oroTkF#~153Tt(A~H8>>CygH7jL2Qs63VxG5e-}8I|Y4)tvbxb{UoD5?&a) z7FW{ig2@uwyaG#SdVzBaLFF{PDtiXJ=lNTmeO=n6sLut+ zFl?-Iz5mvO%T=Hey|mr|fpLx|DBQQ!)lYV8N!I&O&}*_|3*L3|TWI|M23tpjNrvq`>ZZ&BERVR{+8IzXkf zaMc>ziBZ*>(pzzkSXZqqZ_PuV5S_dX2fHLmiN@mZZeai79O2}RTC117+l-x#ED;ps zj06P6MO*m(A#EMfzE4N5t;5Y^7tGkJOomYq#8?^a;A03u-MlZ47@qHb*u?KSE0Q+p#&a#U5Rvw_u(+qvU#(JfF`I z?C`3L=}En9NPYb(dA@yXc|4=TI3QfT{k84UF!*qcQsz|4O@oKp6|WiwAN;o_CAnen z)tSoN>J+Wl%>bQmWDb@!5K4O_6a!+bxnol9k*xARv}@AItE~NZJiiK-?vkS!%7VE%yslkuE&SZqgx+qRbJjhw=X~kW zul_yi_oc<*N#*=7;B_vQWsjxWqFF-6;-kp!$&r|)Zqz@mqln%NuE}oH=4%qYIU1mb zSQisGa1-s(@>tvkF%Q{w;X9UN`HmGJ7nrJU#;q+4K`>x9jwx495DXRuH219)#V(Xr z!h9*JZxQ~f!0AqI#=S{QCyay@o1XVbH1)6kqUSv_DG}zswKEp$$^--|h88PE@wo^R zwR`?r{bN||bF^d{;k=|XV}w*nP0g4id-M|Y#Lc*c*w~}D z&luEc6K&4`(6i!ID=mgO-X(uoX)zp+?s#>z9EqmhV(MN_>>j4^YMbsHSIZG>`sx)v ztv~Ip$0aeI$MxJT%9Qz*6RfS)Su$BO8Mdz+igTFY2>)?-Ik5#)M`n5J^pbpA7k$S7 zUUa;=SAnnxVF_udbF`pdE^WEnTPI9N%u#!jT*#mv23a-F`EIil=1ee!B(D;4ooP#& zSBbf9FZ%Kv4Rak<)Rg+Mlt4=;ERt#Km&uk>F?tQNcfxG2ajqV{XDwP_34wcx=ldxY9ol^1;-{R zVb)MxWb_sm>yy3D({e&<^539_xggZelBp6xB`53Gab6dg;l-vN3rDYB4#B>_s!3W_ zEmFg*GI|f5vEp)-(VHiiSaI2|cgOSU!4rH?oYLx`Uj;^KRazbNs}j4(NvnhKPta(+ z_&u(pn5YW2Z_?^$gaqsFm(C-9!5x5q+}iT34FNr~-l`>OV=|G@M4=nC`Ju3*<0y;0 zy7{5tubeN~fU`A3U?({Dv1PUTPE2F?)9Kj#hNvM6W{8IeQ>RVKsi?FU64)FKzz!va+4m@Na0GmI@ZI+Nzkxj z4fD?HvP42y5@9H+vNpa#A9#9g_IRw&jk8(G+j$i9#^Cdqr|OC!&Xo7ithM89)E1ND zi^Bz%c^kFHz6xI)+GQo2+iF(6IP^69y0$8IYAV>sL!F~}OmJVan{j=6VXZsvSn>3F zs&!9el$zuT(XS!~VUm=fUln7`Rqk=HYdgDQxEWX46N2y!dn#5x*&m?yA!oGI#Wy(W zc}5nFb!KPE84c?^v5~hrZ2~*ZH|(kSR$}j*ex(teTR;-r8P3FVw>MZ_c5T1f$*NI< z1#Q;H`!?eilWQz!yNVn|t$Sd?zIFAw&G?YuNaWyI)O}=3F6J<_EX>2+0Om;Q)|$se z^vABGoOw)eM01dPoV2}gnnB$T7LLI|i&aV{OM|Sx56*SUOcn0N4^Q ztjeHp&-byiFtHSa!WHzQC%1FX2GI*o?#m-TQ-W4n%5AX}R@&1_!=(*g0&GxH!!jaL zSG;N|mCVFTitjC@k`F$9j}Kj{zDx3tCuAv=1474h;THR1vSb`xN+$YyF{bL}#GX=F ziOkZp9%?KKiKQ=kXzM>^{57Mbs(EsyRnIwFT&Pa=jl5E0k8*;suK*dB93_67l-QqC z^v{wK>tDmMsK!VqL55{!~)p=huHFDX|`_;qFO^pHV6) z@%*iOQsQS++R_b)1QD{IaSPxiB0=D&lB3)jeqx&)_QM_WTTD0XFn^j{eI^nFWS^gL zHTz3t6UD^qu$}150s3?dIrGrHV~AK6+r*V#=)T>)^^k5jbL`E1Yj;|hZrDxS-bSr1 z7csJ#uNU>G2Eh%Lj3C#=q{JR9*mzsl`mM>v zhtYzK=UZ#(hJ~%C)#?c^M$GN#`D+c7Fx?Q|XZ9Sujk1mou|*}n=m1sNKtb|7k!?pT zbK(0fWK>?WwXo=|)l_Hqkvt6UPwcUYkKn%@1d-lJ>)%Exf6*1Jg}PlQulxZ+H>VkCoYMS=}^i z=KD@(J+F&3WxN|vN&vR}WiUwVw3-5MTAq4FLg6JCjs9D!qmfzH)SI^yHs_$Qu4x#? z!}%Q9$%Ks4rd+*&++DzjXa2fc{su#uKFge|nQx3GC@!P})EG~dnvcjCZRFmYx{q{| zU;^~)Y5(9RP4HKf9L=y8Y@O+8zlBpmcx65sOIr?FX<3p*}Fq>;r4Dl)zz4~g1SGf&I3D%U2t2Xd6 zYD1`CO!V;v-q?r6V-W-=41W-5;Mdr8=*uZUO|e6#>f75oXU;V1a{ILj83;zH{f zl19%}(!N=HYJ*x9RApb0`j+D78Humw|8IlrA>mx2^k(8)b2xSFFw{NYqC%(qJVDc<;=vSrKm;1Pd5sAXl zb52sO8VUz4T9{wuC)s_MGI5 zDSlVi-@dil_V0wfCbbn23F&coiMgfE-BR(+RAnmOfYIdT*S7i=UK0%KX}=}^HTFEM z+0%aah1et=94k+|43_PdmYZDHVE3d}wTx!JMr(NJWzOoqfO7`Eq_q_UJ>R~Xza1L{ zG>fWYojE9JVhMW?3HgK0EV>^x&PK#pea$A=Ot7Qskh?r;SMJ~M8{U!)6fnFpUy zJBS(EjOADzRd*0G#_nMnB}It@g-W&SSHC}(Gkd4EP!uKDysgj?^E|QT3o)3I4fIuf zi;#6+F8ueX4b7lOQ_h|zcBp1PUT3REyHR4x%SjA-#4;4Um~m5cwg!*q)$_p__KvmT zzENU*j3xYvVd=WnugW>G6;U-X$J?mwkr?Yr&1!}>O8oW~TS@P>ogaye250Q~a3WHzj`WlhTdm4-v;w%=t%Ur1jwxN~D#M-Q)-^L-J}OauR^o)9xqQhSjW=aw>Iz;zCO+vhoXd`N5X^m z_i^+5*ekkOCp5LL%rfSj{e9e81X*cYH#FDt9Wo!d=e|g}RZ-PIJmKk2dmokgc4~b( z#p)~Z&_`%q%54xUe93Haq5bOJ!YhJ;vpCY3Co-{#A?mW@=slg29bRXsRdFGEYeJ|R zp0Jpa5pIGxN=g(+Io!73CFTxz0xb%=H_7{G9XQ{h2xkdEPkFpS5zahe1#tc9hk3q3 z=1->!QS|n$6(N)U^c!^J%sB*4X^@3}^}9b!b36ub1MJaEa5UWnDNW4lPH=LXoRMBP zEof=ynAZ)a=+e$9BYcByh}F|K$IvPDqxt43*eiuN$H^ETw5`;Smh|}sSU6L{l0FCI zfaK__66ZCi?w;$uc@@)Lb_f<>LK<4fFsnr^j+<*+8M(eQ|mNC$Sll~byQtT z6es)9%$B8guU2#u`oe`|Fw;}DYKRbpTAwY*6i;7ZgCmc4SO1Pk*Z zF0K6Nd}}S8vlc7EJfEYbbB1bVm}kzhbWR-RVqH0oubNA?Kzw7dD z-&!3xrhb&GAEcO(PBiXMajRclAv)1>G8s$m5h67-405aAo+kJP6^o^7-1fLNri+Ge znKUJ!*fTqWN4c&}gLa0XDZxN;3)7$DUdPBbQ^}Gs1?^{gP28WT`D?O!FEiZK>KRB5 zL{@gI-(79uZo*6OtKVGh0V6b}={RR|wb_E94XYnHQ-V09Bl3k=uAY^X6LxP^^h#_4 z6lXIbe&mV7G?ETQHPn4%3x=AaRYc!LJ+)xy$pUJE62zlQ^Kt+_qc&H&vpOL)eU3f8 z%>Iw^gosB4Su#B5Y~g06u0fnQ+HaMn11B^H8YuT@4St9$qUdF=_JpAw6(!jJx8M>L zd25M4THnnm&h*NOTsW@VG+aiwG`(U6K$C~95iM9&hvoY-c}d?={bWA1sz z%!h(jVpO!ZG~NRKl2m1aZh=)*yPS~;x`eoO67w-Z*C6~PC77VgH!ZJ`w`xa9%wla! z&eE54j03_o=yef4EkIl8bxpQJ8`1OE7O;ht7GZX@q}EkwrPY49$469%nid6@~h9f+@Upv8qVs>^$If`IhskeVYE@D9Sw^RT9o-kN}61$x1oFOzBx=x zsvU7m$%RCuDHV+4@8g;-YyG8hZ-d$+)B&-@Vvu`;+emD&(BvLlPQ(@q+Cqj*dO^Hf z`uf@aBGyc19a54rg1^c;jYrG~{(>~gwJQFCntD+ZcE=MxuTXp<;17QGq^W-9C6>SR ztM=^$tsWKYszEU+b(3pu?IWMX8S^XN~BtCHt)%=L_w+gYGl2tj2)e}{;mtqfIXL>R8${H&-@TDM1N( zpgCXf4d>O<1BD*3N6-%?)?!9J{f(K!RI5+cJhm>Jv-_4TB8i6Gqek7rxX0Bq;knR- zlT>xV-p?Lak1Ai-1oqhY`PSCm;zAvWRj!`Thza-2-HzP@jqKK7*rT^^ZJ4N&cqnBA zb=vem2QIDu){_T1-xcQPTgxzR07uvM@U7n#Nn3Nk#w>LAYcJQ2wcuaBE?wPU^H`a; znG{Xloi%Egx17j3xWmEAs5M!UVc*zc)%tI39xIdin>B2{?S1v;=qvP5vZv5L{EWWD zFpY4g7OC_@y?OZc7TRT49d=Pte8N=e60Vl4=X*tLQ+B+_LvcB=OLW3fVi1k@QEBxSX;H#V zA70k1URlm8D6$?VXF1QNgdJie7ImV;+390kfuJLoGcem{u$HiYp351q?QpQX#`!6i zAAY@gz3^09wsOX^=4RXXZ{Ou8%ZYdT?Yo>QH6X%ES)VxOUxP=<5R7k{w&`(ypCC4v}z(|4WygYL{LGmT$sD(r0%-M!k9@8 zp7vYtm1WPRSPR+n&8)Bt>#Wv7R;}nW&+Dp{ z)xg%$MaNaX?T!Cxd(ljZ zFhQ$_`_|?>CPMsKr_eK1Q(%T^vsPJWN|^JAFO{aakYyE#Z<3z&TUiCwMl*ySv94^P zcEba>eQVt#n;y~>PI6r}GY7?hImNmf3vz1m-+HQWg^iHA=fbT-gY}b1Q=YlKgF!nv zACZdKAFe9CVX;SMM+djVwd&3=h`xeLpHW)|Fd;tQ!KLHs>Ez9?;L`DK5QH^+1(%NJ zlOywI-od5wjFIr_?~MG21ST{N?6nOUFEl(mj&N^TDUh0!y$m?cuh9N+^~~Cx1CqQcj<&F5O;-l+ zagPj3CVXm<;~TnAWme_oj-F>M^Sc}JXVlih4>AtsOX+%#6=qQB*AvM1sMY*0%@ECk z)@WBV!x*RJXoe+&v7ua-H8U($(k3V|2{hZ1w_mmyC*%aQ@xl{p7OJ%=9L4j*-itoL z`kI$Z_&sWU3b+~&<~*aik5>aiIPqRPZiqmUa$*E&G2tr0(VkcK^^vL-Ji(N9FAKM9 zV(`R#7Yd#wCcDgsS!S0KlR31Bxm;P@+REqlUJPB}eA<->U!_IQ6Pu%Lh(NFwvZOtq z+hMJ?rdCe}EkSY*$*XkGpu1}gYLD-*Wb0DOU17=E7cIK3%L0yVCMkXCpiRCHMY%3( zEr{DKEx9Y;2n%M)by>i1rkd0_vIRzCmo<4G8!aZ5e>Zj7uo_=sj4R1uUDppCw3UEA za?tv@oG_Gcc%FVtvSk)3OeO;<>c@2ByMxw`3C?#1tshgW?+)5+lyK0*>TeF(?OSWD zIswRH?9ABd#{}oQgC;1^41mP?{Pknv_1!`1$HZ$EX~tM$sB&F52dy6yuOktdd$1V$ zd0osL#ceGut93DM7Z@jTGwu;NdjROkkJ>8Q?Ezq5jt&tPzK;tuc$_ZwULVH?wD6uZa;jE>Dl1$7Tg^)c zbGDL67HPr~%6^Y)6tNEW47O;ySUuzy3)K zH*JrmHI^?`FQd2YSUPfVq;|2#SqQ#sxzL|cY3owR;`d;959j;HZW@d$ho)9<-84qF z?n&npvflMLa<4mfcaLzt_O5ci9M<5zkA-pe#)5&>mpMx%YM4g@=4De%$m+`&M)j)p zsrnLP+!B1wBAU%K3aeVAC}a|99o_IF#OfKW&0|ptn@3AO4ik2%hRly6^!ZSi_VVMx zD&)4H9qep_G?b$V3sbH%;qyhK9~b78CVboD7D5Xz>-#1z8a@KG9a@x>Fw7%@u?ueTU5-J@>X{6DQ ziy;_R@om(SXnSF{&edev8ej}6t2X6*G!N~KUVA=Awle%euRZfU6GtK9raz(GLj!;D z87e8-GlceqUMp75#L+iaz}YNh2#xu6S+DEz*A|+DZPdVdi~xfoKITfXFlPvio^MY=laFFPpB&sX-LHTsLk7B zWg;AL+s(1gCMIUd#A15=yn1HF=VU!{Zr@rxA=VrYSTOlMYO7x?M0=tgcOSL;gv_7s z%~K*j_=NadtA!L)W%ekfW%9J&d_r6w=+9i`x<+Egelhib%>K7<+`D7ojb3YZAH#9) zj)AvtJ>+t-!4Dq^&+D>qT<&?gbv@>C&Rjk1_XZ>I2}`leKe2kk(n9W5&#P-KWHBJg zF@l`2Fk24-uFE|#Xjj_w{I%y_5_%WjYE*o0LAzQ~mN$)%JpEn8alUC5wtH7`h;sQ00t1Z|-^FXItt%qAFfDp}&(R!w zGqoz(Gp{oHGQknjy2F}+@ZH_7YlFBY;NI2t;LNLR_c3NOu(0#$&E0Fz3X*f^?!jhH zLCP<4_d3iDsgcdyD=CdCXJlQ@WdAU^NAN^@_XAd=psn7?Hn&k*HDROU+q=BmbmYQ2 z+2+jAm5EM_LrJ*`ZxDK$FzQMVnY)*g1){~eSaUc_Uaak>nnUn&?TS}fbI2DtZJR)n zybPJ%-Hy!-W!MfjK#{huRTJX4gXA0w?!9YPKBLka_+oJH-B0s;LRNG5?x!hcWYQF* zm)Er$^bJFR_^;*GZvE}StFc*Qzq8D-n!|TL&CjU6txhyFUwHS^JaZ01fUpzNeA16U z2mwBk=4b9+Ic?9md!JEjCg&|j^D}C5(Qbu@w{NX(6&tz^<`cPZZQ#*hhurIQ>)J~S zZy~_Xx3-ePTL|#{ty_-f?ORW1t}S%`tsRK^76L4%t7zGmgeMJd)KhQ|_L&)uXWBFS zGIeVgdKy zlg;pk;=%-@D$S7nxAs6`eU-utOm!bqCulm~U)+qVd)#5FLbETo_MtZ=jFL;SAMdsW z3c=C6E6K!;CJEMM2#O2Mbqv|Ed(Rwg9ZfK1ImfN6k71SCo0Jn40<_98#a|WzEHLDf zIw1=IhG59nVn+5of#CPIc9kX!0ZsyZHg!Ab?!nb=%V{qzhXwZ_<(6}N3hoj9TFU4Q zbG%u+TGESf`|oU`vjkvp?<<=~tPAcQ*vSBe&i9d7ntX+BQ+N$t@(MZU9% z&UXkl_IEbXneUmU`ISv{zO~HKoFkVym7Fj~E=Ge2I@6wx9L}eDdTp*Fvo!NGbiXr4 zm&UkC7+Kl?EVldV+bB+`vw=jo(pt{6ACc~hXw^5By8`JBK zCy1Gm>R2SxN(p;N&sSXKObM1u8S03-9mGQ|P_|jhoHr0n^wMO5zG2_S+*a+rQkCuP z$5k{b_DDw#X2+29Vhk{i5f^Q>BAtfJXYCxNlxqasn->VsdG(EedtjXEIeK-zXfuJo zytdkAw7!k?H`?mz+t^oawMNkhchIK6X`JOfQB!GH6)B?)50#LcNu72hkO5!Yr6jj3 z&6--5mKAJh=EyHr?dH-BRtwZ#pGN&4y7#oupSgR-TEcrtUO(12I(M&~2+CYeY%$n- z!?C{9ayj#i#>{7YlFauR_Cs-_wuT!PSFtvp{aEdJwdELAMJ~R@TuydS)$6)p!`x=v zqI(}~n9ry!o_NEC>BpMTJ2uQ`)P@9f!*dbmc*AoM^t$1>oY!TDqWx;*cl*}rm;^JS zV|J9-vqu}jkPScfHfnV+nHP$)9#fs8wWfqiI32yx>I!8x1)f(P?Rk&Ix)WUn$LCwC z`@-nny8&E3RuhA1z+c@;a&CKE-Kv)P5?XqcdwgTC%pzA$(G^FnMXsw)D<6xJC#)#1 zwAQDbk$}%}Skt!KjH^RFE8JtSbe7+O(cVhzDXVp5$gd9W8bxtV4y@ZRIZbtIS-Lk9 z-14GsEhB|oDl|E8tF1s&wI2+ zAmK7Xk8Dsft1^o}8=FCEMbE-X@#6Q`v>J%*xqm98T+^7Jx# zZ@57$nrJP!&!^2Yz<`77?zGn!4KYlu=a$rb)^NkRQOG^Q!6ewhVy|vdNAP_thA|~* zPaG@EII7$u8?mKmD6_Y3ZSh3*M1(AqHYS}_LL$thZU@~^>-p`t@X-y$b@VpC=I%k) z!dV@jsw-kmOVnu>64qJfv|QL)@Onl&W2^8{o?YcVM{j5@&9bY!*R;j$h`N`{^jdUp z%Yi+HX22YR5|wDw!&<)ysuG(ICQ)tbb{OW%S9aBT^=z@mcTRU7*FxY1ElQRcnqJVN zL}B-K&RS`P|NjN^I4@NFVOr}Vs{WMYd#p{qL#KX5ZKEk?G}deViaDIoTnsw3Ur7!Ei-yptvn`ZZ9bZ;y!_-T9U2Myd-Y+i#v4(Jo`Esj{ z2p^Geb|GG6T1VUg#!Lt6Rou5WKw9SQhnPc?l%PoMd=7Clu6vwJ_T&Xh1$yOdCxIw9+A+1Z_5op#Ds zU+q2=y{xxoFNSMzzO_~m$>(LgdcOZO!!vUD`9O)jzukz>k z=pN^EiPST_=pK&}J%8=Mq?wW_r71^28ACGV>gCrKn+%jprB}6jL!$}vN^?4+U(2LftkIW*pgrK%MjnD+#^$DiTo^Y2i@ZiQ(}?6>qEgT?8De*Y!jG%Wk8K*sv7VkHe?$Zp`Irm8*cQg@8g+XmLgl4 zA&;ET(PE~cX$+EH1d#knn?BD-07(e_saFs8*zjuoOmE zTEi3x#gE$JoOJG!wM04Z(P|y}4&_Ge-5~>v;}#aJur=IZs{<%CX@AvZm?Bpa^BK>D z$*nN8U9VinR{z!jdRkn8np*`(+t@LA|**%u3A~q=-v|DsLJrf zxVra=brJt2$FbOQTixXRlvkhEWq=g#@@j#S(;*Atg89|2PbQN}HES`>dJf==PTT2lOVcT~>n zx;rZ8Jz8C0Y+>R1t;fU1ow0y&$cDt9W zhiMU}4N$9RjUf!`ruWDi!?$u4tA~O6rJQfy+7M;hw{jNr8s%F#iy4_H3j1OvB_}LV z6b^c9>RZ-}uxA55z0rO(yaN;YVhvHPK1U`;C95zxOB3rwh#h*4-VATJS!2u+ikvZL z!#?q+y{#Tx2%Di*NmT>=ETJtjdW#9dtedgts&1M&P%XEqX-`~#46RK`6N3f~-C!pK zB|7966#XLaHwTJ|R?Yf(iW$L$nN40K-?NJY9E?7s%z@lxN22Z})8@_u7`U(|o0qGb zn?)3>G8ewz+${EHg3I649!p|xrW&*~vG^i5qDY=7nJ88%FI3%9Q~7iVH+`rRf}2nI z)uNMyJ2WUe`sUiDek_$5xf=M%*%~U1m_K8c_nVuQ7~@Lb2G~JJ1 z@A1X-qWk3K#8bT@BZ5)h4wyKMUWJ8MxA&)nm4RpTugb{sR6Bhi+LYaZ^SHfJ>&JY`~d z{`Rfa!AxxU5if`7JR<>dLN-*h+l)_uI2Cuyjd}#cVM=3n-+BVXY3Vv>Q6b6nHArzs zi7nE~l-YN48nODjt9_;fg=K-==qa&2VBAt>#p-YE6vd2$&4Fc=^o$ed2uC|R{@Uv( z;Y<*nT2l31M|q~IL8;=$3%#~37SWom5=iCDg()!_g8`0LH&|AtS%3#?m8)l(#T#A! zGwN@fq^{a!)^xMpiSdtQ! zehW7=%M-F@g{gYZc>>o76cl_mLVH1v~ z&e39mIJfTQ{XOPuF+vm#B>$)yybuM~n14(5zObW}bT~CN9 zvzb)}>JAx5Y7DV9wZ{T2ItOfHH!7{5ERmJeR~q$g)EawB!z%uwhn&71E-uHe}PrRLkt;*A}aU z%&Bd$a@M#ZIHLEM{MvU2o5GZN>rZiBJKf94^n0mkndA!BWx4-b^oL;w_FC<7T}(`6 zC&i%l$oO1kA$5?eXV?MCefiebW{@p*qd^;r)mOIIO*u+is4_o_xMos9TgoXeN08Qp zrJN@C<6e$$E+I8XTI|p*`4)zKV#%-9+FRu#i!D<0HpiNg1y+99#g-ba5iKIO;5F^~ z#EdKbf(vT73TN3%mykwulXuoCADPHA<+?IX2-0gvi~LGVWg)ekkroqNk0{R(P9r6> zwVph4bgP9;ORXQ#`5YT6 zqBRE`p-PTHlLh=pE-^{s-nD&T9XiODW~I@>3dH(9mh=Hd&=oJX8M{- z*m}%vU3<#ury_G4b9gP8G-b<5zpZO^g!q0&=(8+Wf2*P#$INJg=D@zO-rHjJa0y3) zSK{flMmgDCgY8|1oAIH$Mwsbhtz+hWWSTji)CGF{Gfn~a#|U|lTEv}dhlWA~PzPTOiNYqn&WGp{D_7X)T# zS>28V{({AOz1g4F#fT}0U%H|_Bc}7+mQBn^mv98@DlX{NA?n|4*~E+#mhZM~;#-7@ z4x{{Lj}(?8SdZj0-y7a)g&&s`=X`cCPM( z%1*31momrjR>7-Po+I&A;q;afvU7x-cR$rra>dv{V6RL)F z(Mn5-_SK%`$MsNnt}rzFi+xL#7G;!^a9+VvVlmn)u`a^2dcQLlR>Qiu;Jn1@>trHt z{|&vMAHU$d1npU-lX03s&S+&i?`OL+B^bYa!+D*hNj0pCtJm1=TZ>iOn6Wml3f42< zTbslZR$kqZRGEu*H3vDN3Sh@dFwqt){O0&^A)TdJ5)*4TT6`3 zsPzpxF~y<9>oxvdeaCt~c$ry`Vpckgs!`OsSnoI48Yrj}x-e2l$dd0bjMN#6=lj($ z$<`g*s(r+ahJHG&37=R!-94hkyVY;5Bi%hK9(1EN^iu+GhbuwjJj&2d#}#uF^?pP@ z#q9{{Zl}SRQ0Ox&UcFjk#2K5U*R-nB(VMy*meiVqp&FiNyc!@zLp40#4o2;u*bOS? zd_vX$F~E=>YF(@y9PI*>Idjfc6*y|vGZN?q-%a#;f1GwOsj( zT7fmpksIv%DQAQuS8zp|UOl)Fs>1**1n1D*!(lHH^U0B8^ENl*Pb;mgH_S$w9~qAG zFI8I2PmhE3z4=yYHIKP@(LB=8$=vgpb!T1E>Kwc%w{L9`fx9V_xJv;Y`eE(FN$YAirhN zg_Qki?+IrWMpicdo5$Qw1MY9kaFy#~bRjqEO?3O#>NZR&`rf9a>fXDXihfub^m&h$ zQ5w4EuicQ0>_la624Y6S%jT;s2&d5F?bo0C7`wL#8cmJ&&Y`+sGc=~m1hGe%M#vyx--qOD=82uqR+G?mK=B@G^ znM&4*#kkJAYUU>NZuRThlEey|xsF9nY#5D$z0QZek2w;Cx*M4A`5doGtJ#|$^{toR1?t}r-E#h?MuMAnp=EN;4{$e+` zU|@)fzlgpVXRnKl-s-VBQ(?=ZhgP=%MgvWF&l4N%;Tk~=%~T}qS!va-3JNs}k|`xi zdJ?NA-lOF+sMVK{h)h@)S-AClgIQPM2+KVhpap};Qm(%79u3v@%wN_7;Ee%#-Xnx1 zblQahde)EZ3}=`f;o)0f7EL}`G=>A2vvml){n{H}={LX5o^o4SSs{!;8L`NHz%82@ z-kUy!#@?>Id%3cw#1$s%Ca*=p*8PnrlEGlUZ=?ROwa`Wgw_;5dtfTX z(|*T*gbt|G(@OtVCXch5lC&rpFG)3+J1#f}T$oc@ETlaW0?F4Q>$TVZ(w}YhEnyHNI2{ zqB7f%_6p2bS`TB&AQn z_QdLPT>~5)FFf3B)DP13luA1)C3D+88R1*B2PPEAY1{jZ+T3pvG#N1MXVePi&E^N# zjx`UweQR|mDd2Fas{7W~9GtBWd0*YP$`+vs-&jAlb*+wKwH|4g33beRC)VN@DDZ96 z8dd33L2RWUDKS|0QtTyBP<7H}hA-^CwW?)CRRX;0?!NU?wagl+5T_Le-+ui=wS4&X z1D;}F#;srB1562P$UJv!t{Fj>Gb70E+*g|LtrIGqFUa$lm&?`#>|Jbv=U6Ym?sDy2 zd$6tk_w=p#)myNP>LY!Rck}tzd3AlQh%F3b+}p~T z>rGDcY6I#ybG=t=QQq6iLwR+h>C|>&GCa)q+f&G?es{b1^IU%T^@jb(u0eTbN0Yr# z0V{v%@Z7XHt_3oXB~VT_?}>P9_S>xnO0280+3!`udAbs3vBSvt7S@$y? zKkkhRK*t)wBAeG3)kv?w;=e9ePnFnn^yj`kpRmUrT)H;o9@*n=Hmg6mee0peU4cWo z(0+4VSOZXm-oH-OaqSkZg6rGE?4D~^=}tt+{%*r_woV9Q z(%GTfe`|AB>C_f0i8$M7Y;4d8SnB1<=B~1yyIbV`tSKt1Orfnqm3yQM5a(hctkCTQ z3t^gLcHdfUE2ysT1m8bzTM?^~Pg|{ub3aGw9)G<#=Zsv>mQz(XnRt+cz?kwx2|@A| z)ji8?LXbcehEmmiCj?1KBSkN*9w10+Z8^);v)=40sw-w>571Fc(=%o``Z3j^XC$8O zJNA3~*5&a`l8zGUOmh zRifTj5W?Tz)p4EWJKtm*^#jNC$uam@bopFAb!*Z-j~UkYu6^^ELwW})na2!Ry0@K` zK6+iuWUesqiW~LN+wZHzfg1H`ad2DL<|?y~NFK#eVvjC=nimL4R6+~%ZU*4FrtThH zK4zrf;Y{W+`}p1gP>o{S$Toso*B)K|G<+AUx8?=IV9*7+O9%{xbx*RW6danMu z$BmD?dT-@^8@0N=w^r`w)!$pW-zc$l0G!xkHGI+Aj9c6|zX}e>?{QCN?5_$CX<~6>$X>4%cI?gg4gVrm4`&!xqXa1d*t{V2Zhc|Tvhb@de9Y>!84*r=;cJRs z1^i_=1&$|nmw7V&V6Xw_)f0QO!VIeNcD&odr!M8hyDfb7a$Z)-)Yh>#aIFbQ}oH@E$VG88jkTYgO zleJbTXWFx=0tj(EyozrzVmn)qHbAxVm3K7ryhmmVR$`jU84ZWv9nCzi-ZBO2^?Z1) zsWXIuHoWz?t;-Mw#$qXKF?F-$S}f91sD?0b!Pkh@8^XW^Uvt)cgk$-FuQ|&?YnSkb zuQ_v$wM$63Wa*u-w;wCco3xqe_(C4mg<*(S&1xF%d_TRAr{%D7or& z5p)jzM2rvX`T>sT6Z8JeJwDg2-QDBQsMW2y0jVI7I|iBYwM}{Z>>)mtfa#Aj`Ly0-=6|R;DnPsia3QMuN{89p>}3#IlEBqp_5-` z=MHxYyURS_Iz$8QxQ$vP&k0u@j!*f`C>lrEnx@P@T~Tq_vwx+c0`y2H_W4{-H7X|d zOG(hpY7_x=QN3n|otlTI^W#$%FzIv!pyhw!D)_Y_l%*xY|qgrJB2eaknsLA>d zKKiRs@Uo1knyQfejV-k`RVV$r%(MV8il{^o10_hRlI7tvFaueRBD`U1QBsvawFMhZ zlBz6IrA3-0Rg;Bf<}8w`EI@_WVVRd4MT>{M>*T1`+4hu;Fx99|;MLz!br|q!{S76i z0k5{-tR8-F=O0N4zQ)YN&LnbFwANy@c+{w5t;M3IJ;&QIG&v z12Q#=xGULu7pPIqS|fIS+I$;{xetBXeDz3U27TI@ed)mw`m{4U&QA=Iv@i4|VN&bU zW;4byiL)z5CCk_S&8_82MdWk8q)(w+f%uxip;fdTnh z3DKZO%~uQ{y`Iq;+~uZEyI6y}@*62vt-)O#`m~`DUOlwm=nnSm7($wG@Y(j4+<^(@v)$L2S1ISS zp_@?2Xf3N*D4sNFue6n=1W^Q=HFw7mNQCOg%-;u85ns=o;=q0A%Qvu zUNUAF8gKHy-spR3{9mU1zlwCYVCNYS&X)Z@pZPy8KiqG4TYC2Ip-IOd)i3b>yf6A7 zG-O4u>+fox>$h+7`h4`f-|~O`TB_{fl0NbO#?r?do?q_yh_CgpMEQEhcmFzm{{01r z|2p>vJbvvdJ^3R!H6UBhv>+3Yq=9?iG6o#cUJ==8I$t)4<) zz6#)}zxQC7)(@7sN@1rlnBW!z}Wot&nf1@1oau6j}kN%yvmgc(d921%B zir3QhFa2X%#8%-}n9!FMpQIN&Yk!oyEk0DoNAmNhNdDLi*+y%Ru0>(mJ;K0Ct?(u7D7gEtgh5vPD-R@)%z+g{q8&GPYdw=RIzN_Y@r?G-m%GRI@d&AR9yF)(NTNwu@BXG07b@WAi8J4!L|A zt9#tFyCXI4$lrS}y{@NQHHm5W9i?ZQ`~6`4MG&8SzxQ5$#!IuuNP@?-)w$=Q_U=!# z)(3wd1lO-SX0#C=1&;k6{;%)xsHiE!25OvvC-p${dEwq4&7v*-@934sJ2JkQ&EI54Y=GA8d#CMVZohhDLme00t0_)2 zM}8pBaQM}Z78c6z5%pc?aR!fId*TzKEh8S-N6n~Xp?B3o|5M{hCyf?0kkEq`D zwpNk9NI^ihMiEZ4Ui`3vXiO>E)I(5;Y0pI70lp&7)zT2l zu7(ECA7x;lbIwZa1&cChoAWLigy-8`Y+dS8&Cs8PU%38;zdXKfz94Kp8(;nheak;g z9RKiO{KJp(|48vAV`^vaV!`+?0me5C*nbrX85tSa+5ZnZj7uLV7nPwo2iNCZG613w zI`D*S7*s+o5K*86uqJ4KcP61Ud9ox^f=T~G2%<_a8Z4b6pYK%=Au%C*d?aHa->f$99m+o1iwn&vU!U>2T|dP3J5rRb z8&$e=Tw7z1pGi!XiHTT*@?&4(AwR6oH>HK{n>m3%iQYT7!WV&evlIAf(6{}oT7OzD z(9NIM6Ko6G)h(>&;W86K{c3~!Wv^T`zw|Qm(E* z_86Kxr)D9()hCf1e`%C;-i7dbouoqwvQ7pW3+aq>C9o27L(~5OSv|TvIO2rm=YS+> z4;pTk_FVhBR>v9fiAX2*1^3iBqjFM|8@~T1pBgZw(Ay%Vb(S0RgqRoF6Mu9Qlg(Gm zHCjaLE(iTyE%8=)M=sE~AO0<~#Iz8nA>{hZmFfl9fvacw>?A3c>693y5FVY)IU+hC zLH-DX90kNKw9`!G$S3k(qoRMoj=Lb*_)8i9*0+B|ey@A*87+c8%#DXS@R?^XfFZ#y zG?WGUX})?3i{lG!yb}q&-;dAyD`&=Uu{2t+-cgY7*VH+1!QYl>gCVfGcsL^7I$xjy zAVXAM*vC0got|mK&LioJDZzNgSih`TXC5-uzGkl*zEC&2`HOzXmn#U26e$EjN&u2m zoqhR}-V6Sz00hZ9to%%}L)jASw2_Z)=-svWN)!`Dw8rlsEDk>1(N|E5UNEAQ z%C5GWZDSt-LCwkqj-2_$eq2_&k6zoGzzAlvkZbk`_M^btY+aYF7rUheY_5a?-jqur9{x~q;j)n`= z!EfZ*@}Yf>t|PclJPzr(%&Nq=Y>apU`K@m38(MqlIqth_zrI7gdyQ8Ib89sQm3l!= znf3{++JwTBg{$*7bj#Go?m^pPi2z7Xl42k5fzkBrIO8jTZUNtGxjT)pV`zgRNiZXF z3Q{<0bL&_Az>5+7MX$Z*L$4c?&O*<$ zV7|9Mha?GZ-R!dJh)Luy0AF%200^JKR=Rg5ir_8J)zalr` zNlNVd#ME~5Zhk<`KKAqO=tb=RISF?lfuJK;9}eI+LwCj)PO5zzIuE6-eYKML-dXNC zr<*-8l0oifzj^!l1W`2$EYj(P^M3ovrDDYW{oUQ%U+`uisPy=)!6p+ z9CsdI_tzuvjNNBVTIS4>27h~@x9J#8Cd#0Aj^^^gG^=d?;D@wEtXfGAal;>Z?+IIG zT6pYsW724@6`(x_NnKn0eNC!j5iYP{!Br)nJ$elE4K8l$?>ir}o_B~YC4S%i-RD_x!fw?E;J)kj zb6Vx0di!P9;@>wf*FN|aaYxU8z8+Zxe9tdPZA<7u)8WfH&IOJmD>DM_uQNc0OupFAGrhrL_HnjnF?MZSh=w!>hio%8R@ zioUJRF-^ITv8#HHcv38=)mZ7BrlM<$^Mz2KH76vn9#i=+i%I1)%GZm%eTM3{1lth} z@j)A=5)iJx){U7hdHJMdPM|^TNrw+?Ju#!gwnXxoPOX9HV1a2^F{mQpy^*=4;}P=< zhR_7{C=tH-wE*u=*0amEisEO4pE2du$0_KKgFC7&vK`EG%2&1Rc`~5tAe4phch!yK z@74&XigERbV;1*LQz?IO!8U;jKO!&09jDKLSs(kF_Ksjp{5{cy_-iU|aeV^$Fjzp{ zA_T^YjI<#X4gz~omp+l7KfCv=T2F4}4vpbH*#(N5Lpw*@y#zvkEYMaFq*=*j4)%=L z7mfqVuT;-y>py|lFyFyq_k4qE>T%|25}oXV6kE1a`;$BG%%kdImy*S?B0P9Mt~qlB zCA4EMqUF=4r;wqFAbd6 z+xDmB3+fBx4e@onlxT$VjW4RZ!*3(P6cV1s1v|ALwVs%oaJDCJ$Sxrva7uMH<=_|B z&c|aJ#(*)RXb)?x+S=fGOGBrUOFI|8&S9U*&kf9ZS(ZIiJtRIfo7EnXO|oYZ05&(S z**S%-$exo?4oNw6r&7X4Ne*~CQ*=nV4-W6ZU!gp$gUAcag3Zg1|tSX2lXPmP+}v4k(H50$hDAd$*q_&kS7dEj}#jFa82V_pBbOo%d*0=?k8N2 z(2lYvDkoYqmot_#TeI9Vo-?1b_1St1{np?3yob~9xj)0e-5vs`KlLrpmA9^cK0!d)s@!Ozy9U!#nk*IXC zs3()xioHu9ibslVl{#ERxC(A9@)kRbUTe0a{HzZZ+RJcB{+KaV2*KwF!pGcw4xqK{ zgSx|emE)400U0xQo&fqON-r`K6yk2>MaP+lsz@ z$rHw<%$3Xy;R-((WqK3l9o#kJS#$4k?0w9~=l-z4eZ2MJL)U9Ao_cK(w;kg!U8YXZ zbNXVRZ^yM2W3S;D-%8Yk-*YuzDv$0n=j5|p1`)S?J60-x#p`xmKN4r?%H5I}|3P}R zQfPdCOM9=;S5GwZMnKD{<->AqaW#8UBphdkkLSX2Ywi zXfeKFwwK#x|ItM+OQx#u>>V>N_^Z&`9rQL3wSj>fQX3$Urb2JK5Y`(!AB5I{d;_#j zNby}*9^mX-NhvR}wmGhxlgh$}mUo$&U3I5*_DVLigEoiO$T+;wnP zJ1iSu*8|=+7{5bnceUHl&;#($g?JYPL8`zYeg=KNJcr5Zg^Mo0lIum*fTnHR*MnH@ zXRd=!8(^v`Umjq0Kz>T{9?OR$i;)lkG2g{)kKd5TCq(G?JR#L8B=O)RLP!iBBRNo< zxOF9s08K_jmcl1F-!*>;wIPg8jy-^Ch~$xEOQtoU@r<$=(AptdAA@f|@e4(epwX0d zOWZU;@C<88WT_DDuJ<36{i$>qD`{geyZ@5b&On zSW6a5bXkiQONLF7G`9E|ThwLAb14j%^IMQG^}><;6=}jSR!H7C`&ed{B?2)M=z=I) zO67vqm1=7c--w&`SFA4aXS{BoSiO&0uUI2vRRUVQky?L^iSa52TV84dlnrtAAbBH| z4R!W#X(N^mdG=6^k!e-Vq?vjnrwv{9$WbG-nPKY0ctu96Y9qGV-wT@`+M{P0yw(Qr zOQYzF6wZw7)<)5q%-a20D@tx~9cjAZXuh13ydOXO zi2chTG)OPP0lTP2S7INTnPiPFX?;wq25Cb|8r0Ipyeo)o zDR9QCHXK)%S_(ba!)bfLdI`7h>rRqIi>JXs!a@W6B(S{1-eQkYagnj-c-v+6{6#ql z7H9Ty*bEK|PEuA{USdZ(RYbz!rU=txc#KTfQHrl%MI)%_Xz4nfZW}LiP$(3#c}(9y z;aJS(x~gh?fbSiw?p*z2&jo zR^GeidZpd^InR9U`O4evD?i`+vloWG`{9nJ7T@RcQP{rI^QF3VJJ5X_@E1Vf^Ri4r z@KL>gGBU!~?lbHW)joQjfil)zPVYZR%Sb08cJFNu|dnS_^?mCSRd z_lM-sXXzm5>PoGB{>zqQJ>zUwp_kYbgGfktXc#EOsjF7(AZ6f!k+Njyg=EEzgk)*G z@%&52SP-Z*P(eQlNqI4Mym$?wjg$Kn@Ih5~K%>C!&l_jt;2a1~%W|iB$tPSorm;(t zrv;`#dwQnSzj?~Q`IHV+lAR&D(n7#-3DL&Z(IyDx3DLY{(bn40G*Jp$PYF9h$_2C> zv}i35;e^;h85F|{ZMlOn#J~lNLnJNAGvNiQd0VB0M)Eo35!pM2M@G`A=Hm+udxb9{ zA$LtG2vkj3)Vv1R`;ihzKNTn!JeorBa}`L|UtJ8EJ9!@k&TTKje^*IBRWqq-9;J9@ zl;oVBBnEj!^Ds*HL|l4_?k0ws(tvpHYg#*2=^oWqSJRkIua%nyc0s*s>cufR{A5j6 zX-fNbw%&$e%shi=$Cn?)M3r5hp-hcFnnyT~scd^51g(>>RgIsqlvG#bejU`cwLjCL zVVA3DCUtW#l08l<>f0hNc;1wj>j>tg^PJbTa2bXl#oih&{#(LAgV5;y8A_(kxymJL zJ2ynz1UuYtC$XAIOUbN1^57<%7DB6o9# zfu3Ri%_f-~Q5Vk}=~q6au*>w`8WKM8hx{K~DgRR!<IPh9`} zC{Hi+w0e&UBbK~Ky_i8xKeJCI^s~f?7xC|ayb9g25d~CK;&cyKG~-lrPY0p?9?svJ z06YS+tQy0L%seEj&24cv?`tzX3mW0z5>hQLV>fGSht_W7D(>oPGV=D~=EB9fD_up) zB)HP0t_R0A4{Kw`PNk|j_Pi6Q4Eq&x{vyaTvkkc^LFZ$K!+`H=Cnqv*Y4&O&SkwL!&egdd$kEK0_%S79mUKaEER@Z$_1sPkZVhpHSiCtt(R27{(}#PU`aJhT%)&e*3tRSWZnr*qJo)I;u(uN!(_?$5 zi1K~$+G|u!$o$)T$2fPgf~3XB49Fm9t|U|vWME=E%wUNLc*3#n&B+NtyTY-jP6doG zh7mp`jA+^<-)IBIv6hffW1_>m9y}C?A?&WagM$X}B2P0IP07{ME;X>+Jxs7cYm%RF z2T;Saf+nCB$!&jZLLd-}@y6u#ojJ77Yd!uJX}e)gmo_JBa>w-GtUsEB-?AHXlY#NZ z_F(rgd>Z*Iy(Bw!-aa1C4tI?{_QD%?)awe>G>=`nNDGEIHalWtKZiO-)=#YvM%VlS zwSg9jQNv~7_H3z#l?JoQB!!_>$5x!cH)eE0Cu>D%7|}53{03K%g`M0Je#V5r$sKkn zQb@1(jZ?hBmcZ^E1EQc=IHP2fgN2TY&eD1LyT&%T#hdvI>H?t3oom2QZ?`F%@(6|3FWa}q@weTtt@q`9PLrd*x4F{3 z8rzF#wf8JHpLFq*Th-$^wWp<9ix&5@8UOp#pwdw7fnCA7wEg5; zx>tBfo-Dt_*VibYcsPdgQ;ej66cY@lG)l1!6AJAoneI`@5N(?Z98)x&>)I6KN3MgPS6UH+a10spiiKp1 z3HkZih7!b?nhNk~lUyKkyiJ5I8eV*n6J&$9QO69e)Ynd$W;(2-tsJa_KVWDMgJZrkxgr zhM=~3BTx>ykRCY_8~cgz(^5*9ir8Od=17s_j5)9r@C=2P{wfqe_@n!46~YmiO~{@K z%IHU@zc@$Vx?IOI%k{a72Y=DKcgQ9+B|l)-vkmT=66dxN4_2hV!vkjPP<`L`5XWLD z`%TvbW2-WKZ}OATBkettt>30od}PNLKsHJ`0f65+tR*r06)Mr$LlCCvkp3(;hayA> z4}B}wo!&M4dB!U%B>}P&=|LG}Sr?ugMj}$EZeheqXOC?`2&or3-~zn13F6h~fC-Uo z0KfJCy7mU`k`S0BbWM=}1jc~J+S-d(hYz2~T^`Fe3wOafDRT{?w-A){kN`?%AWnzD zG62F6&+OrT9oc$DuUYk=aEy@K6l*Q71M8S=4_V%_?REZ*A??K zto5CvGaP}?c+AC!!g@@zlks@&{1p5RW@{gOk0QI;ykm9b0_CZTMNNy?w*>AM{vplF zx=Xq<-YfsvFN%+~UmzoZ>A07tZl@}1*Q*UlZP$u7BtLvtv6KEP(5)9Xyl1ESQ~BkG zAJHypbPTCyan?d2nMQzHvia!x0WVj&)`{^0!xofz(G^??&%sT4h>w+=J~9?7Yc8)K&sl>+#I7Z-kF~xn5vA;o}lxe@596DW9Mm=pj!T84`IX zbXHP@YFpwzCPcDieSp~CL>FLqC%r@R_v2H~l8}me1yzN9WJtEohPp(e3f3g$rA(o; zKHz^-Lj}Y>uq+qFCglm(Mmri;QxqXq26}mfi1p!ko8Or&lrCDbGhvWs+2izK>A6Z-ZM|%6r;~;Y;(va?vlt z0gJL?%@Dp3yXv1&+RJek5Wbo}wpka!JfuU0dV0~T z=OPH9z38}Kh-xvhzr-hEUOga&t?8?51v3uGG}_5~dG0{WCSp%YY?u(qXGJt5#LrD^ zQ3LD({MoMlB0?TWxEs8E;TGrob->hYA+j3)# zq^6#gPWtrYH*l&IC4@m4d z!sGigp?HzKGHwM0f}EMS9clu;QgJl7dcVjIZLXoHw6VcJ3@|$t7#`19jNsYAGlV9~ zNk%;iCufe&YNdWlCWMuehf83AB=>88W&kq5OY8Cs`!u^CN{frZ!$rX$!bP9ihZ8a^ zd1Jd=CHpkR(2yfLxE~rlA1+X^ z;iNvpr7}!Dtn8+H)6Vi(a=S9*dE&5l@`uOyT>Q_`sk^6CyUSR5Vfcyd?YNM9ULwN> zd-;8tCUg_I)=O5hk&**pX66XfSNuHQD>FYNOGT>f1l*nyets^KyU485P!FdpC|53q z&g&`83O6(~W*Tm>ooDGP+t=#|n#EnG=56nF((GpD_+R)AsiLzt$UiV6sgvreevHBy zU!<+#(AZ^Zy)BI2X_twIg+1f(bM*M9+1BhP%HB(1o3pun{;_dd>MS^@gcMfr81LMG zO1)=yCZHD}h!-Om5hTW4fr0w|8zC5mFC5FnSNKZrKHl#Q3pWQZql5Pi7!?)U(ZIgg zch#o8r-3XDXL;4t&2NKH!R?g}p-5B?=3SOlBVtwlfBDK|USrPjXJheV`FO@9>DZx#W9Z5oWqL~d9 zS3nmcA(jy+1d>q5)Wb1aI6Dz2jKzfPO92-ZNf8umGo%DXLPoU&!eV;up1iA%p^}En3d@t$yv6iby7sDJ?re5JesS@5(wP(1d`{$DyAKsZb>BGO=+jEfi^9x7R zm;vzVj4~spSGEV+KvJoy6Erg#uA&qCB1>HpdNcZc3?3ilrLGCj<2^3-KtvViR^`di zg2hHd2<)4k{_Q~t8_8F&XK3R#t$~IR{*dAESvy4<))G20q2dVTH4=l;CN_gdJ$0%U zXx;v0Y^Un@;5p&?9R&Brg?9Yl4O)ZofT5Bz?+(Kwp{oz3zNFrl`l#w)>WikM`JWXJ zJsbjRgFt-Hf*vScuZSel7u&<{zAnj+NYK)M$xj#thLh+L+$Tp#b39oG;CC~0%SbfH?zJZ+Ww%u(>~uw$;!~}me_v>g!v@Vam;)}0!(KW)pK72xR^1*$Qw(VyT%p{*O_ z;dOmAQzeR{N9dZNs&oah&kmo|v(!)QP__*-h!&~3qwdE3!5;SL4c4lcY^lpcCRBfX zAGnCttGx!J?4!)-4xEc*vTvgBv_-$YP+6el@0-t}ki#`F%5E%jF{fz{XBBJX?kww~ zZlhJJ-CRpMF)9+1rIml{`ZZT>x&CIZhxsJGU23kNL#lV}|06vTLhr2e*}gJp zKik$xhb6brsL;Gr__j@Lq@}jMb=*k(9sj0~dONvdtiGIZzYw|o_Z|t}XUSmOXmLF% zq(-MDqFJd>7@e=F;=VOnwGxFVmUueF!UmBfH4{{4{!Zy;M(Qz*t$6Jw0p8 z)sOpZNL&5k5B+cU8ki$IvwpOhXqom-*bq%QEIaO&OQ*3)O~2Odx*?{(e+&yvEx|OQl$T>brK)_ zb;(yyWg4r+YilKYQDGakkl7YK${-q(P9%Af9Wg!jyF*K)WBM;oo~}`-m8#__1JtY8 z&V&>qw4)eqevArVH)uWzXcs2c{O#ENk<^0^qaQi+87yS5!4GDU;tsk*h=%+cjjAfQ zB5VZRSLb^F6yLc(K8L7?3bc*x*B3V!eOR@qE%XEXyYr^E^P0U5a>kZQy|smyJ=N;U zVVdTlnkDCSEqkjF)a)KT=k2u0HIGBhs-;({FS+s)moJp*7vj2AeNI~|*1FgGNh+&s z?P}IVs~Vkg{ch+!UNe}4IaNctCH0bFjQB$-#b&fhn#EL01v33_qRj|R*XNW5Z5>=R z4C|*wT|GnEJya9HYS)TZT`OMz$>u5X6AtiGKw9)te`#I-Fthlo=Fk2@v0csX0MS@1ZX#HP(vT*=8D-_yT{nqM8>>iX*?< z@z<$PAO5EDGI3M3am@v4wdUO*RtLSEYq~KXKlplWm2y|tdX83B;hnK-{n~E%yrg8d zN1r)gjOVcq4?Hw`*WA)-p`#(s3vI@~VBIyJ@l}_1cSG2J@n<&e#*lmdWBEQfv zW0za@y3gQZLJv4Dr`&R4ZqMDsF`*Knyma}Hr&Q!*u5e>|hgG~dUrTm-o_uQ_FxMnYF#6eKS+W(xB@ z-oLB3DV3enN26uLP1pDai=*|#-p&vDo4JSW9Dk9sg5=vN61`}dMs%5XM<5^aBwiiA zUt3wAn*)U|Kk3izo&Rkk#Q$h8Z(>=ipjFF$FXky)BA0jhX7-Xug29^-3!mR>;l@4~ z=Cb~yW8$d&38oB=K`!sU!0H$!jlUeQ4}N@PR=P_SrP9fj8yzoc&jwSo=k&aCz zwF^s|?W0aaqo|vv1LEA}qEqUmX|1J1syO#$8rN!+4m!8n5_b+;drSG&oPm40sde>` zW&Iz=fWNk_e@xt~O9Y3z(N`5|*A=CU=G9Ca*L3K@=gG9OD@;jB3*vEX1r5JgT$yPHuiFXR(Gbf{rMYOf4c4z5HSIiX$Yl@d z#_Re7G((l0?2YThS+OW*C~T^zhySiaTU_Q=i0mq;7&}B)c5T-_vkA=GiQeDSvYGPo z4&HI#LNC;SS+lnl5{2t;pzbIc?gM07Uvdm+Y3q`B4H7M{V61}%YnVpsgkL3`+n#iQ zcc87(#>TR_7zZzgNuj#0w>O%sBj?C;Ro93Px3@bap0~w#dFMLRYRBTFS4>BdP}@2s z|5YpTm~Z(ViL-8U_?cdb$6=Zhk?hoQ3CHSlCWlkgv7S1fJ{C%c;uuo%?V&JEX})zba0llxS3S?$xaH6gN;JhJBn&)Eo?>+Lfi_6DfewQl&c`nL`F<;e^PJ*- z6U$NyBrgwb8w8E^0lGK}f#qR+^b#wpN@UxhMV|r+Qv9sZ2#2_vbnLv@zGE(3`hJ}j z40vi$5(QbDi#u}|cU>k#8Qehc@baW(;~z$=3P;sH7kfW;f7e5yBQbnBw#{U~q{`Z% z#+q?4@Pm-E^d2%p&-Y(Le;MF++!;yhCYK=ZFYfhwz~JW6P1_)1&Fp1^O-btF%AiMI zST$*0F1no$F{jT)!x6i^YDlZ5=GHQXMJlH>smQrOZ%1i41}eHfd2#0>QX~0H!XFEz zBi|AK0h^tTVVqadG!bmtA@U5l4qTp^|@|K;_&gLpUIaZxvUzu7@Cd6I0w z0Ihi~2ks0ur(!c`RrTDWqOxB@*QS+~X6U-`)R|955@#v7q9*7xpCpTHylHW>dDzDY zeevu}IvR}}0P$N@1TDnt=M_?p;nBmaQx*?{`N@so-Ax~-Wu`DQb8wJZ8Zo2u%}#;v zEvL_@gQv$+-G*ViVPCVI`+h`B%+b-&gV%PyHr`_(r(tq*PMX;jjEo=)G?}ckicy$c zztvIiT>g0Sf@SL(?VU^XC>+L>DW|4CA$QS|u70}W_0iY0zgU-bcj$7Yi`+Xq1k3ta zf)!v{_(ePHOuTRN@^7M$9=3pc#J;n#0l)U&JX7se zxt4U>uV8wMlygA?eWc8&Y5;IH-VZN2UK~HFo)lZ!y%)cNC;7#FId)4W`*H>91Tkq& zr6n>G-F{}$dH&?kO);4t5cLt#QUhS<>=A!s@w$;T4CEQdwW#AB(Sct0=~32h|A%uf z%YWvaOUT5+_<#7~>L&Eb4KN^zTz^LKrU{!;*airrMz*BmLPzvMa6FM~5Vtft!oPak zlu;u?XnSR4E?(R@ds|jR^=^-q!-K#MTlKHf79)D$#+r&kt^IZ=djE!K95!y#J`PZ} zh8Q`+4)7Oog>UM=679ez!1O1HHMxN7sCC9@*Y5o4gR%wc%K~SCcbrpwQ|BbQ!Ci0V zIwP+FWV|~2)ZiCP=-Ak%%yW2`Cluo)E(%2y25RBTm4y{7emxANok2X(QnkmA9H7UG zCZBp1Q7fyOdQsmOYm-mPbZo;^hElpsLX49s^BUj!319n2l{~{Jak+T^54*Ac-|Qx6 zXJ_x?OsGxxkB771zei<4dQ~M!LV6WX2h(qvv5Td>-G7NFEnHk2xajF!ES&7!T`WwU z-7Q^=E$Hl>%;~AVElfx+Wbb5R>h#?k!@nQhZ>MQOmTxvoQ)8EJAtN&U=(8j_upjN`&;XrY4q# zLiQg2ZG1LHCPH>jrhmFpFm(E^NXW$TUlo;1o$Xznj7^>YHL$3Mi@36jp^NFiC27Goe}{>Kykdl)fBLKdd~K4l_g{%4;5kuv{d%zsY*X{X?1Z>((k z@2a9#5E1*HSW^!dLV8JCLvvH1|IUT~JD2>{@SisSwb&HCYkU`>znAPkUibgp+JE4E z|Lt!7&#iv9b9QkuHME8H$f?#{k27tz^{uV_eGIg<^Z^X|gX#8=vk&MsfY1$b@Q2M8 ze}ZUk#agjT+nEaqv&4q-$Yk15xu z^lR|v&~Ef#9|*_u?+Ew2zdfz_k5nx`nmbCu_WCAYW+O{BZxwuWzYIw zfXnBe?mO+n`&K92p2x>l#wM73xh{)xCN`?3P3K7x%W`bC@`V~rsjA49)N?d5S=yNv zsU9avBJug9Er3?7lJ!KgU;SZaXj;^)$mY7$K6O#7rS}(owo1G@{YmDjdThr+=kU+^ z6~B*ra@OHcqLQ`dg^|uJC1zd5rQEEo?ZsMdHbzLpvT29k5t3K5Cw)-n#PqXV@XMJN1BL%A^DNhtZE z?p*I4A?p&&j{NL}2=xhM^a%`i-&oHQMr*hx{YL$gkR|5(Cg8uPwhxl#9YC34Pys-t z^adEjGTBtjG(YQdRK!*ag*HltQ;%b8nX1uu)K3|Y1V%C_5Dmz`BmZPkMY=VGuY#W{ zfv*F}i01r$^cYQ-Xb!#~>p~lY+Q5(hfKDiXSOdu~_%Rq_QPiyq-UcnC_EuW$*bJq` zcFF_XGpJ;2q+iuri)HwP{^N`eEXSf*8+3(L(YOck!>ri23W|dfTqY|PY4&TJ7IwBeJen@H@13z)HF7!jt$Q_b}Ue!@P z!R+Qp=BW#ZLn#+1Vn^X_>jN>>tSV(+Fy3Q|BtiW8xPwHK?>cm$GvqDdj>eMGXdtnm-2l2n*JQ%n#G7ys|Y+1Q|hzWHtSmH>@=>nG(+sCa_$zf8sUr+2gxdUve_la@ zg=ruqv$~Wnnuy3Ay~`R{4f2l3yzri*ATpz$a)Mx9XMrztY=$&EjFjR?_E}q70-_do zcRg5&3`(#IzOt78LP<3Vp!HjgtWSgk$kyDg2YEt%?fi@eL&H!!2_@6F8We?Yjtcl7 z>HtP9BX%LNitT}~7#+KDG1Y)rd$YI-RcQ-#`F_B(mJV-nKjeEwxiUbjyy$0wX{l;JW3f=P>(M%m>qUVrM}3(^ z5?4RDk(r)0^)P0_wQQ-XBm?8}5b=>6XT&dzr1X@ZJ&aS4;84b;Qe-Kw!>tSDp#CUyAit?)_}y*N?pqq0 zebEB_$At(24)=#uIvM#)(-cD)eBIh=p{ZI&HL+Q6*lGKhw$bT*z)_rzA?4c>uXAW*+hm*JvuxOlAuhrpOi`<78KsMd(k$%#7`I z>sVw%f8x4v^_!h_*$m__!UD%jhSv`vAUxO7W+hi?+hJHHk5Ejf+K1?0dOz^BNj`|3 z{-)f6c!WbB-MmS=33X$U#Izskv@%|GVHo3=G|RctFLWu~C(XhtuoO1pKfmVvY)o4&dR*sdn!knB2D7(e zi9%md$F^MRtE%hmw#swNzBDGN&>xk;m)7^Y)=p79X{wKFmkyi>; zOUV#F3zB`=Jb((waltnYhZ@s~S#rv|WFP|qy2dD^* zKEF*T_JKe(epYp$?isIpPR-UfXTT(xX{>v?ydE8z`XMopRCfw6jo;)m9j zM;i8@B@O*ckJ6L+aW|Tz$U<8e5;H`gVj+bhrTa33rx#mXNke6qkON=DtmuIUQHikw zp0l>D0T_g;gfpHiEl(zB${LAMkgydkPY;;N5gR>`oEu6b-BQU)HF_PV%Zu z%k}ol=V%GqP|Xy~qyS!CHzN9j=!Wg!9VMpAj~GbEX6d)WH7>W%1k@mTNL5uOalr!6 zE~ZP&_yxrzA)>XwN0=WVzn}ExW(tI$1Sv zO${CjKl~4+S{|WIFMm=QL39dl+$Mc6B(sNR`itqJi*A{N=2)Y+VpXEB%qr1q$+(o~ zLoDi{9Mvs$;fu^CJ?LjCnKb!}HfZo&3n;tJP9eVqC&_G1n2J z;cDS2g)QTnTDeM5T;pLf;#!MHtv?P@h)9BfWxWuRA1jG$rB9l>S(Dy$=FVxDqC}SGgHR)R;AZD0&`4@%H+qCgQ6sUZ-FD zAZDQ3kupDx| za~S0dOj?`AAPwD-B7*<^4Te6JId6)!ue2_!+qs5m1b_mhXvB@*q(q~Io6@Z(? z;d4tL3-;eN5;iN4aW2zym}m-)Bms-_tVT?EUGuB1Ua;e5!@+T=UgJq1E@|bWqg(jc zGP#QWlJwuuFUQc#K8&!az$E-ziFZc09qoDE0EE`Q*Fk7GTN$ujqHPL3RXpl{oq4ekIK{YMh(DW1O z-KesrniaQ4b=~5uWYzQm7$a-dcA?frHOX~ova#0B#qI++;{Dl>!HX~!C)$5FA1o2TiRHdvHKz(ADpnDJ>m^p$!pxJjz@2>qPMLhP(5YIM~^tq>B=D*skU z;20{&!fK)kI{h#9-YO{W;Q1HDT@oCEhT!h*Zoyf6aVG>1?hxGF-Q8^=1P$(Fu>_ak zvcMu|fB*lfD|KGZ%e_^%>ORbLPfyQm%{=sXr)NIhcAi1T6x65fH}C}@`U8v^8YF(1 zT1Bi4i~5(IejpT{uhNdU*>=!Tf_hmH|3hh7O2lkB*4wa>=?|gb9SOQ$^*^Wc(l!15 zjBKxbvYc?mIGTd^#k?+*dI8F;N1~@z<8WG(tZ0)|fpj9%;s|&DzVd8UQyGN?$yyP1 zyr405*jK3N&%B{J(&w@iy%&wtIlL#RTax+&e**ux& zJ+vF96l@9$rnf=Iv;df`YL7$*UCO4H* z?oU{#I^~9uQV>HeBz*R=YpmS3L?5n*f;7IBb&lCI2R`luo8|C)h*cfI0&Ig3v#rk?Tp#;V`9f3l2`p{6o0yO=&gM??XX5$ZmMPon{sj`*? zw@>s=Dvj=K^3G@V4dm6SZ2`+x=`T1Q98)30G3^tTnW|gB%T;=H zqWtuU)Cddf>(`Gp{EtQ_Avd9 zd7`K!QHTV_5E=#zj?rz$wBkE2{| zD|3PVLd8CHATfg?_s6fj048VHLfR*wV?6B>sig(K_9kdPTVDqbv`s)!(P47bdl;u6 z2HUccr_ujbH&=3oDR`vaCbFL}9tUYEC_%EKqElX_bSdaw!d!)w&z%FP-ga95_U*0Q z#d3FEf?evceL` zvx2QZwR;tbl);@?AwKny+)yOj@9%e4?w00?yeZoR@WeA4HB5^r$&0&%6eik6SonOP zV$X0hR+T?>k?F-Pa5(oj-(NGrdl@R$ulski6FncPHthXv^!Qcq<)ohuZ>i?8A}+>%%|YoszQI^ghNi0l{KR;Ws9BmNu}(JPKRM4R@7t&`wOS+3 z6-3Dg8*8psN^;yU%@q{M8&l13zWxhi#Q$QB@xW1&YDbhzrUg?V zWkt8@H8g^35g>7NI{0h@C~t0$raWo%Jqg8LSv|~R@poE z%$m9W!5X<#21o?;=laQ8|J)?Djk%J&awPa7FU4{pl;xA~^VMqIMd-^r?eA`}&v7X5 zGwULuO9TyzI5iNC3V1$oOrb_(4T;KS_@&H+|D)W3$O_8fWtCAiQj%-olnb!5;FtQf zHjp&lVugcKYy)-R?g~BT;g^CI3})~ zWgx|>s+5m9ZN2+M;M5-AmtxWCUO859>NA&v`n9c*w&u1QFCkq&Kxb*SrlRCk)PWiN zf`BV0r*uI`cxS7qt$8OWEf;Vx2kQ^7C@Eu;lY8NEVD?p^NK@C;Hax`?7AkJ!X z0nh~jOB_qEat8yKrDjf~!g^bC$VxXRPcwN`J4)#~i{Rs}zZX1P%eAWm<^uACcOqY;B zK|S9Z=;33YIGBG>u@QcbQ_5ya*0ND9OUuS%vaaY{($uM((oquYzPnshb*X-tp?0pQ zVbl6oS(bpB;=)70zPMr|Y92{h+-hlb|38<=KZr?1-xZN)o5(SgzR*A*ADE< zM*_g~lOTu#f>UX=gh>Y47!=ApIA2premrDY{8#DvhT|A|wMm3I>ixn3tBhDldV#z@ z)*79bf2?hHFaB8D%!f6%S(bjRy_MjMHk_+*-a{}vVHE|eI*st;1PzSCpj7hsahu9! zu&TxaR&C{){c~7Gvh=1@<7B5C%r^T6F-5iXj#T|`Z6hJ)(B@inm|}-2r`MQW=v6$N z6~hmzQuNVttp6yhpjvivZzEX_u)&UP9rv8IVa*cq6mgr2sPrVgdUm1BMhq^YS0=Mp z4q5FEuf?2DEo9N;1@rrIjBg*yf7S(2q~WygwN+rWzS^r%*i2aKF;As9*63v2ar|2_ zUs(;uX+3As!nbi@YB3K|nYS+JWouz6E*p>R&!K5CZ+w!&=}P80;anG`<}zOqQ+FJy z3;LoP_4~dQhozIeaPckY=c}>U(?hk~pGWOZuGu{U11u@ir))gx%3iIeb0-x2aYEtF zC08Hgq}b>`{Xg0~MM2sP1(dT7Gh**GwXS7x|84tU2`2Uz97P*6WaWN2_|V#ymA$gr zUIx6DRnPc3S-zLkI-g^Ix}p6Zm*Z!kYf!2C=I^+#bX`K5SUe5HKeUn*aMPAtvjj}q zB?>I*4bzE#{0b9K`Azxv1P*Yud2CawX^P}%>1?MeaFZ^Q`_tDqHbC>-3FpT3Z|=5V zFwJfHVq0s#21}SvUe@%G69PsA{X3f}lG*E@G`KmuBBSmKj1wQM*bJ$_#E?}MQ}?Ms zR$G$|RO*S;-{I7EX-1o<=_vwc?_aKq`cavP^`qq>W4a-1Ce2X>46Q?V8@M_mb$Sq^ zTxb`@k#v;~u4KOvp)~d^f+RA*-m?akpuAT<+@Yx#|;M z3w?syxHNLbwiIR_uegEpn4w{^`HCc3QO547m-2 zgXavF=cNGYF$|cf63$qJ5(5s(}-LEIixoKz5oKGNPwBYX+6q=d_B}66CuicNW zql)KHTgU*#oD3F6OM5RHQ8-$NUUt^o#Kd#sR#T34q-3#3_x7*KCOlSU?$+BDO;!`A z6F86h(8e;Ck{uYjlRMM*n_k6OiZUtqlhpT)ScyILNK5z9{LYZ;txjd#PMrG;P7`FtD|6 zUUBq-W0572=;ZQni~MI0Bd*Pucpd%By5sqW)5_kbdY3xL9i8|5n8u1ly~OBUsB;tr z%8H+Xzv>@VW8hQ15fI2CMxR5UB!!MSIb^ER`+avlfs{adsRK z6ZSMH%Ra3~T=4q@Dsnq5CgDy@d04rHQvuex5sRe(t5+L_y^HBw9NG47zl?n|rfkV@ z8|){^p*Eg$ET_?&OuiLli^%S{U()=NjcS1!Q_G3sBg9!g@z3-;k*cU@dFuY^tG0a# zT-^=^RrX%SW1H!-c~)v|-&JzXT`_I6e2TWr`NYf|2#Namim_W0>EYXwT|fQttQX}q z*bT^0n8GDqAa3aL8E-R4G=QM$T%u6CCHX>e&kU%v#igWLi+rCR^^U$`86hoo75&=E zl2yqR#f6DvlS-t=fC%G>XfYx8Z*1QcmogV{V=?^BSQFQAHOH<5qd}S&=G%H=QUrd4 zWA!*_KeaZ|m&MV+H!(#B!891&&^Gk>&R7Z|*k4KbqWJsiKASSE?NFoMg{mKwdxG1S zYziZ}DU7EaB$p-jBP~8EL^fnJfvh~`Z&RLFd3tBCOr!2GAO#aG5ZuPj9_9o%fWq0Q@qiRM&dT@%fGVc*Wp_@vw-tl*M| z-Cn@n)Y#KpYyw2IjBDc9YNSy&88t5*%8s;%qkjCrO<{i|yTZF_#1=Rp%xW9DYzXxg z!wx_pZ!9kkJPY5N^t=d;z1H{nWnQkkXLCu9>m%VM^eh~w!)~B#Y@ZI@iw!i$yu}=4 ztsXX1wGO^v z->Wuz&t_0hnfTqqXB+p^_j^pi=)C6Z-=FI(B3Et_VaHF4jJo%q)Yq`*`<=o&A}hF0 z18^=8ACw#GfGNj!2-`eQ!sii+Ex$1hbL@?VnlV52W*6sADyQ44(yA>s(srixfgBnz%xrluZ z_N`!lm5;NMN+MhS{JsFBT8UYUBp<$!#Gvtc!{ZksDz!<~{Bh@G;G`-}`tP`OO)@ zo5z_ydFlu%#lPeJVVq5`ccF*K$w_7L)%0TjiKZz#d|Xu+4%)Lz-acU??FS< zUn4|S-I^hsAuwrsqUyA>D>ai>weK%FZUCCEVRiXcqi;^spCM2@vhiEAVSgGd3AaYP z|6Z+40JVKt_l5R!DSMhWWw2I)+=6}YI8_9IqIxw*X=H)qb_08B1ja%2Qjfs29OAW;is;>k z+_aYcZUn!p3QlFEohr-nwgx?G>qZ(n)efNFM+T+8{M~D$S?dZBTH>?$9(>wd4BaVvi9F}f(_f@?^6#7CnoKSZ%fs~{Fpa5LZk4~Ea`yZ z&Uts5HaEp!v(J%ggYy6D4W>Bh8YtEHdIJzhtc$HXTs#kQ7f>cW57 zFA=O^1?UvTX=R_gqYAy2?FL?m^zEi5^u9i5hG_lgvcK@^ri$WpHLd^mT*~|~DAH6q zRqS3Nt3SZ6a<_RC6J|`3{lyk)tXy{l(+3u6bWqZL%XGVQInKwt>FQHj!TB>uWxC&! z7f(*B3hf7>D?d5Wz7}j|wgr@BRi%AW9WQQek7lTTr`n_+Boa^NRbg~ zUkjwDPST;HNmcn5>t_5h&eYK6DP|o4%i21hKA~z+L zjCe*k+@}BSlbf7FX6VNE!BNIBU0dIO_K#0B6ru_^4>=r^V|05-+A-0i&SrQds`7T0 z-wpPunJap4d}O6@(#H9{{x$Zm!V9z8<~ixCX*>U=?~nZAyrWoK=7p}>+RD|?hEd$1 zd27;6r$8W>I|Z8n1O!XL7ZiGL(b8X8&G zmBJ4=$az#2te62Q#+_YvjsS=Uw+n0o+nI1>9Y|9(^uN?3@jm@ zRkBsElft#!%Cr!|2;umv(gvyND=)b)u#`tlt8`+sj<|?~=(V)(g$@m+ZpwWJGPJt& z6#DnLD}S_OAd+)cDz!7)FFT#aQKupZCE!UiWJ(VqiNxsCDzZz_`Ks&GqI*<-oS*qG zIwpjeh!b0Gn2r~3U87T5`~2p5oucF^v~yXn7e($0cj>04m`t|xq;^rRsP1(zp^h{2&=_vDcH?dg3!4ijXe-6&_BM2;)1!J2-pvPU&!wPjHI< z)%(=us7swQwjvN#OyscHj(?oxT!@9vzs>Pt|Fp90Q+i5&KLG{L-7825rp8DHXJaY^ ze}rJ9U&pUz^u`h^MiNz>tEilsl28)vsdjB({!H$> z?LLqA+iDWI0ZjT(coxdr2Iu0qMPDPrl{pOAtPg`XS z9f+H$aM+bA%3_jPs1ebOFd5#|%5GR2R7;U_4183krAT3mDz3RH&^}?i{(^y>6A|=w zmUxjU@q9MxVm-oH{aJx1r11H0y^vBORkHg{bq`6CQo`3sKAUP9w^(%dkYgsXql4=A zw%@|j0O;jTt;96o;`03IHB(@30iBa2J${QkPmW5xcmVEzTvyAUp!=R6(8f6 z6uzNzycBY1-cWIj3U*_?KmInTUihY&v?G!&!X1diX8;Sa;vPhCznRJ0x+LDg8NZ~d zmO{lMXHHh#?^QKys|9UgXt`j`T5Ml3*#GD}on4Zl3?;5z5|v?vjr49^DK&q)lV0GOylvPo#?s zVV1SB4t^Y_&aQGCXbKeK7Il`@aeth_T`F_3k>mr0zN}O{S9v(c--BSm0o(~CsKO+Q5Rm_k#8I}G=T#>bN7N;n3cT(qVY#?Yet7gmzjBWlw;%i+@v zt^CJ3c#c<%z0D`YjwANG-l(E; z$l(4L1cbo<+h0KIa!fI2nVmBhz7OytDCudW1ha@Q<9}TVooW&`gMjQ zPq7k+udh+xgW8e=eY6_Xs7^(&sy5_TFvb3jx`%2hKmHV&;$ZuoH zO;^6=EylFhmyRwgPqZs4FL~W*#;UPofa17&rJG|AwV@7wW13g@!#gxzl=gv%FyTVWt?C12T5?O?c1ac$$7(Ddn2&x@e)`_3o z7P+*BdtXC&!^J;i*$$sYW?nmsc$!9btU(Yb{3AYj9uZz@(F+DO}mH<}4n-W2W zuz`i(EIZ|#JyVXYe~cHFl#jpA11c(f-33gY#maQfw6N+T_K@hla zDQL#;E|J?9BMaS&w)oQs*U$C{YV*ggiV!~qr{CxMjxP)evGfbyX-xWn5-01~!hF%l z43vYFd3B7G7OS?MOHY;upLw<$^AHO{;!r4a$|ocmOR@Y5uUYr?YV^iA=IYXlk929W zg~R{)I|2%-l7vbTSjO>dknwon^Avf*jl3d4692hDmK$^oS#s`)8psuLHNhPvgo<#~ zmDx3zGu27J_OcGUy>z@JAd1O{o(%v80FgpR|!zjQ<{hdpyK2+niVVGft1aoRp|ZJyDx4yDr8aN(?EEre-7Au zV5!?ye2&=ch{ki>B)+9xW3gu1k7KNl6D*vI$)5TuEtYN(Gk|qnD?KtR+MKUZIz{Td zwdxB-VGsXxQOaW4j^i{mNpq1Df|+X0935#!|EKLI<26pZ#y4pOda18Iyh^ zCq(m~IU=JsSvLwBx?Mfsnt}x+NfjQ?n+>O_qBSN^J>`Py!-EZk6dbR`NvNw*08D2Hhu!YKh$e}&7QBngGj~mP>-CvZ7_@3d(x;=J-bJ|oC0DNxN6vCUrh5fI5AW|^EuKl1=cQgg zQrg5>(_R|qQuLK#HfavFRLl2*SKq^^-cGYB@%iUscykU2BhN$3s3K#6%Z2|($m8P} zOBd>u%XfXBXZ8y7NTmVGf7BsNeW?&6W8Ixaw|pAaHR|>eb!+>mASJ<%W#lzLrYfly zcA84rb+e4+yx&MOtI1)xlbO|; z@o?}kfUIl2{3Mp9auCJrh_$awEaQx1SU~fiWa(u%6HDafpE$#Znb8i<_l=aZ4o)V-ZbSc&2 zYP*ZCi-W)L51k5P#yj=lUh5P{VF6*iH^=$Lavb_zypH-cr^4*Nb6Q97|W^S(l}lj~;K zVYJs4wIt{OI*kfHkK2HQsa_|JHmEjE2l#6N3?@n9*F*2;09sp_iUU$^B+q=z^_(O{Z8vge8A2=%Vcq1x z^Rd-NMrP~^Xca_z#v|LC*W)p!OVI9==8co!X)*Kq`Bz7f52 zJz=K|yn@{p`Eg?gUORHqrmFv-GlEmfwi^DR8y6XtKFgCZMCyNAOM~WmCRdD9GNNnmEt73aNXQ?~q`j3e%{!k}| zTI@+P^ivkmasU11Lk&ZVCElQ*|IfA^O1-hKC`DJi@nBV6M$4>loXnGG_|4wAp(YOt5M4qj*lbHKac8s~#NPasxp z7*5V1SW+Zd<7_ZoW}cFNW0~5=QX6WaPk|&`FyP7~WHx?hdac@cwlDT`X{LQ@yDPgm zf}^9WMXo_nrs3W}>Kt@wBCr&3u?q0NBz9sB$`>gt{op3lPDXgh`H=8KZhr6l!?vdk zkg<88_Qpiu=|jO9F}Bbo7u^WN-U?LM@fhxPfe`#|$$%neKyr@d11Gd?$EF1NaM?7) zkV|2Z4lR}XF?I_XF2crOezG5vR3)c`c)EYfQUA-B1Lu5FnB9Zzlab52Vq2 zsk7GoJVEW{G7X?Uz+vuzI2s9ufigbIwWs`+m8Ue}Ghfkqrn@n=s$xaf`Zylbx9?kw zT;tHA0*qG9ZSb@|e9#Y0tYc#LfJdI0Ti++1na-bxk6-6o(m+^yv00AAC&B=0jhk^z zhb%)>Rq%KdC5?LxSCx>DR-_=!Xs~{R(lv8jt0SBztDA+`*jAOCa|Zr8NWT2{R?8j- z%rWKHSW$-lMPfJfM0C|=PnLRqZ89lmb`aPk#j0$D9PI9iU=`i5i4}l+BXMB(bJ#92 z^m@{`w)q72c!k)i{d|&Y;R4RTnFI06e3~s|Mj1Lb7kcdYe-3eEZ`YOrH_56oO`7*n!D65Dem&(M@%i8lQ$G}1#oY)yer;Pz%Xo$9Jqr*5;5i$O?w9}8>%>w(GeM= z8r$C+dq0wFAHWhyAq^r6V~=)-o@pIzUwHmr?SUfXXN;W%i5>Flj*~kI2#PDi3G8XH zYbpzoxmBkNpC)Yfj^zP^m+eO$)VF_%l@EmB3_SDA>P}J3Yq_Smyyl=9`lA@^^VLP( zE0{?_-Ipqci$6L9m=M0N-eOnbw5}i&7+)cAxa(m)JaP-gMA+v#bBvJ3f}j&+jlX0$ zMx?xZrJ8?8>|W6z0lfvnF}@eT;Tnn8ZRb!NuI1OTcpW7Sm8=s$ix=1S#Ks8Kclnt@ zDCdWAJt(MdEk34;y#o#*`+cxEfW9|Tz8M3_q8pSfKzR8V1L@-k^Te6fRl7n$^f~(S zMP{L3Vio&MbrA%^I%jUa8+A)Cy5?IlQ!7Sk_frRCR@3zEGKbDG(<2Q@>&O0?x+$yL%s2h?^@cDz6?chzTb? zDy_PgLvSnx?16KfMsQy?p1TdPpO6WlEi}LATTt;QIEc#$O8yu%aF*rP&2ew!&>A<=pm3aDoZ-w@xF(*}shM57<5 zFx2wd`Fd6qTj$En@MApleQhQ#SZk??ZUJZ64~$*$=Ix@jc5NdLJ$8|lSbHY$wOAmW z`c>iActj$Kr&ZYD_M?Sk*33BAZ34{wtp=_Zg?K^S;%;pP1nQUe1X}Gn)v_$`SU*e4 z%ytlKoJE^sbj9Pn2J;B^&P8@zCSO2b^Cl6tkrs{&G}99cNau7X$@MJ&F<9$bA9E55 ziewARH;7bHj!eH9G%EOB*)PHMtJN6N@=najNGZ{?sD_giFn$BIb5<4Cf$eV2gWkkg zo$fZ}9!4AcONStEevgVe56;0aH>;n_-pI<~{0!Xbwh-4Hy6|hWZ9xe4V<1?698AKc4CmF{h-xNLIEUX98z2S; z%?9)v;*}OuxEKQi@op|fw9PBJR|3S$ULHRbHoZZ)~&?#v>2f_&7^e2$l3G`W2K(*4t_fP*}-`BWOC1Dm9xn%yUHo9OOh z`El~9wWQV(=AR5ji@W|&Uc&{ATJnbHbCGMLxa0t#=4B}hQO>g3G<>W=xP=?zlpFN) zo!4OfmJ$FH*6$cDJ7t|Uc22>R>UGUHbIu?AtcUKb@k$*@5$JM|O&rr0`*Z9i|7ERqB1C|=kNN=)uhlsEF+8TwI7kQyi;X#MPlMK%y z^gF7T7g>SaKO~Y19)p9%0@PsL?_k|yoX_a5`S|28^(^ibj0R=$ZVylJLl4UWQbBc( zw9@D)eJiK-j+*ZQgJRlob|JOq)N;0lt|cttv{GfVbMY|7o3A;uDNny2$1&2kVkYLO;@=D#H)(U^d%;~BG~L)PQ{8MC}Q)n&F8f?iv@;BC45ka!RDF6gk2peU;ll=9U)@P@nI|>NtlS0-&bi$ZyE_P|uRsL)E8yFPmH4v&wDu zvhv=h<_mNu*SZ=aC!rPEUMEqqGJH;2dlzE}C2Q|jA`l)iL-Uqf9yW|=T;soruPc9u zarXOq+f%}Y`@zs2yn62-3kw(T+?mG&Zzf=txJ2VUYZy~~cpM5+tBiIg=p;>K^7r=+ z;Z(`NJO2y|4q0=*-^e2*SL*=u&*yRidCQ>(<%d|4wiB99V^)_+zsw0!ZPi;FnKQ3YfER1xu+80>l=kCeVw+K#ah;F8U7crgzNI9{ZVu2_* z5{%9Ly_^U*9p5s0gKCy;(6RMCT$sw-HaD_?F!1m-oW?hQwont_>k}#7F-^47330Dcr-UPuT6d(Zuc8cy8aS9a@l^($)Mk+F zwTc%))98`Suqu)nu3}t}NF3|$lD98k8fnJ;n+E8}`=3obwI?eb8J(@mK_?X%r92P= zfp+rEF|HMk+}9)do2dg_7)|+aN**?nw-0NRn~XS-tXVhY%{H4)MKbln+%5fIg1g76 zCP6FGdUfByJJ>$5ykzX0y)k9>Bi`B5=np;>C(4bZZsUB@mHqjajaFZ98;DEw{cGCE z4qY}7cGi)9j*>X}6vPs0x-JzIK4m!~8U!;vHUxNA5EtvCYrN;_-wI|8-k;AARse-G zy_=effS$_Vl3&oMe|MoqJWTD~2nbn5@Z%!#6wwz*N5*^7=nTV_k!%&u=}DZ(`uc;c z#Z7LujtRmt^oBJqHja3$z$U;0-#3EUmjL;`wuG2JQ2Ao*?jFH5V?%Yjeunn#Vgel0au#{s)h1N&|jSWi06vBctvT$;arW# zuSF*ZjFzR*!aaTMrtdum`E!oj5hi+9ssU?)+rAQkkVAK6%ufK$e96V{$vT+oEzJ!`8XIJ-}>-%Ib3( z7{m7k0ig?6GzuJw5 z3GPK5sVQ)*;>c**3hB2WXF>#5`wXMqeG}vYX(yGNaZ~x^bUQYJ^=581w^{?E-QgZX zcl_M*EPY0SM&lH*>dRgtL~?NC^Y`O2%0h^TZIndp8=z#tD7lER9tspOq-1xf)Qmgn z2Zs>M@^j7=8=vxYbmgXTn}4qJ<3F`l<>N?Q1b7+jI6J4Pl=k#*!Y z@SZ@92`}BZ07@u$>yWfq17-JkxM~IsIfFJ^&)CSQNy4hwhvOJIqjO&D`hm;AZv=Hs zg|j{ONnQZM=;l@S(0vc;Z_#57fGV?=1#eIDG&azqVlwHRmNT=LLHnZk9kl!}2%}ql zWTI~DZvrS)FG^0i9Mo7!pc{_yYAg*0rgtTdCff>)Mo!LC5LXVXbP0<7P`s(~iq&u8 zX9E57#U$>@c!LzXfAW&{jl=np5@16!b zOirs|&nPXsCHJ~S)W@A<9e{s@!Gmx5yY-ZG$MXt8SNGrPP$bi-xGg{}ZmlMTW}x7_ z-&k)<=PvFQ#(en&1{nqPFBj5vDsB z?=-5NLhzqhF;`z5D6jNOB|HkMpOWK69YNas*LEl5VyV^KP~!$PyTXOdd9^tZk8tKl zQ5x%Qi`L(UDt0}qpm8sNjzr^;b@_tH)suh1)?@QFVdDs6j$hnP%t>4Sjpcy5;!MiM zO}=up^~$=@FfFgDiv8BheLU-Fw!Wph{hr}hX+${Hk1RO}@8(QJcBh2W?HJ2+pBfCT zWM!HhiI01AKe4CP_NxeKlGbb7#K3p-jMS}YK8O6POJ@0`eX^{a+zV+b@V=k-N%Jw7 z6@eb9>aMV%R7Nttj~fY$*W6_VbQ=DQ=Gw^!>!UajYwtz%%b%U^tGpjK(F)xp6FZi& zpubo_qj7%0ZhRF+|2335F<^^9Vfov_%qUKTu#0jx!=h=Hv%ojbI#!T8o9&Q_S(ML`4QKN>KGj|&p}?EI#d9{Q{;Fl1$zFS8-(O5;vC%c3+l$k) zJI5umcYn%@g1L5O8@eJt~Q<5q7- z{^p1U4N#UIZV({g?$sQPXq4kf!S#CZ02a zuxR7&v?<=XHiT1nxk67SabFRrYo!8dRnLqabJhLSO%RC@OxVE=Hzj;TY#2<8=z|*N z^K3J|MNmSndPY zO2h@A@!c(L7HH-c40`_uIcZKg0~&e&!zk02qqCFx?RUs|JDID;_q#!dgp8{2V$I^3 zzs@Kx7i^6$JIlct{#qtT&ojFw-mh6HNza9B9snIm%&n=_>9q?aKmYCGdk)~>2pn@8TMZmSexRIDYd5MO{iQRfX!y~xZd}(o{ z&=pg0zUtc`wdUCQi+3d3ymV!A7xMaL$YeEopRKf-0S>qCbJniXs@j)q(4Fl!hFit6G;5UqS)S zvMyr+mQ&8aun5^JfS|=#jX(G?|Z{XlJ*?k#JOL-akKGLX?LH0FB<16 zoU^pGP+9^Ci_o9g_}<^G2Vgg5E=N-l(Nntl$L-k(8n$&m#DaDmHhA{n>O?ObOOa%7)`t1i zSiVdjmteN=o^c7tRz93_O>LyUwZF98#je^@}xp8m9D z`~K1}Nu%{>Vi^#`3{RjY9E{x~rzt*gVL$ zM!564CkmO>v*ooOEPGVgwf;>idokPAALp2uzfD9&OU+0_x-`vWi{dJrb5NbzxM9?8 zFM;fYe~oVq^vCC&Fr53b2U?3=#3W{!*gK$HtDN?>o1nNZQsVE+s_uCjTay>ZQ)Mh* zO#j-qz16=fL_|wY)sCvfaj{0)U(ixS?D)hVd`<1WjTT-45fHs`IIb%~n5j}mm}4AH znk(z8BxaMOwqbH#lc)UijkOK<6Z$>U;j#i?3$k_3z&kS3g+0-=1I|%FUxD+mL2vTqBsE0;Lr}Xz9;s*Z z^{>&yEq3YGKALGr+>pCUimjdX|6uGJqC0z{tz+9x$F^jZOm?K@ z2k1*w=?DJgC2W~%+UBMVg0#I!Uqi~>#G-uZ56^QGmTlZTfGWYf7FOQN8%;C;Z#?hY z?ca}@Xg|BBXql6|(jKA=H;nFw#sk^p2d=~wW06uw3Z5+ zSC25^EkS6wyqY@;F~z7wJ#)Fd+2#$o-!5d5yCNjxfO`Cn-)n&3MXeRMF8q{ASCSw7 zWb=;j4Xd*^F%9ONpGsYX)WX%DjPE(Fw*)?c2P;#_2?DWGGEV$swc~P65wT48i}-fv z4YmjQXev7eoR)OV3!c+RNX;+FXr${OfD6YNQ@R*v#Xz!Hmbe-pguXowcsWKYSb=~< zLXuIdr4yozXQbup$IM`e)KuCAKcfr_2#$0gC|aE&Tw+$3Y3H$fJkGRe<_b9V?RsWU zPWgm=q$MWUlf)inwnO6Z<=R>3!y^|qzjIz zppx&b;Y{kE_M_-T*%lxJa;|6y^8=mcQfk+A2_keM2J@pHmi9gh+yy z(GlQTOUB_kge>{;UWw@#r40j{U)@MiV&aYF{lZr?R2ex^qTO`c%z0f@nC& zIRnLDVv@sdMPqnwGgFUQgf%d-!gkBqjGuF7Ao=>5JeUGvG6rR43|%6kJ)UT)YiDA} z-|KXShM&*XLYkM)6|wTm2%k+eZF6#!-@Pv_>Il{&CL4gN5)lM6*!^B30|Y9ceS#J3 zV49C>d(3;~4?sb}cG8b7{bXssXIi~GJ~PS@M5v+aecq?23%$JGdZGvZ8CiBHdUYEh ztWB z)%X*YMq%q4OJm&y^yRL{F=^Bxa!moW-pA0h;RiHBLk3-h31L=EC)#-qIQN^sU_O6L zf6*66nYs0xS#3szC6Fn3zjcFH zUr$xYp1@~}K816R*WoFx-_NrKPI5-#_4tGX#iSTaw16^m#kPn9r)fYGXWQKGpO`{w zz-QYq9?lbGX}<*)FZ3XEu)Wd`0lp6SE^ZY`XFh{`GG>2xh8oF#DcIkITH=T?+RQkM z6&GzUj-7{6&m(0D{BVMDB%1Bp$@-U*F$Gg^o-AIGVa`29w;4<}w1RzJV|oZ^ZJ zX6kyEO8(L7c0Sru|Hr0yZ){8Mi-T#%v)NUzfub&ndOf5^tMtkp1k^mWO$TP-zBD7t z(U%pA26P^A7J-=P(y-kt0jU}#bK7O$Z+e8LzKRvqvoySI_g zY>l#tbo)Epf8voxhGpohZK!2X2S`;q{U;7!BMDh8eM{GVG_}RClyKeJ=JDJ5rTtY!<<%aDW+~OFjQ8hn=OeBrW44Q`cCv8_Zv0n# zk-IchTD}J)RId%ik{lQ`cW$sQakahkT{^-%I?4}silD8>xmJBW_QMJsD<-v%_~B}~ zh7(iF-a1K2=f~4VOVP2)kT`noec_O%3UO^(+1);%7ajj-fm@NF6r``GA9{JIydH`w ztfT(X7O@W-5KPX{)|Gkw?V{~of6O%_f(7!p*p5(AEMDxvNZ09lUOe>ChOxqF0hitc zST#sWU4sYy%afZpUG-W2boSd^9ramFcLAHTCv`K@a*==L4QD>}H}xVF(>u zwi!Gd7%VOQP7Z$3BbmJ8b>Ux{ji|Xr&)|Oyy5;M6M+d|s?Oey_2{w_!pEU$j9(b97zq55GB>(#<3wS}B){&k-X(u3>fwh=D4~4P055NL zo$w#XTsaLpVi(QkoL?QI$_V|+tJdw=_PAd%g#HYi6y`dr$$dw;r$;lcCe!zGWJa+< z-8e~=42AC65z}{;qnk6@!=3Abm1Kn0gX7?y1Bb~R?64{t0L&p6HQyY|o?b*%#E|Xa zM?^f*%x^B+TXTxV5<9HE7L5ma{O#p7+XNPv*8kDR>hgdieR=i|xg4LYXYHx6?S1&k zWeKOs@WJA^YvWQ&KJ(!3T-PBUV;rw@BmoQL48PuWvP-NfP& zzX!Qj?;m^{837yje+}F&u}4jh+pB-3UBMhbEGsQW*B4?NzAY=CHJxG_X2FWsXIrr6 zt1s1n&>J`XjHHcw;CEaw@zWXTUwmX~?2YgfFk9}UY1c;Y3Z#^a8*-rD`NsU%7(X#475GGo=9vG$j*%5x|E z`Gb9?)&CG3dj9@0_;Yt&lI`JMpdRX7<*{gr?qCdlXa3P1_7#nxF3nryTmN+D#9-RF zb2q?D8wsdt+z^nwR8$w@G(ObxBtI*c)VdF0Hjm#^HM*g>4`wvMQncW3;1gMD;dSfi zFh`fjc)aeZ(`^)V(T@O&#qssT|HKhkm*E1?LF@bw%tAm zJVOKG-LUDBvM>ZMOFo*Vn>)`;03vx~8Y%oozZe8*Jhs=g?^`;o7$pIf> zUUglS1EM}#(Kr*MT_aXaXlAz8X`uUfv5?KL8rY29`lptQ^=HjwaS*-PJpGp#08Ejev( zBA%{ZDtgnTgH)5M6fjLWgoJzx8d)kAY7rxymLKAPJVN8CI6&XJH=#eC7BELsU$XLw zU`K>&3q0vjWc6&b&UudlY~7S&Y0KMXfELJwLk05!*CpvkMQb)mGkFtQ8No zebor31v}Glk$cnEYE+Y4;c;f3CZ6wj9jCtWNb~87>++pkiPp{M{rP?0%S+UKj79Oao*Y23lkpEsvgQ#z!;Q7_UkS=8cV*sUQ@Kr6v(fnehj71XHZlZ{LQuj^=wf1r4GF!EXVof!)q7vF)rrs`W%A7F>9o$6 z=^V7ja~N&QjH_b%Qx)6(oEz32*;j>DQBButaL$=m^%EA}JvPj^kaOEp1`g-H!yu*z z4t1+Dj`hr!xf;i9jgx*+^+{tdiMY+T=%}@b^Bs~c61v!_EmJ=#F5+Yn>?AS%8QT&u zMu?13I)wJ3S>FYx8?stFfW6XZ?b$q#DN&z3;=+Z~&#)ZxK{cw~M!)K*)NUuao@usF zYk`|oB;l{COc$BBE8Ftlx{93X2h_?3O8C(P3alq5A<2wlSjS!Gvx@Qdd#9eczrgNuHWn>=nR zoGSHH=N&A7zGH%Bo+<@89Xn;uD*4>;1)7vj^T(|(oLd0_wLV)d9c!^6EkO*{t#du~ zhR!ZjUF90||2h^PCeo6v0C6VP8xFCWkiWmGN#7U5VDK8v{Z`YMJTU zk=71)ZfslAnncP? zv39VC?;Q*T_MwR1wu#!qBVv$Ar18dLG;~PpvcPim=QAScNDQkJi5OzI3%w3~71Oyw zAI+T81(Ywl?Bw@L)T~G=rQU?TYVzq`O@*-@Vli_)=#GQpA2_$QG48@a2X4W;#lvk) zgUhKe=&A#yLAaL|*EBqAE0P6VPdsHVs#txh# zmMzux**TVi8!a-G3!*Xy>|?Vu3l=!W`j&mA1isA)dZv5o3)}&3K*N8!{A_c~_O?yk z>#0o*691|@#gavYl&2K*HK4$|+4fZ}nlpa@rC$7Z62woez!1?jI^quhr2{%rp72t% z4>e6wuJwkLT0vCC3Fk|}64$9J<$Ew89EX+tfj9Z!=BQ=9?g}^IQiQj)5ht#uF>D*N zg?)D|fJLGR4CKr=Xkni_O=&?`rhZTXZkk60g*`2CA7ej%KJa{y%wZ(~2Yn4wK|JlYb2Nn>zZs{1g@t{LU)_q??2q+=iR(+1dK7PxkNn>m5O zz&>%iy^@5XH}`72YpVPHDg>t)KOZ0lACB2Jo6+oZee13t_@}oOXlG3NQD3GQpC)&d z_td5RGxx-gsUe?fSZ_uR8YR2U04=p}*KB%{_v%Z|n2&Vzs)oBxa+dn)z-str+JCm8 zhvfcQ^8yeh6A?~HNZ82s!yaKOmGoA2Rw)^%Z5>gTCBLc^;)vlRhQZjCil_a(GjCQ} zq9ivReEB05-#B(>E_;<)vIg!_FPMq5OgT%U!n8!mzRet9s8#}T3J$zWwlxf~DSiu`K194vt% z#pz-hO{*s&Ar}mWIzH3cB1E_mx5`Sno}rN&7L_(geWu>cI*zj{g1#NU%sS@me1pN* z-+eA_JIhx!UI~k#UseWK4mg_kBJsvga%SYo1jB*k4D=P^Oz&mhPEu^qTLvPpVX0LF zm50M*%an*}jRvRj=S9+dKhx$ghbBE(Eh@(|HvJ61Qow}@IqZz#s($OVP!{dhZ_Qah zVyhD*RJ#RZzv2vOJ&R(Bl_JD?*&B*O@zT1( zhz(el|6J0cb&VJ>!ZS$b7BQjzIGQ#6eEhb9ti`|(H88Y_J)udxM7u*9r%%v##VXh{ zw*?2B4ySQc3sBOVw9bV;f*A@i^>^p{ZM5K-@arjq@My*8fP%+!pW^%LV79IRSkXaX zkW)JKUE*@Q>%+1eVu1GTW%xGR=5zkR$HDwNgYf$`M7!?GwtegI#2|n*usk8)Js}|= z#O;=l@E||HKkjWu;A=JD{WX9I9WsUc`TJYM*nOh!^ATR?>o#HU#Ng`!GR7oB6Zg|t zaPT=lSRrWsnUL}A0PoKB<%L1yYwKZFXM#HC@59=?%aZvsb5r&aQd!6La-#7CI_9{6 zOHTz6dRxbeg@ZU6fX05s$=srj$vd;x$z_3=oODz1&}Mi!{FrR(*n5??vLCC#O7*pT z+0x+vz{ET`uF6>7* zdiN&t_=~o8B>(iIN~mtpVX{y9OUiMeFPr7D4l+;c<@0T$4Zf4(pV-YfEKOecDDEoL z?fWq`{833z%r4f-sP#s)51qTCfsCw-Z@jjO8n%Ult4hUI)5M#<|HkzeX<)@N`ZLqt zSMxt2F)*F_kpf85Gb}$Q1ZmyW&1p@8L-E->b*(J*BQ6Y!n$+q z|LD255)8E^d!3K0Jv`W6&}DEh1AEn=yZ8{7qtIw9h84{wU&4-PWO{aWYP~1RaNjyK z7kGz@Ez~soI3l7c4S#KhRDu_KfHLj}PcEC9G=eJ~=wLBpeeG={CTrBIWXg0_hL1JJ5=}=>5&^>ub2? zl(p)!15d`63?Fuv&Cus`uK?ice)q|B>{aj8Uvsw`=8~Vkr)4A7u)*K ztsAu1e=)wB*g(5A?~+68{;)$s`XkB{19Pb`gn%VeV50-y--pYC^B(9RwPeuFsZIio zEbtIwBLsrxnh1}+c0*C zt8M7&t_i0g+zpYhNbI4W@2C?a@HK__3)llA$nijlB5VRtP3-^=yD*3bdHE*oz z5G6&B;g=<~Ia&32WoLn>d6UeDgC+{ScoID*+}mEywLB=><|jsKWbJXJ+~Mi^Tv<#D zy5g`)qN5i)&>1(JcvggK2`uP1q;O(Sh+g6fQZT+-JM(_*JJ8+};D#Q|rI6r_VVC4&hm^(u7~f<1p(%+uSs4>MN8I>cn1YO`B^lz?q&-vLU=l1n`vE2` zfY(btoPAtg8RShCji@Kuq}|KIEAiB5(gqRi?T8_YaSaB*q<=&!9?i&+%Qy*mMmW^# zC7cA=fF}}_Aeh8a<&u@jkRO_|<2Sx0+$>S8`XJ0XhS-4I7Hz!9yO{le`if5X7xnil zW=|(yh)_--X5uzcDrhR0GO*lBI@%6^sd(6n=EngJl8hAg$q<(;W!%&g*ehi355CKl zX0*w9Izl^y*E0^K2yfpKI6JYxDv`v_YS8Q}RNzY}nEb&@?ncn0I}~vrOSV5T|4twt z2bOuEYU7)Gzx!dGayza?-H1Q6qcYdsC;@SVWHow6^^b#f>1h1ly5ds#ehPn5X)Ao= zknvOL(krzw4oF9YgIj2O%HfqNLp)_W=zpLjP>9QiFq$A6e=xXygM;Uaxk7oAUcG*UV$S&0Snkc4 zmZZ|`AsL?v9e#Y8GQ8^Lmj9t;EbtV#!{}%_(A&5`0lY;#C^3fyMS?;saN2V(#4xyl z2t=iFCidnnxNj0a`_qAmppci9GB4BahLmb48X z)MKzggS3#eBrzD$>V{)+g?ASTA$X!NDItPLCL%bPyg*erLAExQSBJG6`Z(w3O1$=l zU;a87+mVWlm#Ahd-c%Kg%pJ<^ODPzm;oQ%O43oIkDk$8!A?TJVOZ>+<=wZY#(}3pX zh3s5N;4f^y6SF7hiS;LuLc?yIKjQz9vqf;kDvjTgC)X!Its5wRBGN;sS7F2=RZ3LqFt5KVe_8&L7YtcEX!-gZjAb0*9(OIY zO*~f@y#4mC+1cfI$M>%jm?nIBeoS~&fSL=W-xXOY6>?L=WCgbq(qQDuM5cvGhbV_Q zfds&9>st@R0o%<~w+ZTlOjkfH{GXfBeWjM$`gf19D+^aj(xIw%@yjQqkxRLuP|7c4VA14?` z9{&e6;5y0jjV{FB$R3^v-b}nZ;|2r z%-^=`vO!U&xM{8a^WNQ$k{3lQDK&)61m=7?8g2Zcw-YO)Ox3n|tKJqDS2Za*_c}@v zUp)l77Y9x$&dvklY6fxKUMJ%Levg;q7YeHwgToh%w?YD>5eGv-uJhzuo zkiEXUlRvaP$j#B>WiRRqgM~jAgbbH~c<JNd zMJMOWauWf(_ouZp6N9F%_#P+Qora8rJ(c(#f7{Q7>CwvgM{ac|+SknQOhD#n!_NG< zrPIg8ZQ8Zjiq2i*rPV)@#+F95#t5_a;57Wyt7JX~AKfRc<0dmBtx8#{IO$oLoZmZA zed+nB{#1SkxfBR` z6BV0<@ptP2Eu&X89!_$`Z)XLqy+MIbnSC(^Qv$9|G<~cH0dBXeOuG(}spjA1Ub?O) zX1=2zuV3FL0Jz@M;%q8Ci`(ym{W*>vRE!&qK~P7CYvGMvFoJ={O_g?Gt=PkM&{Z^x zJ=w#i%95Ga6D05e<;6ok3HPf z;OBV>fnb}Ks(FQW%=o{MH$>XmfL%ykJB6TeOTV(BpZ+TErNw#N>>!&ct<#(-@q`oa zhbjj_uTEqQn6_PQfY^iYanw6(+raY;$=fwz;i?3*geP$jhNYN+5!)M{O(A@-XtaI< zp7H50Z?OK9$sZO%3YcP2>SA$*7pWKcuc+P|?>km6h@Oy>F^C6x_N0?>*grbBPHw$v zwjn!vBtH-h(Z;;WdepWUs`rZ2X~-qHcCiTJMxf1CU1U<`9M3D+C4_v=ojD_f`Ny>3Sp14UPX(zsZ73ef&>@*c{wPe}KV(ZExDODLa zRR#DZNjcJ(>?1|bUyCQUEY7W(%syZa*STtw(M(qysPuN{_+VMB(ugR{_ zuidVHJ=60|_RRVX`HlDu_zmYB_a0<-6m%GzGCXL!A$rH>m-o#FEbMSmos@kSf0xlU zr>Qto%g3cB?#A#1@sFr{cz;=aVSj0TaruMxCG89eB&a*G?2I|=wG~4)=Isms4h=-R z+GBR&zQ**w$iB?{3Hu6ua-g(;ID!7YnZAL(@xEcg!<}QqTfhzA4saXsO7ijk0r?T} zq4Y)aW%7mETv>2ia6kHT@PYY}@zWwk`i=h0_U-Y77LYA47%&(x888|!``!ON#&Iuj zD{yb|YVcz48c>+v7cDSaa1wCvJ^nrO4cpqU-kFKkkFW+^m$cX(ydD4beRTsvE2?mf z+gZ>D?svI77wgZ}~(eyaZfslI>S5Va|rJ+ANp=T9zB(3jp9QV{ocChw2X z7uW~vwkiB&?~iQVN%rx08bNmi*vq(`oEOj>t`kQzg73rNYl55;@QLip3P=rzH5e6; z?<=J^m3l+}%>K&DFD^gBeuF#0vVAXCoLEmEyu zlhV%HHe}7BQ_tDjbM4^MA2>lIg%qKxusYj|ovOaf-R%Ad{#$H6yycUc`b0~Up!#sG zr=_-4?$GxIN{`F=$NVO-C<77Ke>ifzGpR&;)qtzah&C2CU^z5OLm`{@D7#|ui`{Qz z%En?k-(~BOW0Ui_EXSe4ZTn-xzVBcL+=H&$XMUed2B6jIJKXbJ(;cu3ipbymw#Q~e z==IRxmLPC@sB%%@fBf%+-S&{3@B8oZ2%S!w-A=>(aG74$^QGU}k>9(4*JBH4UEl4o z4&)C1!%PLO(|d?+ za2Ne;@ElE&B>8hye<7J*E2aw_)jCa?C_{>jR|48p6}%ERbVN~vgb?Q8DrbBms6msdRYgpsBv5Tx@0}F}-k77v zW)|ux*HdX$vfHAxgkm20w_%X?U!4Djk4w6!A=3}U1R?YjNt^WbhR zai+lh%7zYqx2eDUQ9;zI%Z#Gu{y;sz$ZGTc29`R|+=LQwc(8NhB|~~A!9L#ktdY6OeeJ?E?IG%kv+9Ubusox$7O5=Z3>;H zoI}JeR>ES~m9++aksqebR)mWg#WdmQK8M;~_C!}UbuKCP7&O*HRG+ z6(xid-;A%hNQygse#HvPU==gO!@xN~tcc41$2!@BNxF2@Be652d*9HR8q}KncuJ4o zzy%o_-xxls?oc8)e<@$qid9STW<{9{u*^qtAawLH>`zQ;5nkR82eXHSyHJj9!}Mq- zbB-I?Zplp{cU~Hgsu@cy;o)u)uIWrd+!v@AThd?~KO9RlhDWZ%b%XaiaLQXad1r92 zj?Odlh#C*uKv}fCM84LhKU2PD=6f_opqPp{4KyObWKegvsuG89_H=R+{G-2F?`f-I z`_&#;2ur&?9M(R!kF5rOg=QChrN3`mt*;%yz!dc`wu!zmd$q&OE3gnMg~;?TJvEo3 z;5T(#roGx>hK8xjyAi}+^Uy&k-q-<8{o-&?hLIzvYWI${-uMmBIH-5z_+RzeTbfO{ zHtr_V_SIAp99fPG&OB}8KDYB5ZU0j4{c9Z^H-3c+cKCFV?G857$(EX+oH@%bGU+8r z0`}5v>29rQ&@{3QcH$q!sE+M8iE7}N;#4ejvBVp_t#aH zyWt0OIm4d#9B>Cm#=PROHbb8IYupM`3Yhnc!@eDv3<`%@xm#3E(GBUtn~K-Yl7rbq zx&ci1Q))s;i#W7Ru1Kp2vXIVxLl4Z=ZARQc@7Ro2vuZI%{+hKz%?#;U>k(Dk+Go=h znL$TPYvQ+F)x9Vuicv0=qNEMkM^G0?@{w#NjQJ6cSV5>hD77de4shtY;M>RpOvGy_ z!0|DLl%t9xX+|;%mm8=DP#V;|CR9(nIKx>O?|8c5vwDnH7tJ%h0OPdA<&^-8HR6*@p_xVJ*n2gHPUdte=sgjQlL!}306 z>Jl?+F~Q{3sr4ULMhq9-i2h7p8g;W=q``uS&OH3Ben?>41HsTSUu2sPR)iw?(7!e1 z{L=oNzR_3ak$-Uo0>aOmd$0}&E!7KWl^y)nuFOUM$^&t$IbGHJiZK$z>MNIAyb z?npbdYf~qWl(`tnofC7ijVVZsTH9=s8}l?0?`V&QyW<-(?L$C}a~9pUO@hjaMv=>+oQmPVgBteN>$i^B?*Yp-uFZ|?-vo*e?<%$EKxwH* z{1*52Kn*f#ks}?c#NfYIn4Jt?|0VgsM%C31L*6$QYeWK zBN(*X?#+PbMs?i=0cWhT+dHnZ9XH5M>2Uxtjpk13HD_X|sa+RuX)0@U$#4~5Xuz92 zPQ0eMVZH?gKBjf`kD@dXLRAw&VLsl^*;gARlHK|fG!&G}^wIJ8sio=o_CE3R4fFGL zJ#}>26jTlKYf!v7-tza#`~5gqQ9Rv_%YPLmob;Wdek}6m)pHeTya?!;Vm?q1I-K!k zcpbwBRYF6-$H~;@nA+qD$RoK6Iovt@wL)Zz#TAJ9Z9>7ClmLoKjq3wR9Y*(g^3~Ae zL~nCV_-7Nur7C>cJ_|QXv7;rRG(gSJ)@-Yl-(;}>aMvz&m9UY_|D*tcI|(6UF?)Xh zQNSuNoBdvI!8e=#$m^qCAW3+uMZ8L)Gf||0-x+M&8CRJ))(p`|fnT=C+ta>)f1E6WILJ`Ld;0@Gr-)BPtd%U(aYUUg}Hvs%lo zNvQO!nyX(tXSx_R#N+UIcg$4Xf;>^NRV1FIz`ByQk&P0&2CPr8<;8lip*kZh^{87$X2$%#YK~}S13fpt zR*q7hcex@1F)k87B-ZLMrH#mR5eWxw))+J|LMZku#saSysW8y{Hsg|YcBN3hjXSaU zO?Q|VlowKg^Per1?4zF-0vxQW-QI; zyBgRgz36>_Rr?_$Br!IsfWEniG(6|sAYBG$>@oVnltU9~CrckUSDeSUvigQ+$4xTz* zdpQa#+}b?(AX_95lOz6xCZ+%{g^Wt<8YB0{pKZYxe4h!yW?Iu2`s%5NaOxyr9|YzE z0UTuZ{gUT0mRLZfC>f_S1=bS3rnndFwa^>-VudRW-$Yo4$1Cy& ztldV*@#)Ix?7XI}Nj1}x_9cE&uh>iOwq%fZW)R2-Wh-dGJ$G&}V3(I)M7o=EwbvA= z7a+p<1-%e`Nm|~vAjcZs3xK))<#0k6jSwv#!;iLwK@$lty1hSl)F=WRPB11nScEXz zi{J1{YAZNlD{}pcx|lg-SCF@PyQ(}VVvm>^{65> z8(G1KJAYeVW8vxn=rc2aKd=i=gOQ~pr#)@c{Tk|-uI_;41<(K2PXEr>Y+9iRdCS<2 zRZFY94esibQ+$fDa?KV|3Asr~FkXOPXQo5DI{ zEK73w1LYk~Eo_-jWn`z=S3>j!5aj=GDiqF3$mhm!*05aJrVqt$h~(j$l(qxoOFiZx zJhLyuFxD}-uDGxDI^*N_R&Jhe%??p@^}7FpE+_63f>29hFInc(nZ#wbi#pXt|Xbuz88V{hv)Xe=FJ#?k+!8i zm5v-}}^_2T>p*_5B6 z?4Xm(G37?~louHtRML)66%dAFjoFO$<%UmB98MHkAM^K&*oGA|1$lO^>iLoPUomeC zyMWb^gbhd(h^+O1HC~9zrIGM>r#U=hdr9T!9}P>ii53$6x7zsl2bckrk59qAOvQ-V zEAl87h=%IW1 z3IE~D@VRmCDVCJ-1Lu_3<%8H&E0|dYgRea8p)_-7!aT4qtvk4FY0m2b6O9roVK<=& zbjZvwIHW8%x33_w?(NM)e8Ep2WmSLf54j;ANzr^4`4Jaf+7)W?E9e_!K};* z!@8kvM&I=zr57W30_BH4pFzA~)j9&o>J~3fO<(Z%Pqq(<4`Dbb81_#Fj@m&8gkxV0 z?Ip<=w%b^ri1_K?bN_t8DoQ5-OazAb5=4i|)6QU>lz;;B+v;8@`$^T&nAKTFI>bOl47Sbbsj2P>O(7140! zzrk{%L#~cZm_$CN-fJ*a)f0(B|&Wcy5%Y)%Fy?UERmzI-ZHwx@Y~Z3qqYc(vaut z(na0PHK{`O@d|)NNG9Tbk*fYHhq(ILFK~Z>ced^PwVH1I1=zQKpaq&_fi=#x$ILUP z6Z1v$QS=NA}GjH9YjkwmQZJVP&80N*?!DD}`m1L|iR!of%)ch@S9YG&)6Q60%_yWloU@(PR``hXAxJP)AbKy3f$>VV? zA$tIPar>q;mCv)fuJ1=p@QX)hb%eV)tx<+z#8~endJ|7sq5Xq5<{v3M7-t1*A__Gv zYwJlTHt3h4k&u%ASD37lQtz^Hx>KI>?S>yPeE}+5f)5_TEDOK&^2Jqe2DtSi_ND0B zl(h%eiZ?z20JT^2NXD1}^489zWJR;@aDXBPlR$4U;jynsCj%Hq{6PyRlo<;dDE%UUEn+Xke~J($^>}HCqm%>gD_^ z6$yU+Z2_L@oHRu5sg0)YBWKE9QW>%!F44dOSvnj-mAyy#)4lnu;&Hw##QOJk?On>3 z(l1h$b?Fl_^PI9mn25Y}eBPXfzrR|vT~VlJ)GLOh4t!g7hhMoj6|TrZH%{Jha{yGi z^_*MuO>9ckDbcAH>ZX*mg;d1w_th97VKeWG|Gt=MaANoY8XHcnkWxG4D=EDW2ex+9 z0j?A|S6vNtTp)dc5W2`@|EM)?3o0+A7Tu8%Bky>TEar1_P;D)!l59?I4)+H{IvY+i zviAu>uz-SC8jv@ildU9!t&#{}!ot?jb(vf>R8#z;m7;CXR+DhiVh&@_5EGZ99}l^P z<=3RPNg>e*Q&^a&ZAIwHt~yEH$2Ii(BJyekJ`@I+0r1CX@WFhudtkY(Cz!LfWMs#$C&q zJ_F2wu(JWtg8cbaN+MNoE>G@P&Xe=NkT+#*ON`rkWEs^O#YqhFsy_E6@*EAGmPb~s zgih*L*n%{9;+{y31b!rnc5JS7d@ z0Y=4P@7R_s1h>8&b^HQP(6m1GP(l#6Gr9wLmMG>f{#WenI{bR3G1flI5AG8$!%Woz zfgP?j)+u%zEBDo>lO68t3|lL7LH2iT6hC@{Wx5T);v6bYvDBgsD|e4h1qaxIriwCU zY5@Vv@84aZXV@_E)ydNL6{-_TZNcX2amH!G&S3+_OgNkFA=?0BHNT$SJb>QbQM_jq z$Mo4_XRdwU;@+5~!ZRm6dHJHz+yx&i>MI)y7m_0Np&+l3T{=gMxf#`E7B*1?Q)uws znw&LJNUE6Z8Igr(6(uC!Ja^Ab%1o2|_CHZ(_v5)leiqX;xd}nSjXt?L+EtdL%E4Z3 zK48DNFAG1}SrP|R+sWE&>p@o`EHO)R=!jXSM=JA;873p)bH=mTTFhw_>#4Bh>KnRF zP}nBhy|6aC`XJra71Rwo(Px>@sY@3~ZjFz+=>08b)p0mc`5QOO<_?;OK4Kgm_PFVy`nKBH-4du`ZoY}rHRC;Voc%_pm_ z%o-Ep9ehHy?vTes+{Q%cC4+dGneG;jAL8~nQtPVtm88?l84v`BtD*TZ{D~-gsJ!$Y z)jj2posXOslMj!CULCi!HUeO0 z(jSAHnjtp9$}DSfmjEX3yqA#KSlrCr<`Cx{$A(BzHiHWbIV+ozMNx%dmI^1LLrqpI zk_EX`q3yQsx?<1NQZSzpZBaEKTxvtrVr9e-KS2=2_4C?_j)s9127ZXS8^SY(o-%#- z-6^4O5HPwqa536SXLhtIwVs)spZ07(xFw#C>nx(RRU%VN2p5y$GrAcuYFgLhyq4?~ zd)Q35o4rtDE>!g!kb0ejJE0iBOZ~O|$nRM4r-G!{Y(lKE3qB?`MpkBevS%`ExYtJ+ zqnu7bqe@vSI`R0fK|uq(O2z%f(xGE{`cUua|26iNv2nmmn{C6)%*@%~hN)p@W@e^_ z(=anLY?6kVnVFdz#tk&s;Pur>r~CB&xU*!9#va*{$Fe-*@iS5o;e$vHl{pPAg_N;U zl$d9wvkTq=*wLG&so?_fP!D6)E>h7^sti`;D~YLlx2RujGL&bwL_08eblM>~nNfq+ zaVdjvSxsSxlH7=oDqKZC;y)8=IB2Xnb(%Fwj!FuRWLP*eun$Wlg2#nRdW<^Qc%osC zg|Xpm2DOJAZ!AQDzMq|)Nfo{9@0&Cc=AM}j8%ey3F-sLmr49t8C`C!(d6FnYqR6f1 zs3#xyc=SJS7ME06AdTlXRPN+$F?gLNobEv?+eDAb;cb$>Uge&KA5>6l!JQ2@oApcaNA5A-9+n$ixL&m=@}uycBlybqeSRTM?t9UY3HR2{ zoN|6P#Dmy1h97>k_O3!WGX0r+(L3Y4{%P_rvcWTbL~yk!p14I6+t9QLr@dmboUR_x zhL!OW!}u@7?}_^*1B2hDS5hx*-1LOp z-Tz=!ct2o`D^}(y>@aLsYutRbB?T$Kg(O8Mm59&zLAhNcUlk45Q8WJC;7`&_Nlj1B zJz`dy=%(wCqqx6`o}iqRCNH$fNv$pB<{I zl0zZ;O)Cp$ePqCsy6MB5<1bQ+WanV$!b;NGu9re(ai$O%HNDY2c!JeTct^r3t?s8c zvJXWRg^OsVrY~5)>NPgD0Z(;mA{0dFfy`#ID~kW!=JJ(j9J`mwh)zMzomM8$LSuF- zn=y*q)JVZvWQzdf-C8;1jaEcgfg0arlf_iv$ThBYv03MNv2o#`ykOJ9YKoUBjw_J4!yU zvG%)rxg%%_6;1r=+AKDAzBruh<3AS);Q5v>o!?ehh$F2*?MeKP?L^A=bg7O zI>K~K+_3|mZUY_19AMY&Q^F26626mJ&Ls3mNV<6#pTX&dGl#g$qp}K>`~_hB4p4~= zfm6h>99WGz7US$rheZsxR~46opHD8TZ_gk0)vhe5B|YOCPS6jsZSiVkLvu*Oe`pLBPJ_`6>pI}%`#^!!GgPi_JoyN+q2j>#<|0}{kAG` z6+d!5Z~Y((nKf(tK8x8Qd4N{la-Wh;J^`e*>X6p~n1X*I)+d-pZ>MX{$+%~Zahq|m zFgzEN{1YJG^CE=W=uaJ$0ua8(X%7cau;jZrGdm^rFP7U^uCVm7ct;E`7h&@&l-1mF zUmBh_U)tITbhN(?4$hhmD&=N+Q*y% z#z~xOg!30SdSFWmG4)1h^c2|mXXq}N*JKx7#%K^$;&K8MLsBiOwz&noKkj#1ki4!& zPRS}_9IWK{dmD62{Mwz?ewPmq5`VX^M*x??fi0*Aqd`woy;IuBhWP>A zN6eGoN6AkXt}1=#Ug4IpQtF3Xv1T7%#=J+ocj#Rk(m6JwvP=vm&Ib~k@~DurHB7!O zFwp^M`pmJcI0F@u1k`kN3Q!(3nD!deK$wtz-8^}vV}4Pfgswterx?qQaBsrpQX@(( zOjvRH(z0n;-MmMwjbje!tnTx~?IEB3Pr@G+c*DFsy9*;*>3{wVrRiq(_;?IB=p1;k zJBZG6u#MK|wLinbfEwM|v-wln6C;@@T?e?(_)M7giIwxoq3e@$@zVK%Q>F5{T*pdj~v{;L-rff&AjI3f?FTL*PaVjfah`j^uPf_w64=43vcu9N+fhTpHY4OtpS=Y;* zTXfO2dd^nL$hI#l(elM4zHT!!$1&+H=o;_1d&n_t!Dk&FV7^6Y9Sm)n~qKG=O z#izE1%(cjL!|=dq!ALxFd6Jk2uref%^7D4AFgZcR%M8qXGupFm@sReKZL%u{AN%+x z*S`ps_Rr;4pPj?LL;f?V!PGR?t3*MAtImml-hl4>&$8>MFEt;SUmItMe{bft421l2 zhOMe{4)=3t{q4%<`{BgAVz+3XSVjF}BbJ(;nwourd?M0GM=zH_-s#Nc2hUigI11GA zZa7^p3xS}c8~^I*-FHpH+e^&dNe(cYLJCb5-E$*Lxw^qa+*iPfQX%EQ#rY=hwu_un zl3)u?md-{^IxmLPt?>G_IcvHyjf?7|#lN?8# z-)*x^6ZOh1GxsS6p_fDr-O{>pn?#-b;Yl+`S*b$`3vf?$AO0}ibhgebSyf2V1dRr> z@3c>DHT+n9kvQaWMlAr```5Q}=+^lxjlzk&)SHzHxo zrV`NUi5f*3Wmzldz7BY{bAhDK;DY7=rDy%69sB2gwbO zXA7gCR}c-TYiWncZ}wk||K3k~OXy)Pkpo*qJv<;qeRktTcIGiRO$P&5135hmhgCEP zCBv`*#q1Xwf{A4zYCkbw>onVJXg)*Fa?SO_h0GwPTS*Il2&o0)2a#3tu2gDi#xPw=Bn(~ z<9gERQo67K>D-mZt*y<*&#(#|A|kRJ9`h26WU1V| zLcJm~b3-MQe7zw>V@xUU0oJi?5QeJ1s}u;ibLLWNu>>zDZn%T91IDhB@M8L+-tkLn z_lkoH`tL(&k95wf@xE4$?M+5cQJy0 zpNB%)5(IpWv}rss={5;>1x$T5r(-gv%g}B8=Kq>izK1LhH1WxBy5ekZV_RFciVwNJ z(rNXfghB=Gj9=JILgLJNGo(871k6^FIO2L*{n9RLRrv9zT67+}i1!}8%$b$9>(X5- z*Y7ys^LMi3D>6{~Vb5R{^=evFY38SMvn`h9fKWE;Csj7^nD=?NXB9Al@Ap5|^Z)EN$(e4wPU&*xb$x_kxbBkYH^x@2w5|{d^<32hdW5$c z1S;$f&G=xQDA}~Fwe3s2nsA6@Mi;qG2}WAM`2>QkB%UAJ9viQY(IZzfo>+4xiUB9) zJM%M%J7+WHJG!~Dxt02r0sxsNSH@0#m^O&8;F@6K@;CQxQPe=x?oG?oTfuG_fhpw% zDQsT4N;c<%srCnFi~EixjLSk2RvD zH!%4+x2^wpTd7`-BAW+|ggrCr<2DAfi(v1{?X&CVH|O|YO+3-ZNb_bhpS;=UODLj( zb+6HmU|%H}G>P34B=dY584Yb$FWkK-BJO@ii{ZbI+RGZOxuGmV0hTS|H#cL$aYY36CL!xA3kmC;h0h-0qom)yj}XML z{gTQy-uyy(gSpuzoid51K;*C9Qz>#fflILX0#jTzo%8{$giHlnz;+^{w#Y6|kqN+PCjN0FI&RJj!TB3ES>W2#MwcEuA93uWe; zRD5QRV}hxLaH)F)^2f0a*%ot0eeEcuc&T z{`y<{6+y)q*sa|0sSu&-?V+Jw?H?us$iU~OB{j29li%jNC3<9Qifgdvx&O=z;@=o9 zPe+6^g*@_y;r83FF<@@#m`>vodoaD2-rdEg%Fnk^``lXJe7DEh7=mS%ysbHGE;*=2#}R@cObjb$JrQJ2e7n|N`pSpFEn zd*)dV!*vFG2f2^U36WDG(X-=*j>LVrj=|#NEOL=+@v#N`YU}%&L4W$NwZa}1s9iir zfu+sJfO6Y$wo&p@6np?~1bc3nOT^Z!nEkN@*@#z*?Q81lJ*rzY?hbb=WRJb`>8r%* zz?q@oQG8T4B_~qmrNbWMW3aAoiyrH*Q4e#*x3Ow|=-!FLxZ{8zO8N+CIX;ZJIDUTZ z*gy6H3HjUtv)km(0*KQ)4I)1pXNyF20>DGNR$uYBuKWM_9=J9O1XWmO_$PhCGexJB zCOII^gLFz^5P^5}-8+sDm;t0g24$7=;6-QN&hER*^`Xzfs!x}ZCy(6gTDu-FbP+oi zY{vTPH!F;aat@UWa4D0*c@4ObY58$UqN%%C9bQyQAGC9|mDOLCK>j_vb7Xv^-D1+B zlTy5aUo*98g7e>XF46OXZelHx7$oVg9ZxJU`L;c!qj7|WXjZouu?O0#`Uw*}gW5kV z>z>qKApa*j*g)C0zxGZwpn3HA$@{IpDCdWH4|D#prsc`WiP>v(1x1z1K;#a{)7|TO zC($LqqGbtVVnWWn6C{?l!=&qRdv&fxoDkts?t|Z77@)H=ZA}%CQc7ha0_P=+7zgLTd0*@;U2^bf#7gEiCRY znKS~JuGpis9kyQyfzrQeD~2@66r0F6sZOD>%fucBkwdZcDVN&K%|Lmk9rm z5pWUR%3jLqwy>$eZnb+0i>{6^z-lFzrYzUVOaZC9JUBBH1s5<&0obUr2F}~)#u@0+ zlC}>iVNa9sw*?KtG=>8akV93Ra_TVn*lBs^3#!Jn!=Z;~s>Y!nQtPOkM{N1R^X3EE zF(UTXc5+@H;cv3qk$J73F0AqmQPyIn%ywo0QUDnIxiyaYP_*o?tMivJ0zrPI z2P!Xh_n`YKHFA4$L&wHKcG1QxncEI+Td4obmGa*bupZZU}yJo=YkmMLRkLUUc2ZXvAg#eR`%E zwB68{$%5{r93xv+6ZOi0@K7LLiAwb#A8S$0itfaRX+e!95oqN0(-VZbIIEGaA)M<552=qMNOiaoNee<>| zDm;65!d{bsE0#!>RPFo}HCKsYc8RxqhvDDMOZMRty8NTO#5|1&upYE$vK?J(*5;5j z6SFcSc-^6M`{+@3UqizDM`g5h`Hdw_72G_?+*Wp~2Hk84WS1|Kc}&6Jh4(`?Xdyw7 zfyPDBADR-5xVm#hU_@Yhx)bcB$$ZiEGis-$4Gi%2RPnFi@i$}6+j`S<&^Iv!nW80E z%oxJ}GxvYSN|45!x7Pz&K#(1TiH(j6``<@=ohZd73}w`47835iW*=|8^;cPK${I5H zNv8Zd%N2C_aX1*RK_bxc(qFvQwp=VRE9eW3v-;zU}F-@p)GsKr;$qiPjpL=|fH(S|dR;ki3q#5_fZ(mcw*pm^Pc+4WIp-%!0y zvJ&5zP@BK~hs^lazOF1b7Jy#cal=N1nPGjeMD%d4Ntl*vp|PpYc#(R1>ikM6Asyp) zV^ov0jRIWGj=@4>nd0?DwH9rD z3`5T35p2e!w(mKTENai04nSljitgqnz2f{r6t@qIaE&O&d_UPE)4C7n_v(k~FA_W*0;i1xg+l@sFVSVJQ^ROt+4*M?7|&SC^%`Q9ZeFtzmI!X`Pus&Wn6yb zNq%rzdbv)VXdq9_V8c_VD&&qnKL|GUQe9S}aN|llIHSid?tv8PJZTNp{eSV7r0Au) zX)aWN%93}K{Hl_4j>JapAr)(4GmiKH$*++!AeM`D5>+8)GE}FLvd0RnsN4D$@eugA3*v;52ewqY2QQjpQITr-2UvKFWcYdWDf40 zS}dH};qT?MYxa;5+gBS8{T^XGbMWciZSxf|UA5)x`5ApOXQx5uZ#iV8FVEo(|^ zcw7s$Wr2OLp(y~Vkg;7m2+-wpaR+UEco^TF&@+_h7_DHD>T5B4y!Xk3WoX2r)lNMM z*ZiTKR!dtQqV$+IT32b1ygiE}Zt}%Z{**R%+ny-JM?Ct3DXbIBj;vlHZc<$aaEaN$ zjAck&Ni@vYjgP^}h)~rjb|*nr2j+Rf(E;yS6hN96G}+WJK+`fL3DF_hwWmJ-u_^qy zQ;v0f1$L=7y`9=6f_(|J-4)rcVvI1>FPG7Oan^9|iiZKm@9;7?78>dfiyK`)8-kR& z4C>;4_ATx`wH{5zw=Y5SW^DNK5)fah8sn@eb34$fG>g=vAgD^I*{F)x7Lx4z+Wi~z z7O$yQ`=l_@M|7?5ZGd@n>J(K)HauFDsn;&-j-(N2F}5pX8gGsw!F z?r}BzF_|B5@*(6q_Ca&>3}@U85bhv`f|2?d=4^7-zRzSBVv0t`29QCCBvJX#%gL-i zE;=bt_~(p|t;LDs8o466EI#>%e$qUcd8?+NuFq@=>l~P zT5{^dnEtpoB@&nBeyvea)W7g z?uCBF=hTzLlLSdza-&SUNsiUMi`bLb8r>tbF2M@v_6uh*)V(8Sk0o^#F?i#UNuh^Q zY@TUHD^w)X#}<^cilrTg{o@=wUhXz7E;1Fn>F_pmon-bgKW=8Nu?)mxgI={ofDDgx z3U%;BN>ypJm@1KmOnXq_W2p|FE!$v^wfCUymMER7@2XV+l(SQ=LDBwQ_W~JTj1` zkrFyZk8nW}#c2wyXq&bk1HcZ^x&`8Kx+Y1LL8wP57AT5V7>Z5^it3&|19a}?)(NmOW+=G?J|9)N->67zQ}u`)n`{9$H<1UW}Wash<+2M1hJ{mJIYBaOiE64dap=dBNTDcKw+P<~HU-o&1;smA2@a-PjS|;@cwLt1IcwEb8ur z6=%$V=?Z&IPNw_;5A0c%PhhH&<|f^O^miH+)y??(y%`nWpYQ4nDGNJp4rZyE*PKeC z_5LAwyz4I;7mlQhh>L!U5J=sI6t!nN>|G~5G&c%6l~A>hD--?DD1X~OYg;N&91eJ| zu5aF@zrdhU3Zn@IRZ*&vO9ds+MaIEKr7-HONK!3CnRnu&a--LYd=Vssqe~W(*|a_? zWshY)z|#)k324Juv=*f2YbLV11Su>yzm%mYT(%r|Q(A76Q`eYxn)(H9Z+nIVR2mjb zNpE+qA0NS+t(}h7L{8zR<PYk;&aVR<*4(tmru2=(h&7r>P-7gi-e+rIj&D^27?t zXpC_&M)*w=Xx~luwPrIou!)JI;~!!l;vTMvvk5nWX}AQk3JP(KyMjBLopjin93Kfh zw+*O1%31tESHss^osj*P=Vx#odKTE2LH!PUU88y-bFkNugC7XpCtQ(3tFHcwqIp*$ zV9bRrqAVBgfjIxkjH7o=D2CpMD&uhRr zt%o;&0u4@w$Rc;AQu9`(sdQkfmemgmIp0wqc6f9+T@zq%ire?Xhx0AF{^KxcE&9Rd zxgC1x^QBe)>1rV@N2g^p9@o43N!aIF!|GE0yKF5)mKVj`2*J;iYAzjH@oD~>1vdUq zCug&VZjioP+$*_)voB<&ub39QHEpZ-GU)k85cLY%q`!tLJ#{~_Q%--1loQ2)dr zXx(#nl<32uVBQMG`NAj!ITeUfbS_ zX()J_OOta~4T@&z+b8p*NBS=_pYM}*$Id@20M8Kz*B}omJT0yexzIF$c|I=e-MQ=htaE%=J{$V1 zq0B14afu{ewtHUK(Qyf8F$L}`^-CsdI8l+JQA>n&(*b%}B?AjK^57KbZ}c+9s(>GM zlW8A7Y#u_^6!L2c!9LgNA>+orDT78c=FDBr0Hc-+QHu9km6pa7#vW6~c0^%hieg^J(^uhC}7FPc7IWi(Wv7Wt*%^=jzV|>tUrKy!gP? zBdPw=eTb7B_jiOH2G7v$pKH~hZx~Sm9c!v}-;uHZ9m6sM;fO-N$sqgP4=i6!`0r_d zo-^(7EIO{S@I5V1-Ks1Zg@SH86Ycv?!>q`IG*_U%+)KQg2+rHyXS53D5QZ;Crz7P8 zSjQio79eQX2SF^GZmh>0R%}oG_zxyOSXNdSDfG>Z9oJBihiiMueM=svIrUGZsdkEp z@d-m9tSp~xU@IgGvG21L!@^Jb;%MG}q+>C@o;g$odhiC~3>T^2cyJqj7orJnWb5ia z(RHpjeY(*{_T+Z6+Vty`1VRQApkvTj@(wz5V&<Xbt#aTDbUj?n>>?UJ3 z6u-)k81<2GWIe{iuM54%l+kt&O5D8{FS{PVv{gIUv~;B0KS_oH#CM}UB$wLIv4D2( z!9T@lK$~U+fmgJcp2qVc(Q!Y;_;ArLNb#FsgdqtsZdTaYsz(WVQ2F~P8MJU5NvSU! zytpGh6g*rnY^ae|V-UTdVqUZM!tKPK6K`ZCPP()7y_#3rlnhH=(KsMhSJ>(>l|o`W z%x#|{Tss%l_qLjv5$eV+gRF;O($X%klun)Yd&U!M;^JzCu9781$3il=W|K{otGHyJVc3B zqlaowFJrzwFJ^BIBPt`sti@MjEa1gA%~s-jai*(8TPn?E?5MbwJPbu7+T*#81^3sM`Ud@mSf9{Fw)U zfq`ArvO{{=#D8(&oYQ~NvRI?j2x3q4N;9$kMfJ$vWvP{R^HswP>PIDh`Vh6T?AI7` z_*0(!gutZmM^<4~F~xThDx?*T#vkY#&+;NH^Ay_p94Rlu-ko%?^%xzV&iF6<%o8Gq@~fHVejwP)r?=U z9;SXe(4PfrBpMNTEr^L2o^SqA{z|J?$riIu$_Lr4*w}rO2U$rW2&vZP=m$taK_$uu zJ7db+Px={U3)~+ffM!^@T;~Wz6DR=Xwk9fNcgksFD^&8Gs+il$i@Asi)lFk!=MVT5pIU2tUWduP@?><(66 z8VSWtCIG2%WL`X^&lka%n#5Vqt$Him$%!O)<%I+1e`PTZAK2KdRe>`X=T|0`Ov0o@ zYQ3g6%#%uYS{$1`7?u7knYQ=exf?nOan2$%AzwGkxhx3hmZA9)=gaCaVp}m|8&&QA zX26KrS+fh6<}4*-!S>b83`owCqh5x1?y9-cEw>uVnfb#RY_zPe?aT@*{J zPP^(B4#UVqcV8qq`-)GT;4#@Ut0Gr%9R8d=@Y5&GPv+K4=X6{;$zXP@CTVYehE<#R zdfsuT^`uoXymHr@+~Uqq3nr7t9?@p5osWozp|G-)A7DKEgeyR1;Wu#zFTSTGq@tn? zH%7=8P6~WN9pv0%+^ls*?%y%?UO*i!wu9VRJ11^IihFpLI6Gy+;@E_{2otHp`4~1L ztY#OK&vYai25eydgYDM-Ucz6{cP?IfaQ~g@wbVviB3-o*SGjphYj(I}xoq8`4tHjG zWm!x-xzti&3KDBN?z9lD=!j$U3TjGI0HL`D-={A%QO>)pxjnh`S0X{&EV}fv`)uOw zA4TbPr{ zhkB61eI+`uOL)c+IVVk_H+M_nm9h=R*zlH#kNXzOu3>xk3aN&avTL!o}xGk`uE}P1+i2FlbVR>I6Xln ztrTI-;m2rP;a6I8R%`P7^teOp1{-Z&@^o`^?U~ae4+ZS>l$$$L0~P0wIC|Nrt^|h4 z269V~o`}q3RMtR8o0^h{8jr`#+|>Qf*?45;nJ7$&s80z@Da{ihe}`mN+x1wU0L&v{ zjx*m@T&7(OV|fP^nrJ#ziPksgGNn+RC!@mspd@;8Md|WyZg8bq^pgu)bZ2VLaJr?@ zlb|UTGKdvno`NkCyigFxmzfDCP@uVB>`#%NlIeoz9AmalTFE}44KmX*wfUS=Y6`im z3vvjZ3U%3-HD`cKmS$A6dw0~Frn3lj8oblWrg+OJt-Hmm8!NTyq!9` zcs1+ql%|{sK*{l+0*`ja%Ghet1v@f8`Xt8>e5e@dyHK5w(xarDndy@STS?}hSO_*X zb;9@f76{OSS z9i*o;C0Al$>%|xgflXdMCif23Za-f8luWF~9P+nOh6?xg#J)|;Cn{Ut=h^eMfSvdn zDs(n@xV6gFOrkpu7KexZ#OF9D!0GCo00vbTp4Pyj7AJQ!o2h+WLsDfq+?v%`Bc{5N=_C~>F?T;=Zxvf zN*h(eUUumd!*CB1py=6NLa1$c^0O$=?oz1dJgGAL7VI)56T4tD;UEfXemF}rF_nWN z$wg=S3)ECyGx}+Fq-yBP8lhCERpkJM2(+-Kt@Z0h8v0Wx%oU+aMf`1Af{Dk+v}38b zSATP=>0O9_{jucguNGmFipVAc72lB)g(5U5gmEVR4x^Ybt$V+A<6n3pDLG&x9<;`? zoX;GDykXcVBd4=4nxci37;L15V8=f$ugZYxH+yRt9+MkcU#DD-XYMv; zg|}GDfZadgd~mVd65(bVMlcgQT`)v7zKdv^!4`>Z{d zYIxaCnP=-;e;f=g9}DHHJGFAez1U54mp(9-wX_Jmsx>+8CY!ibAkR$I_|<=uDH`(J zp4FdU+92hifrB>DayOn**0>%(wO=X4xs#o%`2F7gu5%6>Z*cj%9GF(xMxlK3=s(bs zr1~-*80*5}J~>N1L zW%W()CrTz5x&PwDVqs@=1rWr1>^@Cw*nTH;!dvfs^4a*C?q+?xY{+VN2@C}B#ej_Q z?}dbXI^fyz1zWt$JsuVxxORqlPylEa{@CXVrGB%fn9s-u^!ppG44F#UX>!zGX-C*& z->4xzzfY=(Z%sJ@F+STR{2Tj+deJM$9gbVIB0gVZ->_qMRsPf4jQ%OqcO1ss`?uu{ zNN{WDaM((~)BBFSZ{gob^tb$ThPU^qxJOV-n%IM7Af&pA$cSK z;~zIE{)WQwr&A8NaorKwmbnY2{*a^S)jjas72BHHU6FV*bXeLoZ*l$0h01m3!#}ip zXxO^mf3z#SHFf=f9*`U$fZuxp{cpzn_~-1m3syeINkG&;sa+t#iDPHnzY(t`{n1qx zM{S+w{jc4Jrr&;kx#jx1YU#Y_zxy8+3=Rt99CYN0AUfcy$O zFHOzU;)K8p)8c8juSi#x+3Pqur>|dNw1i}VPh>gb9kVlfkJ+Ew3*k4^zgarNiL6Tr zf)0aoFQca$5V=Q?zS7)rJNhoL`41{K``OFCO68#)?a^rdJqC^lL3h;;PWxV6kko&E zHNZ^u{x2|VR+j%iG;30JAn<>HSL-KDIs~(zia+^=rk{}y0BbeAOZ}uoj}}~NA`!kx zAjdMrYxsR_JDVVO{tYy^b=z%9U3KnP{hAp{;$f%A(pa-PF~DJ9k8p{YZUFP0ZMpSM z=Gh^91hUXpkZBQ7w7QdZ%yncyQ8U+~vu;`;*767ZfM;dj}vog1~%#HZjQrD~Fl}V@Mk|G4D zlLks#$ynL9W#q0{+sh7#Ny_6L*sHC0dD+R#B`nh@>HOHn#hYhj2LB2jb6xZxgO_z$ z;oAJ$zI~iL;a?HhNE~#&-NB&sbQ}D))>!{9t*LoAnUeyvRLm{@57sy*kQ5+cZRck0 z@{igXyP1obn>w2PlltFO$=Jo-m6V^K6d>wo=Wg%dO3FzJP;xOhvo>{ebRlJB`=@DA zfF`LfDJv=azp76PP__0p|4#=%T8vbepPQA92gqv7#>2(J$-%;E!N$pI4CG`50!>X# zEI3%$1pnU>`u}4$nVNk0N-ZHVZHOp`h&c5sV#Wp$v6P8Gj>puu&maOapv(}!lVa1^ w3|^bJ?6+xQ{qp4@2_^#mzZQn{|EIvax*5B;{cth2fM;U`!c$R+D@wrsFQVBenE(I) literal 0 HcmV?d00001 diff --git a/docs/UnityHelperScriptsGuide.pdf b/docs/UnityHelperScriptsGuide.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e1618d75807a6b0982c49a6e99fd04afb8abd671 GIT binary patch literal 181016 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

}uZ>7v;-FNj!q!r5n@zdtkmfW-0tiu3sm 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 CE`Z$t literal 0 HcmV?d00001 diff --git a/docs/license.txt b/docs/license.txt new file mode 100644 index 0000000..d66fba5 --- /dev/null +++ b/docs/license.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/examples/example_1/makefile b/examples/example_1/makefile new file mode 100644 index 0000000..cca79b4 --- /dev/null +++ b/examples/example_1/makefile @@ -0,0 +1,71 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +#We try to detect the OS we are running on, and adjust commands as needed +ifeq ($(OS),Windows_NT) + ifeq ($(shell uname -s),) # not in a bash-like shell + CLEANUP = del /F /Q + MKDIR = mkdir + else # in a bash-like shell, like msys + CLEANUP = rm -f + MKDIR = mkdir -p + endif + TARGET_EXTENSION=.exe +else + CLEANUP = rm -f + MKDIR = mkdir -p + TARGET_EXTENSION=.out +endif + +C_COMPILER=gcc +ifeq ($(shell uname -s), Darwin) +C_COMPILER=clang +endif + +UNITY_ROOT=../.. + +CFLAGS=-std=c89 +CFLAGS += -Wall +CFLAGS += -Wextra +CFLAGS += -Wpointer-arith +CFLAGS += -Wcast-align +CFLAGS += -Wwrite-strings +CFLAGS += -Wswitch-default +CFLAGS += -Wunreachable-code +CFLAGS += -Winit-self +CFLAGS += -Wmissing-field-initializers +CFLAGS += -Wno-unknown-pragmas +CFLAGS += -Wstrict-prototypes +CFLAGS += -Wundef +CFLAGS += -Wold-style-definition + +TARGET_BASE1=test1 +TARGET_BASE2=test2 +TARGET1 = $(TARGET_BASE1)$(TARGET_EXTENSION) +TARGET2 = $(TARGET_BASE2)$(TARGET_EXTENSION) +SRC_FILES1=$(UNITY_ROOT)/src/unity.c src/ProductionCode.c test/TestProductionCode.c test/test_runners/TestProductionCode_Runner.c +SRC_FILES2=$(UNITY_ROOT)/src/unity.c src/ProductionCode2.c test/TestProductionCode2.c test/test_runners/TestProductionCode2_Runner.c +INC_DIRS=-Isrc -I$(UNITY_ROOT)/src +SYMBOLS= + +all: clean default + +default: $(SRC_FILES1) $(SRC_FILES2) + $(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $(SRC_FILES1) -o $(TARGET1) + $(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $(SRC_FILES2) -o $(TARGET2) + - ./$(TARGET1) + ./$(TARGET2) + +test/test_runners/TestProductionCode_Runner.c: test/TestProductionCode.c + ruby $(UNITY_ROOT)/auto/generate_test_runner.rb test/TestProductionCode.c test/test_runners/TestProductionCode_Runner.c +test/test_runners/TestProductionCode2_Runner.c: test/TestProductionCode2.c + ruby $(UNITY_ROOT)/auto/generate_test_runner.rb test/TestProductionCode2.c test/test_runners/TestProductionCode2_Runner.c + +clean: + $(CLEANUP) $(TARGET1) $(TARGET2) + +ci: CFLAGS += -Werror +ci: default diff --git a/examples/example_1/readme.txt b/examples/example_1/readme.txt new file mode 100644 index 0000000..dfed815 --- /dev/null +++ b/examples/example_1/readme.txt @@ -0,0 +1,5 @@ +Example 1 +========= + +Close to the simplest possible example of Unity, using only basic features. +Run make to build & run the example tests. \ No newline at end of file diff --git a/examples/example_1/src/ProductionCode.c b/examples/example_1/src/ProductionCode.c new file mode 100644 index 0000000..d039c3e --- /dev/null +++ b/examples/example_1/src/ProductionCode.c @@ -0,0 +1,24 @@ + +#include "ProductionCode.h" + +int Counter = 0; +int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; /* some obnoxious array to search that is 1-based indexing instead of 0. */ + +/* This function is supposed to search through NumbersToFind and find a particular number. + * If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since + * NumbersToFind is indexed from 1. Unfortunately it's broken + * (and should therefore be caught by our tests) */ +int FindFunction_WhichIsBroken(int NumberToFind) +{ + int i = 0; + while (i <= 8) /* Notice I should have been in braces */ + i++; + if (NumbersToFind[i] == NumberToFind) /* Yikes! I'm getting run after the loop finishes instead of during it! */ + return i; + return 0; +} + +int FunctionWhichReturnsLocalVariable(void) +{ + return Counter; +} diff --git a/examples/example_1/src/ProductionCode.h b/examples/example_1/src/ProductionCode.h new file mode 100644 index 0000000..250ca0d --- /dev/null +++ b/examples/example_1/src/ProductionCode.h @@ -0,0 +1,3 @@ + +int FindFunction_WhichIsBroken(int NumberToFind); +int FunctionWhichReturnsLocalVariable(void); diff --git a/examples/example_1/src/ProductionCode2.c b/examples/example_1/src/ProductionCode2.c new file mode 100644 index 0000000..98ee7ee --- /dev/null +++ b/examples/example_1/src/ProductionCode2.c @@ -0,0 +1,11 @@ + +#include "ProductionCode2.h" + +char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction) +{ + (void)Poor; + (void)LittleFunction; + /* Since There Are No Tests Yet, This Function Could Be Empty For All We Know. + * Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget */ + return (char*)0; +} diff --git a/examples/example_1/src/ProductionCode2.h b/examples/example_1/src/ProductionCode2.h new file mode 100644 index 0000000..34ae980 --- /dev/null +++ b/examples/example_1/src/ProductionCode2.h @@ -0,0 +1,2 @@ + +char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction); diff --git a/examples/example_1/test/TestProductionCode.c b/examples/example_1/test/TestProductionCode.c new file mode 100644 index 0000000..8060886 --- /dev/null +++ b/examples/example_1/test/TestProductionCode.c @@ -0,0 +1,62 @@ + +#include "ProductionCode.h" +#include "unity.h" + +/* sometimes you may want to get at local data in a module. + * for example: If you plan to pass by reference, this could be useful + * however, it should often be avoided */ +extern int Counter; + +void setUp(void) +{ + /* This is run before EACH TEST */ + Counter = 0x5a5a; +} + +void tearDown(void) +{ +} + +void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void) +{ + /* All of these should pass */ + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1)); +} + +void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void) +{ + /* You should see this line fail in your test summary */ + TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34)); + + /* Notice the rest of these didn't get a chance to run because the line above failed. + * Unit tests abort each test function on the first sign of trouble. + * Then NEXT test function runs as normal. */ + TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888)); +} + +void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void) +{ + /* This should be true because setUp set this up for us before this test */ + TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable()); + + /* This should be true because we can still change our answer */ + Counter = 0x1234; + TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable()); +} + +void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void) +{ + /* This should be true again because setup was rerun before this test (and after we changed it to 0x1234) */ + TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable()); +} + +void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void) +{ + /* Sometimes you get the test wrong. When that happens, you get a failure too... and a quick look should tell + * you what actually happened...which in this case was a failure to setup the initial condition. */ + TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable()); +} diff --git a/examples/example_1/test/TestProductionCode2.c b/examples/example_1/test/TestProductionCode2.c new file mode 100644 index 0000000..7d940c1 --- /dev/null +++ b/examples/example_1/test/TestProductionCode2.c @@ -0,0 +1,31 @@ + +#include "ProductionCode2.h" +#include "unity.h" + +/* These should be ignored because they are commented out in various ways: +#include "whatever.h" +#include "somethingelse.h" +*/ + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_IgnoredTest(void) +{ + TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose"); +} + +void test_AnotherIgnoredTest(void) +{ + TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet"); +} + +void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void) +{ + TEST_IGNORE(); /* Like This */ +} diff --git a/examples/example_1/test/test_runners/TestProductionCode2_Runner.c b/examples/example_1/test/test_runners/TestProductionCode2_Runner.c new file mode 100644 index 0000000..cf72c21 --- /dev/null +++ b/examples/example_1/test/test_runners/TestProductionCode2_Runner.c @@ -0,0 +1,53 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT()) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "ProductionCode2.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_IgnoredTest(void); +extern void test_AnotherIgnoredTest(void); +extern void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("test/TestProductionCode2.c"); + RUN_TEST(test_IgnoredTest, 18); + RUN_TEST(test_AnotherIgnoredTest, 23); + RUN_TEST(test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented, 28); + + return (UnityEnd()); +} diff --git a/examples/example_1/test/test_runners/TestProductionCode_Runner.c b/examples/example_1/test/test_runners/TestProductionCode_Runner.c new file mode 100644 index 0000000..3b49af7 --- /dev/null +++ b/examples/example_1/test/test_runners/TestProductionCode_Runner.c @@ -0,0 +1,57 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT()) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "ProductionCode.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void); +extern void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void); +extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void); +extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void); +extern void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("test/TestProductionCode.c"); + RUN_TEST(test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode, 20); + RUN_TEST(test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken, 30); + RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue, 41); + RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain, 51); + RUN_TEST(test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed, 57); + + return (UnityEnd()); +} diff --git a/examples/example_2/makefile b/examples/example_2/makefile new file mode 100644 index 0000000..99d8d96 --- /dev/null +++ b/examples/example_2/makefile @@ -0,0 +1,70 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +#We try to detect the OS we are running on, and adjust commands as needed +ifeq ($(OS),Windows_NT) + ifeq ($(shell uname -s),) # not in a bash-like shell + CLEANUP = del /F /Q + MKDIR = mkdir + else # in a bash-like shell, like msys + CLEANUP = rm -f + MKDIR = mkdir -p + endif + TARGET_EXTENSION=.exe +else + CLEANUP = rm -f + MKDIR = mkdir -p + TARGET_EXTENSION=.out +endif + +C_COMPILER=gcc +ifeq ($(shell uname -s), Darwin) +C_COMPILER=clang +endif + +UNITY_ROOT=../.. + +CFLAGS=-std=c99 +CFLAGS += -Wall +CFLAGS += -Wextra +CFLAGS += -Wpointer-arith +CFLAGS += -Wcast-align +CFLAGS += -Wwrite-strings +CFLAGS += -Wswitch-default +CFLAGS += -Wunreachable-code +CFLAGS += -Winit-self +CFLAGS += -Wmissing-field-initializers +CFLAGS += -Wno-unknown-pragmas +CFLAGS += -Wstrict-prototypes +CFLAGS += -Wundef +CFLAGS += -Wold-style-definition + +TARGET_BASE1=all_tests +TARGET1 = $(TARGET_BASE1)$(TARGET_EXTENSION) +SRC_FILES1=\ + $(UNITY_ROOT)/src/unity.c \ + $(UNITY_ROOT)/extras/fixture/src/unity_fixture.c \ + src/ProductionCode.c \ + src/ProductionCode2.c \ + test/TestProductionCode.c \ + test/TestProductionCode2.c \ + test/test_runners/TestProductionCode_Runner.c \ + test/test_runners/TestProductionCode2_Runner.c \ + test/test_runners/all_tests.c +INC_DIRS=-Isrc -I$(UNITY_ROOT)/src -I$(UNITY_ROOT)/extras/fixture/src +SYMBOLS= + +all: clean default + +default: + $(C_COMPILER) $(CFLAGS) $(INC_DIRS) $(SYMBOLS) $(SRC_FILES1) -o $(TARGET1) + - ./$(TARGET1) -v + +clean: + $(CLEANUP) $(TARGET1) + +ci: CFLAGS += -Werror +ci: default diff --git a/examples/example_2/readme.txt b/examples/example_2/readme.txt new file mode 100644 index 0000000..f0fce65 --- /dev/null +++ b/examples/example_2/readme.txt @@ -0,0 +1,5 @@ +Example 2 +========= + +Same as the first example, but now using Unity's test fixture to group tests +together. Using the test fixture also makes writing test runners much easier. \ No newline at end of file diff --git a/examples/example_2/src/ProductionCode.c b/examples/example_2/src/ProductionCode.c new file mode 100644 index 0000000..500b44b --- /dev/null +++ b/examples/example_2/src/ProductionCode.c @@ -0,0 +1,24 @@ + +#include "ProductionCode.h" + +int Counter = 0; +int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; //some obnoxious array to search that is 1-based indexing instead of 0. + +// This function is supposed to search through NumbersToFind and find a particular number. +// If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since +// NumbersToFind is indexed from 1. Unfortunately it's broken +// (and should therefore be caught by our tests) +int FindFunction_WhichIsBroken(int NumberToFind) +{ + int i = 0; + while (i <= 8) //Notice I should have been in braces + i++; + if (NumbersToFind[i] == NumberToFind) //Yikes! I'm getting run after the loop finishes instead of during it! + return i; + return 0; +} + +int FunctionWhichReturnsLocalVariable(void) +{ + return Counter; +} diff --git a/examples/example_2/src/ProductionCode.h b/examples/example_2/src/ProductionCode.h new file mode 100644 index 0000000..250ca0d --- /dev/null +++ b/examples/example_2/src/ProductionCode.h @@ -0,0 +1,3 @@ + +int FindFunction_WhichIsBroken(int NumberToFind); +int FunctionWhichReturnsLocalVariable(void); diff --git a/examples/example_2/src/ProductionCode2.c b/examples/example_2/src/ProductionCode2.c new file mode 100644 index 0000000..77c969f --- /dev/null +++ b/examples/example_2/src/ProductionCode2.c @@ -0,0 +1,11 @@ + +#include "ProductionCode2.h" + +char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction) +{ + (void)Poor; + (void)LittleFunction; + //Since There Are No Tests Yet, This Function Could Be Empty For All We Know. + // Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget + return (char*)0; +} diff --git a/examples/example_2/src/ProductionCode2.h b/examples/example_2/src/ProductionCode2.h new file mode 100644 index 0000000..34ae980 --- /dev/null +++ b/examples/example_2/src/ProductionCode2.h @@ -0,0 +1,2 @@ + +char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction); diff --git a/examples/example_2/test/TestProductionCode.c b/examples/example_2/test/TestProductionCode.c new file mode 100644 index 0000000..ff318ab --- /dev/null +++ b/examples/example_2/test/TestProductionCode.c @@ -0,0 +1,64 @@ +#include "ProductionCode.h" +#include "unity.h" +#include "unity_fixture.h" + +TEST_GROUP(ProductionCode); + +//sometimes you may want to get at local data in a module. +//for example: If you plan to pass by reference, this could be useful +//however, it should often be avoided +extern int Counter; + +TEST_SETUP(ProductionCode) +{ + //This is run before EACH TEST + Counter = 0x5a5a; +} + +TEST_TEAR_DOWN(ProductionCode) +{ +} + +TEST(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode) +{ + //All of these should pass + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1)); +} + +TEST(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken) +{ + // You should see this line fail in your test summary + TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34)); + + // Notice the rest of these didn't get a chance to run because the line above failed. + // Unit tests abort each test function on the first sign of trouble. + // Then NEXT test function runs as normal. + TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888)); +} + +TEST(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue) +{ + //This should be true because setUp set this up for us before this test + TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable()); + + //This should be true because we can still change our answer + Counter = 0x1234; + TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable()); +} + +TEST(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain) +{ + //This should be true again because setup was rerun before this test (and after we changed it to 0x1234) + TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable()); +} + +TEST(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed) +{ + //Sometimes you get the test wrong. When that happens, you get a failure too... and a quick look should tell + // you what actually happened...which in this case was a failure to setup the initial condition. + TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable()); +} diff --git a/examples/example_2/test/TestProductionCode2.c b/examples/example_2/test/TestProductionCode2.c new file mode 100644 index 0000000..d9f4efe --- /dev/null +++ b/examples/example_2/test/TestProductionCode2.c @@ -0,0 +1,33 @@ +#include "ProductionCode2.h" +#include "unity.h" +#include "unity_fixture.h" + +TEST_GROUP(ProductionCode2); + +/* These should be ignored because they are commented out in various ways: +#include "whatever.h" +*/ +//#include "somethingelse.h" + +TEST_SETUP(ProductionCode2) +{ +} + +TEST_TEAR_DOWN(ProductionCode2) +{ +} + +TEST(ProductionCode2, IgnoredTest) +{ + TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose"); +} + +TEST(ProductionCode2, AnotherIgnoredTest) +{ + TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet"); +} + +TEST(ProductionCode2, ThisFunctionHasNotBeenTested_NeedsToBeImplemented) +{ + TEST_IGNORE(); //Like This +} diff --git a/examples/example_2/test/test_runners/TestProductionCode2_Runner.c b/examples/example_2/test/test_runners/TestProductionCode2_Runner.c new file mode 100644 index 0000000..6fcc3b1 --- /dev/null +++ b/examples/example_2/test/test_runners/TestProductionCode2_Runner.c @@ -0,0 +1,9 @@ +#include "unity.h" +#include "unity_fixture.h" + +TEST_GROUP_RUNNER(ProductionCode2) +{ + RUN_TEST_CASE(ProductionCode2, IgnoredTest); + RUN_TEST_CASE(ProductionCode2, AnotherIgnoredTest); + RUN_TEST_CASE(ProductionCode2, ThisFunctionHasNotBeenTested_NeedsToBeImplemented); +} \ No newline at end of file diff --git a/examples/example_2/test/test_runners/TestProductionCode_Runner.c b/examples/example_2/test/test_runners/TestProductionCode_Runner.c new file mode 100644 index 0000000..41a416a --- /dev/null +++ b/examples/example_2/test/test_runners/TestProductionCode_Runner.c @@ -0,0 +1,11 @@ +#include "unity.h" +#include "unity_fixture.h" + +TEST_GROUP_RUNNER(ProductionCode) +{ + RUN_TEST_CASE(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode); + RUN_TEST_CASE(ProductionCode, FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken); + RUN_TEST_CASE(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue); + RUN_TEST_CASE(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain); + RUN_TEST_CASE(ProductionCode, FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed); +} \ No newline at end of file diff --git a/examples/example_2/test/test_runners/all_tests.c b/examples/example_2/test/test_runners/all_tests.c new file mode 100644 index 0000000..e706ece --- /dev/null +++ b/examples/example_2/test/test_runners/all_tests.c @@ -0,0 +1,12 @@ +#include "unity_fixture.h" + +static void RunAllTests(void) +{ + RUN_TEST_GROUP(ProductionCode); + RUN_TEST_GROUP(ProductionCode2); +} + +int main(int argc, const char * argv[]) +{ + return UnityMain(argc, argv, RunAllTests); +} diff --git a/examples/example_3/helper/UnityHelper.c b/examples/example_3/helper/UnityHelper.c new file mode 100644 index 0000000..9cf42c6 --- /dev/null +++ b/examples/example_3/helper/UnityHelper.c @@ -0,0 +1,10 @@ +#include "unity.h" +#include "UnityHelper.h" +#include +#include + +void AssertEqualExampleStruct(const EXAMPLE_STRUCT_T expected, const EXAMPLE_STRUCT_T actual, const unsigned short line) +{ + UNITY_TEST_ASSERT_EQUAL_INT(expected.x, actual.x, line, "Example Struct Failed For Field x"); + UNITY_TEST_ASSERT_EQUAL_INT(expected.y, actual.y, line, "Example Struct Failed For Field y"); +} diff --git a/examples/example_3/helper/UnityHelper.h b/examples/example_3/helper/UnityHelper.h new file mode 100644 index 0000000..1516111 --- /dev/null +++ b/examples/example_3/helper/UnityHelper.h @@ -0,0 +1,12 @@ +#ifndef _TESTHELPER_H +#define _TESTHELPER_H + +#include "Types.h" + +void AssertEqualExampleStruct(const EXAMPLE_STRUCT_T expected, const EXAMPLE_STRUCT_T actual, const unsigned short line); + +#define UNITY_TEST_ASSERT_EQUAL_EXAMPLE_STRUCT_T(expected, actual, line, message) AssertEqualExampleStruct(expected, actual, line); + +#define TEST_ASSERT_EQUAL_EXAMPLE_STRUCT_T(expected, actual) UNITY_TEST_ASSERT_EQUAL_EXAMPLE_STRUCT_T(expected, actual, __LINE__, NULL); + +#endif // _TESTHELPER_H diff --git a/examples/example_3/rakefile.rb b/examples/example_3/rakefile.rb new file mode 100644 index 0000000..9f1dbeb --- /dev/null +++ b/examples/example_3/rakefile.rb @@ -0,0 +1,43 @@ +HERE = File.expand_path(File.dirname(__FILE__)) + '/' +UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/../..' + +require 'rake' +require 'rake/clean' +require HERE+'rakefile_helper' + +TEMP_DIRS = [ + File.join(HERE, 'build') +] + +TEMP_DIRS.each do |dir| + directory(dir) + CLOBBER.include(dir) +end + +task :prepare_for_tests => TEMP_DIRS + +include RakefileHelpers + +# Load default configuration, for now +DEFAULT_CONFIG_FILE = 'target_gcc_32.yml' +configure_toolchain(DEFAULT_CONFIG_FILE) + +task :unit => [:prepare_for_tests] do + run_tests get_unit_test_files +end + +desc "Generate test summary" +task :summary do + report_summary +end + +desc "Build and test Unity" +task :all => [:clean, :unit, :summary] +task :default => [:clobber, :all] +task :ci => [:default] +task :cruise => [:default] + +desc "Load configuration" +task :config, :config_file do |t, args| + configure_toolchain(args[:config_file]) +end diff --git a/examples/example_3/rakefile_helper.rb b/examples/example_3/rakefile_helper.rb new file mode 100644 index 0000000..ed41d80 --- /dev/null +++ b/examples/example_3/rakefile_helper.rb @@ -0,0 +1,258 @@ +require 'yaml' +require 'fileutils' +require UNITY_ROOT+'/auto/unity_test_summary' +require UNITY_ROOT+'/auto/generate_test_runner' +require UNITY_ROOT+'/auto/colour_reporter' + +module RakefileHelpers + + C_EXTENSION = '.c' + + def load_configuration(config_file) + $cfg_file = config_file + $cfg = YAML.load(File.read($cfg_file)) + end + + def configure_clean + CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil? + end + + def configure_toolchain(config_file=DEFAULT_CONFIG_FILE) + config_file += '.yml' unless config_file =~ /\.yml$/ + load_configuration(config_file) + configure_clean + end + + def get_unit_test_files + path = $cfg['compiler']['unit_tests_path'] + 'Test*' + C_EXTENSION + path.gsub!(/\\/, '/') + FileList.new(path) + end + + def get_local_include_dirs + include_dirs = $cfg['compiler']['includes']['items'].dup + include_dirs.delete_if {|dir| dir.is_a?(Array)} + return include_dirs + end + + def extract_headers(filename) + includes = [] + lines = File.readlines(filename) + lines.each do |line| + m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/) + if not m.nil? + includes << m[1] + end + end + return includes + end + + def find_source_file(header, paths) + paths.each do |dir| + src_file = dir + header.ext(C_EXTENSION) + if (File.exists?(src_file)) + return src_file + end + end + return nil + end + + def tackit(strings) + if strings.is_a?(Array) + result = "\"#{strings.join}\"" + else + result = strings + end + return result + end + + def squash(prefix, items) + result = '' + items.each { |item| result += " #{prefix}#{tackit(item)}" } + return result + end + + def build_compiler_fields + command = tackit($cfg['compiler']['path']) + if $cfg['compiler']['defines']['items'].nil? + defines = '' + else + defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items']) + end + options = squash('', $cfg['compiler']['options']) + includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items']) + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :defines => defines, :options => options, :includes => includes} + end + + def compile(file, defines=[]) + compiler = build_compiler_fields + cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " + + "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" + obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}" + execute(cmd_str + obj_file) + return obj_file + end + + def build_linker_fields + command = tackit($cfg['linker']['path']) + if $cfg['linker']['options'].nil? + options = '' + else + options = squash('', $cfg['linker']['options']) + end + if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?) + includes = '' + else + includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items']) + end + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :options => options, :includes => includes} + end + + def link_it(exe_name, obj_list) + linker = build_linker_fields + cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " + + (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join + + $cfg['linker']['bin_files']['prefix'] + ' ' + + $cfg['linker']['bin_files']['destination'] + + exe_name + $cfg['linker']['bin_files']['extension'] + execute(cmd_str) + end + + def build_simulator_fields + return nil if $cfg['simulator'].nil? + if $cfg['simulator']['path'].nil? + command = '' + else + command = (tackit($cfg['simulator']['path']) + ' ') + end + if $cfg['simulator']['pre_support'].nil? + pre_support = '' + else + pre_support = squash('', $cfg['simulator']['pre_support']) + end + if $cfg['simulator']['post_support'].nil? + post_support = '' + else + post_support = squash('', $cfg['simulator']['post_support']) + end + return {:command => command, :pre_support => pre_support, :post_support => post_support} + end + + def execute(command_string, verbose=true, raise_on_fail=true) + report command_string + output = `#{command_string}`.chomp + report(output) if (verbose && !output.nil? && (output.length > 0)) + if (($?.exitstatus != 0) and (raise_on_fail)) + raise "Command failed. (Returned #{$?.exitstatus})" + end + return output + end + + def report_summary + summary = UnityTestSummary.new + summary.set_root_path(HERE) + results_glob = "#{$cfg['compiler']['build_path']}*.test*" + results_glob.gsub!(/\\/, '/') + results = Dir[results_glob] + summary.set_targets(results) + summary.run + fail_out "FAIL: There were failures" if (summary.failures > 0) + end + + def run_tests(test_files) + + report 'Running system tests...' + + # Tack on TEST define for compiling unit tests + load_configuration($cfg_file) + test_defines = ['TEST'] + $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil? + $cfg['compiler']['defines']['items'] << 'TEST' + + include_dirs = get_local_include_dirs + + # Build and execute each unit test + test_files.each do |test| + obj_list = [] + + # Detect dependencies and build required required modules + extract_headers(test).each do |header| + # Compile corresponding source file if it exists + src_file = find_source_file(header, include_dirs) + if !src_file.nil? + obj_list << compile(src_file, test_defines) + end + end + + # Build the test runner (generate if configured to do so) + test_base = File.basename(test, C_EXTENSION) + runner_name = test_base + '_Runner.c' + if $cfg['compiler']['runner_path'].nil? + runner_path = $cfg['compiler']['build_path'] + runner_name + test_gen = UnityTestRunnerGenerator.new($cfg_file) + test_gen.run(test, runner_path) + else + runner_path = $cfg['compiler']['runner_path'] + runner_name + end + + obj_list << compile(runner_path, test_defines) + + # Build the test module + obj_list << compile(test, test_defines) + + # Link the test executable + link_it(test_base, obj_list) + + # Execute unit test and generate results file + simulator = build_simulator_fields + executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension'] + if simulator.nil? + cmd_str = executable + else + cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}" + end + output = execute(cmd_str, true, false) + test_results = $cfg['compiler']['build_path'] + test_base + if output.match(/OK$/m).nil? + test_results += '.testfail' + else + test_results += '.testpass' + end + File.open(test_results, 'w') { |f| f.print output } + end + end + + def build_application(main) + + report "Building application..." + + obj_list = [] + load_configuration($cfg_file) + main_path = $cfg['compiler']['source_path'] + main + C_EXTENSION + + # Detect dependencies and build required required modules + include_dirs = get_local_include_dirs + extract_headers(main_path).each do |header| + src_file = find_source_file(header, include_dirs) + if !src_file.nil? + obj_list << compile(src_file) + end + end + + # Build the main source file + main_base = File.basename(main_path, C_EXTENSION) + obj_list << compile(main_path) + + # Create the executable + link_it(main_base, obj_list) + end + + def fail_out(msg) + puts msg + puts "Not returning exit code so continuous integration can pass" +# exit(-1) # Only removed to pass example_3, which has failing tests on purpose. +# Still fail if the build fails for any other reason. + end +end diff --git a/examples/example_3/readme.txt b/examples/example_3/readme.txt new file mode 100644 index 0000000..7371fea --- /dev/null +++ b/examples/example_3/readme.txt @@ -0,0 +1,13 @@ +Example 3 +========= + +This example project gives an example of some passing, ignored, and failing tests. +It's simple and meant for you to look over and get an idea for what all of this stuff does. + +You can build and test using rake. The rake version will let you test with gcc or a couple +versions of IAR. You can tweak the yaml files to get those versions running. + +Ruby is required if you're using the rake version (obviously). This version shows off most of +Unity's advanced features (automatically creating test runners, fancy summaries, etc.) +Without ruby, you have to maintain your own test runners. Do that for a while and you'll learn +why you really want to start using the Ruby tools. diff --git a/examples/example_3/src/ProductionCode.c b/examples/example_3/src/ProductionCode.c new file mode 100644 index 0000000..500b44b --- /dev/null +++ b/examples/example_3/src/ProductionCode.c @@ -0,0 +1,24 @@ + +#include "ProductionCode.h" + +int Counter = 0; +int NumbersToFind[9] = { 0, 34, 55, 66, 32, 11, 1, 77, 888 }; //some obnoxious array to search that is 1-based indexing instead of 0. + +// This function is supposed to search through NumbersToFind and find a particular number. +// If it finds it, the index is returned. Otherwise 0 is returned which sorta makes sense since +// NumbersToFind is indexed from 1. Unfortunately it's broken +// (and should therefore be caught by our tests) +int FindFunction_WhichIsBroken(int NumberToFind) +{ + int i = 0; + while (i <= 8) //Notice I should have been in braces + i++; + if (NumbersToFind[i] == NumberToFind) //Yikes! I'm getting run after the loop finishes instead of during it! + return i; + return 0; +} + +int FunctionWhichReturnsLocalVariable(void) +{ + return Counter; +} diff --git a/examples/example_3/src/ProductionCode.h b/examples/example_3/src/ProductionCode.h new file mode 100644 index 0000000..250ca0d --- /dev/null +++ b/examples/example_3/src/ProductionCode.h @@ -0,0 +1,3 @@ + +int FindFunction_WhichIsBroken(int NumberToFind); +int FunctionWhichReturnsLocalVariable(void); diff --git a/examples/example_3/src/ProductionCode2.c b/examples/example_3/src/ProductionCode2.c new file mode 100644 index 0000000..77c969f --- /dev/null +++ b/examples/example_3/src/ProductionCode2.c @@ -0,0 +1,11 @@ + +#include "ProductionCode2.h" + +char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction) +{ + (void)Poor; + (void)LittleFunction; + //Since There Are No Tests Yet, This Function Could Be Empty For All We Know. + // Which isn't terribly useful... but at least we put in a TEST_IGNORE so we won't forget + return (char*)0; +} diff --git a/examples/example_3/src/ProductionCode2.h b/examples/example_3/src/ProductionCode2.h new file mode 100644 index 0000000..34ae980 --- /dev/null +++ b/examples/example_3/src/ProductionCode2.h @@ -0,0 +1,2 @@ + +char* ThisFunctionHasNotBeenTested(int Poor, char* LittleFunction); diff --git a/examples/example_3/target_gcc_32.yml b/examples/example_3/target_gcc_32.yml new file mode 100644 index 0000000..f155508 --- /dev/null +++ b/examples/example_3/target_gcc_32.yml @@ -0,0 +1,46 @@ +# Copied from ~Unity/targets/gcc_32.yml +unity_root: &unity_root '../..' +compiler: + path: gcc + source_path: 'src/' + unit_tests_path: &unit_tests_path 'test/' + build_path: &build_path 'build/' + options: + - '-c' + - '-m32' + - '-Wall' + - '-Wno-address' + - '-std=c99' + - '-pedantic' + includes: + prefix: '-I' + items: + - 'src/' + - '../../src/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + - '-m32' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/examples/example_3/test/TestProductionCode.c b/examples/example_3/test/TestProductionCode.c new file mode 100644 index 0000000..28a5581 --- /dev/null +++ b/examples/example_3/test/TestProductionCode.c @@ -0,0 +1,62 @@ + +#include "ProductionCode.h" +#include "unity.h" + +//sometimes you may want to get at local data in a module. +//for example: If you plan to pass by reference, this could be useful +//however, it should often be avoided +extern int Counter; + +void setUp(void) +{ + //This is run before EACH TEST + Counter = 0x5a5a; +} + +void tearDown(void) +{ +} + +void test_FindFunction_WhichIsBroken_ShouldReturnZeroIfItemIsNotInList_WhichWorksEvenInOurBrokenCode(void) +{ + //All of these should pass + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(78)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(1)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(33)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(999)); + TEST_ASSERT_EQUAL(0, FindFunction_WhichIsBroken(-1)); +} + +void test_FindFunction_WhichIsBroken_ShouldReturnTheIndexForItemsInList_WhichWillFailBecauseOurFunctionUnderTestIsBroken(void) +{ + // You should see this line fail in your test summary + TEST_ASSERT_EQUAL(1, FindFunction_WhichIsBroken(34)); + + // Notice the rest of these didn't get a chance to run because the line above failed. + // Unit tests abort each test function on the first sign of trouble. + // Then NEXT test function runs as normal. + TEST_ASSERT_EQUAL(8, FindFunction_WhichIsBroken(8888)); +} + +void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValue(void) +{ + //This should be true because setUp set this up for us before this test + TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable()); + + //This should be true because we can still change our answer + Counter = 0x1234; + TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable()); +} + +void test_FunctionWhichReturnsLocalVariable_ShouldReturnTheCurrentCounterValueAgain(void) +{ + //This should be true again because setup was rerun before this test (and after we changed it to 0x1234) + TEST_ASSERT_EQUAL_HEX(0x5a5a, FunctionWhichReturnsLocalVariable()); +} + +void test_FunctionWhichReturnsLocalVariable_ShouldReturnCurrentCounter_ButFailsBecauseThisTestIsActuallyFlawed(void) +{ + //Sometimes you get the test wrong. When that happens, you get a failure too... and a quick look should tell + // you what actually happened...which in this case was a failure to setup the initial condition. + TEST_ASSERT_EQUAL_HEX(0x1234, FunctionWhichReturnsLocalVariable()); +} diff --git a/examples/example_3/test/TestProductionCode2.c b/examples/example_3/test/TestProductionCode2.c new file mode 100644 index 0000000..e2119cc --- /dev/null +++ b/examples/example_3/test/TestProductionCode2.c @@ -0,0 +1,31 @@ + +#include "ProductionCode2.h" +#include "unity.h" + +/* These should be ignored because they are commented out in various ways: +#include "whatever.h" +*/ +//#include "somethingelse.h" + +void setUp(void) +{ +} + +void tearDown(void) +{ +} + +void test_IgnoredTest(void) +{ + TEST_IGNORE_MESSAGE("This Test Was Ignored On Purpose"); +} + +void test_AnotherIgnoredTest(void) +{ + TEST_IGNORE_MESSAGE("These Can Be Useful For Leaving Yourself Notes On What You Need To Do Yet"); +} + +void test_ThisFunctionHasNotBeenTested_NeedsToBeImplemented(void) +{ + TEST_IGNORE(); //Like This +} diff --git a/examples/unity_config.h b/examples/unity_config.h new file mode 100644 index 0000000..355d9bf --- /dev/null +++ b/examples/unity_config.h @@ -0,0 +1,237 @@ +/* Unity Configuration + * As of May 11th, 2016 at ThrowTheSwitch/Unity commit 837c529 + * Update: December 29th, 2016 + * See Also: Unity/docs/UnityConfigurationGuide.pdf + * + * Unity is designed to run on almost anything that is targeted by a C compiler. + * It would be awesome if this could be done with zero configuration. While + * there are some targets that come close to this dream, it is sadly not + * universal. It is likely that you are going to need at least a couple of the + * configuration options described in this document. + * + * All of Unity's configuration options are `#defines`. Most of these are simple + * definitions. A couple are macros with arguments. They live inside the + * unity_internals.h header file. We don't necessarily recommend opening that + * file unless you really need to. That file is proof that a cross-platform + * library is challenging to build. From a more positive perspective, it is also + * proof that a great deal of complexity can be centralized primarily to one + * place in order to provide a more consistent and simple experience elsewhere. + * + * Using These Options + * It doesn't matter if you're using a target-specific compiler and a simulator + * or a native compiler. In either case, you've got a couple choices for + * configuring these options: + * + * 1. Because these options are specified via C defines, you can pass most of + * these options to your compiler through command line compiler flags. Even + * if you're using an embedded target that forces you to use their + * overbearing IDE for all configuration, there will be a place somewhere in + * your project to configure defines for your compiler. + * 2. You can create a custom `unity_config.h` configuration file (present in + * your toolchain's search paths). In this file, you will list definitions + * and macros specific to your target. All you must do is define + * `UNITY_INCLUDE_CONFIG_H` and Unity will rely on `unity_config.h` for any + * further definitions it may need. + */ + +#ifndef UNITY_CONFIG_H +#define UNITY_CONFIG_H + +/* ************************* AUTOMATIC INTEGER TYPES *************************** + * C's concept of an integer varies from target to target. The C Standard has + * rules about the `int` matching the register size of the target + * microprocessor. It has rules about the `int` and how its size relates to + * other integer types. An `int` on one target might be 16 bits while on another + * target it might be 64. There are more specific types in compilers compliant + * with C99 or later, but that's certainly not every compiler you are likely to + * encounter. Therefore, Unity has a number of features for helping to adjust + * itself to match your required integer sizes. It starts off by trying to do it + * automatically. + **************************************************************************** */ + +/* The first attempt to guess your types is to check `limits.h`. Some compilers + * that don't support `stdint.h` could include `limits.h`. If you don't + * want Unity to check this file, define this to make it skip the inclusion. + * Unity looks at UINT_MAX & ULONG_MAX, which were available since C89. + */ +/* #define UNITY_EXCLUDE_LIMITS_H */ + +/* The second thing that Unity does to guess your types is check `stdint.h`. + * This file defines `UINTPTR_MAX`, since C99, that Unity can make use of to + * learn about your system. It's possible you don't want it to do this or it's + * possible that your system doesn't support `stdint.h`. If that's the case, + * you're going to want to define this. That way, Unity will know to skip the + * inclusion of this file and you won't be left with a compiler error. + */ +/* #define UNITY_EXCLUDE_STDINT_H */ + +/* ********************** MANUAL INTEGER TYPE DEFINITION *********************** + * If you've disabled all of the automatic options above, you're going to have + * to do the configuration yourself. There are just a handful of defines that + * you are going to specify if you don't like the defaults. + **************************************************************************** */ + + /* Define this to be the number of bits an `int` takes up on your system. The + * default, if not auto-detected, is 32 bits. + * + * Example: + */ +/* #define UNITY_INT_WIDTH 16 */ + +/* Define this to be the number of bits a `long` takes up on your system. The + * default, if not autodetected, is 32 bits. This is used to figure out what + * kind of 64-bit support your system can handle. Does it need to specify a + * `long` or a `long long` to get a 64-bit value. On 16-bit systems, this option + * is going to be ignored. + * + * Example: + */ +/* #define UNITY_LONG_WIDTH 16 */ + +/* Define this to be the number of bits a pointer takes up on your system. The + * default, if not autodetected, is 32-bits. If you're getting ugly compiler + * warnings about casting from pointers, this is the one to look at. + * + * Example: + */ +/* #define UNITY_POINTER_WIDTH 64 */ + +/* Unity will automatically include 64-bit support if it auto-detects it, or if + * your `int`, `long`, or pointer widths are greater than 32-bits. Define this + * to enable 64-bit support if none of the other options already did it for you. + * There can be a significant size and speed impact to enabling 64-bit support + * on small targets, so don't define it if you don't need it. + */ +/* #define UNITY_INCLUDE_64 */ + + +/* *************************** FLOATING POINT TYPES **************************** + * In the embedded world, it's not uncommon for targets to have no support for + * floating point operations at all or to have support that is limited to only + * single precision. We are able to guess integer sizes on the fly because + * integers are always available in at least one size. Floating point, on the + * other hand, is sometimes not available at all. Trying to include `float.h` on + * these platforms would result in an error. This leaves manual configuration as + * the only option. + **************************************************************************** */ + + /* By default, Unity guesses that you will want single precision floating point + * support, but not double precision. It's easy to change either of these using + * the include and exclude options here. You may include neither, just float, + * or both, as suits your needs. + */ +/* #define UNITY_EXCLUDE_FLOAT */ +/* #define UNITY_INCLUDE_DOUBLE */ +/* #define UNITY_EXCLUDE_DOUBLE */ + +/* For features that are enabled, the following floating point options also + * become available. + */ + +/* Unity aims for as small of a footprint as possible and avoids most standard + * library calls (some embedded platforms don't have a standard library!). + * Because of this, its routines for printing integer values are minimalist and + * hand-coded. To keep Unity universal, though, we eventually chose to develop + * our own floating point print routines. Still, the display of floating point + * values during a failure are optional. By default, Unity will print the + * actual results of floating point assertion failures. So a failed assertion + * will produce a message like "Expected 4.0 Was 4.25". If you would like less + * verbose failure messages for floating point assertions, use this option to + * give a failure message `"Values Not Within Delta"` and trim the binary size. + */ +/* #define UNITY_EXCLUDE_FLOAT_PRINT */ + +/* If enabled, Unity assumes you want your `FLOAT` asserts to compare standard C + * floats. If your compiler supports a specialty floating point type, you can + * always override this behavior by using this definition. + * + * Example: + */ +/* #define UNITY_FLOAT_TYPE float16_t */ + +/* If enabled, Unity assumes you want your `DOUBLE` asserts to compare standard + * C doubles. If you would like to change this, you can specify something else + * by using this option. For example, defining `UNITY_DOUBLE_TYPE` to `long + * double` could enable gargantuan floating point types on your 64-bit processor + * instead of the standard `double`. + * + * Example: + */ +/* #define UNITY_DOUBLE_TYPE long double */ + +/* If you look up `UNITY_ASSERT_EQUAL_FLOAT` and `UNITY_ASSERT_EQUAL_DOUBLE` as + * documented in the Unity Assertion Guide, you will learn that they are not + * really asserting that two values are equal but rather that two values are + * "close enough" to equal. "Close enough" is controlled by these precision + * configuration options. If you are working with 32-bit floats and/or 64-bit + * doubles (the normal on most processors), you should have no need to change + * these options. They are both set to give you approximately 1 significant bit + * in either direction. The float precision is 0.00001 while the double is + * 10^-12. For further details on how this works, see the appendix of the Unity + * Assertion Guide. + * + * Example: + */ +/* #define UNITY_FLOAT_PRECISION 0.001f */ +/* #define UNITY_DOUBLE_PRECISION 0.001f */ + + +/* *************************** TOOLSET CUSTOMIZATION *************************** + * In addition to the options listed above, there are a number of other options + * which will come in handy to customize Unity's behavior for your specific + * toolchain. It is possible that you may not need to touch any of these but + * certain platforms, particularly those running in simulators, may need to jump + * through extra hoops to operate properly. These macros will help in those + * situations. + **************************************************************************** */ + +/* By default, Unity prints its results to `stdout` as it runs. This works + * perfectly fine in most situations where you are using a native compiler for + * testing. It works on some simulators as well so long as they have `stdout` + * routed back to the command line. There are times, however, where the + * simulator will lack support for dumping results or you will want to route + * results elsewhere for other reasons. In these cases, you should define the + * `UNITY_OUTPUT_CHAR` macro. This macro accepts a single character at a time + * (as an `int`, since this is the parameter type of the standard C `putchar` + * function most commonly used). You may replace this with whatever function + * call you like. + * + * Example: + * Say you are forced to run your test suite on an embedded processor with no + * `stdout` option. You decide to route your test result output to a custom + * serial `RS232_putc()` function you wrote like thus: + */ +/* #define UNITY_OUTPUT_CHAR(a) RS232_putc(a) */ +/* #define UNITY_OUTPUT_FLUSH() RS232_flush() */ +/* #define UNITY_OUTPUT_START() RS232_config(115200,1,8,0) */ +/* #define UNITY_OUTPUT_COMPLETE() RS232_close() */ + +/* For some targets, Unity can make the otherwise required `setUp()` and + * `tearDown()` functions optional. This is a nice convenience for test writers + * since `setUp` and `tearDown` don't often actually _do_ anything. If you're + * using gcc or clang, this option is automatically defined for you. Other + * compilers can also support this behavior, if they support a C feature called + * weak functions. A weak function is a function that is compiled into your + * executable _unless_ a non-weak version of the same function is defined + * elsewhere. If a non-weak version is found, the weak version is ignored as if + * it never existed. If your compiler supports this feature, you can let Unity + * know by defining `UNITY_SUPPORT_WEAK` as the function attributes that would + * need to be applied to identify a function as weak. If your compiler lacks + * support for weak functions, you will always need to define `setUp` and + * `tearDown` functions (though they can be and often will be just empty). The + * most common options for this feature are: + */ +/* #define UNITY_SUPPORT_WEAK weak */ +/* #define UNITY_SUPPORT_WEAK __attribute__((weak)) */ +/* #define UNITY_NO_WEAK */ + +/* Some compilers require a custom attribute to be assigned to pointers, like + * `near` or `far`. In these cases, you can give Unity a safe default for these + * by defining this option with the attribute you would like. + * + * Example: + */ +/* #define UNITY_PTR_ATTRIBUTE __attribute__((far)) */ +/* #define UNITY_PTR_ATTRIBUTE near */ + +#endif /* UNITY_CONFIG_H */ diff --git a/extras/eclipse/error_parsers.txt b/extras/eclipse/error_parsers.txt new file mode 100644 index 0000000..94e34ff --- /dev/null +++ b/extras/eclipse/error_parsers.txt @@ -0,0 +1,26 @@ +Eclipse error parsers +===================== + +These are a godsend for extracting & quickly navigating to +warnings & error messages from console output. Unforunately +I don't know how to write an Eclipse plugin so you'll have +to add them manually. + +To add a console parser to Eclipse, go to Window --> Preferences +--> C/C++ --> Build --> Settings. Click on the 'Error Parsers' +tab and then click the 'Add...' button. See the table below for +the parser fields to add. + +Eclipse will only parse the console output during a build, so +running your unit tests must be part of your build process. +Either add this to your make/rakefile, or add it as a post- +build step in your Eclipse project settings. + + +Unity unit test error parsers +----------------------------- +Severity Pattern File Line Description +------------------------------------------------------------------------------- +Error (\.+)(.*?):(\d+):(.*?):FAIL: (.*) $2 $3 $5 +Warning (\.+)(.*?):(\d+):(.*?):IGNORE: (.*) $2 $3 $5 +Warning (\.+)(.*?):(\d+):(.*?):IGNORE\s*$ $2 $3 Ignored test diff --git a/extras/fixture/rakefile.rb b/extras/fixture/rakefile.rb new file mode 100644 index 0000000..eb51d02 --- /dev/null +++ b/extras/fixture/rakefile.rb @@ -0,0 +1,48 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +HERE = File.expand_path(File.dirname(__FILE__)) + '/' + +require 'rake' +require 'rake/clean' +require 'rake/testtask' +require HERE + 'rakefile_helper' + +TEMP_DIRS = [ + File.join(HERE, 'build') +] + +TEMP_DIRS.each do |dir| + directory(dir) + CLOBBER.include(dir) +end + +task :prepare_for_tests => TEMP_DIRS + +include RakefileHelpers + +# Load default configuration, for now +DEFAULT_CONFIG_FILE = 'gcc_auto_stdint.yml' +configure_toolchain(DEFAULT_CONFIG_FILE) + +task :unit => [:prepare_for_tests] do + run_tests +end + +desc "Build and test Unity Framework" +task :all => [:clean, :unit] +task :default => [:clobber, :all] +task :ci => [:no_color, :default] +task :cruise => [:no_color, :default] + +desc "Load configuration" +task :config, :config_file do |t, args| + configure_toolchain(args[:config_file]) +end + +task :no_color do + $colour_output = false +end diff --git a/extras/fixture/rakefile_helper.rb b/extras/fixture/rakefile_helper.rb new file mode 100644 index 0000000..85d714f --- /dev/null +++ b/extras/fixture/rakefile_helper.rb @@ -0,0 +1,179 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require 'yaml' +require 'fileutils' +require HERE+'../../auto/unity_test_summary' +require HERE+'../../auto/generate_test_runner' +require HERE+'../../auto/colour_reporter' + +module RakefileHelpers + + C_EXTENSION = '.c' + + def load_configuration(config_file) + unless ($configured) + $cfg_file = HERE+"../../test/targets/#{config_file}" unless (config_file =~ /[\\|\/]/) + $cfg = YAML.load(File.read($cfg_file)) + $colour_output = false unless $cfg['colour'] + $configured = true if (config_file != DEFAULT_CONFIG_FILE) + end + end + + def configure_clean + CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil? + end + + def configure_toolchain(config_file=DEFAULT_CONFIG_FILE) + config_file += '.yml' unless config_file =~ /\.yml$/ + config_file = config_file unless config_file =~ /[\\|\/]/ + load_configuration(config_file) + configure_clean + end + + def tackit(strings) + if strings.is_a?(Array) + result = "\"#{strings.join}\"" + else + result = strings + end + return result + end + + def squash(prefix, items) + result = '' + items.each { |item| result += " #{prefix}#{tackit(item)}" } + return result + end + + def build_compiler_fields + command = tackit($cfg['compiler']['path']) + if $cfg['compiler']['defines']['items'].nil? + defines = '' + else + defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar']) + end + options = squash('', $cfg['compiler']['options']) + includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items']) + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :defines => defines, :options => options, :includes => includes} + end + + def compile(file, defines=[]) + compiler = build_compiler_fields + unity_include = $cfg['compiler']['includes']['prefix']+'../../src' + cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{unity_include} #{file} " + + "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" + + "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}" + execute(cmd_str) + end + + def build_linker_fields + command = tackit($cfg['linker']['path']) + if $cfg['linker']['options'].nil? + options = '' + else + options = squash('', $cfg['linker']['options']) + end + if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?) + includes = '' + else + includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items']) + end + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :options => options, :includes => includes} + end + + def link_it(exe_name, obj_list) + linker = build_linker_fields + cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " + + (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join + + $cfg['linker']['bin_files']['prefix'] + ' ' + + $cfg['linker']['bin_files']['destination'] + + exe_name + $cfg['linker']['bin_files']['extension'] + execute(cmd_str) + end + + def build_simulator_fields + return nil if $cfg['simulator'].nil? + if $cfg['simulator']['path'].nil? + command = '' + else + command = (tackit($cfg['simulator']['path']) + ' ') + end + if $cfg['simulator']['pre_support'].nil? + pre_support = '' + else + pre_support = squash('', $cfg['simulator']['pre_support']) + end + if $cfg['simulator']['post_support'].nil? + post_support = '' + else + post_support = squash('', $cfg['simulator']['post_support']) + end + return {:command => command, :pre_support => pre_support, :post_support => post_support} + end + + def execute(command_string, verbose=true) + report command_string + output = `#{command_string}`.chomp + report(output) if (verbose && !output.nil? && (output.length > 0)) + if ($?.exitstatus != 0) + raise "Command failed. (Returned #{$?.exitstatus})" + end + return output + end + + def report_summary + summary = UnityTestSummary.new + summary.set_root_path(HERE) + results_glob = "#{$cfg['compiler']['build_path']}*.test*" + results_glob.gsub!(/\\/, '/') + results = Dir[results_glob] + summary.set_targets(results) + summary.run + end + + def run_tests + report 'Running Unity system tests...' + + # Tack on TEST define for compiling unit tests + load_configuration($cfg_file) + test_defines = ['TEST'] + $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil? + + # Get a list of all source files needed + src_files = Dir[HERE+'src/*.c'] + src_files += Dir[HERE+'test/*.c'] + src_files += Dir[HERE+'test/main/*.c'] + src_files << '../../src/unity.c' + + # Build object files + src_files.each { |f| compile(f, test_defines) } + obj_list = src_files.map {|f| File.basename(f.ext($cfg['compiler']['object_files']['extension'])) } + + # Link the test executable + test_base = "framework_test" + link_it(test_base, obj_list) + + # Execute unit test and generate results file + simulator = build_simulator_fields + executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension'] + if simulator.nil? + cmd_str = executable + " -v -r" + else + cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}" + end + output = execute(cmd_str) + test_results = $cfg['compiler']['build_path'] + test_base + if output.match(/OK$/m).nil? + test_results += '.testfail' + else + test_results += '.testpass' + end + File.open(test_results, 'w') { |f| f.print output } + end +end diff --git a/extras/fixture/readme.txt b/extras/fixture/readme.txt new file mode 100644 index 0000000..6b9a78c --- /dev/null +++ b/extras/fixture/readme.txt @@ -0,0 +1,9 @@ +Copyright (c) 2010 James Grenning and Contributed to Unity Project + +Unity Project - A Test Framework for C +Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +[Released under MIT License. Please refer to license.txt for details] + +This Framework is an optional add-on to Unity. By including unity_framework.h in place of unity.h, +you may now work with Unity in a manner similar to CppUTest. This framework adds the concepts of +test groups and gives finer control of your tests over the command line. \ No newline at end of file diff --git a/extras/fixture/src/unity_fixture.c b/extras/fixture/src/unity_fixture.c new file mode 100644 index 0000000..3872bd8 --- /dev/null +++ b/extras/fixture/src/unity_fixture.c @@ -0,0 +1,432 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#include "unity_fixture.h" +#include "unity_internals.h" +#include + +struct UNITY_FIXTURE_T UnityFixture; + +/* If you decide to use the function pointer approach. + * Build with -D UNITY_OUTPUT_CHAR=outputChar and include + * int (*outputChar)(int) = putchar; */ + +#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA) +void setUp(void) { /*does nothing*/ } +void tearDown(void) { /*does nothing*/ } +#endif + +static void announceTestRun(unsigned int runNumber) +{ + UnityPrint("Unity test run "); + UnityPrintNumberUnsigned(runNumber+1); + UnityPrint(" of "); + UnityPrintNumberUnsigned(UnityFixture.RepeatCount); + UNITY_PRINT_EOL(); +} + +int UnityMain(int argc, const char* argv[], void (*runAllTests)(void)) +{ + int result = UnityGetCommandLineOptions(argc, argv); + unsigned int r; + if (result != 0) + return result; + + for (r = 0; r < UnityFixture.RepeatCount; r++) + { + UnityBegin(argv[0]); + announceTestRun(r); + runAllTests(); + if (!UnityFixture.Verbose) UNITY_PRINT_EOL(); + UnityEnd(); + } + + return (int)Unity.TestFailures; +} + +static int selected(const char* filter, const char* name) +{ + if (filter == 0) + return 1; + return strstr(name, filter) ? 1 : 0; +} + +static int testSelected(const char* test) +{ + return selected(UnityFixture.NameFilter, test); +} + +static int groupSelected(const char* group) +{ + return selected(UnityFixture.GroupFilter, group); +} + +void UnityTestRunner(unityfunction* setup, + unityfunction* testBody, + unityfunction* teardown, + const char* printableName, + const char* group, + const char* name, + const char* file, + unsigned int line) +{ + if (testSelected(name) && groupSelected(group)) + { + Unity.TestFile = file; + Unity.CurrentTestName = printableName; + Unity.CurrentTestLineNumber = line; + if (!UnityFixture.Verbose) + UNITY_OUTPUT_CHAR('.'); + else + { + UnityPrint(printableName); + #ifndef UNITY_REPEAT_TEST_NAME + Unity.CurrentTestName = NULL; + #endif + } + + Unity.NumberOfTests++; + UnityMalloc_StartTest(); + UnityPointer_Init(); + + if (TEST_PROTECT()) + { + setup(); + testBody(); + } + if (TEST_PROTECT()) + { + teardown(); + } + if (TEST_PROTECT()) + { + UnityPointer_UndoAllSets(); + if (!Unity.CurrentTestFailed) + UnityMalloc_EndTest(); + } + UnityConcludeFixtureTest(); + } +} + +void UnityIgnoreTest(const char* printableName, const char* group, const char* name) +{ + if (testSelected(name) && groupSelected(group)) + { + Unity.NumberOfTests++; + Unity.TestIgnores++; + if (!UnityFixture.Verbose) + UNITY_OUTPUT_CHAR('!'); + else + { + UnityPrint(printableName); + UNITY_PRINT_EOL(); + } + } +} + + +/*------------------------------------------------- */ +/* Malloc and free stuff */ +#define MALLOC_DONT_FAIL -1 +static int malloc_count; +static int malloc_fail_countdown = MALLOC_DONT_FAIL; + +void UnityMalloc_StartTest(void) +{ + malloc_count = 0; + malloc_fail_countdown = MALLOC_DONT_FAIL; +} + +void UnityMalloc_EndTest(void) +{ + malloc_fail_countdown = MALLOC_DONT_FAIL; + if (malloc_count != 0) + { + UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "This test leaks!"); + } +} + +void UnityMalloc_MakeMallocFailAfterCount(int countdown) +{ + malloc_fail_countdown = countdown; +} + +/* These definitions are always included from unity_fixture_malloc_overrides.h */ +/* We undef to use them or avoid conflict with per the C standard */ +#undef malloc +#undef free +#undef calloc +#undef realloc + +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC +static unsigned char unity_heap[UNITY_INTERNAL_HEAP_SIZE_BYTES]; +static size_t heap_index; +#else +#include +#endif + +typedef struct GuardBytes +{ + size_t size; + size_t guard_space; +} Guard; + + +static const char end[] = "END"; + +void* unity_malloc(size_t size) +{ + char* mem; + Guard* guard; + size_t total_size = size + sizeof(Guard) + sizeof(end); + + if (malloc_fail_countdown != MALLOC_DONT_FAIL) + { + if (malloc_fail_countdown == 0) + return NULL; + malloc_fail_countdown--; + } + + if (size == 0) return NULL; +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC + if (heap_index + total_size > UNITY_INTERNAL_HEAP_SIZE_BYTES) + { + guard = NULL; + } + else + { + guard = (Guard*)&unity_heap[heap_index]; + heap_index += total_size; + } +#else + guard = (Guard*)UNITY_FIXTURE_MALLOC(total_size); +#endif + if (guard == NULL) return NULL; + malloc_count++; + guard->size = size; + guard->guard_space = 0; + mem = (char*)&(guard[1]); + memcpy(&mem[size], end, sizeof(end)); + + return (void*)mem; +} + +static int isOverrun(void* mem) +{ + Guard* guard = (Guard*)mem; + char* memAsChar = (char*)mem; + guard--; + + return guard->guard_space != 0 || strcmp(&memAsChar[guard->size], end) != 0; +} + +static void release_memory(void* mem) +{ + Guard* guard = (Guard*)mem; + guard--; + + malloc_count--; +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC + if (mem == unity_heap + heap_index - guard->size - sizeof(end)) + { + heap_index -= (guard->size + sizeof(Guard) + sizeof(end)); + } +#else + UNITY_FIXTURE_FREE(guard); +#endif +} + +void unity_free(void* mem) +{ + int overrun; + + if (mem == NULL) + { + return; + } + + overrun = isOverrun(mem); + release_memory(mem); + if (overrun) + { + UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during free()"); + } +} + +void* unity_calloc(size_t num, size_t size) +{ + void* mem = unity_malloc(num * size); + if (mem == NULL) return NULL; + memset(mem, 0, num * size); + return mem; +} + +void* unity_realloc(void* oldMem, size_t size) +{ + Guard* guard = (Guard*)oldMem; + void* newMem; + + if (oldMem == NULL) return unity_malloc(size); + + guard--; + if (isOverrun(oldMem)) + { + release_memory(oldMem); + UNITY_TEST_FAIL(Unity.CurrentTestLineNumber, "Buffer overrun detected during realloc()"); + } + + if (size == 0) + { + release_memory(oldMem); + return NULL; + } + + if (guard->size >= size) return oldMem; + +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC /* Optimization if memory is expandable */ + if (oldMem == unity_heap + heap_index - guard->size - sizeof(end) && + heap_index + size - guard->size <= UNITY_INTERNAL_HEAP_SIZE_BYTES) + { + release_memory(oldMem); /* Not thread-safe, like unity_heap generally */ + return unity_malloc(size); /* No memcpy since data is in place */ + } +#endif + newMem = unity_malloc(size); + if (newMem == NULL) return NULL; /* Do not release old memory */ + memcpy(newMem, oldMem, guard->size); + release_memory(oldMem); + return newMem; +} + + +/*-------------------------------------------------------- */ +/*Automatic pointer restoration functions */ +struct PointerPair +{ + void** pointer; + void* old_value; +}; + +static struct PointerPair pointer_store[UNITY_MAX_POINTERS]; +static int pointer_index = 0; + +void UnityPointer_Init(void) +{ + pointer_index = 0; +} + +void UnityPointer_Set(void** pointer, void* newValue, UNITY_LINE_TYPE line) +{ + if (pointer_index >= UNITY_MAX_POINTERS) + { + UNITY_TEST_FAIL(line, "Too many pointers set"); + } + else + { + pointer_store[pointer_index].pointer = pointer; + pointer_store[pointer_index].old_value = *pointer; + *pointer = newValue; + pointer_index++; + } +} + +void UnityPointer_UndoAllSets(void) +{ + while (pointer_index > 0) + { + pointer_index--; + *(pointer_store[pointer_index].pointer) = + pointer_store[pointer_index].old_value; + } +} + +int UnityGetCommandLineOptions(int argc, const char* argv[]) +{ + int i; + UnityFixture.Verbose = 0; + UnityFixture.GroupFilter = 0; + UnityFixture.NameFilter = 0; + UnityFixture.RepeatCount = 1; + + if (argc == 1) + return 0; + + for (i = 1; i < argc; ) + { + if (strcmp(argv[i], "-v") == 0) + { + UnityFixture.Verbose = 1; + i++; + } + else if (strcmp(argv[i], "-g") == 0) + { + i++; + if (i >= argc) + return 1; + UnityFixture.GroupFilter = argv[i]; + i++; + } + else if (strcmp(argv[i], "-n") == 0) + { + i++; + if (i >= argc) + return 1; + UnityFixture.NameFilter = argv[i]; + i++; + } + else if (strcmp(argv[i], "-r") == 0) + { + UnityFixture.RepeatCount = 2; + i++; + if (i < argc) + { + if (*(argv[i]) >= '0' && *(argv[i]) <= '9') + { + unsigned int digit = 0; + UnityFixture.RepeatCount = 0; + while (argv[i][digit] >= '0' && argv[i][digit] <= '9') + { + UnityFixture.RepeatCount *= 10; + UnityFixture.RepeatCount += (unsigned int)argv[i][digit++] - '0'; + } + i++; + } + } + } + else + { + /* ignore unknown parameter */ + i++; + } + } + return 0; +} + +void UnityConcludeFixtureTest(void) +{ + if (Unity.CurrentTestIgnored) + { + Unity.TestIgnores++; + UNITY_PRINT_EOL(); + } + else if (!Unity.CurrentTestFailed) + { + if (UnityFixture.Verbose) + { + UnityPrint(" PASS"); + UNITY_PRINT_EOL(); + } + } + else /* Unity.CurrentTestFailed */ + { + Unity.TestFailures++; + UNITY_PRINT_EOL(); + } + + Unity.CurrentTestFailed = 0; + Unity.CurrentTestIgnored = 0; +} diff --git a/extras/fixture/src/unity_fixture.h b/extras/fixture/src/unity_fixture.h new file mode 100644 index 0000000..6f8d623 --- /dev/null +++ b/extras/fixture/src/unity_fixture.h @@ -0,0 +1,83 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#ifndef UNITY_FIXTURE_H_ +#define UNITY_FIXTURE_H_ + +#include "unity.h" +#include "unity_internals.h" +#include "unity_fixture_malloc_overrides.h" +#include "unity_fixture_internals.h" + +int UnityMain(int argc, const char* argv[], void (*runAllTests)(void)); + + +#define TEST_GROUP(group)\ + static const char* TEST_GROUP_##group = #group + +#define TEST_SETUP(group) void TEST_##group##_SETUP(void);\ + void TEST_##group##_SETUP(void) + +#define TEST_TEAR_DOWN(group) void TEST_##group##_TEAR_DOWN(void);\ + void TEST_##group##_TEAR_DOWN(void) + + +#define TEST(group, name) \ + void TEST_##group##_##name##_(void);\ + void TEST_##group##_##name##_run(void);\ + void TEST_##group##_##name##_run(void)\ + {\ + UnityTestRunner(TEST_##group##_SETUP,\ + TEST_##group##_##name##_,\ + TEST_##group##_TEAR_DOWN,\ + "TEST(" #group ", " #name ")",\ + TEST_GROUP_##group, #name,\ + __FILE__, __LINE__);\ + }\ + void TEST_##group##_##name##_(void) + +#define IGNORE_TEST(group, name) \ + void TEST_##group##_##name##_(void);\ + void TEST_##group##_##name##_run(void);\ + void TEST_##group##_##name##_run(void)\ + {\ + UnityIgnoreTest("IGNORE_TEST(" #group ", " #name ")", TEST_GROUP_##group, #name);\ + }\ + void TEST_##group##_##name##_(void) + +/* Call this for each test, insider the group runner */ +#define RUN_TEST_CASE(group, name) \ + { void TEST_##group##_##name##_run(void);\ + TEST_##group##_##name##_run(); } + +/* This goes at the bottom of each test file or in a separate c file */ +#define TEST_GROUP_RUNNER(group)\ + void TEST_##group##_GROUP_RUNNER(void);\ + void TEST_##group##_GROUP_RUNNER(void) + +/* Call this from main */ +#define RUN_TEST_GROUP(group)\ + { void TEST_##group##_GROUP_RUNNER(void);\ + TEST_##group##_GROUP_RUNNER(); } + +/* CppUTest Compatibility Macros */ +#ifndef UNITY_EXCLUDE_CPPUTEST_ASSERTS +/* Sets a pointer and automatically restores it to its old value after teardown */ +#define UT_PTR_SET(ptr, newPointerValue) UnityPointer_Set((void**)&(ptr), (void*)(newPointerValue), __LINE__) +#define TEST_ASSERT_POINTERS_EQUAL(expected, actual) TEST_ASSERT_EQUAL_PTR((expected), (actual)) +#define TEST_ASSERT_BYTES_EQUAL(expected, actual) TEST_ASSERT_EQUAL_HEX8(0xff & (expected), 0xff & (actual)) +#define FAIL(message) TEST_FAIL_MESSAGE((message)) +#define CHECK(condition) TEST_ASSERT_TRUE((condition)) +#define LONGS_EQUAL(expected, actual) TEST_ASSERT_EQUAL_INT((expected), (actual)) +#define STRCMP_EQUAL(expected, actual) TEST_ASSERT_EQUAL_STRING((expected), (actual)) +#define DOUBLES_EQUAL(expected, actual, delta) TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual)) +#endif + +/* You must compile with malloc replacement, as defined in unity_fixture_malloc_overrides.h */ +void UnityMalloc_MakeMallocFailAfterCount(int count); + +#endif /* UNITY_FIXTURE_H_ */ diff --git a/extras/fixture/src/unity_fixture_internals.h b/extras/fixture/src/unity_fixture_internals.h new file mode 100644 index 0000000..aa0d9e7 --- /dev/null +++ b/extras/fixture/src/unity_fixture_internals.h @@ -0,0 +1,51 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#ifndef UNITY_FIXTURE_INTERNALS_H_ +#define UNITY_FIXTURE_INTERNALS_H_ + +#ifdef __cplusplus +extern "C" +{ +#endif + +struct UNITY_FIXTURE_T +{ + int Verbose; + unsigned int RepeatCount; + const char* NameFilter; + const char* GroupFilter; +}; +extern struct UNITY_FIXTURE_T UnityFixture; + +typedef void unityfunction(void); +void UnityTestRunner(unityfunction* setup, + unityfunction* body, + unityfunction* teardown, + const char* printableName, + const char* group, + const char* name, + const char* file, unsigned int line); + +void UnityIgnoreTest(const char* printableName, const char* group, const char* name); +void UnityMalloc_StartTest(void); +void UnityMalloc_EndTest(void); +int UnityGetCommandLineOptions(int argc, const char* argv[]); +void UnityConcludeFixtureTest(void); + +void UnityPointer_Set(void** ptr, void* newValue, UNITY_LINE_TYPE line); +void UnityPointer_UndoAllSets(void); +void UnityPointer_Init(void); +#ifndef UNITY_MAX_POINTERS +#define UNITY_MAX_POINTERS 5 +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* UNITY_FIXTURE_INTERNALS_H_ */ diff --git a/extras/fixture/src/unity_fixture_malloc_overrides.h b/extras/fixture/src/unity_fixture_malloc_overrides.h new file mode 100644 index 0000000..1b176e7 --- /dev/null +++ b/extras/fixture/src/unity_fixture_malloc_overrides.h @@ -0,0 +1,46 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#ifndef UNITY_FIXTURE_MALLOC_OVERRIDES_H_ +#define UNITY_FIXTURE_MALLOC_OVERRIDES_H_ + +#include + +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC +/* Define this macro to remove the use of stdlib.h, malloc, and free. + * Many embedded systems do not have a heap or malloc/free by default. + * This internal unity_malloc() provides allocated memory deterministically from + * the end of an array only, unity_free() only releases from end-of-array, + * blocks are not coalesced, and memory not freed in LIFO order is stranded. */ + #ifndef UNITY_INTERNAL_HEAP_SIZE_BYTES + #define UNITY_INTERNAL_HEAP_SIZE_BYTES 256 + #endif +#endif + +/* These functions are used by the Unity Fixture to allocate and release memory + * on the heap and can be overridden with platform-specific implementations. + * For example, when using FreeRTOS UNITY_FIXTURE_MALLOC becomes pvPortMalloc() + * and UNITY_FIXTURE_FREE becomes vPortFree(). */ +#if !defined(UNITY_FIXTURE_MALLOC) || !defined(UNITY_FIXTURE_FREE) + #define UNITY_FIXTURE_MALLOC(size) malloc(size) + #define UNITY_FIXTURE_FREE(ptr) free(ptr) +#else + extern void* UNITY_FIXTURE_MALLOC(size_t size); + extern void UNITY_FIXTURE_FREE(void* ptr); +#endif + +#define malloc unity_malloc +#define calloc unity_calloc +#define realloc unity_realloc +#define free unity_free + +void* unity_malloc(size_t size); +void* unity_calloc(size_t num, size_t size); +void* unity_realloc(void * oldMem, size_t size); +void unity_free(void * mem); + +#endif /* UNITY_FIXTURE_MALLOC_OVERRIDES_H_ */ diff --git a/extras/fixture/test/Makefile b/extras/fixture/test/Makefile new file mode 100644 index 0000000..80e124f --- /dev/null +++ b/extras/fixture/test/Makefile @@ -0,0 +1,74 @@ +CC = gcc +ifeq ($(shell uname -s), Darwin) +CC = clang +endif +#DEBUG = -O0 -g +CFLAGS += -std=c99 -pedantic -Wall -Wextra -Werror +CFLAGS += $(DEBUG) +DEFINES = -D UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar +SRC = ../src/unity_fixture.c \ + ../../../src/unity.c \ + unity_fixture_Test.c \ + unity_fixture_TestRunner.c \ + unity_output_Spy.c \ + main/AllTests.c + +INC_DIR = -I../src -I../../../src/ +BUILD_DIR = ../build +TARGET = ../build/fixture_tests.exe + +all: default noStdlibMalloc 32bits + +default: $(BUILD_DIR) + $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_SUPPORT_64 + @ echo "default build" + ./$(TARGET) + +32bits: $(BUILD_DIR) + $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -m32 + @ echo "32bits build" + ./$(TARGET) + +noStdlibMalloc: $(BUILD_DIR) + $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC + @ echo "build with noStdlibMalloc" + ./$(TARGET) + +C89: CFLAGS += -D UNITY_EXCLUDE_STDINT_H # C89 did not have type 'long long', +C89: $(BUILD_DIR) + $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -std=c89 && ./$(TARGET) + $(CC) $(CFLAGS) $(DEFINES) $(SRC) $(INC_DIR) -o $(TARGET) -D UNITY_EXCLUDE_STDLIB_MALLOC -std=c89 + ./$(TARGET) + +$(BUILD_DIR): + mkdir -p $(BUILD_DIR) + +clean: + rm -f $(TARGET) $(BUILD_DIR)/*.gc* + +cov: $(BUILD_DIR) + cd $(BUILD_DIR) && \ + $(CC) $(DEFINES) $(foreach i, $(SRC), ../test/$(i)) $(INC_DIR) -o $(TARGET) -fprofile-arcs -ftest-coverage + rm -f $(BUILD_DIR)/*.gcda + ./$(TARGET) > /dev/null ; ./$(TARGET) -v > /dev/null + cd $(BUILD_DIR) && \ + gcov unity_fixture.c | head -3 + grep '###' $(BUILD_DIR)/unity_fixture.c.gcov -C2 || true # Show uncovered lines + +# These extended flags DO get included before any target build runs +CFLAGS += -Wbad-function-cast +CFLAGS += -Wcast-qual +CFLAGS += -Wconversion +CFLAGS += -Wformat=2 +CFLAGS += -Wmissing-prototypes +CFLAGS += -Wold-style-definition +CFLAGS += -Wpointer-arith +CFLAGS += -Wshadow +CFLAGS += -Wstrict-overflow=5 +CFLAGS += -Wstrict-prototypes +CFLAGS += -Wswitch-default +CFLAGS += -Wundef +CFLAGS += -Wno-error=undef # Warning only, this should not stop the build +CFLAGS += -Wunreachable-code +CFLAGS += -Wunused +CFLAGS += -fstrict-aliasing diff --git a/extras/fixture/test/main/AllTests.c b/extras/fixture/test/main/AllTests.c new file mode 100644 index 0000000..e30dd85 --- /dev/null +++ b/extras/fixture/test/main/AllTests.c @@ -0,0 +1,22 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#include "unity_fixture.h" + +static void runAllTests(void) +{ + RUN_TEST_GROUP(UnityFixture); + RUN_TEST_GROUP(UnityCommandOptions); + RUN_TEST_GROUP(LeakDetection); + RUN_TEST_GROUP(InternalMalloc); +} + +int main(int argc, const char* argv[]) +{ + return UnityMain(argc, argv, runAllTests); +} + diff --git a/extras/fixture/test/template_fixture_tests.c b/extras/fixture/test/template_fixture_tests.c new file mode 100644 index 0000000..18bbb89 --- /dev/null +++ b/extras/fixture/test/template_fixture_tests.c @@ -0,0 +1,39 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#include "unity_fixture.h" + +static int data = -1; + +TEST_GROUP(mygroup); + +TEST_SETUP(mygroup) +{ + data = 0; +} + +TEST_TEAR_DOWN(mygroup) +{ + data = -1; +} + +TEST(mygroup, test1) +{ + TEST_ASSERT_EQUAL_INT(0, data); +} + +TEST(mygroup, test2) +{ + TEST_ASSERT_EQUAL_INT(0, data); + data = 5; +} + +TEST(mygroup, test3) +{ + data = 7; + TEST_ASSERT_EQUAL_INT(7, data); +} diff --git a/extras/fixture/test/unity_fixture_Test.c b/extras/fixture/test/unity_fixture_Test.c new file mode 100644 index 0000000..a842b08 --- /dev/null +++ b/extras/fixture/test/unity_fixture_Test.c @@ -0,0 +1,543 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#include "unity_fixture.h" +#include "unity_output_Spy.h" +#include +#include + +TEST_GROUP(UnityFixture); + +TEST_SETUP(UnityFixture) +{ +} + +TEST_TEAR_DOWN(UnityFixture) +{ +} + +static int* pointer1 = 0; +static int* pointer2 = (int*)2; +static int* pointer3 = (int*)3; +static int int1; +static int int2; +static int int3; +static int int4; + +TEST(UnityFixture, PointerSetting) +{ + TEST_ASSERT_POINTERS_EQUAL(pointer1, 0); + UT_PTR_SET(pointer1, &int1); + UT_PTR_SET(pointer2, &int2); + UT_PTR_SET(pointer3, &int3); + TEST_ASSERT_POINTERS_EQUAL(pointer1, &int1); + TEST_ASSERT_POINTERS_EQUAL(pointer2, &int2); + TEST_ASSERT_POINTERS_EQUAL(pointer3, &int3); + UT_PTR_SET(pointer1, &int4); + UnityPointer_UndoAllSets(); + TEST_ASSERT_POINTERS_EQUAL(pointer1, 0); + TEST_ASSERT_POINTERS_EQUAL(pointer2, (int*)2); + TEST_ASSERT_POINTERS_EQUAL(pointer3, (int*)3); +} + +TEST(UnityFixture, ForceMallocFail) +{ + void* m; + void* mfails; + UnityMalloc_MakeMallocFailAfterCount(1); + m = malloc(10); + CHECK(m); + mfails = malloc(10); + TEST_ASSERT_POINTERS_EQUAL(0, mfails); + free(m); +} + +TEST(UnityFixture, ReallocSmallerIsUnchanged) +{ + void* m1 = malloc(10); + void* m2 = realloc(m1, 5); + TEST_ASSERT_POINTERS_EQUAL(m1, m2); + free(m2); +} + +TEST(UnityFixture, ReallocSameIsUnchanged) +{ + void* m1 = malloc(10); + void* m2 = realloc(m1, 10); + TEST_ASSERT_POINTERS_EQUAL(m1, m2); + free(m2); +} + +TEST(UnityFixture, ReallocLargerNeeded) +{ + void* m1 = malloc(10); + void* m2; + CHECK(m1); + strcpy((char*)m1, "123456789"); + m2 = realloc(m1, 15); + /* CHECK(m1 != m2); //Depends on implementation */ + STRCMP_EQUAL("123456789", m2); + free(m2); +} + +TEST(UnityFixture, ReallocNullPointerIsLikeMalloc) +{ + void* m = realloc(0, 15); + CHECK(m != 0); + free(m); +} + +TEST(UnityFixture, ReallocSizeZeroFreesMemAndReturnsNullPointer) +{ + void* m1 = malloc(10); + void* m2 = realloc(m1, 0); + TEST_ASSERT_POINTERS_EQUAL(0, m2); +} + +TEST(UnityFixture, CallocFillsWithZero) +{ + void* m = calloc(3, sizeof(char)); + char* s = (char*)m; + CHECK(m); + TEST_ASSERT_BYTES_EQUAL(0, s[0]); + TEST_ASSERT_BYTES_EQUAL(0, s[1]); + TEST_ASSERT_BYTES_EQUAL(0, s[2]); + free(m); +} + +static char *p1; +static char *p2; + +TEST(UnityFixture, PointerSet) +{ + char c1; + char c2; + char newC1; + char newC2; + p1 = &c1; + p2 = &c2; + + UnityPointer_Init(); + UT_PTR_SET(p1, &newC1); + UT_PTR_SET(p2, &newC2); + TEST_ASSERT_POINTERS_EQUAL(&newC1, p1); + TEST_ASSERT_POINTERS_EQUAL(&newC2, p2); + UnityPointer_UndoAllSets(); + TEST_ASSERT_POINTERS_EQUAL(&c1, p1); + TEST_ASSERT_POINTERS_EQUAL(&c2, p2); +} + +TEST(UnityFixture, FreeNULLSafety) +{ + free(NULL); +} + +TEST(UnityFixture, ConcludeTestIncrementsFailCount) +{ + UNITY_UINT savedFails = Unity.TestFailures; + UNITY_UINT savedIgnores = Unity.TestIgnores; + UnityOutputCharSpy_Enable(1); + Unity.CurrentTestFailed = 1; + UnityConcludeFixtureTest(); /* Resets TestFailed for this test to pass */ + Unity.CurrentTestIgnored = 1; + UnityConcludeFixtureTest(); /* Resets TestIgnored */ + UnityOutputCharSpy_Enable(0); + TEST_ASSERT_EQUAL(savedFails + 1, Unity.TestFailures); + TEST_ASSERT_EQUAL(savedIgnores + 1, Unity.TestIgnores); + Unity.TestFailures = savedFails; + Unity.TestIgnores = savedIgnores; +} + +/*------------------------------------------------------------ */ + +TEST_GROUP(UnityCommandOptions); + +static int savedVerbose; +static unsigned int savedRepeat; +static const char* savedName; +static const char* savedGroup; + +TEST_SETUP(UnityCommandOptions) +{ + savedVerbose = UnityFixture.Verbose; + savedRepeat = UnityFixture.RepeatCount; + savedName = UnityFixture.NameFilter; + savedGroup = UnityFixture.GroupFilter; +} + +TEST_TEAR_DOWN(UnityCommandOptions) +{ + UnityFixture.Verbose = savedVerbose; + UnityFixture.RepeatCount= savedRepeat; + UnityFixture.NameFilter = savedName; + UnityFixture.GroupFilter = savedGroup; +} + + +static const char* noOptions[] = { + "testrunner.exe" +}; + +TEST(UnityCommandOptions, DefaultOptions) +{ + UnityGetCommandLineOptions(1, noOptions); + TEST_ASSERT_EQUAL(0, UnityFixture.Verbose); + TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.GroupFilter); + TEST_ASSERT_POINTERS_EQUAL(0, UnityFixture.NameFilter); + TEST_ASSERT_EQUAL(1, UnityFixture.RepeatCount); +} + +static const char* verbose[] = { + "testrunner.exe", + "-v" +}; + +TEST(UnityCommandOptions, OptionVerbose) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, verbose)); + TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); +} + +static const char* group[] = { + "testrunner.exe", + "-g", "groupname" +}; + +TEST(UnityCommandOptions, OptionSelectTestByGroup) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, group)); + STRCMP_EQUAL("groupname", UnityFixture.GroupFilter); +} + +static const char* name[] = { + "testrunner.exe", + "-n", "testname" +}; + +TEST(UnityCommandOptions, OptionSelectTestByName) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, name)); + STRCMP_EQUAL("testname", UnityFixture.NameFilter); +} + +static const char* repeat[] = { + "testrunner.exe", + "-r", "99" +}; + +TEST(UnityCommandOptions, OptionSelectRepeatTestsDefaultCount) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(2, repeat)); + TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount); +} + +TEST(UnityCommandOptions, OptionSelectRepeatTestsSpecificCount) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(3, repeat)); + TEST_ASSERT_EQUAL(99, UnityFixture.RepeatCount); +} + +static const char* multiple[] = { + "testrunner.exe", + "-v", + "-g", "groupname", + "-n", "testname", + "-r", "98" +}; + +TEST(UnityCommandOptions, MultipleOptions) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(8, multiple)); + TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); + STRCMP_EQUAL("groupname", UnityFixture.GroupFilter); + STRCMP_EQUAL("testname", UnityFixture.NameFilter); + TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount); +} + +static const char* dashRNotLast[] = { + "testrunner.exe", + "-v", + "-g", "gggg", + "-r", + "-n", "tttt", +}; + +TEST(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(7, dashRNotLast)); + TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); + STRCMP_EQUAL("gggg", UnityFixture.GroupFilter); + STRCMP_EQUAL("tttt", UnityFixture.NameFilter); + TEST_ASSERT_EQUAL(2, UnityFixture.RepeatCount); +} + +static const char* unknownCommand[] = { + "testrunner.exe", + "-v", + "-g", "groupname", + "-n", "testname", + "-r", "98", + "-z" +}; +TEST(UnityCommandOptions, UnknownCommandIsIgnored) +{ + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(9, unknownCommand)); + TEST_ASSERT_EQUAL(1, UnityFixture.Verbose); + STRCMP_EQUAL("groupname", UnityFixture.GroupFilter); + STRCMP_EQUAL("testname", UnityFixture.NameFilter); + TEST_ASSERT_EQUAL(98, UnityFixture.RepeatCount); +} + +TEST(UnityCommandOptions, GroupOrNameFilterWithoutStringFails) +{ + TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(3, unknownCommand)); + TEST_ASSERT_EQUAL(1, UnityGetCommandLineOptions(5, unknownCommand)); + TEST_ASSERT_EQUAL(1, UnityMain(3, unknownCommand, NULL)); +} + +TEST(UnityCommandOptions, GroupFilterReallyFilters) +{ + UNITY_UINT saved = Unity.NumberOfTests; + TEST_ASSERT_EQUAL(0, UnityGetCommandLineOptions(4, unknownCommand)); + UnityIgnoreTest(NULL, "non-matching", NULL); + TEST_ASSERT_EQUAL(saved, Unity.NumberOfTests); +} + +IGNORE_TEST(UnityCommandOptions, TestShouldBeIgnored) +{ + TEST_FAIL_MESSAGE("This test should not run!"); +} + +/*------------------------------------------------------------ */ + +TEST_GROUP(LeakDetection); + +TEST_SETUP(LeakDetection) +{ +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC + UnityOutputCharSpy_Create(200); +#else + UnityOutputCharSpy_Create(1000); +#endif +} + +TEST_TEAR_DOWN(LeakDetection) +{ + UnityOutputCharSpy_Destroy(); +} + +#define EXPECT_ABORT_BEGIN \ + { \ + jmp_buf TestAbortFrame; \ + memcpy(TestAbortFrame, Unity.AbortFrame, sizeof(jmp_buf)); \ + if (TEST_PROTECT()) \ + { + +#define EXPECT_ABORT_END \ + } \ + memcpy(Unity.AbortFrame, TestAbortFrame, sizeof(jmp_buf)); \ + } + +/* This tricky set of defines lets us see if we are using the Spy, returns 1 if true */ +#ifdef __STDC_VERSION__ + +#if __STDC_VERSION__ >= 199901L +#define USING_SPY_AS(a) EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0) +#define ASSIGN_VALUE(a) VAL_##a +#define VAL_UnityOutputCharSpy_OutputChar 0, 1 +#define EXPAND_AND_USE_2ND(a, b) SECOND_PARAM(a, b, throwaway) +#define SECOND_PARAM(a, b, ...) b +#if USING_SPY_AS(UNITY_OUTPUT_CHAR) + #define USING_OUTPUT_SPY /* UNITY_OUTPUT_CHAR = UnityOutputCharSpy_OutputChar */ +#endif +#endif /* >= 199901 */ + +#else /* __STDC_VERSION__ else */ +#define UnityOutputCharSpy_OutputChar 42 +#if UNITY_OUTPUT_CHAR == UnityOutputCharSpy_OutputChar /* Works if no -Wundef -Werror */ + #define USING_OUTPUT_SPY +#endif +#undef UnityOutputCharSpy_OutputChar +#endif /* __STDC_VERSION__ */ + +TEST(LeakDetection, DetectsLeak) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE_MESSAGE("Build with '-D UNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar' to enable tests"); +#else + void* m = malloc(10); + TEST_ASSERT_NOT_NULL(m); + UnityOutputCharSpy_Enable(1); + EXPECT_ABORT_BEGIN + UnityMalloc_EndTest(); + EXPECT_ABORT_END + UnityOutputCharSpy_Enable(0); + Unity.CurrentTestFailed = 0; + CHECK(strstr(UnityOutputCharSpy_Get(), "This test leaks!")); + free(m); +#endif +} + +TEST(LeakDetection, BufferOverrunFoundDuringFree) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + void* m = malloc(10); + char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); + s[10] = (char)0xFF; + UnityOutputCharSpy_Enable(1); + EXPECT_ABORT_BEGIN + free(m); + EXPECT_ABORT_END + UnityOutputCharSpy_Enable(0); + Unity.CurrentTestFailed = 0; + CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()")); +#endif +} + +TEST(LeakDetection, BufferOverrunFoundDuringRealloc) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + void* m = malloc(10); + char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); + s[10] = (char)0xFF; + UnityOutputCharSpy_Enable(1); + EXPECT_ABORT_BEGIN + m = realloc(m, 100); + EXPECT_ABORT_END + UnityOutputCharSpy_Enable(0); + Unity.CurrentTestFailed = 0; + CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()")); +#endif +} + +TEST(LeakDetection, BufferGuardWriteFoundDuringFree) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + void* m = malloc(10); + char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); + s[-1] = (char)0x00; /* Will not detect 0 */ + s[-2] = (char)0x01; + UnityOutputCharSpy_Enable(1); + EXPECT_ABORT_BEGIN + free(m); + EXPECT_ABORT_END + UnityOutputCharSpy_Enable(0); + Unity.CurrentTestFailed = 0; + CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during free()")); +#endif +} + +TEST(LeakDetection, BufferGuardWriteFoundDuringRealloc) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + void* m = malloc(10); + char* s = (char*)m; + TEST_ASSERT_NOT_NULL(m); + s[-1] = (char)0x0A; + UnityOutputCharSpy_Enable(1); + EXPECT_ABORT_BEGIN + m = realloc(m, 100); + EXPECT_ABORT_END + UnityOutputCharSpy_Enable(0); + Unity.CurrentTestFailed = 0; + CHECK(strstr(UnityOutputCharSpy_Get(), "Buffer overrun detected during realloc()")); +#endif +} + +TEST(LeakDetection, PointerSettingMax) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + int i; + for (i = 0; i < UNITY_MAX_POINTERS; i++) UT_PTR_SET(pointer1, &int1); + UnityOutputCharSpy_Enable(1); + EXPECT_ABORT_BEGIN + UT_PTR_SET(pointer1, &int1); + EXPECT_ABORT_END + UnityOutputCharSpy_Enable(0); + Unity.CurrentTestFailed = 0; + CHECK(strstr(UnityOutputCharSpy_Get(), "Too many pointers set")); +#endif +} + +/*------------------------------------------------------------ */ + +TEST_GROUP(InternalMalloc); +#define TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(first_mem_ptr, ptr) \ + ptr = malloc(10); free(ptr); \ + TEST_ASSERT_EQUAL_PTR_MESSAGE(first_mem_ptr, ptr, "Memory was stranded, free in LIFO order"); + + +TEST_SETUP(InternalMalloc) { } +TEST_TEAR_DOWN(InternalMalloc) { } + +TEST(InternalMalloc, MallocPastBufferFails) +{ +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC + void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); + void* n = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2); + free(m); + TEST_ASSERT_NOT_NULL(m); + TEST_ASSERT_NULL(n); + TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n); +#endif +} + +TEST(InternalMalloc, CallocPastBufferFails) +{ +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC + void* m = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); + void* n = calloc(1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2); + free(m); + TEST_ASSERT_NOT_NULL(m); + TEST_ASSERT_NULL(n); + TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n); +#endif +} + +TEST(InternalMalloc, MallocThenReallocGrowsMemoryInPlace) +{ +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC + void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); + void* n = realloc(m, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 9); + free(n); + TEST_ASSERT_NOT_NULL(m); + TEST_ASSERT_EQUAL(m, n); + TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n); +#endif +} + +TEST(InternalMalloc, ReallocFailDoesNotFreeMem) +{ +#ifdef UNITY_EXCLUDE_STDLIB_MALLOC + void* m = malloc(UNITY_INTERNAL_HEAP_SIZE_BYTES/2); + void* n1 = malloc(10); + void* out_of_mem = realloc(n1, UNITY_INTERNAL_HEAP_SIZE_BYTES/2 + 1); + void* n2 = malloc(10); + + free(n2); + if (out_of_mem == NULL) free(n1); + free(m); + + TEST_ASSERT_NOT_NULL(m); /* Got a real memory location */ + TEST_ASSERT_NULL(out_of_mem); /* The realloc should have failed */ + TEST_ASSERT_NOT_EQUAL(n2, n1); /* If n1 != n2 then realloc did not free n1 */ + TEST_ASSERT_MEMORY_ALL_FREE_LIFO_ORDER(m, n2); +#endif +} diff --git a/extras/fixture/test/unity_fixture_TestRunner.c b/extras/fixture/test/unity_fixture_TestRunner.c new file mode 100644 index 0000000..e8713e1 --- /dev/null +++ b/extras/fixture/test/unity_fixture_TestRunner.c @@ -0,0 +1,57 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#include "unity_fixture.h" + +TEST_GROUP_RUNNER(UnityFixture) +{ + RUN_TEST_CASE(UnityFixture, PointerSetting); + RUN_TEST_CASE(UnityFixture, ForceMallocFail); + RUN_TEST_CASE(UnityFixture, ReallocSmallerIsUnchanged); + RUN_TEST_CASE(UnityFixture, ReallocSameIsUnchanged); + RUN_TEST_CASE(UnityFixture, ReallocLargerNeeded); + RUN_TEST_CASE(UnityFixture, ReallocNullPointerIsLikeMalloc); + RUN_TEST_CASE(UnityFixture, ReallocSizeZeroFreesMemAndReturnsNullPointer); + RUN_TEST_CASE(UnityFixture, CallocFillsWithZero); + RUN_TEST_CASE(UnityFixture, PointerSet); + RUN_TEST_CASE(UnityFixture, FreeNULLSafety); + RUN_TEST_CASE(UnityFixture, ConcludeTestIncrementsFailCount); +} + +TEST_GROUP_RUNNER(UnityCommandOptions) +{ + RUN_TEST_CASE(UnityCommandOptions, DefaultOptions); + RUN_TEST_CASE(UnityCommandOptions, OptionVerbose); + RUN_TEST_CASE(UnityCommandOptions, OptionSelectTestByGroup); + RUN_TEST_CASE(UnityCommandOptions, OptionSelectTestByName); + RUN_TEST_CASE(UnityCommandOptions, OptionSelectRepeatTestsDefaultCount); + RUN_TEST_CASE(UnityCommandOptions, OptionSelectRepeatTestsSpecificCount); + RUN_TEST_CASE(UnityCommandOptions, MultipleOptions); + RUN_TEST_CASE(UnityCommandOptions, MultipleOptionsDashRNotLastAndNoValueSpecified); + RUN_TEST_CASE(UnityCommandOptions, UnknownCommandIsIgnored); + RUN_TEST_CASE(UnityCommandOptions, GroupOrNameFilterWithoutStringFails); + RUN_TEST_CASE(UnityCommandOptions, GroupFilterReallyFilters); + RUN_TEST_CASE(UnityCommandOptions, TestShouldBeIgnored); +} + +TEST_GROUP_RUNNER(LeakDetection) +{ + RUN_TEST_CASE(LeakDetection, DetectsLeak); + RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringFree); + RUN_TEST_CASE(LeakDetection, BufferOverrunFoundDuringRealloc); + RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringFree); + RUN_TEST_CASE(LeakDetection, BufferGuardWriteFoundDuringRealloc); + RUN_TEST_CASE(LeakDetection, PointerSettingMax); +} + +TEST_GROUP_RUNNER(InternalMalloc) +{ + RUN_TEST_CASE(InternalMalloc, MallocPastBufferFails); + RUN_TEST_CASE(InternalMalloc, CallocPastBufferFails); + RUN_TEST_CASE(InternalMalloc, MallocThenReallocGrowsMemoryInPlace); + RUN_TEST_CASE(InternalMalloc, ReallocFailDoesNotFreeMem); +} diff --git a/extras/fixture/test/unity_output_Spy.c b/extras/fixture/test/unity_output_Spy.c new file mode 100644 index 0000000..be87bd5 --- /dev/null +++ b/extras/fixture/test/unity_output_Spy.c @@ -0,0 +1,57 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + + +#include "unity_output_Spy.h" +#include "unity_fixture.h" + +#include +#include + +static int size; +static int count; +static char* buffer; +static int spy_enable; + +void UnityOutputCharSpy_Create(int s) +{ + size = (s > 0) ? s : 0; + count = 0; + spy_enable = 0; + buffer = malloc((size_t)size); + TEST_ASSERT_NOT_NULL_MESSAGE(buffer, "Internal malloc failed in Spy Create():" __FILE__); + memset(buffer, 0, (size_t)size); +} + +void UnityOutputCharSpy_Destroy(void) +{ + size = 0; + free(buffer); +} + +void UnityOutputCharSpy_OutputChar(int c) +{ + if (spy_enable) + { + if (count < (size-1)) + buffer[count++] = (char)c; + } + else + { + putchar(c); + } +} + +const char * UnityOutputCharSpy_Get(void) +{ + return buffer; +} + +void UnityOutputCharSpy_Enable(int enable) +{ + spy_enable = enable; +} diff --git a/extras/fixture/test/unity_output_Spy.h b/extras/fixture/test/unity_output_Spy.h new file mode 100644 index 0000000..b30a7f1 --- /dev/null +++ b/extras/fixture/test/unity_output_Spy.h @@ -0,0 +1,17 @@ +/* Copyright (c) 2010 James Grenning and Contributed to Unity Project + * ========================================== + * Unity Project - A Test Framework for C + * Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + * [Released under MIT License. Please refer to license.txt for details] + * ========================================== */ + +#ifndef D_unity_output_Spy_H +#define D_unity_output_Spy_H + +void UnityOutputCharSpy_Create(int s); +void UnityOutputCharSpy_Destroy(void); +void UnityOutputCharSpy_OutputChar(int c); +const char * UnityOutputCharSpy_Get(void); +void UnityOutputCharSpy_Enable(int enable); + +#endif diff --git a/release/build.info b/release/build.info new file mode 100644 index 0000000..207634b --- /dev/null +++ b/release/build.info @@ -0,0 +1,2 @@ +120 + diff --git a/release/version.info b/release/version.info new file mode 100644 index 0000000..0f19985 --- /dev/null +++ b/release/version.info @@ -0,0 +1,2 @@ +2.4.0 + diff --git a/src/unity.c b/src/unity.c new file mode 100644 index 0000000..54a3452 --- /dev/null +++ b/src/unity.c @@ -0,0 +1,1421 @@ +/* ========================================================================= + Unity Project - A Test Framework for C + Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +============================================================================ */ + +#include "unity.h" +#include + +/* If omitted from header, declare overrideable prototypes here so they're ready for use */ +#ifdef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION +void UNITY_OUTPUT_CHAR(int); +#endif + +/* Helpful macros for us to use here in Assert functions */ +#define UNITY_FAIL_AND_BAIL { Unity.CurrentTestFailed = 1; TEST_ABORT(); } +#define UNITY_IGNORE_AND_BAIL { Unity.CurrentTestIgnored = 1; TEST_ABORT(); } +#define RETURN_IF_FAIL_OR_IGNORE if (Unity.CurrentTestFailed || Unity.CurrentTestIgnored) return + +struct UNITY_STORAGE_T Unity; + +static const char UnityStrOk[] = "OK"; +static const char UnityStrPass[] = "PASS"; +static const char UnityStrFail[] = "FAIL"; +static const char UnityStrIgnore[] = "IGNORE"; +static const char UnityStrNull[] = "NULL"; +static const char UnityStrSpacer[] = ". "; +static const char UnityStrExpected[] = " Expected "; +static const char UnityStrWas[] = " Was "; +static const char UnityStrElement[] = " Element "; +static const char UnityStrByte[] = " Byte "; +static const char UnityStrMemory[] = " Memory Mismatch."; +static const char UnityStrDelta[] = " Values Not Within Delta "; +static const char UnityStrPointless[] = " You Asked Me To Compare Nothing, Which Was Pointless."; +static const char UnityStrNullPointerForExpected[] = " Expected pointer to be NULL"; +static const char UnityStrNullPointerForActual[] = " Actual pointer was NULL"; +#ifndef UNITY_EXCLUDE_FLOAT +static const char UnityStrNot[] = "Not "; +static const char UnityStrInf[] = "Infinity"; +static const char UnityStrNegInf[] = "Negative Infinity"; +static const char UnityStrNaN[] = "NaN"; +static const char UnityStrDet[] = "Determinate"; +static const char UnityStrInvalidFloatTrait[] = "Invalid Float Trait"; +#endif +const char UnityStrErrFloat[] = "Unity Floating Point Disabled"; +const char UnityStrErrDouble[] = "Unity Double Precision Disabled"; +const char UnityStrErr64[] = "Unity 64-bit Support Disabled"; +static const char UnityStrBreaker[] = "-----------------------"; +static const char UnityStrResultsTests[] = " Tests "; +static const char UnityStrResultsFailures[] = " Failures "; +static const char UnityStrResultsIgnored[] = " Ignored "; +static const char UnityStrDetail1Name[] = UNITY_DETAIL1_NAME " "; +static const char UnityStrDetail2Name[] = " " UNITY_DETAIL2_NAME " "; + +/*----------------------------------------------- + * Pretty Printers & Test Result Output Handlers + *-----------------------------------------------*/ + +void UnityPrint(const char* string) +{ + const char* pch = string; + + if (pch != NULL) + { + while (*pch) + { + /* printable characters plus CR & LF are printed */ + if ((*pch <= 126) && (*pch >= 32)) + { + UNITY_OUTPUT_CHAR(*pch); + } + /* write escaped carriage returns */ + else if (*pch == 13) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('r'); + } + /* write escaped line feeds */ + else if (*pch == 10) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('n'); + } + /* unprintable characters are shown as codes */ + else + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)*pch, 2); + } + pch++; + } + } +} + +void UnityPrintLen(const char* string, const UNITY_UINT32 length) +{ + const char* pch = string; + + if (pch != NULL) + { + while (*pch && (UNITY_UINT32)(pch - string) < length) + { + /* printable characters plus CR & LF are printed */ + if ((*pch <= 126) && (*pch >= 32)) + { + UNITY_OUTPUT_CHAR(*pch); + } + /* write escaped carriage returns */ + else if (*pch == 13) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('r'); + } + /* write escaped line feeds */ + else if (*pch == 10) + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('n'); + } + /* unprintable characters are shown as codes */ + else + { + UNITY_OUTPUT_CHAR('\\'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)*pch, 2); + } + pch++; + } + } +} + +/*-----------------------------------------------*/ +void UnityPrintNumberByStyle(const UNITY_INT number, const UNITY_DISPLAY_STYLE_T style) +{ + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + UnityPrintNumber(number); + } + else if ((style & UNITY_DISPLAY_RANGE_UINT) == UNITY_DISPLAY_RANGE_UINT) + { + UnityPrintNumberUnsigned((UNITY_UINT)number); + } + else + { + UNITY_OUTPUT_CHAR('0'); + UNITY_OUTPUT_CHAR('x'); + UnityPrintNumberHex((UNITY_UINT)number, (char)((style & 0xF) * 2)); + } +} + +/*-----------------------------------------------*/ +void UnityPrintNumber(const UNITY_INT number_to_print) +{ + UNITY_UINT number = (UNITY_UINT)number_to_print; + + if (number_to_print < 0) + { + /* A negative number, including MIN negative */ + UNITY_OUTPUT_CHAR('-'); + number = (UNITY_UINT)(-number_to_print); + } + UnityPrintNumberUnsigned(number); +} + +/*----------------------------------------------- + * basically do an itoa using as little ram as possible */ +void UnityPrintNumberUnsigned(const UNITY_UINT number) +{ + UNITY_UINT divisor = 1; + + /* figure out initial divisor */ + while (number / divisor > 9) + { + divisor *= 10; + } + + /* now mod and print, then divide divisor */ + do + { + UNITY_OUTPUT_CHAR((char)('0' + (number / divisor % 10))); + divisor /= 10; + } while (divisor > 0); +} + +/*-----------------------------------------------*/ +void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles_to_print) +{ + int nibble; + char nibbles = nibbles_to_print; + if ((unsigned)nibbles > (2 * sizeof(number))) + nibbles = 2 * sizeof(number); + + while (nibbles > 0) + { + nibbles--; + nibble = (number >> (nibbles * 4)) & 0x0F; + if (nibble <= 9) + { + UNITY_OUTPUT_CHAR((char)('0' + nibble)); + } + else + { + UNITY_OUTPUT_CHAR((char)('A' - 10 + nibble)); + } + } +} + +/*-----------------------------------------------*/ +void UnityPrintMask(const UNITY_UINT mask, const UNITY_UINT number) +{ + UNITY_UINT current_bit = (UNITY_UINT)1 << (UNITY_INT_WIDTH - 1); + UNITY_INT32 i; + + for (i = 0; i < UNITY_INT_WIDTH; i++) + { + if (current_bit & mask) + { + if (current_bit & number) + { + UNITY_OUTPUT_CHAR('1'); + } + else + { + UNITY_OUTPUT_CHAR('0'); + } + } + else + { + UNITY_OUTPUT_CHAR('X'); + } + current_bit = current_bit >> 1; + } +} + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_FLOAT_PRINT +static void UnityPrintDecimalAndNumberWithLeadingZeros(UNITY_INT32 fraction_part, UNITY_INT32 divisor) +{ + UNITY_OUTPUT_CHAR('.'); + while (divisor > 0) + { + UNITY_OUTPUT_CHAR('0' + fraction_part / divisor); + fraction_part %= divisor; + divisor /= 10; + if (fraction_part == 0) break; /* Truncate trailing 0's */ + } +} +#ifndef UNITY_ROUND_TIES_AWAY_FROM_ZERO +/* If rounds up && remainder 0.5 && result odd && below cutoff for double precision issues */ + #define ROUND_TIES_TO_EVEN(orig, num_int, num) \ + if (num_int > (num) && (num) - (num_int-1) <= 0.5 && (num_int & 1) == 1 && orig < 1e22) \ + num_int -= 1 /* => a tie to round down to even */ +#else + #define ROUND_TIES_TO_EVEN(orig, num_int, num) /* Remove macro */ +#endif + +/* Printing floating point numbers is hard. Some goals of this implementation: works for embedded + * systems, floats or doubles, and has a reasonable format. The key paper in this area, + * 'How to Print Floating-Point Numbers Accurately' by Steele & White, shows an approximation by + * scaling called Dragon 2. This code uses a similar idea. The other core algorithm uses casts and + * floating subtraction to give exact remainders after the decimal, to be scaled into an integer. + * Extra trailing 0's are excluded. The output defaults to rounding to nearest, ties to even. You + * can enable rounding ties away from zero. Note: UNITY_DOUBLE param can typedef to float or double + + * The old version required compiling in snprintf. For reference, with a similar format as now: + * char buf[19]; + * if (number > 4294967296.0 || -number > 4294967296.0) snprintf(buf, sizeof buf, "%.8e", number); + * else snprintf(buf, sizeof buf, "%.6f", number); + * UnityPrint(buf); + */ +void UnityPrintFloat(const UNITY_DOUBLE input_number) +{ + UNITY_DOUBLE number; + + if (input_number < 0) + { + UNITY_OUTPUT_CHAR('-'); + number = -input_number; + } else + { + number = input_number; + } + + if (isnan(number)) UnityPrint(UnityStrNaN); + else if (isinf(number)) UnityPrintLen(UnityStrInf, 3); + else if (number <= 0.0000005 && number > 0) UnityPrint("0.000000..."); /* Small number */ + else if (number < 4294967295.9999995) /* Rounded result fits in 32 bits, "%.6f" format */ + { + const UNITY_INT32 divisor = 1000000/10; + UNITY_UINT32 integer_part = (UNITY_UINT32)number; + UNITY_INT32 fraction_part = (UNITY_INT32)((number - (UNITY_DOUBLE)integer_part)*1000000.0 + 0.5); + /* Double precision calculation gives best performance for six rounded decimal places */ + ROUND_TIES_TO_EVEN(number, fraction_part, (number - (UNITY_DOUBLE)integer_part)*1000000.0); + + if (fraction_part == 1000000) /* Carry across the decimal point */ + { + fraction_part = 0; + integer_part += 1; + } + + UnityPrintNumberUnsigned(integer_part); + UnityPrintDecimalAndNumberWithLeadingZeros(fraction_part, divisor); + } + else /* Number is larger, use exponential format of 9 digits, "%.8e" */ + { + const UNITY_INT32 divisor = 1000000000/10; + UNITY_INT32 integer_part; + UNITY_DOUBLE_TYPE divide = 10.0; + int exponent = 9; + + while (number / divide >= 1000000000.0 - 0.5) + { + divide *= 10; + exponent++; + } + integer_part = (UNITY_INT32)(number / divide + 0.5); + /* Double precision calculation required for float, to produce 9 rounded digits */ + ROUND_TIES_TO_EVEN(number, integer_part, number / divide); + + UNITY_OUTPUT_CHAR('0' + integer_part / divisor); + UnityPrintDecimalAndNumberWithLeadingZeros(integer_part % divisor, divisor / 10); + UNITY_OUTPUT_CHAR('e'); + UNITY_OUTPUT_CHAR('+'); + if (exponent < 10) UNITY_OUTPUT_CHAR('0'); + UnityPrintNumber(exponent); + } +} +#endif /* ! UNITY_EXCLUDE_FLOAT_PRINT */ + +/*-----------------------------------------------*/ +static void UnityTestResultsBegin(const char* file, const UNITY_LINE_TYPE line) +{ + UnityPrint(file); + UNITY_OUTPUT_CHAR(':'); + UnityPrintNumber((UNITY_INT)line); + UNITY_OUTPUT_CHAR(':'); + UnityPrint(Unity.CurrentTestName); + UNITY_OUTPUT_CHAR(':'); +} + +/*-----------------------------------------------*/ +static void UnityTestResultsFailBegin(const UNITY_LINE_TYPE line) +{ + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint(UnityStrFail); + UNITY_OUTPUT_CHAR(':'); +} + +/*-----------------------------------------------*/ +void UnityConcludeTest(void) +{ + if (Unity.CurrentTestIgnored) + { + Unity.TestIgnores++; + } + else if (!Unity.CurrentTestFailed) + { + UnityTestResultsBegin(Unity.TestFile, Unity.CurrentTestLineNumber); + UnityPrint(UnityStrPass); + } + else + { + Unity.TestFailures++; + } + + Unity.CurrentTestFailed = 0; + Unity.CurrentTestIgnored = 0; + UNITY_PRINT_EOL(); + UNITY_FLUSH_CALL(); +} + +/*-----------------------------------------------*/ +static void UnityAddMsgIfSpecified(const char* msg) +{ + if (msg) + { + UnityPrint(UnityStrSpacer); +#ifndef UNITY_EXCLUDE_DETAILS + if (Unity.CurrentDetail1) + { + UnityPrint(UnityStrDetail1Name); + UnityPrint(Unity.CurrentDetail1); + if (Unity.CurrentDetail2) + { + UnityPrint(UnityStrDetail2Name); + UnityPrint(Unity.CurrentDetail2); + } + UnityPrint(UnityStrSpacer); + } +#endif + UnityPrint(msg); + } +} + +/*-----------------------------------------------*/ +static void UnityPrintExpectedAndActualStrings(const char* expected, const char* actual) +{ + UnityPrint(UnityStrExpected); + if (expected != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrint(expected); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } + UnityPrint(UnityStrWas); + if (actual != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrint(actual); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } +} + +/*-----------------------------------------------*/ +static void UnityPrintExpectedAndActualStringsLen(const char* expected, + const char* actual, + const UNITY_UINT32 length) +{ + UnityPrint(UnityStrExpected); + if (expected != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrintLen(expected, length); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } + UnityPrint(UnityStrWas); + if (actual != NULL) + { + UNITY_OUTPUT_CHAR('\''); + UnityPrintLen(actual, length); + UNITY_OUTPUT_CHAR('\''); + } + else + { + UnityPrint(UnityStrNull); + } +} + +/*----------------------------------------------- + * Assertion & Control Helpers + *-----------------------------------------------*/ + +static int UnityIsOneArrayNull(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_LINE_TYPE lineNumber, + const char* msg) +{ + if (expected == actual) return 0; /* Both are NULL or same pointer */ + + /* print and return true if just expected is NULL */ + if (expected == NULL) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrNullPointerForExpected); + UnityAddMsgIfSpecified(msg); + return 1; + } + + /* print and return true if just actual is NULL */ + if (actual == NULL) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrNullPointerForActual); + UnityAddMsgIfSpecified(msg); + return 1; + } + + return 0; /* return false if neither is NULL */ +} + +/*----------------------------------------------- + * Assertion Functions + *-----------------------------------------------*/ + +void UnityAssertBits(const UNITY_INT mask, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if ((mask & expected) != (mask & actual)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + UnityPrintMask((UNITY_UINT)mask, (UNITY_UINT)expected); + UnityPrint(UnityStrWas); + UnityPrintMask((UNITY_UINT)mask, (UNITY_UINT)actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualNumber(const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if (expected != actual) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expected, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#define UnityPrintPointlessAndBail() \ +{ \ + UnityTestResultsFailBegin(lineNumber); \ + UnityPrint(UnityStrPointless); \ + UnityAddMsgIfSpecified(msg); \ + UNITY_FAIL_AND_BAIL; } + +/*-----------------------------------------------*/ +void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + UNITY_UINT32 elements = num_elements; + unsigned int length = style & 0xF; + + RETURN_IF_FAIL_OR_IGNORE; + + if (num_elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) return; /* Both are NULL or same pointer */ + if (UnityIsOneArrayNull(expected, actual, lineNumber, msg)) + UNITY_FAIL_AND_BAIL; + + while (elements--) + { + UNITY_INT expect_val; + UNITY_INT actual_val; + switch (length) + { + case 1: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT8*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT8*)actual; + break; + case 2: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT16*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT16*)actual; + break; + default: /* length 4 bytes */ + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT32*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT32*)actual; + length = 4; + break; +#ifdef UNITY_SUPPORT_64 + case 8: + expect_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT64*)expected; + actual_val = *(UNITY_PTR_ATTRIBUTE const UNITY_INT64*)actual; + break; +#endif + } + + if (expect_val != actual_val) + { + if (style & UNITY_DISPLAY_RANGE_UINT && length < sizeof(expect_val)) + { /* For UINT, remove sign extension (padding 1's) from signed type casts above */ + UNITY_INT mask = 1; + mask = (mask << 8 * length) - 1; + expect_val &= mask; + actual_val &= mask; + } + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expect_val, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual_val, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + expected = (UNITY_INTERNAL_PTR)(length + (const char*)expected); + actual = (UNITY_INTERNAL_PTR)(length + (const char*)actual); + } +} + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_FLOAT +/* Wrap this define in a function with variable types as float or double */ +#define UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff) \ + if (isinf(expected) && isinf(actual) && ((expected < 0) == (actual < 0))) return 1; \ + if (UNITY_NAN_CHECK) return 1; \ + diff = actual - expected; \ + if (diff < 0) diff = -diff; \ + if (delta < 0) delta = -delta; \ + return !(isnan(diff) || isinf(diff) || (diff > delta)) + /* This first part of this condition will catch any NaN or Infinite values */ +#ifndef UNITY_NAN_NOT_EQUAL_NAN + #define UNITY_NAN_CHECK isnan(expected) && isnan(actual) +#else + #define UNITY_NAN_CHECK 0 +#endif + +#ifndef UNITY_EXCLUDE_FLOAT_PRINT + #define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \ + { \ + UnityPrint(UnityStrExpected); \ + UnityPrintFloat(expected); \ + UnityPrint(UnityStrWas); \ + UnityPrintFloat(actual); } +#else + #define UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual) \ + UnityPrint(UnityStrDelta) +#endif /* UNITY_EXCLUDE_FLOAT_PRINT */ + +static int UnityFloatsWithin(UNITY_FLOAT delta, UNITY_FLOAT expected, UNITY_FLOAT actual) +{ + UNITY_FLOAT diff; + UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff); +} + +void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected, + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_UINT32 elements = num_elements; + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* ptr_expected = expected; + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* ptr_actual = actual; + + RETURN_IF_FAIL_OR_IGNORE; + + if (elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) return; /* Both are NULL or same pointer */ + if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg)) + UNITY_FAIL_AND_BAIL; + + while (elements--) + { + if (!UnityFloatsWithin(*ptr_expected * UNITY_FLOAT_PRECISION, *ptr_expected, *ptr_actual)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(*ptr_expected, *ptr_actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_expected++; + ptr_actual++; + } +} + +/*-----------------------------------------------*/ +void UnityAssertFloatsWithin(const UNITY_FLOAT delta, + const UNITY_FLOAT expected, + const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + RETURN_IF_FAIL_OR_IGNORE; + + + if (!UnityFloatsWithin(delta, expected, actual)) + { + UnityTestResultsFailBegin(lineNumber); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertFloatSpecial(const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style) +{ + const char* trait_names[] = {UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet}; + UNITY_INT should_be_trait = ((UNITY_INT)style & 1); + UNITY_INT is_trait = !should_be_trait; + UNITY_INT trait_index = (UNITY_INT)(style >> 1); + + RETURN_IF_FAIL_OR_IGNORE; + + switch (style) + { + case UNITY_FLOAT_IS_INF: + case UNITY_FLOAT_IS_NOT_INF: + is_trait = isinf(actual) && (actual > 0); + break; + case UNITY_FLOAT_IS_NEG_INF: + case UNITY_FLOAT_IS_NOT_NEG_INF: + is_trait = isinf(actual) && (actual < 0); + break; + + case UNITY_FLOAT_IS_NAN: + case UNITY_FLOAT_IS_NOT_NAN: + is_trait = isnan(actual) ? 1 : 0; + break; + + case UNITY_FLOAT_IS_DET: /* A determinate number is non infinite and not NaN. */ + case UNITY_FLOAT_IS_NOT_DET: + is_trait = !isinf(actual) && !isnan(actual); + break; + + default: + trait_index = 0; + trait_names[0] = UnityStrInvalidFloatTrait; + break; + } + + if (is_trait != should_be_trait) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + if (!should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); + UnityPrint(UnityStrWas); +#ifndef UNITY_EXCLUDE_FLOAT_PRINT + UnityPrintFloat(actual); +#else + if (should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#endif /* not UNITY_EXCLUDE_FLOAT */ + +/*-----------------------------------------------*/ +#ifndef UNITY_EXCLUDE_DOUBLE +static int UnityDoublesWithin(UNITY_DOUBLE delta, UNITY_DOUBLE expected, UNITY_DOUBLE actual) +{ + UNITY_DOUBLE diff; + UNITY_FLOAT_OR_DOUBLE_WITHIN(delta, expected, actual, diff); +} + +void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expected, + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_UINT32 elements = num_elements; + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* ptr_expected = expected; + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* ptr_actual = actual; + + RETURN_IF_FAIL_OR_IGNORE; + + if (elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) return; /* Both are NULL or same pointer */ + if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg)) + UNITY_FAIL_AND_BAIL; + + while (elements--) + { + if (!UnityDoublesWithin(*ptr_expected * UNITY_DOUBLE_PRECISION, *ptr_expected, *ptr_actual)) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(*ptr_expected, *ptr_actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_expected++; + ptr_actual++; + } +} + +/*-----------------------------------------------*/ +void UnityAssertDoublesWithin(const UNITY_DOUBLE delta, + const UNITY_DOUBLE expected, + const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if (!UnityDoublesWithin(delta, expected, actual)) + { + UnityTestResultsFailBegin(lineNumber); + UNITY_PRINT_EXPECTED_AND_ACTUAL_FLOAT(expected, actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ + +void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style) +{ + const char* trait_names[] = {UnityStrInf, UnityStrNegInf, UnityStrNaN, UnityStrDet}; + UNITY_INT should_be_trait = ((UNITY_INT)style & 1); + UNITY_INT is_trait = !should_be_trait; + UNITY_INT trait_index = (UNITY_INT)(style >> 1); + + RETURN_IF_FAIL_OR_IGNORE; + + switch (style) + { + case UNITY_FLOAT_IS_INF: + case UNITY_FLOAT_IS_NOT_INF: + is_trait = isinf(actual) && (actual > 0); + break; + case UNITY_FLOAT_IS_NEG_INF: + case UNITY_FLOAT_IS_NOT_NEG_INF: + is_trait = isinf(actual) && (actual < 0); + break; + + case UNITY_FLOAT_IS_NAN: + case UNITY_FLOAT_IS_NOT_NAN: + is_trait = isnan(actual) ? 1 : 0; + break; + + case UNITY_FLOAT_IS_DET: /* A determinate number is non infinite and not NaN. */ + case UNITY_FLOAT_IS_NOT_DET: + is_trait = !isinf(actual) && !isnan(actual); + break; + + default: + trait_index = 0; + trait_names[0] = UnityStrInvalidFloatTrait; + break; + } + + if (is_trait != should_be_trait) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrExpected); + if (!should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); + UnityPrint(UnityStrWas); +#ifndef UNITY_EXCLUDE_FLOAT_PRINT + UnityPrintFloat(actual); +#else + if (should_be_trait) + UnityPrint(UnityStrNot); + UnityPrint(trait_names[trait_index]); +#endif + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +#endif /* not UNITY_EXCLUDE_DOUBLE */ + +/*-----------------------------------------------*/ +void UnityAssertNumbersWithin(const UNITY_UINT delta, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style) +{ + RETURN_IF_FAIL_OR_IGNORE; + + if ((style & UNITY_DISPLAY_RANGE_INT) == UNITY_DISPLAY_RANGE_INT) + { + if (actual > expected) + Unity.CurrentTestFailed = ((UNITY_UINT)(actual - expected) > delta); + else + Unity.CurrentTestFailed = ((UNITY_UINT)(expected - actual) > delta); + } + else + { + if ((UNITY_UINT)actual > (UNITY_UINT)expected) + Unity.CurrentTestFailed = ((UNITY_UINT)(actual - expected) > delta); + else + Unity.CurrentTestFailed = ((UNITY_UINT)(expected - actual) > delta); + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrDelta); + UnityPrintNumberByStyle((UNITY_INT)delta, style); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(expected, style); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(actual, style); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualString(const char* expected, + const char* actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_UINT32 i; + + RETURN_IF_FAIL_OR_IGNORE; + + /* if both pointers not null compare the strings */ + if (expected && actual) + { + for (i = 0; expected[i] || actual[i]; i++) + { + if (expected[i] != actual[i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected != actual) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrintExpectedAndActualStrings(expected, actual); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualStringLen(const char* expected, + const char* actual, + const UNITY_UINT32 length, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_UINT32 i; + + RETURN_IF_FAIL_OR_IGNORE; + + /* if both pointers not null compare the strings */ + if (expected && actual) + { + for (i = 0; (i < length) && (expected[i] || actual[i]); i++) + { + if (expected[i] != actual[i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected != actual) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrintExpectedAndActualStringsLen(expected, actual, length); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } +} + +/*-----------------------------------------------*/ +void UnityAssertEqualStringArray(const char** expected, + const char** actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_UINT32 i, j = 0; + + RETURN_IF_FAIL_OR_IGNORE; + + /* if no elements, it's an error */ + if (num_elements == 0) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) return; /* Both are NULL or same pointer */ + if (UnityIsOneArrayNull((UNITY_INTERNAL_PTR)expected, (UNITY_INTERNAL_PTR)actual, lineNumber, msg)) + UNITY_FAIL_AND_BAIL; + + do + { + /* if both pointers not null compare the strings */ + if (expected[j] && actual[j]) + { + for (i = 0; expected[j][i] || actual[j][i]; i++) + { + if (expected[j][i] != actual[j][i]) + { + Unity.CurrentTestFailed = 1; + break; + } + } + } + else + { /* handle case of one pointers being null (if both null, test should pass) */ + if (expected[j] != actual[j]) + { + Unity.CurrentTestFailed = 1; + } + } + + if (Unity.CurrentTestFailed) + { + UnityTestResultsFailBegin(lineNumber); + if (num_elements > 1) + { + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(j); + } + UnityPrintExpectedAndActualStrings((const char*)(expected[j]), (const char*)(actual[j])); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + } while (++j < num_elements); +} + +/*-----------------------------------------------*/ +void UnityAssertEqualMemory(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 length, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber) +{ + UNITY_PTR_ATTRIBUTE const unsigned char* ptr_exp = (UNITY_PTR_ATTRIBUTE const unsigned char*)expected; + UNITY_PTR_ATTRIBUTE const unsigned char* ptr_act = (UNITY_PTR_ATTRIBUTE const unsigned char*)actual; + UNITY_UINT32 elements = num_elements; + UNITY_UINT32 bytes; + + RETURN_IF_FAIL_OR_IGNORE; + + if ((elements == 0) || (length == 0)) + { + UnityPrintPointlessAndBail(); + } + + if (expected == actual) return; /* Both are NULL or same pointer */ + if (UnityIsOneArrayNull(expected, actual, lineNumber, msg)) + UNITY_FAIL_AND_BAIL; + + while (elements--) + { + bytes = length; + while (bytes--) + { + if (*ptr_exp != *ptr_act) + { + UnityTestResultsFailBegin(lineNumber); + UnityPrint(UnityStrMemory); + if (num_elements > 1) + { + UnityPrint(UnityStrElement); + UnityPrintNumberUnsigned(num_elements - elements - 1); + } + UnityPrint(UnityStrByte); + UnityPrintNumberUnsigned(length - bytes - 1); + UnityPrint(UnityStrExpected); + UnityPrintNumberByStyle(*ptr_exp, UNITY_DISPLAY_STYLE_HEX8); + UnityPrint(UnityStrWas); + UnityPrintNumberByStyle(*ptr_act, UNITY_DISPLAY_STYLE_HEX8); + UnityAddMsgIfSpecified(msg); + UNITY_FAIL_AND_BAIL; + } + ptr_exp++; + ptr_act++; + } + } +} + +/*----------------------------------------------- + * Control Functions + *-----------------------------------------------*/ + +void UnityFail(const char* msg, const UNITY_LINE_TYPE line) +{ + RETURN_IF_FAIL_OR_IGNORE; + + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint(UnityStrFail); + if (msg != NULL) + { + UNITY_OUTPUT_CHAR(':'); + +#ifndef UNITY_EXCLUDE_DETAILS + if (Unity.CurrentDetail1) + { + UnityPrint(UnityStrDetail1Name); + UnityPrint(Unity.CurrentDetail1); + if (Unity.CurrentDetail2) + { + UnityPrint(UnityStrDetail2Name); + UnityPrint(Unity.CurrentDetail2); + } + UnityPrint(UnityStrSpacer); + } +#endif + if (msg[0] != ' ') + { + UNITY_OUTPUT_CHAR(' '); + } + UnityPrint(msg); + } + + UNITY_FAIL_AND_BAIL; +} + +/*-----------------------------------------------*/ +void UnityIgnore(const char* msg, const UNITY_LINE_TYPE line) +{ + RETURN_IF_FAIL_OR_IGNORE; + + UnityTestResultsBegin(Unity.TestFile, line); + UnityPrint(UnityStrIgnore); + if (msg != NULL) + { + UNITY_OUTPUT_CHAR(':'); + UNITY_OUTPUT_CHAR(' '); + UnityPrint(msg); + } + UNITY_IGNORE_AND_BAIL; +} + +/*-----------------------------------------------*/ +#if defined(UNITY_WEAK_ATTRIBUTE) + UNITY_WEAK_ATTRIBUTE void setUp(void) { } + UNITY_WEAK_ATTRIBUTE void tearDown(void) { } +#elif defined(UNITY_WEAK_PRAGMA) + #pragma weak setUp + void setUp(void) { } + #pragma weak tearDown + void tearDown(void) { } +#endif +/*-----------------------------------------------*/ +void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum) +{ + Unity.CurrentTestName = FuncName; + Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)FuncLineNum; + Unity.NumberOfTests++; + UNITY_CLR_DETAILS(); + if (TEST_PROTECT()) + { + setUp(); + Func(); + } + if (TEST_PROTECT()) + { + tearDown(); + } + UnityConcludeTest(); +} + +/*-----------------------------------------------*/ +void UnityBegin(const char* filename) +{ + Unity.TestFile = filename; + Unity.CurrentTestName = NULL; + Unity.CurrentTestLineNumber = 0; + Unity.NumberOfTests = 0; + Unity.TestFailures = 0; + Unity.TestIgnores = 0; + Unity.CurrentTestFailed = 0; + Unity.CurrentTestIgnored = 0; + + UNITY_CLR_DETAILS(); + UNITY_OUTPUT_START(); +} + +/*-----------------------------------------------*/ +int UnityEnd(void) +{ + UNITY_PRINT_EOL(); + UnityPrint(UnityStrBreaker); + UNITY_PRINT_EOL(); + UnityPrintNumber((UNITY_INT)(Unity.NumberOfTests)); + UnityPrint(UnityStrResultsTests); + UnityPrintNumber((UNITY_INT)(Unity.TestFailures)); + UnityPrint(UnityStrResultsFailures); + UnityPrintNumber((UNITY_INT)(Unity.TestIgnores)); + UnityPrint(UnityStrResultsIgnored); + UNITY_PRINT_EOL(); + if (Unity.TestFailures == 0U) + { + UnityPrint(UnityStrOk); + } + else + { + UnityPrint(UnityStrFail); +#ifdef UNITY_DIFFERENTIATE_FINAL_FAIL + UNITY_OUTPUT_CHAR('E'); UNITY_OUTPUT_CHAR('D'); +#endif + } + UNITY_PRINT_EOL(); + UNITY_FLUSH_CALL(); + UNITY_OUTPUT_COMPLETE(); + return (int)(Unity.TestFailures); +} + +/*----------------------------------------------- + * Command Line Argument Support + *-----------------------------------------------*/ +#ifdef UNITY_USE_COMMAND_LINE_ARGS + +char* UnityOptionIncludeNamed = NULL; +char* UnityOptionExcludeNamed = NULL; +int UnityVerbosity = 1; + +int UnityParseOptions(int argc, char** argv) +{ + UnityOptionIncludeNamed = NULL; + UnityOptionExcludeNamed = NULL; + + for (int i = 1; i < argc; i++) + { + if (argv[i][0] == '-') + { + switch (argv[i][1]) + { + case 'l': /* list tests */ + return -1; + case 'n': /* include tests with name including this string */ + case 'f': /* an alias for -n */ + if (argv[i][2] == '=') + UnityOptionIncludeNamed = &argv[i][3]; + else if (++i < argc) + UnityOptionIncludeNamed = argv[i]; + else + { + UnityPrint("ERROR: No Test String to Include Matches For"); + UNITY_PRINT_EOL(); + return 1; + } + break; + case 'q': /* quiet */ + UnityVerbosity = 0; + break; + case 'v': /* verbose */ + UnityVerbosity = 2; + break; + case 'x': /* exclude tests with name including this string */ + if (argv[i][2] == '=') + UnityOptionExcludeNamed = &argv[i][3]; + else if (++i < argc) + UnityOptionExcludeNamed = argv[i]; + else + { + UnityPrint("ERROR: No Test String to Exclude Matches For"); + UNITY_PRINT_EOL(); + return 1; + } + break; + default: + UnityPrint("ERROR: Unknown Option "); + UNITY_OUTPUT_CHAR(argv[i][1]); + UNITY_PRINT_EOL(); + return 1; + } + } + } + + return 0; +} + +int IsStringInBiggerString(const char* longstring, const char* shortstring) +{ + char* lptr = (char*)longstring; + char* sptr = (char*)shortstring; + char* lnext = lptr; + + if (*sptr == '*') + return 1; + + while (*lptr) + { + lnext = lptr + 1; + + /* If they current bytes match, go on to the next bytes */ + while (*lptr && *sptr && (*lptr == *sptr)) + { + lptr++; + sptr++; + + /* We're done if we match the entire string or up to a wildcard */ + if (*sptr == '*') + return 1; + if (*sptr == ',') + return 1; + if (*sptr == '"') + return 1; + if (*sptr == '\'') + return 1; + if (*sptr == ':') + return 2; + if (*sptr == 0) + return 1; + } + + /* Otherwise we start in the long pointer 1 character further and try again */ + lptr = lnext; + sptr = (char*)shortstring; + } + return 0; +} + +int UnityStringArgumentMatches(const char* str) +{ + int retval; + const char* ptr1; + const char* ptr2; + const char* ptrf; + + /* Go through the options and get the substrings for matching one at a time */ + ptr1 = str; + while (ptr1[0] != 0) + { + if ((ptr1[0] == '"') || (ptr1[0] == '\'')) + ptr1++; + + /* look for the start of the next partial */ + ptr2 = ptr1; + ptrf = 0; + do + { + ptr2++; + if ((ptr2[0] == ':') && (ptr2[1] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ',')) + ptrf = &ptr2[1]; + } while ((ptr2[0] != 0) && (ptr2[0] != '\'') && (ptr2[0] != '"') && (ptr2[0] != ',')); + while ((ptr2[0] != 0) && ((ptr2[0] == ':') || (ptr2[0] == '\'') || (ptr2[0] == '"') || (ptr2[0] == ','))) + ptr2++; + + /* done if complete filename match */ + retval = IsStringInBiggerString(Unity.TestFile, ptr1); + if (retval == 1) + return retval; + + /* done if testname match after filename partial match */ + if ((retval == 2) && (ptrf != 0)) + { + if (IsStringInBiggerString(Unity.CurrentTestName, ptrf)) + return 1; + } + + /* done if complete testname match */ + if (IsStringInBiggerString(Unity.CurrentTestName, ptr1) == 1) + return 1; + + ptr1 = ptr2; + } + + /* we couldn't find a match for any substrings */ + return 0; +} + +int UnityTestMatches(void) +{ + /* Check if this test name matches the included test pattern */ + int retval; + if (UnityOptionIncludeNamed) + { + retval = UnityStringArgumentMatches(UnityOptionIncludeNamed); + } + else + retval = 1; + + /* Check if this test name matches the excluded test pattern */ + if (UnityOptionExcludeNamed) + { + if (UnityStringArgumentMatches(UnityOptionExcludeNamed)) + retval = 0; + } + return retval; +} + +#endif /* UNITY_USE_COMMAND_LINE_ARGS */ +/*-----------------------------------------------*/ diff --git a/src/unity.h b/src/unity.h new file mode 100644 index 0000000..30d0e91 --- /dev/null +++ b/src/unity.h @@ -0,0 +1,291 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#ifndef UNITY_FRAMEWORK_H +#define UNITY_FRAMEWORK_H +#define UNITY + +#ifdef __cplusplus +extern "C" +{ +#endif + +#include "unity_internals.h" + +void setUp(void); +void tearDown(void); + +/*------------------------------------------------------- + * Configuration Options + *------------------------------------------------------- + * All options described below should be passed as a compiler flag to all files using Unity. If you must add #defines, place them BEFORE the #include above. + + * Integers/longs/pointers + * - Unity attempts to automatically discover your integer sizes + * - define UNITY_EXCLUDE_STDINT_H to stop attempting to look in + * - define UNITY_EXCLUDE_LIMITS_H to stop attempting to look in + * - If you cannot use the automatic methods above, you can force Unity by using these options: + * - define UNITY_SUPPORT_64 + * - set UNITY_INT_WIDTH + * - set UNITY_LONG_WIDTH + * - set UNITY_POINTER_WIDTH + + * Floats + * - define UNITY_EXCLUDE_FLOAT to disallow floating point comparisons + * - define UNITY_FLOAT_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_FLOAT + * - define UNITY_FLOAT_TYPE to specify doubles instead of single precision floats + * - define UNITY_INCLUDE_DOUBLE to allow double floating point comparisons + * - define UNITY_EXCLUDE_DOUBLE to disallow double floating point comparisons (default) + * - define UNITY_DOUBLE_PRECISION to specify the precision to use when doing TEST_ASSERT_EQUAL_DOUBLE + * - define UNITY_DOUBLE_TYPE to specify something other than double + * - define UNITY_EXCLUDE_FLOAT_PRINT to trim binary size, won't print floating point values in errors + + * Output + * - by default, Unity prints to standard out with putchar. define UNITY_OUTPUT_CHAR(a) with a different function if desired + * - define UNITY_DIFFERENTIATE_FINAL_FAIL to print FAILED (vs. FAIL) at test end summary - for automated search for failure + + * Optimization + * - by default, line numbers are stored in unsigned shorts. Define UNITY_LINE_TYPE with a different type if your files are huge + * - by default, test and failure counters are unsigned shorts. Define UNITY_COUNTER_TYPE with a different type if you want to save space or have more than 65535 Tests. + + * Test Cases + * - define UNITY_SUPPORT_TEST_CASES to include the TEST_CASE macro, though really it's mostly about the runner generator script + + * Parameterized Tests + * - you'll want to create a define of TEST_CASE(...) which basically evaluates to nothing + + * Tests with Arguments + * - you'll want to define UNITY_USE_COMMAND_LINE_ARGS if you have the test runner passing arguments to Unity + + *------------------------------------------------------- + * Basic Fail and Ignore + *-------------------------------------------------------*/ + +#define TEST_FAIL_MESSAGE(message) UNITY_TEST_FAIL(__LINE__, (message)) +#define TEST_FAIL() UNITY_TEST_FAIL(__LINE__, NULL) +#define TEST_IGNORE_MESSAGE(message) UNITY_TEST_IGNORE(__LINE__, (message)) +#define TEST_IGNORE() UNITY_TEST_IGNORE(__LINE__, NULL) +#define TEST_ONLY() + +/* It is not necessary for you to call PASS. A PASS condition is assumed if nothing fails. + * This method allows you to abort a test immediately with a PASS state, ignoring the remainder of the test. */ +#define TEST_PASS() TEST_ABORT() + +/*------------------------------------------------------- + * Test Asserts (simple) + *-------------------------------------------------------*/ + +/* Boolean */ +#define TEST_ASSERT(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expression Evaluated To FALSE") +#define TEST_ASSERT_TRUE(condition) UNITY_TEST_ASSERT( (condition), __LINE__, " Expected TRUE Was FALSE") +#define TEST_ASSERT_UNLESS(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expression Evaluated To TRUE") +#define TEST_ASSERT_FALSE(condition) UNITY_TEST_ASSERT( !(condition), __LINE__, " Expected FALSE Was TRUE") +#define TEST_ASSERT_NULL(pointer) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, " Expected NULL") +#define TEST_ASSERT_NOT_NULL(pointer) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, " Expected Non-NULL") + +/* Integers (of all sizes) */ +#define TEST_ASSERT_EQUAL_INT(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL(expected, actual) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_NOT_EQUAL(expected, actual) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, " Expected Not-Equal") +#define TEST_ASSERT_EQUAL_UINT(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT8(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT16(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT32(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT64(expected, actual) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX8(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX16(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX32(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX64(expected, actual) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS(mask, expected, actual) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS_HIGH(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(-1), (actual), __LINE__, NULL) +#define TEST_ASSERT_BITS_LOW(mask, actual) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(0), (actual), __LINE__, NULL) +#define TEST_ASSERT_BIT_HIGH(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(-1), (actual), __LINE__, NULL) +#define TEST_ASSERT_BIT_LOW(bit, actual) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(0), (actual), __LINE__, NULL) + +/* Integer Ranges (of all sizes) */ +#define TEST_ASSERT_INT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_INT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_UINT64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX8_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX16_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX32_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_HEX64_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, NULL) + +/* Structs and Strings */ +#define TEST_ASSERT_EQUAL_PTR(expected, actual) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING(expected, actual) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_MEMORY(expected, actual, len) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, NULL) + +/* Arrays */ +#define TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, NULL) + +/* Floating Point (If Enabled) */ +#define TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_FLOAT(expected, actual) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, NULL) + +/* Double (If Enabled) */ +#define TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_DOUBLE(expected, actual) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, NULL) +#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, NULL) +#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, NULL) + +/*------------------------------------------------------- + * Test Asserts (with additional messages) + *-------------------------------------------------------*/ + +/* Boolean */ +#define TEST_ASSERT_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message)) +#define TEST_ASSERT_TRUE_MESSAGE(condition, message) UNITY_TEST_ASSERT( (condition), __LINE__, (message)) +#define TEST_ASSERT_UNLESS_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message)) +#define TEST_ASSERT_FALSE_MESSAGE(condition, message) UNITY_TEST_ASSERT( !(condition), __LINE__, (message)) +#define TEST_ASSERT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NULL( (pointer), __LINE__, (message)) +#define TEST_ASSERT_NOT_NULL_MESSAGE(pointer, message) UNITY_TEST_ASSERT_NOT_NULL((pointer), __LINE__, (message)) + +/* Integers (of all sizes) */ +#define TEST_ASSERT_EQUAL_INT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT8((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT16((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT64((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_INT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_NOT_EQUAL_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT(((expected) != (actual)), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT8( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT16( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT32( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_UINT64( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX8_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX8( (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX16_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX16((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX32_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX32((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX64_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_HEX64((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_MESSAGE(mask, expected, actual, message) UNITY_TEST_ASSERT_BITS((mask), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_HIGH_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(-1), (actual), __LINE__, (message)) +#define TEST_ASSERT_BITS_LOW_MESSAGE(mask, actual, message) UNITY_TEST_ASSERT_BITS((mask), (UNITY_UINT32)(0), (actual), __LINE__, (message)) +#define TEST_ASSERT_BIT_HIGH_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(-1), (actual), __LINE__, (message)) +#define TEST_ASSERT_BIT_LOW_MESSAGE(bit, actual, message) UNITY_TEST_ASSERT_BITS(((UNITY_UINT32)1 << (bit)), (UNITY_UINT32)(0), (actual), __LINE__, (message)) + +/* Integer Ranges (of all sizes) */ +#define TEST_ASSERT_INT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_INT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_INT64_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_UINT64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_UINT64_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX8_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX8_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX16_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX16_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX32_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX32_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_HEX64_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_HEX64_WITHIN((delta), (expected), (actual), __LINE__, (message)) + +/* Structs and Strings */ +#define TEST_ASSERT_EQUAL_PTR_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_PTR((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_STRING((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_STRING_LEN((expected), (actual), (len), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MEMORY_MESSAGE(expected, actual, len, message) UNITY_TEST_ASSERT_EQUAL_MEMORY((expected), (actual), (len), __LINE__, (message)) + +/* Arrays */ +#define TEST_ASSERT_EQUAL_INT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_INT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_UINT64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX8_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX16_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX32_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_HEX64_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_PTR_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_STRING_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_MEMORY_ARRAY_MESSAGE(expected, actual, len, num_elements, message) UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY((expected), (actual), (len), (num_elements), __LINE__, (message)) + +/* Floating Point (If Enabled) */ +#define TEST_ASSERT_FLOAT_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_FLOAT_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_FLOAT((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_FLOAT_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE((actual), __LINE__, (message)) + +/* Double (If Enabled) */ +#define TEST_ASSERT_DOUBLE_WITHIN_MESSAGE(delta, expected, actual, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((delta), (expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_DOUBLE_MESSAGE(expected, actual, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE((expected), (actual), __LINE__, (message)) +#define TEST_ASSERT_EQUAL_DOUBLE_ARRAY_MESSAGE(expected, actual, num_elements, message) UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY((expected), (actual), (num_elements), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_NAN_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN((actual), __LINE__, (message)) +#define TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE_MESSAGE(actual, message) UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE((actual), __LINE__, (message)) + +/* end of UNITY_FRAMEWORK_H */ +#ifdef __cplusplus +} +#endif +#endif diff --git a/src/unity_internals.h b/src/unity_internals.h new file mode 100644 index 0000000..bdcee92 --- /dev/null +++ b/src/unity_internals.h @@ -0,0 +1,734 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007-14 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#ifndef UNITY_INTERNALS_H +#define UNITY_INTERNALS_H + +#ifdef UNITY_INCLUDE_CONFIG_H +#include "unity_config.h" +#endif + +#ifndef UNITY_EXCLUDE_SETJMP_H +#include +#endif + +#ifndef UNITY_EXCLUDE_MATH_H +#include +#endif + +/* Unity Attempts to Auto-Detect Integer Types + * Attempt 1: UINT_MAX, ULONG_MAX in , or default to 32 bits + * Attempt 2: UINTPTR_MAX in , or default to same size as long + * The user may override any of these derived constants: + * UNITY_INT_WIDTH, UNITY_LONG_WIDTH, UNITY_POINTER_WIDTH */ +#ifndef UNITY_EXCLUDE_STDINT_H +#include +#endif + +#ifndef UNITY_EXCLUDE_LIMITS_H +#include +#endif + +/*------------------------------------------------------- + * Guess Widths If Not Specified + *-------------------------------------------------------*/ + +/* Determine the size of an int, if not already specified. + * We cannot use sizeof(int), because it is not yet defined + * at this stage in the translation of the C program. + * Therefore, infer it from UINT_MAX if possible. */ +#ifndef UNITY_INT_WIDTH + #ifdef UINT_MAX + #if (UINT_MAX == 0xFFFF) + #define UNITY_INT_WIDTH (16) + #elif (UINT_MAX == 0xFFFFFFFF) + #define UNITY_INT_WIDTH (32) + #elif (UINT_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_INT_WIDTH (64) + #endif + #else /* Set to default */ + #define UNITY_INT_WIDTH (32) + #endif /* UINT_MAX */ +#endif + +/* Determine the size of a long, if not already specified. */ +#ifndef UNITY_LONG_WIDTH + #ifdef ULONG_MAX + #if (ULONG_MAX == 0xFFFF) + #define UNITY_LONG_WIDTH (16) + #elif (ULONG_MAX == 0xFFFFFFFF) + #define UNITY_LONG_WIDTH (32) + #elif (ULONG_MAX == 0xFFFFFFFFFFFFFFFF) + #define UNITY_LONG_WIDTH (64) + #endif + #else /* Set to default */ + #define UNITY_LONG_WIDTH (32) + #endif /* ULONG_MAX */ +#endif + +/* Determine the size of a pointer, if not already specified. */ +#ifndef UNITY_POINTER_WIDTH + #ifdef UINTPTR_MAX + #if (UINTPTR_MAX <= 0xFFFF) + #define UNITY_POINTER_WIDTH (16) + #elif (UINTPTR_MAX <= 0xFFFFFFFF) + #define UNITY_POINTER_WIDTH (32) + #elif (UINTPTR_MAX <= 0xFFFFFFFFFFFFFFFF) + #define UNITY_POINTER_WIDTH (64) + #endif + #else /* Set to default */ + #define UNITY_POINTER_WIDTH UNITY_LONG_WIDTH + #endif /* UINTPTR_MAX */ +#endif + +/*------------------------------------------------------- + * Int Support (Define types based on detected sizes) + *-------------------------------------------------------*/ + +#if (UNITY_INT_WIDTH == 32) + typedef unsigned char UNITY_UINT8; + typedef unsigned short UNITY_UINT16; + typedef unsigned int UNITY_UINT32; + typedef signed char UNITY_INT8; + typedef signed short UNITY_INT16; + typedef signed int UNITY_INT32; +#elif (UNITY_INT_WIDTH == 16) + typedef unsigned char UNITY_UINT8; + typedef unsigned int UNITY_UINT16; + typedef unsigned long UNITY_UINT32; + typedef signed char UNITY_INT8; + typedef signed int UNITY_INT16; + typedef signed long UNITY_INT32; +#else + #error Invalid UNITY_INT_WIDTH specified! (16 or 32 are supported) +#endif + +/*------------------------------------------------------- + * 64-bit Support + *-------------------------------------------------------*/ + +#ifndef UNITY_SUPPORT_64 + #if UNITY_LONG_WIDTH == 64 || UNITY_POINTER_WIDTH == 64 + #define UNITY_SUPPORT_64 + #endif +#endif + +#ifndef UNITY_SUPPORT_64 + /* No 64-bit Support */ + typedef UNITY_UINT32 UNITY_UINT; + typedef UNITY_INT32 UNITY_INT; +#else + + /* 64-bit Support */ + #if (UNITY_LONG_WIDTH == 32) + typedef unsigned long long UNITY_UINT64; + typedef signed long long UNITY_INT64; + #elif (UNITY_LONG_WIDTH == 64) + typedef unsigned long UNITY_UINT64; + typedef signed long UNITY_INT64; + #else + #error Invalid UNITY_LONG_WIDTH specified! (32 or 64 are supported) + #endif + typedef UNITY_UINT64 UNITY_UINT; + typedef UNITY_INT64 UNITY_INT; + +#endif + +/*------------------------------------------------------- + * Pointer Support + *-------------------------------------------------------*/ + +#if (UNITY_POINTER_WIDTH == 32) +#define UNITY_PTR_TO_INT UNITY_INT32 +#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX32 +#elif (UNITY_POINTER_WIDTH == 64) +#define UNITY_PTR_TO_INT UNITY_INT64 +#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX64 +#elif (UNITY_POINTER_WIDTH == 16) +#define UNITY_PTR_TO_INT UNITY_INT16 +#define UNITY_DISPLAY_STYLE_POINTER UNITY_DISPLAY_STYLE_HEX16 +#else + #error Invalid UNITY_POINTER_WIDTH specified! (16, 32 or 64 are supported) +#endif + +#ifndef UNITY_PTR_ATTRIBUTE +#define UNITY_PTR_ATTRIBUTE +#endif + +#ifndef UNITY_INTERNAL_PTR +#define UNITY_INTERNAL_PTR UNITY_PTR_ATTRIBUTE const void* +#endif + +/*------------------------------------------------------- + * Float Support + *-------------------------------------------------------*/ + +#ifdef UNITY_EXCLUDE_FLOAT + +/* No Floating Point Support */ +#ifndef UNITY_EXCLUDE_DOUBLE +#define UNITY_EXCLUDE_DOUBLE /* Remove double when excluding float support */ +#endif +#ifndef UNITY_EXCLUDE_FLOAT_PRINT +#define UNITY_EXCLUDE_FLOAT_PRINT +#endif + +#else + +/* Floating Point Support */ +#ifndef UNITY_FLOAT_PRECISION +#define UNITY_FLOAT_PRECISION (0.00001f) +#endif +#ifndef UNITY_FLOAT_TYPE +#define UNITY_FLOAT_TYPE float +#endif +typedef UNITY_FLOAT_TYPE UNITY_FLOAT; + +/* isinf & isnan macros should be provided by math.h */ +#ifndef isinf +/* The value of Inf - Inf is NaN */ +#define isinf(n) (isnan((n) - (n)) && !isnan(n)) +#endif + +#ifndef isnan +/* NaN is the only floating point value that does NOT equal itself. + * Therefore if n != n, then it is NaN. */ +#define isnan(n) ((n != n) ? 1 : 0) +#endif + +#endif + +/*------------------------------------------------------- + * Double Float Support + *-------------------------------------------------------*/ + +/* unlike float, we DON'T include by default */ +#if defined(UNITY_EXCLUDE_DOUBLE) || !defined(UNITY_INCLUDE_DOUBLE) + + /* No Floating Point Support */ + #ifndef UNITY_EXCLUDE_DOUBLE + #define UNITY_EXCLUDE_DOUBLE + #else + #undef UNITY_INCLUDE_DOUBLE + #endif + + #ifndef UNITY_EXCLUDE_FLOAT + #ifndef UNITY_DOUBLE_TYPE + #define UNITY_DOUBLE_TYPE double + #endif + typedef UNITY_FLOAT UNITY_DOUBLE; + /* For parameter in UnityPrintFloat(UNITY_DOUBLE), which aliases to double or float */ + #endif + +#else + + /* Double Floating Point Support */ + #ifndef UNITY_DOUBLE_PRECISION + #define UNITY_DOUBLE_PRECISION (1e-12) + #endif + + #ifndef UNITY_DOUBLE_TYPE + #define UNITY_DOUBLE_TYPE double + #endif + typedef UNITY_DOUBLE_TYPE UNITY_DOUBLE; + +#endif + +/*------------------------------------------------------- + * Output Method: stdout (DEFAULT) + *-------------------------------------------------------*/ +#ifndef UNITY_OUTPUT_CHAR +/* Default to using putchar, which is defined in stdio.h */ +#include +#define UNITY_OUTPUT_CHAR(a) (void)putchar(a) +#else + /* If defined as something else, make sure we declare it here so it's ready for use */ + #ifndef UNITY_OMIT_OUTPUT_CHAR_HEADER_DECLARATION +extern void UNITY_OUTPUT_CHAR(int); + #endif +#endif + +#ifndef UNITY_OUTPUT_FLUSH +/* Default to using fflush, which is defined in stdio.h */ +#include +#define UNITY_OUTPUT_FLUSH (void)fflush(stdout) +#else + /* If defined as something else, make sure we declare it here so it's ready for use */ + #ifndef UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION +extern void UNITY_OUTPUT_FLUSH(void); + #endif +#endif + +#ifndef UNITY_OUTPUT_FLUSH +#define UNITY_FLUSH_CALL() +#else +#define UNITY_FLUSH_CALL() UNITY_OUTPUT_FLUSH +#endif + +#ifndef UNITY_PRINT_EOL +#define UNITY_PRINT_EOL() UNITY_OUTPUT_CHAR('\n') +#endif + +#ifndef UNITY_OUTPUT_START +#define UNITY_OUTPUT_START() +#endif + +#ifndef UNITY_OUTPUT_COMPLETE +#define UNITY_OUTPUT_COMPLETE() +#endif + +/*------------------------------------------------------- + * Footprint + *-------------------------------------------------------*/ + +#ifndef UNITY_LINE_TYPE +#define UNITY_LINE_TYPE UNITY_UINT +#endif + +#ifndef UNITY_COUNTER_TYPE +#define UNITY_COUNTER_TYPE UNITY_UINT +#endif + +/*------------------------------------------------------- + * Language Features Available + *-------------------------------------------------------*/ +#if !defined(UNITY_WEAK_ATTRIBUTE) && !defined(UNITY_WEAK_PRAGMA) +# ifdef __GNUC__ /* includes clang */ +# if !(defined(__WIN32__) && defined(__clang__)) && !defined(__TMS470__) +# define UNITY_WEAK_ATTRIBUTE __attribute__((weak)) +# endif +# endif +#endif + +#ifdef UNITY_NO_WEAK +# undef UNITY_WEAK_ATTRIBUTE +# undef UNITY_WEAK_PRAGMA +#endif + + +/*------------------------------------------------------- + * Internal Structs Needed + *-------------------------------------------------------*/ + +typedef void (*UnityTestFunction)(void); + +#define UNITY_DISPLAY_RANGE_INT (0x10) +#define UNITY_DISPLAY_RANGE_UINT (0x20) +#define UNITY_DISPLAY_RANGE_HEX (0x40) + +typedef enum +{ +UNITY_DISPLAY_STYLE_INT = sizeof(int)+ UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT8 = 1 + UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT16 = 2 + UNITY_DISPLAY_RANGE_INT, + UNITY_DISPLAY_STYLE_INT32 = 4 + UNITY_DISPLAY_RANGE_INT, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_INT64 = 8 + UNITY_DISPLAY_RANGE_INT, +#endif + +UNITY_DISPLAY_STYLE_UINT = sizeof(unsigned) + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT8 = 1 + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT16 = 2 + UNITY_DISPLAY_RANGE_UINT, + UNITY_DISPLAY_STYLE_UINT32 = 4 + UNITY_DISPLAY_RANGE_UINT, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_UINT64 = 8 + UNITY_DISPLAY_RANGE_UINT, +#endif + + UNITY_DISPLAY_STYLE_HEX8 = 1 + UNITY_DISPLAY_RANGE_HEX, + UNITY_DISPLAY_STYLE_HEX16 = 2 + UNITY_DISPLAY_RANGE_HEX, + UNITY_DISPLAY_STYLE_HEX32 = 4 + UNITY_DISPLAY_RANGE_HEX, +#ifdef UNITY_SUPPORT_64 + UNITY_DISPLAY_STYLE_HEX64 = 8 + UNITY_DISPLAY_RANGE_HEX, +#endif + + UNITY_DISPLAY_STYLE_UNKNOWN +} UNITY_DISPLAY_STYLE_T; + +#ifndef UNITY_EXCLUDE_FLOAT +typedef enum UNITY_FLOAT_TRAIT +{ + UNITY_FLOAT_IS_NOT_INF = 0, + UNITY_FLOAT_IS_INF, + UNITY_FLOAT_IS_NOT_NEG_INF, + UNITY_FLOAT_IS_NEG_INF, + UNITY_FLOAT_IS_NOT_NAN, + UNITY_FLOAT_IS_NAN, + UNITY_FLOAT_IS_NOT_DET, + UNITY_FLOAT_IS_DET, + UNITY_FLOAT_INVALID_TRAIT +} UNITY_FLOAT_TRAIT_T; +#endif + +struct UNITY_STORAGE_T +{ + const char* TestFile; + const char* CurrentTestName; +#ifndef UNITY_EXCLUDE_DETAILS + const char* CurrentDetail1; + const char* CurrentDetail2; +#endif + UNITY_LINE_TYPE CurrentTestLineNumber; + UNITY_COUNTER_TYPE NumberOfTests; + UNITY_COUNTER_TYPE TestFailures; + UNITY_COUNTER_TYPE TestIgnores; + UNITY_COUNTER_TYPE CurrentTestFailed; + UNITY_COUNTER_TYPE CurrentTestIgnored; +#ifndef UNITY_EXCLUDE_SETJMP_H + jmp_buf AbortFrame; +#endif +}; + +extern struct UNITY_STORAGE_T Unity; + +/*------------------------------------------------------- + * Test Suite Management + *-------------------------------------------------------*/ + +void UnityBegin(const char* filename); +int UnityEnd(void); +void UnityConcludeTest(void); +void UnityDefaultTestRun(UnityTestFunction Func, const char* FuncName, const int FuncLineNum); + +/*------------------------------------------------------- + * Details Support + *-------------------------------------------------------*/ + +#ifdef UNITY_EXCLUDE_DETAILS +#define UNITY_CLR_DETAILS() +#define UNITY_SET_DETAIL(d1) +#define UNITY_SET_DETAILS(d1,d2) +#else +#define UNITY_CLR_DETAILS() { Unity.CurrentDetail1 = 0; Unity.CurrentDetail2 = 0; } +#define UNITY_SET_DETAIL(d1) { Unity.CurrentDetail1 = d1; Unity.CurrentDetail2 = 0; } +#define UNITY_SET_DETAILS(d1,d2) { Unity.CurrentDetail1 = d1; Unity.CurrentDetail2 = d2; } + +#ifndef UNITY_DETAIL1_NAME +#define UNITY_DETAIL1_NAME "Function" +#endif + +#ifndef UNITY_DETAIL2_NAME +#define UNITY_DETAIL2_NAME "Argument" +#endif +#endif + +/*------------------------------------------------------- + * Test Output + *-------------------------------------------------------*/ + +void UnityPrint(const char* string); +void UnityPrintLen(const char* string, const UNITY_UINT32 length); +void UnityPrintMask(const UNITY_UINT mask, const UNITY_UINT number); +void UnityPrintNumberByStyle(const UNITY_INT number, const UNITY_DISPLAY_STYLE_T style); +void UnityPrintNumber(const UNITY_INT number); +void UnityPrintNumberUnsigned(const UNITY_UINT number); +void UnityPrintNumberHex(const UNITY_UINT number, const char nibbles); + +#ifndef UNITY_EXCLUDE_FLOAT_PRINT +void UnityPrintFloat(const UNITY_DOUBLE input_number); +#endif + +/*------------------------------------------------------- + * Test Assertion Functions + *------------------------------------------------------- + * Use the macros below this section instead of calling + * these directly. The macros have a consistent naming + * convention and will pull in file and line information + * for you. */ + +void UnityAssertEqualNumber(const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityAssertEqualIntArray(UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityAssertBits(const UNITY_INT mask, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualString(const char* expected, + const char* actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualStringLen(const char* expected, + const char* actual, + const UNITY_UINT32 length, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualStringArray( const char** expected, + const char** actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualMemory( UNITY_INTERNAL_PTR expected, + UNITY_INTERNAL_PTR actual, + const UNITY_UINT32 length, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertNumbersWithin(const UNITY_UINT delta, + const UNITY_INT expected, + const UNITY_INT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_DISPLAY_STYLE_T style); + +void UnityFail(const char* message, const UNITY_LINE_TYPE line); + +void UnityIgnore(const char* message, const UNITY_LINE_TYPE line); + +#ifndef UNITY_EXCLUDE_FLOAT +void UnityAssertFloatsWithin(const UNITY_FLOAT delta, + const UNITY_FLOAT expected, + const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualFloatArray(UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* expected, + UNITY_PTR_ATTRIBUTE const UNITY_FLOAT* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertFloatSpecial(const UNITY_FLOAT actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style); +#endif + +#ifndef UNITY_EXCLUDE_DOUBLE +void UnityAssertDoublesWithin(const UNITY_DOUBLE delta, + const UNITY_DOUBLE expected, + const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertEqualDoubleArray(UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* expected, + UNITY_PTR_ATTRIBUTE const UNITY_DOUBLE* actual, + const UNITY_UINT32 num_elements, + const char* msg, + const UNITY_LINE_TYPE lineNumber); + +void UnityAssertDoubleSpecial(const UNITY_DOUBLE actual, + const char* msg, + const UNITY_LINE_TYPE lineNumber, + const UNITY_FLOAT_TRAIT_T style); +#endif + +/*------------------------------------------------------- + * Error Strings We Might Need + *-------------------------------------------------------*/ + +extern const char UnityStrErrFloat[]; +extern const char UnityStrErrDouble[]; +extern const char UnityStrErr64[]; + +/*------------------------------------------------------- + * Test Running Macros + *-------------------------------------------------------*/ + +#ifndef UNITY_EXCLUDE_SETJMP_H +#define TEST_PROTECT() (setjmp(Unity.AbortFrame) == 0) +#define TEST_ABORT() longjmp(Unity.AbortFrame, 1) +#else +#define TEST_PROTECT() 1 +#define TEST_ABORT() return +#endif + +/* This tricky series of macros gives us an optional line argument to treat it as RUN_TEST(func, num=__LINE__) */ +#ifndef RUN_TEST +#ifdef __STDC_VERSION__ +#if __STDC_VERSION__ >= 199901L +#define RUN_TEST(...) UnityDefaultTestRun(RUN_TEST_FIRST(__VA_ARGS__), RUN_TEST_SECOND(__VA_ARGS__)) +#define RUN_TEST_FIRST(...) RUN_TEST_FIRST_HELPER(__VA_ARGS__, throwaway) +#define RUN_TEST_FIRST_HELPER(first, ...) (first), #first +#define RUN_TEST_SECOND(...) RUN_TEST_SECOND_HELPER(__VA_ARGS__, __LINE__, throwaway) +#define RUN_TEST_SECOND_HELPER(first, second, ...) (second) +#endif +#endif +#endif + +/* If we can't do the tricky version, we'll just have to require them to always include the line number */ +#ifndef RUN_TEST +#ifdef CMOCK +#define RUN_TEST(func, num) UnityDefaultTestRun(func, #func, num) +#else +#define RUN_TEST(func) UnityDefaultTestRun(func, #func, __LINE__) +#endif +#endif + +#define TEST_LINE_NUM (Unity.CurrentTestLineNumber) +#define TEST_IS_IGNORED (Unity.CurrentTestIgnored) +#define UNITY_NEW_TEST(a) \ + Unity.CurrentTestName = (a); \ + Unity.CurrentTestLineNumber = (UNITY_LINE_TYPE)(__LINE__); \ + Unity.NumberOfTests++; + +#ifndef UNITY_BEGIN +#define UNITY_BEGIN() UnityBegin(__FILE__) +#endif + +#ifndef UNITY_END +#define UNITY_END() UnityEnd() +#endif + +/*----------------------------------------------- + * Command Line Argument Support + *-----------------------------------------------*/ + +#ifdef UNITY_USE_COMMAND_LINE_ARGS +int UnityParseOptions(int argc, char** argv); +int UnityTestMatches(void); +#endif + +/*------------------------------------------------------- + * Basic Fail and Ignore + *-------------------------------------------------------*/ + +#define UNITY_TEST_FAIL(line, message) UnityFail( (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_IGNORE(line, message) UnityIgnore( (message), (UNITY_LINE_TYPE)(line)) + +/*------------------------------------------------------- + * Test Asserts + *-------------------------------------------------------*/ + +#define UNITY_TEST_ASSERT(condition, line, message) if (condition) {} else {UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), (message));} +#define UNITY_TEST_ASSERT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) == NULL), (UNITY_LINE_TYPE)(line), (message)) +#define UNITY_TEST_ASSERT_NOT_NULL(pointer, line, message) UNITY_TEST_ASSERT(((pointer) != NULL), (UNITY_LINE_TYPE)(line), (message)) + +#define UNITY_TEST_ASSERT_EQUAL_INT(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_EQUAL_INT8(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT8 )(expected), (UNITY_INT)(UNITY_INT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_EQUAL_INT16(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)(expected), (UNITY_INT)(UNITY_INT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_EQUAL_INT32(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT32)(expected), (UNITY_INT)(UNITY_INT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_EQUAL_UINT(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_EQUAL_UINT8(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_UINT8 )(expected), (UNITY_INT)(UNITY_UINT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_EQUAL_UINT16(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_UINT16)(expected), (UNITY_INT)(UNITY_UINT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_EQUAL_UINT32(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_UINT32)(expected), (UNITY_INT)(UNITY_UINT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_EQUAL_HEX8(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT8 )(expected), (UNITY_INT)(UNITY_INT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_EQUAL_HEX16(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT16)(expected), (UNITY_INT)(UNITY_INT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_EQUAL_HEX32(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(UNITY_INT32)(expected), (UNITY_INT)(UNITY_INT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_BITS(mask, expected, actual, line, message) UnityAssertBits((UNITY_INT)(mask), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line)) + +#define UNITY_TEST_ASSERT_INT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_INT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT8 )(delta), (UNITY_INT)(UNITY_INT8 )(expected), (UNITY_INT)(UNITY_INT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_INT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT16)(delta), (UNITY_INT)(UNITY_INT16)(expected), (UNITY_INT)(UNITY_INT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_INT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT32)(delta), (UNITY_INT)(UNITY_INT32)(expected), (UNITY_INT)(UNITY_INT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_UINT_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_UINT8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT8 )(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_UINT16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT16)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_UINT32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT32)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_HEX8_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT8 )(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT8 )(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_HEX16_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT16)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT16)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_HEX32_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((UNITY_UINT32)(delta), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(expected), (UNITY_INT)(UNITY_UINT)(UNITY_UINT32)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) + +#define UNITY_TEST_ASSERT_EQUAL_PTR(expected, actual, line, message) UnityAssertEqualNumber((UNITY_PTR_TO_INT)(expected), (UNITY_PTR_TO_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER) +#define UNITY_TEST_ASSERT_EQUAL_STRING(expected, actual, line, message) UnityAssertEqualString((const char*)(expected), (const char*)(actual), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_STRING_LEN(expected, actual, len, line, message) UnityAssertEqualStringLen((const char*)(expected), (const char*)(actual), (UNITY_UINT32)(len), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_MEMORY(expected, actual, len, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), 1, (message), (UNITY_LINE_TYPE)(line)) + +#define UNITY_TEST_ASSERT_EQUAL_INT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT) +#define UNITY_TEST_ASSERT_EQUAL_INT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT8) +#define UNITY_TEST_ASSERT_EQUAL_INT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT16) +#define UNITY_TEST_ASSERT_EQUAL_INT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT32) +#define UNITY_TEST_ASSERT_EQUAL_UINT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT) +#define UNITY_TEST_ASSERT_EQUAL_UINT8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT8) +#define UNITY_TEST_ASSERT_EQUAL_UINT16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT16) +#define UNITY_TEST_ASSERT_EQUAL_UINT32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT32) +#define UNITY_TEST_ASSERT_EQUAL_HEX8_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX8) +#define UNITY_TEST_ASSERT_EQUAL_HEX16_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX16) +#define UNITY_TEST_ASSERT_EQUAL_HEX32_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX32) +#define UNITY_TEST_ASSERT_EQUAL_PTR_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_POINTER) +#define UNITY_TEST_ASSERT_EQUAL_STRING_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualStringArray((const char**)(expected), (const char**)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_MEMORY_ARRAY(expected, actual, len, num_elements, line, message) UnityAssertEqualMemory((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(len), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line)) + +#ifdef UNITY_SUPPORT_64 +#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UnityAssertEqualNumber((UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualIntArray((UNITY_INTERNAL_PTR)(expected), (UNITY_INTERNAL_PTR)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_INT64) +#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_UINT64) +#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UnityAssertNumbersWithin((delta), (UNITY_INT)(expected), (UNITY_INT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_DISPLAY_STYLE_HEX64) +#else +#define UNITY_TEST_ASSERT_EQUAL_INT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_INT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_UINT64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_EQUAL_HEX64_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_INT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_UINT64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#define UNITY_TEST_ASSERT_HEX64_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErr64) +#endif + +#ifdef UNITY_EXCLUDE_FLOAT +#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrFloat) +#else +#define UNITY_TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual, line, message) UnityAssertFloatsWithin((UNITY_FLOAT)(delta), (UNITY_FLOAT)(expected), (UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT(expected, actual, line, message) UNITY_TEST_ASSERT_FLOAT_WITHIN((UNITY_FLOAT)(expected) * (UNITY_FLOAT)UNITY_FLOAT_PRECISION, (UNITY_FLOAT)(expected), (UNITY_FLOAT)(actual), (UNITY_LINE_TYPE)(line), (message)) +#define UNITY_TEST_ASSERT_EQUAL_FLOAT_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualFloatArray((UNITY_FLOAT*)(expected), (UNITY_FLOAT*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)(line)) +#define UNITY_TEST_ASSERT_FLOAT_IS_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NEG_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NAN(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN) +#define UNITY_TEST_ASSERT_FLOAT_IS_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_NAN(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN) +#define UNITY_TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(actual, line, message) UnityAssertFloatSpecial((UNITY_FLOAT)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET) +#endif + +#ifdef UNITY_EXCLUDE_DOUBLE +#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UNITY_TEST_FAIL((UNITY_LINE_TYPE)(line), UnityStrErrDouble) +#else +#define UNITY_TEST_ASSERT_DOUBLE_WITHIN(delta, expected, actual, line, message) UnityAssertDoublesWithin((UNITY_DOUBLE)(delta), (UNITY_DOUBLE)(expected), (UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)line) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE(expected, actual, line, message) UNITY_TEST_ASSERT_DOUBLE_WITHIN((UNITY_DOUBLE)(expected) * (UNITY_DOUBLE)UNITY_DOUBLE_PRECISION, (UNITY_DOUBLE)expected, (UNITY_DOUBLE)actual, (UNITY_LINE_TYPE)(line), message) +#define UNITY_TEST_ASSERT_EQUAL_DOUBLE_ARRAY(expected, actual, num_elements, line, message) UnityAssertEqualDoubleArray((UNITY_DOUBLE*)(expected), (UNITY_DOUBLE*)(actual), (UNITY_UINT32)(num_elements), (message), (UNITY_LINE_TYPE)line) +#define UNITY_TEST_ASSERT_DOUBLE_IS_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NEG_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NAN(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NAN) +#define UNITY_TEST_ASSERT_DOUBLE_IS_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_DET) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NEG_INF) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_NAN(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_NAN) +#define UNITY_TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(actual, line, message) UnityAssertDoubleSpecial((UNITY_DOUBLE)(actual), (message), (UNITY_LINE_TYPE)(line), UNITY_FLOAT_IS_NOT_DET) +#endif + +/* End of UNITY_INTERNALS_H */ +#endif diff --git a/test/Makefile b/test/Makefile new file mode 100644 index 0000000..03b59bc --- /dev/null +++ b/test/Makefile @@ -0,0 +1,63 @@ +CC = gcc +ifeq ($(shell uname -s), Darwin) +CC = clang +endif +ifeq ($(findstring clang, $(CC)), clang) +E = -Weverything +CFLAGS += $E -Wno-unknown-warning-option -Wno-missing-prototypes +CFLAGS += -Wno-unused-macros -Wno-padded -Wno-missing-noreturn +endif +CFLAGS += -std=c99 -pedantic -Wall -Wextra -Wconversion -Werror +CFLAGS += -Wno-switch-enum -Wno-double-promotion +CFLAGS += -Wbad-function-cast -Wcast-qual -Wold-style-definition -Wshadow -Wstrict-overflow \ + -Wstrict-prototypes -Wswitch-default -Wundef +#DEBUG = -O0 -g +CFLAGS += $(DEBUG) +DEFINES = -D UNITY_OUTPUT_CHAR=putcharSpy +DEFINES += -D UNITY_SUPPORT_64 -D UNITY_INCLUDE_DOUBLE +SRC = ../src/unity.c tests/testunity.c build/testunityRunner.c +INC_DIR = -I ../src +COV_FLAGS = -fprofile-arcs -ftest-coverage -I ../../src +BUILD_DIR = build +TARGET = build/testunity-cov.exe + +# To generate coverage, call 'make -s', the default target runs. +# For verbose output of all the tests, run 'make test'. +default: coverage +.PHONY: default coverage test clean +coverage: DEFINES += -D UNITY_NO_WEAK +coverage: $(BUILD_DIR)/testunityRunner.c + cd $(BUILD_DIR) && \ + $(CC) $(CFLAGS) $(DEFINES) $(foreach i,$(SRC), ../$i) $(COV_FLAGS) -o ../$(TARGET) + rm -f $(BUILD_DIR)/*.gcda + ./$(TARGET) | grep 'Tests\|]]]' -A1 + cd $(BUILD_DIR) && \ + gcov unity.c | head -3 + grep '###' $(BUILD_DIR)/unity.c.gcov -C2 || true + +test: $(BUILD_DIR)/testunityRunner.c + $(CC) $(CFLAGS) $(DEFINES) $(INC_DIR) $(SRC) -o $(TARGET) + ./$(TARGET) + +# Compile only, for testing that preprocessor detection works +UNITY_C_ONLY =-c ../src/unity.c -o $(BUILD_DIR)/unity.o +intDetection: + $(CC) $(CFLAGS) $(INC_DIR) $(UNITY_C_ONLY) -D UNITY_EXCLUDE_STDINT_H + $(CC) $(CFLAGS) $(INC_DIR) $(UNITY_C_ONLY) -D UNITY_EXCLUDE_LIMITS_H + +$(BUILD_DIR)/testunityRunner.c: tests/testunity.c | $(BUILD_DIR) + awk $(AWK_SCRIPT) tests/testunity.c > $@ + +AWK_SCRIPT=\ + '/^void test/{ declarations[d++]=$$0; gsub(/\(?void\)? ?/,""); tests[t++]=$$0; line[u++]=NR } \ + END{ print "\#include \"unity.h\" /* Autogenerated by awk in Makefile */" ; \ + for (i=0; i +#include +#include "CException.h" +#include "funky.h" +#include "stanky.h" +#include + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_def.c b/test/expectdata/testsample_def.c new file mode 100644 index 0000000..b8ad559 --- /dev/null +++ b/test/expectdata/testsample_def.c @@ -0,0 +1,57 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "funky.h" +#include "stanky.h" +#include + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_head1.c b/test/expectdata/testsample_head1.c new file mode 100644 index 0000000..1d01551 --- /dev/null +++ b/test/expectdata/testsample_head1.c @@ -0,0 +1,55 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "testsample_head1.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_head1.h b/test/expectdata/testsample_head1.h new file mode 100644 index 0000000..da6b7ab --- /dev/null +++ b/test/expectdata/testsample_head1.h @@ -0,0 +1,15 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ +#ifndef _TESTSAMPLE_HEAD1_H +#define _TESTSAMPLE_HEAD1_H + +#include "unity.h" +#include "funky.h" +#include "stanky.h" +#include + +void test_TheFirstThingToTest(void); +void test_TheSecondThingToTest(void); +void test_TheThirdThingToTest(void); +void test_TheFourthThingToTest(void); +#endif + diff --git a/test/expectdata/testsample_mock_cmd.c b/test/expectdata/testsample_mock_cmd.c new file mode 100644 index 0000000..45a09af --- /dev/null +++ b/test/expectdata/testsample_mock_cmd.c @@ -0,0 +1,80 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + CEXCEPTION_T e; \ + Try { \ + setUp(); \ + TestFunc(); \ + } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "CException.h" +#include "funky.h" +#include +#include "Mockstanky.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_def.c b/test/expectdata/testsample_mock_def.c new file mode 100644 index 0000000..a7a2607 --- /dev/null +++ b/test/expectdata/testsample_mock_def.c @@ -0,0 +1,76 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "funky.h" +#include +#include "Mockstanky.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_head1.c b/test/expectdata/testsample_mock_head1.c new file mode 100644 index 0000000..45829fe --- /dev/null +++ b/test/expectdata/testsample_mock_head1.c @@ -0,0 +1,75 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "testsample_mock_head1.h" +#include "Mockstanky.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_head1.h b/test/expectdata/testsample_mock_head1.h new file mode 100644 index 0000000..30c509a --- /dev/null +++ b/test/expectdata/testsample_mock_head1.h @@ -0,0 +1,13 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ +#ifndef _TESTSAMPLE_MOCK_HEAD1_H +#define _TESTSAMPLE_MOCK_HEAD1_H + +#include "unity.h" +#include "cmock.h" +#include "funky.h" +#include + +void test_TheFirstThingToTest(void); +void test_TheSecondThingToTest(void); +#endif + diff --git a/test/expectdata/testsample_mock_new1.c b/test/expectdata/testsample_mock_new1.c new file mode 100644 index 0000000..0061822 --- /dev/null +++ b/test/expectdata/testsample_mock_new1.c @@ -0,0 +1,89 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + CEXCEPTION_T e; \ + Try { \ + setUp(); \ + TestFunc(); \ + } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "CException.h" +#include "one.h" +#include "two.h" +#include "funky.h" +#include +#include "Mockstanky.h" + +int GlobalExpectCount; +int GlobalVerifyOrder; +char* GlobalOrderError; + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + GlobalExpectCount = 0; + GlobalVerifyOrder = 0; + GlobalOrderError = NULL; + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_new2.c b/test/expectdata/testsample_mock_new2.c new file mode 100644 index 0000000..ee63cdc --- /dev/null +++ b/test/expectdata/testsample_mock_new2.c @@ -0,0 +1,89 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "funky.h" +#include +#include "Mockstanky.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Suite Setup=====*/ +static int suite_setup(void) +{ +a_custom_setup(); +} + +/*=======Suite Teardown=====*/ +static int suite_teardown(int num_failures) +{ +a_custom_teardown(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + suite_setup(); + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return suite_teardown(UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_param.c b/test/expectdata/testsample_mock_param.c new file mode 100644 index 0000000..a42b7de --- /dev/null +++ b/test/expectdata/testsample_mock_param.c @@ -0,0 +1,77 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST_NO_ARGS +#define RUN_TEST(TestFunc, TestLineNum, ...) \ +{ \ + Unity.CurrentTestName = #TestFunc "(" #__VA_ARGS__ ")"; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(__VA_ARGS__); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "funky.h" +#include +#include "Mockstanky.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21, RUN_TEST_NO_ARGS); + RUN_TEST(test_TheSecondThingToTest, 43, RUN_TEST_NO_ARGS); + + CMock_Guts_MemFreeFinal(); + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_run1.c b/test/expectdata/testsample_mock_run1.c new file mode 100644 index 0000000..0061822 --- /dev/null +++ b/test/expectdata/testsample_mock_run1.c @@ -0,0 +1,89 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + CEXCEPTION_T e; \ + Try { \ + setUp(); \ + TestFunc(); \ + } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "CException.h" +#include "one.h" +#include "two.h" +#include "funky.h" +#include +#include "Mockstanky.h" + +int GlobalExpectCount; +int GlobalVerifyOrder; +char* GlobalOrderError; + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + GlobalExpectCount = 0; + GlobalVerifyOrder = 0; + GlobalOrderError = NULL; + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_run2.c b/test/expectdata/testsample_mock_run2.c new file mode 100644 index 0000000..ee63cdc --- /dev/null +++ b/test/expectdata/testsample_mock_run2.c @@ -0,0 +1,89 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "funky.h" +#include +#include "Mockstanky.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Suite Setup=====*/ +static int suite_setup(void) +{ +a_custom_setup(); +} + +/*=======Suite Teardown=====*/ +static int suite_teardown(int num_failures) +{ +a_custom_teardown(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + suite_setup(); + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return suite_teardown(UnityEnd()); +} diff --git a/test/expectdata/testsample_mock_yaml.c b/test/expectdata/testsample_mock_yaml.c new file mode 100644 index 0000000..a24bb5a --- /dev/null +++ b/test/expectdata/testsample_mock_yaml.c @@ -0,0 +1,90 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + CMock_Init(); \ + UNITY_CLR_DETAILS(); \ + if (TEST_PROTECT()) \ + { \ + CEXCEPTION_T e; \ + Try { \ + setUp(); \ + TestFunc(); \ + } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + CMock_Verify(); \ + } \ + CMock_Destroy(); \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include "cmock.h" +#include +#include +#include "CException.h" +#include "two.h" +#include "three.h" +#include +#include "funky.h" +#include +#include "Mockstanky.h" + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); + + +/*=======Mock Management=====*/ +static void CMock_Init(void) +{ + Mockstanky_Init(); +} +static void CMock_Verify(void) +{ + Mockstanky_Verify(); +} +static void CMock_Destroy(void) +{ + Mockstanky_Destroy(); +} + +/*=======Suite Setup=====*/ +static int suite_setup(void) +{ +a_yaml_setup(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + CMock_Verify(); + CMock_Destroy(); + tearDown(); + CMock_Init(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + suite_setup(); + UnityBegin("testdata/mocksample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + + CMock_Guts_MemFreeFinal(); + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_new1.c b/test/expectdata/testsample_new1.c new file mode 100644 index 0000000..7dcd3fd --- /dev/null +++ b/test/expectdata/testsample_new1.c @@ -0,0 +1,67 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + CEXCEPTION_T e; \ + Try { \ + setUp(); \ + TestFunc(); \ + } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "CException.h" +#include "one.h" +#include "two.h" +#include "funky.h" +#include "stanky.h" +#include + +int GlobalExpectCount; +int GlobalVerifyOrder; +char* GlobalOrderError; + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_new2.c b/test/expectdata/testsample_new2.c new file mode 100644 index 0000000..c98c697 --- /dev/null +++ b/test/expectdata/testsample_new2.c @@ -0,0 +1,70 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "funky.h" +#include "stanky.h" +#include + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Suite Setup=====*/ +static int suite_setup(void) +{ +a_custom_setup(); +} + +/*=======Suite Teardown=====*/ +static int suite_teardown(int num_failures) +{ +a_custom_teardown(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + suite_setup(); + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return suite_teardown(UnityEnd()); +} diff --git a/test/expectdata/testsample_param.c b/test/expectdata/testsample_param.c new file mode 100644 index 0000000..adf6c26 --- /dev/null +++ b/test/expectdata/testsample_param.c @@ -0,0 +1,58 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST_NO_ARGS +#define RUN_TEST(TestFunc, TestLineNum, ...) \ +{ \ + Unity.CurrentTestName = #TestFunc "(" #__VA_ARGS__ ")"; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(__VA_ARGS__); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "funky.h" +#include "stanky.h" +#include + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21, RUN_TEST_NO_ARGS); + RUN_TEST(test_TheSecondThingToTest, 43, RUN_TEST_NO_ARGS); + RUN_TEST(test_TheThirdThingToTest, 53, RUN_TEST_NO_ARGS); + RUN_TEST(test_TheFourthThingToTest, 58, RUN_TEST_NO_ARGS); + + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_run1.c b/test/expectdata/testsample_run1.c new file mode 100644 index 0000000..7dcd3fd --- /dev/null +++ b/test/expectdata/testsample_run1.c @@ -0,0 +1,67 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + CEXCEPTION_T e; \ + Try { \ + setUp(); \ + TestFunc(); \ + } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "CException.h" +#include "one.h" +#include "two.h" +#include "funky.h" +#include "stanky.h" +#include + +int GlobalExpectCount; +int GlobalVerifyOrder; +char* GlobalOrderError; + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return (UnityEnd()); +} diff --git a/test/expectdata/testsample_run2.c b/test/expectdata/testsample_run2.c new file mode 100644 index 0000000..c98c697 --- /dev/null +++ b/test/expectdata/testsample_run2.c @@ -0,0 +1,70 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + setUp(); \ + TestFunc(); \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "funky.h" +#include "stanky.h" +#include + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Suite Setup=====*/ +static int suite_setup(void) +{ +a_custom_setup(); +} + +/*=======Suite Teardown=====*/ +static int suite_teardown(int num_failures) +{ +a_custom_teardown(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + suite_setup(); + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return suite_teardown(UnityEnd()); +} diff --git a/test/expectdata/testsample_yaml.c b/test/expectdata/testsample_yaml.c new file mode 100644 index 0000000..3316024 --- /dev/null +++ b/test/expectdata/testsample_yaml.c @@ -0,0 +1,71 @@ +/* AUTOGENERATED FILE. DO NOT EDIT. */ + +/*=======Test Runner Used To Run Each Test Below=====*/ +#define RUN_TEST(TestFunc, TestLineNum) \ +{ \ + Unity.CurrentTestName = #TestFunc; \ + Unity.CurrentTestLineNumber = TestLineNum; \ + Unity.NumberOfTests++; \ + if (TEST_PROTECT()) \ + { \ + CEXCEPTION_T e; \ + Try { \ + setUp(); \ + TestFunc(); \ + } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, "Unhandled Exception!"); } \ + } \ + if (TEST_PROTECT() && !TEST_IS_IGNORED) \ + { \ + tearDown(); \ + } \ + UnityConcludeTest(); \ +} + +/*=======Automagically Detected Files To Include=====*/ +#include "unity.h" +#include +#include +#include "CException.h" +#include "two.h" +#include "three.h" +#include +#include "funky.h" +#include "stanky.h" +#include + +/*=======External Functions This Runner Calls=====*/ +extern void setUp(void); +extern void tearDown(void); +extern void test_TheFirstThingToTest(void); +extern void test_TheSecondThingToTest(void); +extern void test_TheThirdThingToTest(void); +extern void test_TheFourthThingToTest(void); + + +/*=======Suite Setup=====*/ +static int suite_setup(void) +{ +a_yaml_setup(); +} + +/*=======Test Reset Option=====*/ +void resetTest(void); +void resetTest(void) +{ + tearDown(); + setUp(); +} + + +/*=======MAIN=====*/ +int main(void) +{ + suite_setup(); + UnityBegin("testdata/testsample.c"); + RUN_TEST(test_TheFirstThingToTest, 21); + RUN_TEST(test_TheSecondThingToTest, 43); + RUN_TEST(test_TheThirdThingToTest, 53); + RUN_TEST(test_TheFourthThingToTest, 58); + + return (UnityEnd()); +} diff --git a/test/rakefile b/test/rakefile new file mode 100644 index 0000000..000ab00 --- /dev/null +++ b/test/rakefile @@ -0,0 +1,72 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +UNITY_ROOT = File.expand_path(File.dirname(__FILE__)) + '/' +$verbose = false + +require 'rake' +require 'rake/clean' +require UNITY_ROOT + 'rakefile_helper' +require 'rspec/core/rake_task' + +TEMP_DIRS = [ + File.join(UNITY_ROOT, 'build'), + File.join(UNITY_ROOT, 'sandbox') +] + +TEMP_DIRS.each do |dir| + directory(dir) + CLOBBER.include(dir) +end + +task :prepare_for_tests => TEMP_DIRS + +include RakefileHelpers + +# Load proper GCC as defult configuration +DEFAULT_CONFIG_FILE = 'gcc_auto_stdint.yml' +configure_toolchain(DEFAULT_CONFIG_FILE) + +desc "Test unity with its own unit tests" +task :unit => [:prepare_for_tests] do + run_tests get_unit_test_files +end + +desc "Test unity's helper scripts" +task :scripts => [:prepare_for_tests] do + Dir['tests/test_*.rb'].each do |scriptfile| + require "./"+scriptfile + end +end + +desc "Run all rspecs" +RSpec::Core::RakeTask.new(:spec) do |t| + t.pattern = 'spec/**/*_spec.rb' +end + +desc "Generate test summary" +task :summary do + report_summary +end + +desc "Build and test Unity" +task :all => [:clean, :prepare_for_tests, :scripts, :unit, :summary] +task :default => [:clobber, :all] +task :ci => [:no_color, :default] +task :cruise => [:no_color, :default] + +desc "Load configuration" +task :config, :config_file do |t, args| + configure_toolchain(args[:config_file]) +end + +task :no_color do + $colour_output = false +end + +task :verbose do + $verbose = true +end diff --git a/test/rakefile_helper.rb b/test/rakefile_helper.rb new file mode 100644 index 0000000..17bfb27 --- /dev/null +++ b/test/rakefile_helper.rb @@ -0,0 +1,257 @@ +# ========================================== +# Unity Project - A Test Framework for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require 'yaml' +require 'fileutils' +require UNITY_ROOT + '../auto/unity_test_summary' +require UNITY_ROOT + '../auto/generate_test_runner' +require UNITY_ROOT + '../auto/colour_reporter' + +module RakefileHelpers + + C_EXTENSION = '.c' + + def load_configuration(config_file) + unless ($configured) + $cfg_file = "targets/#{config_file}" unless (config_file =~ /[\\|\/]/) + $cfg = YAML.load(File.read($cfg_file)) + $colour_output = false unless $cfg['colour'] + $configured = true if (config_file != DEFAULT_CONFIG_FILE) + end + end + + def configure_clean + CLEAN.include($cfg['compiler']['build_path'] + '*.*') unless $cfg['compiler']['build_path'].nil? + end + + def configure_toolchain(config_file=DEFAULT_CONFIG_FILE) + config_file += '.yml' unless config_file =~ /\.yml$/ + config_file = config_file unless config_file =~ /[\\|\/]/ + load_configuration(config_file) + configure_clean + end + + def get_unit_test_files + path = $cfg['compiler']['unit_tests_path'] + 'test*' + C_EXTENSION + path.gsub!(/\\/, '/') + FileList.new(path) + end + + def get_local_include_dirs + include_dirs = $cfg['compiler']['includes']['items'].dup + include_dirs.delete_if {|dir| dir.is_a?(Array)} + return include_dirs + end + + def extract_headers(filename) + includes = [] + lines = File.readlines(filename) + lines.each do |line| + m = line.match(/^\s*#include\s+\"\s*(.+\.[hH])\s*\"/) + if not m.nil? + includes << m[1] + end + end + return includes + end + + def find_source_file(header, paths) + paths.each do |dir| + src_file = dir + header.ext(C_EXTENSION) + if (File.exists?(src_file)) + return src_file + end + end + return nil + end + + def tackit(strings) + if strings.is_a?(Array) + result = "\"#{strings.join}\"" + else + result = strings + end + return result + end + + def squash(prefix, items) + result = '' + items.each { |item| result += " #{prefix}#{tackit(item)}" } + return result + end + + def should(behave, &block) + if block + puts "Should " + behave + yield block + else + puts "UNIMPLEMENTED CASE: Should #{behave}" + end + end + + def build_compiler_fields(inject_defines) + command = tackit($cfg['compiler']['path']) + if $cfg['compiler']['defines']['items'].nil? + defines = '' + else + defines = squash($cfg['compiler']['defines']['prefix'], $cfg['compiler']['defines']['items'] + ['UNITY_OUTPUT_CHAR=putcharSpy'] + inject_defines) + end + options = squash('', $cfg['compiler']['options']) + includes = squash($cfg['compiler']['includes']['prefix'], $cfg['compiler']['includes']['items']) + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :defines => defines, :options => options, :includes => includes} + end + + def compile(file, defines=[]) + compiler = build_compiler_fields(defines) + defines = + cmd_str = "#{compiler[:command]}#{compiler[:defines]}#{compiler[:options]}#{compiler[:includes]} #{file} " + + "#{$cfg['compiler']['object_files']['prefix']}#{$cfg['compiler']['object_files']['destination']}" + obj_file = "#{File.basename(file, C_EXTENSION)}#{$cfg['compiler']['object_files']['extension']}" + execute(cmd_str + obj_file) + return obj_file + end + + def build_linker_fields + command = tackit($cfg['linker']['path']) + if $cfg['linker']['options'].nil? + options = '' + else + options = squash('', $cfg['linker']['options']) + end + if ($cfg['linker']['includes'].nil? || $cfg['linker']['includes']['items'].nil?) + includes = '' + else + includes = squash($cfg['linker']['includes']['prefix'], $cfg['linker']['includes']['items']) + end + includes = includes.gsub(/\\ /, ' ').gsub(/\\\"/, '"').gsub(/\\$/, '') # Remove trailing slashes (for IAR) + return {:command => command, :options => options, :includes => includes} + end + + def link_it(exe_name, obj_list) + linker = build_linker_fields + cmd_str = "#{linker[:command]}#{linker[:options]}#{linker[:includes]} " + + (obj_list.map{|obj|"#{$cfg['linker']['object_files']['path']}#{obj} "}).join + + $cfg['linker']['bin_files']['prefix'] + ' ' + + $cfg['linker']['bin_files']['destination'] + + exe_name + $cfg['linker']['bin_files']['extension'] + execute(cmd_str) + end + + def build_simulator_fields + return nil if $cfg['simulator'].nil? + if $cfg['simulator']['path'].nil? + command = '' + else + command = (tackit($cfg['simulator']['path']) + ' ') + end + if $cfg['simulator']['pre_support'].nil? + pre_support = '' + else + pre_support = squash('', $cfg['simulator']['pre_support']) + end + if $cfg['simulator']['post_support'].nil? + post_support = '' + else + post_support = squash('', $cfg['simulator']['post_support']) + end + return {:command => command, :pre_support => pre_support, :post_support => post_support} + end + + def execute(command_string, ok_to_fail=false) + report command_string if $verbose + output = `#{command_string}`.chomp + report(output) if ($verbose && !output.nil? && (output.length > 0)) + if (($?.exitstatus != 0) && !ok_to_fail) + raise "Command failed. (Returned #{$?.exitstatus})" + end + return output + end + + def report_summary + summary = UnityTestSummary.new + summary.set_root_path(UNITY_ROOT) + results_glob = "#{$cfg['compiler']['build_path']}*.test*" + results_glob.gsub!(/\\/, '/') + results = Dir[results_glob] + summary.set_targets(results) + report summary.run + end + + def run_tests(test_files) + report 'Running Unity system tests...' + + # Tack on TEST define for compiling unit tests + load_configuration($cfg_file) + test_defines = ['TEST'] + $cfg['compiler']['defines']['items'] = [] if $cfg['compiler']['defines']['items'].nil? + $cfg['compiler']['defines']['items'] << 'TEST' + + include_dirs = get_local_include_dirs + + # Build and execute each unit test + test_files.each do |test| + obj_list = [] + + if !$cfg['compiler']['aux_sources'].nil? + $cfg['compiler']['aux_sources'].each do |aux| + obj_list << compile(aux, test_defines) + end + end + + # Detect dependencies and build required modules + extract_headers(test).each do |header| + # Compile corresponding source file if it exists + src_file = find_source_file(header, include_dirs) + if !src_file.nil? + obj_list << compile(src_file, test_defines) + end + end + + # Build the test runner (generate if configured to do so) + test_base = File.basename(test, C_EXTENSION) + + runner_name = test_base + '_Runner.c' + runner_path = '' + + if $cfg['compiler']['runner_path'].nil? + runner_path = $cfg['compiler']['build_path'] + runner_name + else + runner_path = $cfg['compiler']['runner_path'] + runner_name + end + + options = $cfg[:unity] + options[:use_param_tests] = (test =~ /parameterized/) ? true : false + UnityTestRunnerGenerator.new(options).run(test, runner_path) + obj_list << compile(runner_path, test_defines) + + # Build the test module + obj_list << compile(test, test_defines) + + # Link the test executable + link_it(test_base, obj_list) + + # Execute unit test and generate results file + simulator = build_simulator_fields + executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension'] + if simulator.nil? + cmd_str = executable + else + cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}" + end + output = execute(cmd_str) + test_results = $cfg['compiler']['build_path'] + test_base + if output.match(/OK$/m).nil? + test_results += '.testfail' + else + report output if (!$verbose) #verbose already prints this line, as does a failure + test_results += '.testpass' + end + File.open(test_results, 'w') { |f| f.print output } + + end + end +end diff --git a/test/spec/generate_module_existing_file_spec.rb b/test/spec/generate_module_existing_file_spec.rb new file mode 100644 index 0000000..74e7fc8 --- /dev/null +++ b/test/spec/generate_module_existing_file_spec.rb @@ -0,0 +1,158 @@ + +require '../auto/generate_module.rb' +require 'fileutils' + +def touch_src(file) + FileUtils.touch "sandbox/src/#{file}" +end + +def touch_test(file) + FileUtils.touch "sandbox/test/#{file}" +end + +def create_src_with_known_content(file) + File.open("sandbox/src/#{file}", "w") {|f| f.write("the original #{file}")} +end + +def create_test_with_known_content(file) + File.open("sandbox/test/#{file}", "w") {|f| f.write("the original #{file}")} +end + +def expect_src_content_didnt_change(file) + expect(File.read("sandbox/src/#{file}")).to eq("the original #{file}") +end + +def expect_test_content_didnt_change(file) + expect(File.read("sandbox/test/#{file}")).to eq("the original #{file}") +end + +def expect_src_file_to_exist(file) + expect(File.exist?("sandbox/src/#{file}")).to be true +end + +def expect_test_file_to_exist(file) + expect(File.exist?("sandbox/test/#{file}")).to be true +end + +describe "UnityModuleGenerator" do + + before do + # clean sandbox and setup our "project" folders + FileUtils.rm_rf "sandbox" + FileUtils.mkdir_p "sandbox" + FileUtils.mkdir_p "sandbox/src" + FileUtils.mkdir_p "sandbox/test" + + @options = { + :path_src => "sandbox/src", + :path_tst => "sandbox/test", + } + end + + context "with src pattern" do + before do + @options[:pattern] = "src" + end + + it "fails when all files already exist" do + # create an existing triad of files + touch_src "meh.c" + touch_src "meh.h" + touch_test "Testmeh.c" + expect { + UnityModuleGenerator.new(@options).generate("meh") + }.to raise_error("ERROR: File meh already exists. Exiting.") + end + + it "creates the test file if the source and header files exist" do + # Create the existing files. + touch_src "meh.c" + touch_src "meh.h" + + UnityModuleGenerator.new(@options).generate("meh") + + expect_test_file_to_exist "Testmeh.c" + end + + it "does not alter existing files" do + # Create some files with known content. + create_src_with_known_content "meh.c" + create_src_with_known_content "meh.h" + + UnityModuleGenerator.new(@options).generate("meh") + + expect_src_content_didnt_change "meh.c" + expect_src_content_didnt_change "meh.c" + end + + it "does not alter existing test files" do + # Create some files with known content. + create_test_with_known_content "Testmeh.c" + + UnityModuleGenerator.new(@options).generate("meh") + + expect_test_content_didnt_change "Testmeh.c" + end + + end + + context "with mch pattern" do + before do + @options[:pattern] = "mch" + end + + it "fails when all files exist" do + touch_src "meh_model.c" + touch_src "meh_conductor.c" + touch_src "meh_hardware.c" + touch_src "meh_model.h" + touch_src "meh_conductor.h" + touch_src "meh_hardware.h" + touch_test "Testmeh_model.c" + touch_test "Testmeh_conductor.c" + touch_test "Testmeh_hardware.c" + expect { + UnityModuleGenerator.new(@options).generate("meh") + }.to raise_error("ERROR: File meh_model already exists. Exiting.") + end + + it "creates files that don't exist" do + touch_src "meh_model.c" + touch_src "meh_conductor.c" + touch_src "meh_hardware.c" + touch_src "meh_model.h" + touch_src "meh_conductor.h" + + UnityModuleGenerator.new(@options).generate("meh") + + expect_src_file_to_exist "meh_hardware.h" + expect_test_file_to_exist "Testmeh_model.c" + expect_test_file_to_exist "Testmeh_conductor.c" + expect_test_file_to_exist "Testmeh_hardware.c" + end + + it "does not alter existing source files" do + create_src_with_known_content "meh_model.c" + create_src_with_known_content "meh_model.c" + create_src_with_known_content "meh_model.c" + create_src_with_known_content "meh_model.h" + create_src_with_known_content "meh_model.c" + + UnityModuleGenerator.new(@options).generate("meh") + + expect_src_content_didnt_change "meh_model.c" + expect_src_content_didnt_change "meh_model.c" + expect_src_content_didnt_change "meh_model.c" + expect_src_content_didnt_change "meh_model.c" + end + + it "does not alter existing test files" do + create_test_with_known_content "Testmeh_model.c" + + UnityModuleGenerator.new(@options).generate("meh") + + expect_test_content_didnt_change "Testmeh_model.c" + end + + end +end diff --git a/test/targets/clang_file.yml b/test/targets/clang_file.yml new file mode 100644 index 0000000..df1bd24 --- /dev/null +++ b/test/targets/clang_file.yml @@ -0,0 +1,78 @@ +--- +compiler: + path: clang + source_path: '../src/' + unit_tests_path: &unit_tests_path 'tests/' + build_path: &build_path 'build/' + options: + - '-c' + - '-Wall' + - '-Wextra' + - '-Werror' + - '-Wcast-qual' + - '-Wconversion' + - '-Wdisabled-optimization' + - '-Wformat=2' + - '-Winit-self' + - '-Winline' + - '-Winvalid-pch' + - '-Wmissing-include-dirs' + - '-Wnonnull' + - '-Wpacked' + - '-Wpointer-arith' + - '-Wswitch-default' + - '-Wstrict-aliasing' + - '-Wstrict-overflow=5' + - '-Wuninitialized' + - '-Wunused' +# - '-Wunreachable-code' + - '-Wreturn-type' + - '-Wshadow' + - '-Wundef' + - '-Wwrite-strings' + - '-Wno-nested-externs' + - '-Wno-unused-parameter' + - '-Wno-variadic-macros' + - '-Wbad-function-cast' + - '-fms-extensions' + - '-fno-omit-frame-pointer' + - '-ffloat-store' + - '-fno-common' + - '-fstrict-aliasing' + - '-std=gnu99' + - '-pedantic' + - '-O0' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - 'testdata/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_64 + - UNITY_OUTPUT_RESULTS_FILE + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: clang + options: + - -lm + - '-m64' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/test/targets/clang_strict.yml b/test/targets/clang_strict.yml new file mode 100644 index 0000000..b399d76 --- /dev/null +++ b/test/targets/clang_strict.yml @@ -0,0 +1,80 @@ +--- +compiler: + path: clang + source_path: '../src/' + unit_tests_path: &unit_tests_path 'tests/' + build_path: &build_path 'build/' + options: + - '-c' + - '-Wall' + - '-Wextra' + - '-Werror' + - '-Wcast-qual' + - '-Wconversion' + - '-Wdisabled-optimization' + - '-Wformat=2' + - '-Winit-self' + - '-Winline' + - '-Winvalid-pch' + - '-Wmissing-include-dirs' + - '-Wnonnull' + - '-Wpacked' + - '-Wpointer-arith' + - '-Wswitch-default' + - '-Wstrict-aliasing' + - '-Wstrict-overflow=5' + - '-Wuninitialized' + - '-Wunused' +# - '-Wunreachable-code' + - '-Wreturn-type' + - '-Wshadow' + - '-Wundef' + - '-Wwrite-strings' + - '-Wno-nested-externs' + - '-Wno-unused-parameter' + - '-Wno-variadic-macros' + - '-Wbad-function-cast' + - '-fms-extensions' + - '-fno-omit-frame-pointer' + - '-ffloat-store' + - '-fno-common' + - '-fstrict-aliasing' + - '-std=gnu99' + - '-pedantic' + - '-O0' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - 'testdata/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + - UNITY_SUPPORT_64 + - UNITY_OUTPUT_FLUSH + - UNITY_OMIT_OUTPUT_FLUSH_HEADER_DECLARATION + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: clang + options: + - -lm + - '-m64' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/test/targets/gcc_32.yml b/test/targets/gcc_32.yml new file mode 100644 index 0000000..ec1165d --- /dev/null +++ b/test/targets/gcc_32.yml @@ -0,0 +1,49 @@ +compiler: + path: gcc + source_path: '../src/' + unit_tests_path: &unit_tests_path 'tests/' + build_path: &build_path 'build/' + options: + - '-c' + - '-m32' + - '-Wall' + - '-Wno-address' + - '-std=c99' + - '-pedantic' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - 'testdata/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_EXCLUDE_STDINT_H + - UNITY_EXCLUDE_LIMITS_H + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + - UNITY_INT_WIDTH=32 + - UNITY_LONG_WIDTH=32 + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + - '-m32' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/test/targets/gcc_64.yml b/test/targets/gcc_64.yml new file mode 100644 index 0000000..0e273de --- /dev/null +++ b/test/targets/gcc_64.yml @@ -0,0 +1,50 @@ +compiler: + path: gcc + source_path: '../src/' + unit_tests_path: &unit_tests_path 'tests/' + build_path: &build_path 'build/' + options: + - '-c' + - '-m64' + - '-Wall' + - '-Wno-address' + - '-std=c99' + - '-pedantic' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - 'testdata/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_EXCLUDE_STDINT_H + - UNITY_EXCLUDE_LIMITS_H + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + - UNITY_SUPPORT_64 + - UNITY_INT_WIDTH=32 + - UNITY_LONG_WIDTH=64 + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + - '-m64' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/test/targets/gcc_auto_limits.yml b/test/targets/gcc_auto_limits.yml new file mode 100644 index 0000000..40088ac --- /dev/null +++ b/test/targets/gcc_auto_limits.yml @@ -0,0 +1,47 @@ +compiler: + path: gcc + source_path: '../src/' + unit_tests_path: &unit_tests_path 'tests/' + build_path: &build_path 'build/' + options: + - '-c' + - '-m64' + - '-Wall' + - '-Wno-address' + - '-std=c99' + - '-pedantic' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - 'testdata/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_EXCLUDE_STDINT_H + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + - UNITY_SUPPORT_64 + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + - '-m64' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/test/targets/gcc_auto_stdint.yml b/test/targets/gcc_auto_stdint.yml new file mode 100644 index 0000000..f12165c --- /dev/null +++ b/test/targets/gcc_auto_stdint.yml @@ -0,0 +1,59 @@ +compiler: + path: gcc + source_path: '../src/' + unit_tests_path: &unit_tests_path 'tests/' + build_path: &build_path 'build/' + options: + - '-c' + - '-m64' + - '-Wall' + - '-Wno-address' + - '-std=c99' + - '-pedantic' + - '-Wextra' + - '-Werror' + - '-Wpointer-arith' + - '-Wcast-align' + - '-Wwrite-strings' + - '-Wswitch-default' + - '-Wunreachable-code' + - '-Winit-self' + - '-Wmissing-field-initializers' + - '-Wno-unknown-pragmas' + - '-Wstrict-prototypes' + - '-Wundef' + - '-Wold-style-definition' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - 'testdata/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + - UNITY_SUPPORT_64 + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + - '-m64' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/test/targets/gcc_manual_math.yml b/test/targets/gcc_manual_math.yml new file mode 100644 index 0000000..b379e3f --- /dev/null +++ b/test/targets/gcc_manual_math.yml @@ -0,0 +1,47 @@ +compiler: + path: gcc + source_path: '../src/' + unit_tests_path: &unit_tests_path 'tests/' + build_path: &build_path 'build/' + options: + - '-c' + - '-m64' + - '-Wall' + - '-Wno-address' + - '-std=c99' + - '-pedantic' + includes: + prefix: '-I' + items: + - 'src/' + - '../src/' + - 'testdata/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_EXCLUDE_MATH_H + - UNITY_INCLUDE_DOUBLE + - UNITY_SUPPORT_TEST_CASES + - UNITY_SUPPORT_64 + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: gcc + options: + - -lm + - '-m64' + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.exe' + destination: *build_path +colour: true +:unity: + :plugins: [] diff --git a/test/targets/hitech_picc18.yml b/test/targets/hitech_picc18.yml new file mode 100644 index 0000000..2fd4aa3 --- /dev/null +++ b/test/targets/hitech_picc18.yml @@ -0,0 +1,101 @@ +# rumor has it that this yaml file works for the standard edition of the +# hitech PICC18 compiler, but not the pro version. +# +compiler: + path: cd build && picc18 + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - --chip=18F87J10 + - --ide=hitide + - --q #quiet please + - --asmlist + - --codeoffset=0 + - --emi=wordwrite # External memory interface protocol + - --warn=0 # allow all normal warning messages + - --errors=10 # Number of errors before aborting compile + - --char=unsigned + - -Bl # Large memory model + - -G # generate symbol file + - --cp=16 # 16-bit pointers + - --double=24 + - -N255 # 255-char symbol names + - --opt=none # Do not use any compiler optimziations + - -c # compile only + - -M + includes: + prefix: '-I' + items: + - 'c:/Projects/NexGen/Prototypes/CMockTest/src/' + - 'c:/Projects/NexGen/Prototypes/CMockTest/mocks/' + - 'c:/CMock/src/' + - 'c:/CMock/examples/src/' + - 'c:/CMock/vendor/unity/src/' + - 'c:/CMock/vendor/unity/examples/helper/' + - *unit_tests_path + defines: + prefix: '-D' + items: + - UNITY_INT_WIDTH=16 + - UNITY_POINTER_WIDTH=16 + - CMOCK_MEM_STATIC + - CMOCK_MEM_SIZE=3000 + - UNITY_SUPPORT_TEST_CASES + - _PICC18 + object_files: + # prefix: '-O' # Hi-Tech doesn't want a prefix. They key off of filename .extensions, instead + extension: '.obj' + destination: *build_path + +linker: + path: cd build && picc18 + options: + - --chip=18F87J10 + - --ide=hitide + - --cp=24 # 24-bit pointers. Is this needed for linker?? + - --double=24 # Is this needed for linker?? + - -Lw # Scan the pic87*w.lib in the lib/ of the compiler installation directory + - --summary=mem,file # info listing + - --summary=+psect + - --summary=+hex + - --output=+intel + - --output=+mcof + - --runtime=+init # Directs startup code to copy idata, ibigdata and ifardata psects from ROM to RAM. + - --runtime=+clear # Directs startup code to clear bss, bigbss, rbss and farbss psects + - --runtime=+clib # link in the c-runtime + - --runtime=+keep # Keep the generated startup src after its obj is linked + - -G # Generate src-level symbol file + - -MIWasTheLastToBuild.map + - --warn=0 # allow all normal warning messages + - -Bl # Large memory model (probably not needed for linking) + includes: + prefix: '-I' + object_files: + path: *build_path + extension: '.obj' + bin_files: + prefix: '-O' + extension: '.hex' + destination: *build_path + +simulator: + path: + pre_support: + - 'java -client -jar ' # note space + - ['C:\Program Files\HI-TECH Software\HI-TIDE\3.15\lib\', 'simpic18.jar'] + - 18F87J10 + post_support: + +:cmock: + :plugins: [] + :includes: + - Types.h + :suite_teardown: | + if (num_failures) + _FAILED_TEST(); + else + _PASSED_TESTS(); + return 0; + +colour: true diff --git a/test/targets/iar_arm_v4.yml b/test/targets/iar_arm_v4.yml new file mode 100644 index 0000000..2f9f881 --- /dev/null +++ b/test/targets/iar_arm_v4.yml @@ -0,0 +1,90 @@ +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 4.0 Kickstart\' +compiler: + path: [*tools_root, 'arm\bin\iccarm.exe'] + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - --dlib_config + - [*tools_root, 'arm\lib\dl4tptinl8n.h'] + - -z3 + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --no_clustering + - --no_scheduling + - --debug + - --cpu_mode thumb + - --endian little + - --cpu ARM7TDMI + - --stack_align 4 + - --interwork + - -e + - --silent + - --warnings_are_errors + - --fpu None + - --diag_suppress Pa050 + includes: + prefix: '-I' + items: + - [*tools_root, 'arm\inc\'] + - 'src\' + - '..\src\' + - 'testdata/' + - *unit_tests_path + - 'vendor\unity\src\' + defines: + prefix: '-D' + items: + - UNITY_SUPPORT_64 + - 'UNITY_SUPPORT_TEST_CASES' + object_files: + prefix: '-o' + extension: '.r79' + destination: *build_path +linker: + path: [*tools_root, 'common\bin\xlink.exe'] + options: + - -rt + - [*tools_root, 'arm\lib\dl4tptinl8n.r79'] + - -D_L_EXTMEM_START=0 + - -D_L_EXTMEM_SIZE=0 + - -D_L_HEAP_SIZE=120 + - -D_L_STACK_SIZE=32 + - -e_small_write=_formatted_write + - -s + - __program_start + - -f + - [*tools_root, '\arm\config\lnkarm.xcl'] + includes: + prefix: '-I' + items: + - [*tools_root, 'arm\config\'] + - [*tools_root, 'arm\lib\'] + object_files: + path: *build_path + extension: '.r79' + bin_files: + prefix: '-o' + extension: '.d79' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*tools_root, 'arm\bin\armproc.dll'] + - [*tools_root, 'arm\bin\armsim.dll'] + post_support: + - --plugin + - [*tools_root, 'arm\bin\armbat.dll'] + - --backend + - -B + - -p + - [*tools_root, 'arm\config\ioat91sam7X256.ddf'] + - -d + - sim +colour: true +:unity: + :plugins: [] diff --git a/test/targets/iar_arm_v5.yml b/test/targets/iar_arm_v5.yml new file mode 100644 index 0000000..223f1a6 --- /dev/null +++ b/test/targets/iar_arm_v5.yml @@ -0,0 +1,80 @@ +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3\' +compiler: + path: [*tools_root, 'arm\bin\iccarm.exe'] + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - --dlib_config + - [*tools_root, 'arm\inc\DLib_Config_Normal.h'] + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --no_clustering + - --no_scheduling + - --debug + - --cpu_mode thumb + - --endian=little + - --cpu=ARM7TDMI + - --interwork + - --warnings_are_errors + - --fpu=None + - --diag_suppress=Pa050 + - --diag_suppress=Pe111 + - -e + - -On + includes: + prefix: '-I' + items: + - [*tools_root, 'arm\inc\'] + - 'src\' + - '..\src\' + - 'testdata/' + - *unit_tests_path + - 'vendor\unity\src\' + - 'iar\iar_v5\incIAR\' + defines: + prefix: '-D' + items: + - UNITY_SUPPORT_64 + - 'UNITY_SUPPORT_TEST_CASES' + object_files: + prefix: '-o' + extension: '.r79' + destination: *build_path +linker: + path: [*tools_root, 'arm\bin\ilinkarm.exe'] + options: + - --redirect _Printf=_PrintfLarge + - --redirect _Scanf=_ScanfSmall + - --semihosting + - --entry __iar_program_start + - --config + - [*tools_root, 'arm\config\generic.icf'] + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.out' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*tools_root, 'arm\bin\armproc.dll'] + - [*tools_root, 'arm\bin\armsim.dll'] + post_support: + - --plugin + - [*tools_root, 'arm\bin\armbat.dll'] + - --backend + - -B + - -p + - [*tools_root, 'arm\config\debugger\atmel\ioat91sam7X256.ddf'] + - -d + - sim +colour: true +:unity: + :plugins: [] diff --git a/test/targets/iar_arm_v5_3.yml b/test/targets/iar_arm_v5_3.yml new file mode 100644 index 0000000..223f1a6 --- /dev/null +++ b/test/targets/iar_arm_v5_3.yml @@ -0,0 +1,80 @@ +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3\' +compiler: + path: [*tools_root, 'arm\bin\iccarm.exe'] + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - --dlib_config + - [*tools_root, 'arm\inc\DLib_Config_Normal.h'] + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --no_clustering + - --no_scheduling + - --debug + - --cpu_mode thumb + - --endian=little + - --cpu=ARM7TDMI + - --interwork + - --warnings_are_errors + - --fpu=None + - --diag_suppress=Pa050 + - --diag_suppress=Pe111 + - -e + - -On + includes: + prefix: '-I' + items: + - [*tools_root, 'arm\inc\'] + - 'src\' + - '..\src\' + - 'testdata/' + - *unit_tests_path + - 'vendor\unity\src\' + - 'iar\iar_v5\incIAR\' + defines: + prefix: '-D' + items: + - UNITY_SUPPORT_64 + - 'UNITY_SUPPORT_TEST_CASES' + object_files: + prefix: '-o' + extension: '.r79' + destination: *build_path +linker: + path: [*tools_root, 'arm\bin\ilinkarm.exe'] + options: + - --redirect _Printf=_PrintfLarge + - --redirect _Scanf=_ScanfSmall + - --semihosting + - --entry __iar_program_start + - --config + - [*tools_root, 'arm\config\generic.icf'] + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.out' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*tools_root, 'arm\bin\armproc.dll'] + - [*tools_root, 'arm\bin\armsim.dll'] + post_support: + - --plugin + - [*tools_root, 'arm\bin\armbat.dll'] + - --backend + - -B + - -p + - [*tools_root, 'arm\config\debugger\atmel\ioat91sam7X256.ddf'] + - -d + - sim +colour: true +:unity: + :plugins: [] diff --git a/test/targets/iar_armcortex_LM3S9B92_v5_4.yml b/test/targets/iar_armcortex_LM3S9B92_v5_4.yml new file mode 100644 index 0000000..c79bacf --- /dev/null +++ b/test/targets/iar_armcortex_LM3S9B92_v5_4.yml @@ -0,0 +1,94 @@ +#Default tool path for IAR 5.4 on Windows XP 64bit +tools_root: &tools_root 'C:\Program Files (x86)\IAR Systems\Embedded Workbench 5.4 Kickstart\' +compiler: + path: [*tools_root, 'arm\bin\iccarm.exe'] + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - --diag_suppress=Pa050 + #- --diag_suppress=Pe111 + - --debug + - --endian=little + - --cpu=Cortex-M3 + - --no_path_in_file_macros + - -e + - --fpu=None + - --dlib_config + - [*tools_root, 'arm\inc\DLib_Config_Normal.h'] + #- --preinclude --preinclude C:\Vss\T2 Working\common\system.h + - --interwork + - --warnings_are_errors +# - Ohz + - -Oh +# - --no_cse +# - --no_unroll +# - --no_inline +# - --no_code_motion +# - --no_tbaa +# - --no_clustering +# - --no_scheduling + + includes: + prefix: '-I' + items: + - [*tools_root, 'arm\inc\'] + - 'src\' + - '..\src\' + - 'testdata/' + - *unit_tests_path + - 'vendor\unity\src\' + - 'iar\iar_v5\incIAR\' + defines: + prefix: '-D' + items: + - ewarm + - PART_LM3S9B92 + - TARGET_IS_TEMPEST_RB1 + - USE_ROM_DRIVERS + - UART_BUFFERED + - UNITY_SUPPORT_64 + object_files: + prefix: '-o' + extension: '.r79' + destination: *build_path +linker: + path: [*tools_root, 'arm\bin\ilinkarm.exe'] + options: + - --redirect _Printf=_PrintfLarge + - --redirect _Scanf=_ScanfSmall + - --semihosting + - --entry __iar_program_start + - --config + - [*tools_root, 'arm\config\generic.icf'] +# - ['C:\Temp\lm3s9b92.icf'] + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.out' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + #- --silent + - [*tools_root, 'arm\bin\armproc.dll'] + - [*tools_root, 'arm\bin\armsim2.dll'] + post_support: + - --plugin + - [*tools_root, 'arm\bin\armbat.dll'] + - --backend + - -B + - --endian=little + - --cpu=Cortex-M3 + - --fpu=None + - -p + - [*tools_root, 'arm\config\debugger\TexasInstruments\iolm3sxxxx.ddf'] + - --semihosting + - --device=LM3SxBxx + #- -d + #- sim +colour: true +:unity: + :plugins: [] diff --git a/test/targets/iar_cortexm3_v5.yml b/test/targets/iar_cortexm3_v5.yml new file mode 100644 index 0000000..973de94 --- /dev/null +++ b/test/targets/iar_cortexm3_v5.yml @@ -0,0 +1,84 @@ +# unit testing under iar compiler / simulator for STM32 Cortex-M3 + +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.4\' +compiler: + path: [*tools_root, 'arm\bin\iccarm.exe'] + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - --dlib_config + - [*tools_root, 'arm\inc\DLib_Config_Normal.h'] + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --no_clustering + - --no_scheduling + - --debug + - --cpu_mode thumb + - --endian=little + - --cpu=Cortex-M3 + - --interwork + - --warnings_are_errors + - --fpu=None + - --diag_suppress=Pa050 + - --diag_suppress=Pe111 + - -e + - -On + includes: + prefix: '-I' + items: + - [*tools_root, 'arm\inc\'] + - 'src\' + - '..\src\' + - 'testdata/' + - *unit_tests_path + - 'vendor\unity\src\' + - 'iar\iar_v5\incIAR\' + defines: + prefix: '-D' + items: + - 'IAR' + - 'UNITY_SUPPORT_64' + - 'UNITY_SUPPORT_TEST_CASES' + object_files: + prefix: '-o' + extension: '.r79' + destination: *build_path +linker: + path: [*tools_root, 'arm\bin\ilinkarm.exe'] + options: + - --redirect _Printf=_PrintfLarge + - --redirect _Scanf=_ScanfSmall + - --semihosting + - --entry __iar_program_start + - --config + - [*tools_root, 'arm\config\generic_cortex.icf'] + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.out' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*tools_root, 'arm\bin\armproc.dll'] + - [*tools_root, 'arm\bin\armsim.dll'] + post_support: + - --plugin + - [*tools_root, 'arm\bin\armbat.dll'] + - --backend + - -B + - -p + - [*tools_root, 'arm\config\debugger\ST\iostm32f107xx.ddf'] + - --cpu=Cortex-M3 + - -d + - sim +colour: true +:unity: + :plugins: [] diff --git a/test/targets/iar_msp430.yml b/test/targets/iar_msp430.yml new file mode 100644 index 0000000..4563af9 --- /dev/null +++ b/test/targets/iar_msp430.yml @@ -0,0 +1,95 @@ +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 5.3 MSP430\' +core_root: &core_root [*tools_root, '430\'] +core_bin: &core_bin [*core_root, 'bin\'] +core_config: &core_config [*core_root, 'config\'] +core_lib: &core_lib [*core_root, 'lib\'] +core_inc: &core_inc [*core_root, 'inc\'] +core_config: &core_config [*core_root, 'config\'] + +compiler: + path: [*core_bin, 'icc430.exe'] + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - --dlib_config + - [*core_lib, 'dlib\dl430fn.h'] + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --debug + - -e + - -Ol + - --multiplier=16 + - --double=32 + - --diag_suppress Pa050 + - --diag_suppress Pe111 + includes: + prefix: '-I' + items: + - *core_inc + - [*core_inc, 'dlib'] + - [*core_lib, 'dlib'] + - 'src\' + - '../src/' + - 'testdata/' + - *unit_tests_path + - 'vendor\unity\src' + defines: + prefix: '-D' + items: + - '__MSP430F149__' + - 'INT_WIDTH=16' + - 'UNITY_EXCLUDE_FLOAT' + - 'UNITY_SUPPORT_TEST_CASES' + object_files: + prefix: '-o' + extension: '.r43' + destination: *build_path +linker: + path: [*core_bin, 'xlink.exe'] + options: + - -rt + - [*core_lib, 'dlib\dl430fn.r43'] + - -e_PrintfTiny=_Printf + - -e_ScanfSmall=_Scanf + - -s __program_start + - -D_STACK_SIZE=50 + - -D_DATA16_HEAP_SIZE=50 + - -D_DATA20_HEAP_SIZE=50 + - -f + - [*core_config, 'lnk430f5438.xcl'] + - -f + - [*core_config, 'multiplier.xcl'] + includes: + prefix: '-I' + items: + - *core_config + - *core_lib + - [*core_lib, 'dlib'] + object_files: + path: *build_path + extension: '.r79' + bin_files: + prefix: '-o' + extension: '.d79' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*core_bin, '430proc.dll'] + - [*core_bin, '430sim.dll'] + post_support: + - --plugin + - [*core_bin, '430bat.dll'] + - --backend -B + - --cpu MSP430F5438 + - -p + - [*core_config, 'MSP430F5438.ddf'] + - -d sim +colour: true +:unity: + :plugins: [] diff --git a/test/targets/iar_sh2a_v6.yml b/test/targets/iar_sh2a_v6.yml new file mode 100644 index 0000000..27e6bee --- /dev/null +++ b/test/targets/iar_sh2a_v6.yml @@ -0,0 +1,86 @@ +tools_root: &tools_root 'C:\Program Files\IAR Systems\Embedded Workbench 6.0\' +compiler: + path: [*tools_root, 'sh\bin\iccsh.exe'] + source_path: '..\src\' + unit_tests_path: &unit_tests_path 'tests\' + build_path: &build_path 'build\' + options: + - -e + - --char_is_signed + - -Ol + - --no_cse + - --no_unroll + - --no_inline + - --no_code_motion + - --no_tbaa + - --no_scheduling + - --no_clustering + - --debug + - --dlib_config + - [*tools_root, 'sh\inc\DLib_Product.h'] + - --double=32 + - --code_model=huge + - --data_model=huge + - --core=sh2afpu + - --warnings_affect_exit_code + - --warnings_are_errors + - --mfc + - --use_unix_directory_separators + - --diag_suppress=Pe161 + includes: + prefix: '-I' + items: + - [*tools_root, 'sh\inc\'] + - [*tools_root, 'sh\inc\c'] + - 'src\' + - '..\src\' + - 'testdata/' + - *unit_tests_path + - 'vendor\unity\src\' + defines: + prefix: '-D' + items: + - UNITY_SUPPORT_64 + - 'UNITY_SUPPORT_TEST_CASES' + object_files: + prefix: '-o' + extension: '.o' + destination: *build_path +linker: + path: [*tools_root, 'sh\bin\ilinksh.exe'] + options: + - --redirect __Printf=__PrintfSmall + - --redirect __Scanf=__ScanfSmall + - --config + - [*tools_root, 'sh\config\generic.icf'] + - --config_def _CSTACK_SIZE=0x800 + - --config_def _HEAP_SIZE=0x800 + - --config_def _INT_TABLE=0x10 + - --entry __iar_program_start + - --debug_lib + object_files: + path: *build_path + extension: '.o' + bin_files: + prefix: '-o' + extension: '.out' + destination: *build_path +simulator: + path: [*tools_root, 'common\bin\CSpyBat.exe'] + pre_support: + - --silent + - [*tools_root, 'sh\bin\shproc.dll'] + - [*tools_root, 'sh\bin\shsim.dll'] + post_support: + - --plugin + - [*tools_root, 'sh\bin\shbat.dll'] + - --backend + - -B + - --core sh2afpu + - -p + - [*tools_root, 'sh\config\debugger\io7264.ddf'] + - -d + - sim +colour: true +:unity: + :plugins: [] diff --git a/test/testdata/CException.h b/test/testdata/CException.h new file mode 100644 index 0000000..91ad3e1 --- /dev/null +++ b/test/testdata/CException.h @@ -0,0 +1,11 @@ +#ifndef CEXCEPTION_H +#define CEXCEPTION_H + +#define CEXCEPTION_BEING_USED 1 + +#define CEXCEPTION_NONE 0 +#define CEXCEPTION_T int e = 1; (void) +#define Try if (e) +#define Catch(a) if (!a) + +#endif //CEXCEPTION_H diff --git a/test/testdata/Defs.h b/test/testdata/Defs.h new file mode 100644 index 0000000..d3a90c0 --- /dev/null +++ b/test/testdata/Defs.h @@ -0,0 +1,8 @@ +#ifndef DEF_H +#define DEF_H + +#define EXTERN_DECL + +extern int CounterSuiteSetup; + +#endif //DEF_H diff --git a/test/testdata/cmock.h b/test/testdata/cmock.h new file mode 100644 index 0000000..c6149be --- /dev/null +++ b/test/testdata/cmock.h @@ -0,0 +1,14 @@ +#ifndef CMOCK_H +#define CMOCK_H + +int CMockMemFreeFinalCounter = 0; +int mockMock_Init_Counter = 0; +int mockMock_Verify_Counter = 0; +int mockMock_Destroy_Counter = 0; + +void CMock_Guts_MemFreeFinal(void) { CMockMemFreeFinalCounter++; } +void mockMock_Init(void) { mockMock_Init_Counter++; } +void mockMock_Verify(void) { mockMock_Verify_Counter++; } +void mockMock_Destroy(void) { mockMock_Destroy_Counter++; } + +#endif //CMOCK_H diff --git a/test/testdata/mockMock.h b/test/testdata/mockMock.h new file mode 100644 index 0000000..0a2c616 --- /dev/null +++ b/test/testdata/mockMock.h @@ -0,0 +1,13 @@ +#ifndef MOCK_MOCK_H +#define MOCK_MOCK_H + +extern int mockMock_Init_Counter; +extern int mockMock_Verify_Counter; +extern int mockMock_Destroy_Counter; +extern int CMockMemFreeFinalCounter; + +void mockMock_Init(void); +void mockMock_Verify(void); +void mockMock_Destroy(void); + +#endif //MOCK_MOCK_H diff --git a/test/testdata/testRunnerGenerator.c b/test/testdata/testRunnerGenerator.c new file mode 100644 index 0000000..e036dd9 --- /dev/null +++ b/test/testdata/testRunnerGenerator.c @@ -0,0 +1,183 @@ +/* This Test File Is Used To Verify Many Combinations Of Using the Generate Test Runner Script */ + +#include +#include "unity.h" +#include "Defs.h" + +#ifdef USE_CEXCEPTION +#include "CException.h" +#endif + +/* Notes about prefixes: + test - normal default prefix. these are "always run" tests for this procedure + spec - normal default prefix. required to run default setup/teardown calls. + should - normal default prefix. + qwiktest - custom prefix for when tests skip all setup/teardown calls. + custtest - custom prefix for when tests use custom setup/teardown calls. + paratest - custom prefix for when we want to verify parameterized tests. + extest - custom prefix only used during cexception + suitetest- custom prefix for when we want to use custom suite setup/teardown +*/ + +/* Support for Meta Test Rig */ +#define TEST_CASE(a) +void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests + +/* Global Variables Used During These Tests */ +int CounterSetup = 0; +int CounterTeardown = 0; +int CounterSuiteSetup = 0; + +void setUp(void) +{ + CounterSetup = 1; +} + +void tearDown(void) +{ + CounterTeardown = 1; +} + +void custom_setup(void) +{ + CounterSetup = 2; +} + +void custom_teardown(void) +{ + CounterTeardown = 2; +} + +/* +void test_OldSchoolCommentsShouldBeIgnored(void) +{ + TEST_ASSERT_FAIL("Old-School Comments Should Be Ignored"); +} +*/ + +void test_ThisTestAlwaysPasses(void) +{ + TEST_PASS(); +} + +void test_ThisTestAlwaysFails(void) +{ + TEST_FAIL_MESSAGE("This Test Should Fail"); +} + +void test_ThisTestAlwaysIgnored(void) +{ + TEST_IGNORE_MESSAGE("This Test Should Be Ignored"); +} + +void qwiktest_ThisTestPassesWhenNoSetupRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, CounterSetup, "Setup Was Unexpectedly Run"); +} + +void qwiktest_ThisTestPassesWhenNoTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, CounterTeardown, "Teardown Was Unexpectedly Run"); +} + +void spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, CounterSuiteSetup, "Suite Setup Was Unexpectedly Run"); +} + +void spec_ThisTestPassesWhenNormalSetupRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterSetup, "Normal Setup Wasn't Run"); +} + +void spec_ThisTestPassesWhenNormalTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run"); +} + +void custtest_ThisTestPassesWhenCustomSetupRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(2, CounterSetup, "Custom Setup Wasn't Run"); +} + +void custtest_ThisTestPassesWhenCustomTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(2, CounterTeardown, "Custom Teardown Wasn't Run"); +} + +//void test_NewStyleCommentsShouldBeIgnored(void) +//{ +// TEST_ASSERT_FAIL("New Style Comments Should Be Ignored"); +//} + +void test_NotBeConfusedByLongComplicatedStrings(void) +{ + const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n"; + + TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are The Same"); +} + +void test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings(void) +{ + TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True"); +} + +void test_StillNotBeConfusedByLongComplicatedStrings(void) +{ + const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n"; + + TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are Still The Same"); +} + +void should_RunTestsStartingWithShouldByDefault(void) +{ + TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True"); +} + +TEST_CASE(25) +TEST_CASE(125) +TEST_CASE(5) +void paratest_ShouldHandleParameterizedTests(int Num) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, (Num % 5), "All The Values Are Divisible By 5"); +} + +TEST_CASE(7) +void paratest_ShouldHandleParameterizedTests2(int Num) +{ + TEST_ASSERT_EQUAL_MESSAGE(7, Num, "The Only Call To This Passes"); +} + +void paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid(void) +{ + TEST_PASS(); +} + +TEST_CASE(17) +void paratest_ShouldHandleParameterizedTestsThatFail(int Num) +{ + TEST_ASSERT_EQUAL_MESSAGE(3, Num, "This call should fail"); +} + +#ifdef USE_CEXCEPTION +void extest_ShouldHandleCExceptionInTest(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CEXCEPTION_BEING_USED, "Should be pulling in CException"); +} +#endif + +#ifdef USE_ANOTHER_MAIN +int custom_main(void); + +int main(void) +{ + return custom_main(); +} +#endif + +void suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterSuiteSetup, "Suite Setup Should Have Run"); +} + + diff --git a/test/testdata/testRunnerGeneratorSmall.c b/test/testdata/testRunnerGeneratorSmall.c new file mode 100644 index 0000000..9f4ec19 --- /dev/null +++ b/test/testdata/testRunnerGeneratorSmall.c @@ -0,0 +1,65 @@ +/* This Test File Is Used To Verify Many Combinations Of Using the Generate Test Runner Script */ + +#include +#include "unity.h" +#include "Defs.h" + +/* Notes about prefixes: + test - normal default prefix. these are "always run" tests for this procedure + spec - normal default prefix. required to run default setup/teardown calls. +*/ + +/* Support for Meta Test Rig */ +#define TEST_CASE(a) +void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests + +/* Global Variables Used During These Tests */ +int CounterSetup = 0; +int CounterTeardown = 0; +int CounterSuiteSetup = 0; + +void setUp(void) +{ + CounterSetup = 1; +} + +void tearDown(void) +{ + CounterTeardown = 1; +} + +void custom_setup(void) +{ + CounterSetup = 2; +} + +void custom_teardown(void) +{ + CounterTeardown = 2; +} + +void test_ThisTestAlwaysPasses(void) +{ + TEST_PASS(); +} + +void test_ThisTestAlwaysFails(void) +{ + TEST_FAIL_MESSAGE("This Test Should Fail"); +} + +void test_ThisTestAlwaysIgnored(void) +{ + TEST_IGNORE_MESSAGE("This Test Should Be Ignored"); +} + +void spec_ThisTestPassesWhenNormalSetupRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterSetup, "Normal Setup Wasn't Run"); +} + +void spec_ThisTestPassesWhenNormalTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run"); +} + diff --git a/test/testdata/testRunnerGeneratorWithMocks.c b/test/testdata/testRunnerGeneratorWithMocks.c new file mode 100644 index 0000000..7eb0b67 --- /dev/null +++ b/test/testdata/testRunnerGeneratorWithMocks.c @@ -0,0 +1,192 @@ +/* This Test File Is Used To Verify Many Combinations Of Using the Generate Test Runner Script */ + +#include +#include "unity.h" +#include "Defs.h" +#include "mockMock.h" + +#ifdef USE_CEXCEPTION +#include "CException.h" +#endif + +/* Notes about prefixes: + test - normal default prefix. these are "always run" tests for this procedure + spec - normal default prefix. required to run default setup/teardown calls. + should - normal default prefix. + qwiktest - custom prefix for when tests skip all setup/teardown calls. + custtest - custom prefix for when tests use custom setup/teardown calls. + paratest - custom prefix for when we want to verify parameterized tests. + extest - custom prefix only used during cexception + suitetest- custom prefix for when we want to use custom suite setup/teardown +*/ + +/* Support for Meta Test Rig */ +#define TEST_CASE(a) +void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests + +/* Global Variables Used During These Tests */ +int CounterSetup = 0; +int CounterTeardown = 0; +int CounterSuiteSetup = 0; + +void setUp(void) +{ + CounterSetup = 1; +} + +void tearDown(void) +{ + CounterTeardown = 1; +} + +void custom_setup(void) +{ + CounterSetup = 2; +} + +void custom_teardown(void) +{ + CounterTeardown = 2; +} + +/* +void test_OldSchoolCommentsShouldBeIgnored(void) +{ + TEST_ASSERT_FAIL("Old-School Comments Should Be Ignored"); +} +*/ + +void test_ThisTestAlwaysPasses(void) +{ + TEST_PASS(); +} + +void test_ThisTestAlwaysFails(void) +{ + TEST_FAIL_MESSAGE("This Test Should Fail"); +} + +void test_ThisTestAlwaysIgnored(void) +{ + TEST_IGNORE_MESSAGE("This Test Should Be Ignored"); +} + +void qwiktest_ThisTestPassesWhenNoSetupRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, CounterSetup, "Setup Was Unexpectedly Run"); +} + +void qwiktest_ThisTestPassesWhenNoTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, CounterTeardown, "Teardown Was Unexpectedly Run"); +} + +void spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, CounterSuiteSetup, "Suite Setup Was Unexpectedly Run"); +} + +void spec_ThisTestPassesWhenNormalSetupRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterSetup, "Normal Setup Wasn't Run"); +} + +void spec_ThisTestPassesWhenNormalTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterTeardown, "Normal Teardown Wasn't Run"); +} + +void custtest_ThisTestPassesWhenCustomSetupRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(2, CounterSetup, "Custom Setup Wasn't Run"); +} + +void custtest_ThisTestPassesWhenCustomTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(2, CounterTeardown, "Custom Teardown Wasn't Run"); +} + +//void test_NewStyleCommentsShouldBeIgnored(void) +//{ +// TEST_ASSERT_FAIL("New Style Comments Should Be Ignored"); +//} + +void test_NotBeConfusedByLongComplicatedStrings(void) +{ + const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n"; + + TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are The Same"); +} + +void test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings(void) +{ + TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True"); +} + +void test_StillNotBeConfusedByLongComplicatedStrings(void) +{ + const char* crazyString = "GET / HTTP/1.1\r\nHost: 127.0.0.1:8081\r\nConnection: keep-alive\r\nCache-Control: no-cache\r\nUser-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36\r\nPostman-Token: 768c7149-c3fb-f704-71a2-63918d9195b2\r\nAccept: */*\r\nAccept-Encoding: gzip, deflate, sdch\r\nAccept-Language: en-GB,en-US;q=0.8,en;q=0.6\r\n\r\n"; + + TEST_ASSERT_EQUAL_STRING_MESSAGE(crazyString, crazyString, "These Strings Are Still The Same"); +} + +void should_RunTestsStartingWithShouldByDefault(void) +{ + TEST_ASSERT_TRUE_MESSAGE(1, "1 Should be True"); +} + +TEST_CASE(25) +TEST_CASE(125) +TEST_CASE(5) +void paratest_ShouldHandleParameterizedTests(int Num) +{ + TEST_ASSERT_EQUAL_MESSAGE(0, (Num % 5), "All The Values Are Divisible By 5"); +} + +TEST_CASE(7) +void paratest_ShouldHandleParameterizedTests2(int Num) +{ + TEST_ASSERT_EQUAL_MESSAGE(7, Num, "The Only Call To This Passes"); +} + +void paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid(void) +{ + TEST_PASS(); +} + +TEST_CASE(17) +void paratest_ShouldHandleParameterizedTestsThatFail(int Num) +{ + TEST_ASSERT_EQUAL_MESSAGE(3, Num, "This call should fail"); +} + +#ifdef USE_CEXCEPTION +void extest_ShouldHandleCExceptionInTest(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CEXCEPTION_BEING_USED, "Should be pulling in CException"); +} +#endif + +#ifdef USE_ANOTHER_MAIN +int custom_main(void); + +int main(void) +{ + return custom_main(); +} +#endif + +void suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan(void) +{ + TEST_ASSERT_EQUAL_MESSAGE(1, CounterSuiteSetup, "Suite Setup Should Have Run"); +} + +void test_ShouldCallMockInitAndVerifyFunctionsForEachTest(void) +{ + int passesOrIgnores = (int)(Unity.NumberOfTests - Unity.TestFailures); + TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests, mockMock_Init_Counter, "Mock Init Should Be Called Once Per Test Started"); + TEST_ASSERT_EQUAL_MESSAGE(passesOrIgnores, mockMock_Verify_Counter, "Mock Verify Should Be Called Once Per Test Passed"); + TEST_ASSERT_EQUAL_MESSAGE(Unity.NumberOfTests - 1, mockMock_Destroy_Counter, "Mock Destroy Should Be Called Once Per Test Completed"); + TEST_ASSERT_EQUAL_MESSAGE(0, CMockMemFreeFinalCounter, "Mock MemFreeFinal Should Not Be Called Until End"); +} + diff --git a/test/tests/test_generate_test_runner.rb b/test/tests/test_generate_test_runner.rb new file mode 100644 index 0000000..55a64c0 --- /dev/null +++ b/test/tests/test_generate_test_runner.rb @@ -0,0 +1,1252 @@ +# ========================================== +# CMock Project - Automatic Mock Generation for C +# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams +# [Released under MIT License. Please refer to license.txt for details] +# ========================================== + +require '../auto/generate_test_runner.rb' + +$generate_test_runner_tests = 0 +$generate_test_runner_failures = 0 + +OUT_FILE = 'build/testsample_' + +RUNNER_TESTS = [ + { :name => 'DefaultsThroughOptions', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :options => nil, #defaults + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'DefaultsThroughCommandLine', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :cmdline => "", #defaults + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'DefaultsThroughYAMLFile', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :cmdline => "", #defaults + :yaml => {}, #defaults + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ShorterFilterOfJustTest', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "test", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ShorterFilterOfJustShould', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "should", + }, + :expected => { + :to_pass => [ 'should_RunTestsStartingWithShouldByDefault' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ShorterFilterOfJustSpec', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "spec", + }, + :expected => { + :to_pass => [ 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'InjectIncludes', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :options => { + :includes => ['Defs.h'], + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ParameterizedThroughOptions', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "paratest", + :use_param_tests => true, + }, + :expected => { + :to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + 'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)', + ], + :to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ], + :to_ignore => [ ], + } + }, + + { :name => 'ParameterizedThroughCommandLine', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :cmdline => " --test_prefix=\"paratest\" --use_param_tests=1", + :expected => { + :to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + 'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)', + ], + :to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ], + :to_ignore => [ ], + } + }, + + { :name => 'ParameterizedThroughCommandLineAndYaml', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :cmdline => "--use_param_tests=1", + :yaml => { + :test_prefix => "paratest" + }, + :expected => { + :to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + 'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)', + ], + :to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ], + :to_ignore => [ ], + } + }, + + { :name => 'CException', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'USE_CEXCEPTION'], + :options => { + :test_prefix => "extest", + :plugins => [ :cexception ], + }, + :expected => { + :to_pass => [ 'extest_ShouldHandleCExceptionInTest' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'CustomSetupAndTeardownThroughOptions', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "custtest|test", + :setup_name => "custom_setup", + :teardown_name => "custom_teardown", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'custtest_ThisTestPassesWhenCustomSetupRan', + 'custtest_ThisTestPassesWhenCustomTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomSetupAndTeardownThroughCommandLine', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :cmdline => " --test_prefix=\"custtest|test\" --setup_name=\"custom_setup\" --teardown_name=\"custom_teardown\"", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'custtest_ThisTestPassesWhenCustomSetupRan', + 'custtest_ThisTestPassesWhenCustomTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomSetupAndTeardownThroughYaml', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :cmdline => " --test_prefix=\"custtest|test\"", + :yaml => { + :setup_name => "custom_setup", + :teardown_name => "custom_teardown", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'custtest_ThisTestPassesWhenCustomSetupRan', + 'custtest_ThisTestPassesWhenCustomTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomMain', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', "USE_ANOTHER_MAIN"], + :options => { + :main_name => "custom_main", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomSuiteSetupAndTeardown', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :includes => ['Defs.h'], + :options => { + :test_prefix => "suitetest|test", + :suite_setup => " CounterSuiteSetup = 1;", + :suite_teardown => " return num_failures;", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'MainExternDeclaration', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST'], + :includes => ['Defs.h'], + :options => { + :main_export_decl => "EXTERN_DECL", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + + #### WITH MOCKS ########################################## + + { :name => 'DefaultsThroughOptions', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :options => nil, #defaults + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'DefaultsThroughCommandLine', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :cmdline => "", #defaults + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'DefaultsThroughYAMLFile', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :cmdline => "", #defaults + :yaml => {}, #defaults + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ShorterFilterOfJustTest', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "test", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ShorterFilterOfJustShould', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "should", + }, + :expected => { + :to_pass => [ 'should_RunTestsStartingWithShouldByDefault' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ShorterFilterOfJustSpec', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "spec", + }, + :expected => { + :to_pass => [ 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'InjectIncludes', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :options => { + :includes => ['Defs.h'], + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ParameterizedThroughOptions', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "paratest", + :use_param_tests => true, + }, + :expected => { + :to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + 'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)', + ], + :to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ], + :to_ignore => [ ], + } + }, + + { :name => 'ParameterizedThroughCommandLine', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :cmdline => " --test_prefix=\"paratest\" --use_param_tests=1", + :expected => { + :to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + 'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)', + ], + :to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ], + :to_ignore => [ ], + } + }, + + { :name => 'ParameterizedThroughCommandLineAndYaml', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :cmdline => "--use_param_tests=1", + :yaml => { + :test_prefix => "paratest" + }, + :expected => { + :to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + 'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)', + ], + :to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ], + :to_ignore => [ ], + } + }, + + { :name => 'CException', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST', 'USE_CEXCEPTION'], + :options => { + :test_prefix => "extest", + :plugins => [ :cexception ], + }, + :expected => { + :to_pass => [ 'extest_ShouldHandleCExceptionInTest' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'CustomSetupAndTeardownThroughOptions', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :options => { + :test_prefix => "custtest|test", + :setup_name => "custom_setup", + :teardown_name => "custom_teardown", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'custtest_ThisTestPassesWhenCustomSetupRan', + 'custtest_ThisTestPassesWhenCustomTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomSetupAndTeardownThroughCommandLine', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :cmdline => " --test_prefix=\"custtest|test\" --setup_name=\"custom_setup\" --teardown_name=\"custom_teardown\"", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'custtest_ThisTestPassesWhenCustomSetupRan', + 'custtest_ThisTestPassesWhenCustomTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomSetupAndTeardownThroughYaml', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :cmdline => " --test_prefix=\"custtest|test\"", + :yaml => { + :setup_name => "custom_setup", + :teardown_name => "custom_teardown", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'custtest_ThisTestPassesWhenCustomSetupRan', + 'custtest_ThisTestPassesWhenCustomTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomMain', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST', "USE_ANOTHER_MAIN"], + :options => { + :main_name => "custom_main", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'CustomSuiteSetupAndTeardown', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :includes => ['Defs.h'], + :options => { + :test_prefix => "suitetest|test", + :suite_setup => " CounterSuiteSetup = 1;", + :suite_teardown => " return num_failures;", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'suitetest_ThisTestPassesWhenCustomSuiteSetupAndTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'MainExternDeclaration', + :testfile => 'testdata/testRunnerGeneratorWithMocks.c', + :testdefines => ['TEST'], + :includes => ['Defs.h'], + :options => { + :main_export_decl => "EXTERN_DECL", + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + 'test_ShouldCallMockInitAndVerifyFunctionsForEachTest', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + + + #### WITH ARGS ########################################## + + { :name => 'ArgsThroughOptions', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsThroughCommandLine', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :cmdline => "--cmdline_args=1", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsThroughYAMLFile', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :cmdline => "", + :yaml => { + :cmdline_args => true, + }, + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsNameFilterJustTest', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n test_", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsNameFilterJustShould', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n should_", + :expected => { + :to_pass => [ 'should_RunTestsStartingWithShouldByDefault' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsNameFilterTestAndShould', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n should_,test_", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsNameFilterWithWildcardOnFile', + :testfile => 'testdata/testRunnerGeneratorSmall.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGeneratorSma*", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsNameFilterWithWildcardAsName', + :testfile => 'testdata/testRunnerGeneratorSmall.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGeneratorSmall:*", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsNameFilterWithWildcardOnName', + :testfile => 'testdata/testRunnerGeneratorSmall.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGeneratorSmall:test_*", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsNameFilterWithWildcardAndShortName', + :testfile => 'testdata/testRunnerGeneratorSmall.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGeneratorSmall:te*", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsNameFilterWithWildcardOnBoth', + :testfile => 'testdata/testRunnerGeneratorSmall.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGeneratorSm*:*", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsExcludeFilterJustTest', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-x test_", + :expected => { + :to_pass => [ 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + 'should_RunTestsStartingWithShouldByDefault', + ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeAndExcludeFilter', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + :includes => ['Defs.h'], + }, + :cmdline_args => "-n test_ -x Ignored", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeSingleTest', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n ThisTestAlwaysPasses", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeSingleTestInSpecificFile', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGenerator:ThisTestAlwaysPasses", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeTestFileWithExtension', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGenerator.c:ThisTestAlwaysPasses", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeDoubleQuotes', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n \"testRunnerGenerator:ThisTestAlwaysPasses,test_ThisTestAlwaysFails\"", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeSingleQuotes', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n 'testRunnerGenerator:ThisTestAlwaysPasses,test_ThisTestAlwaysFails'", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeAValidTestForADifferentFile', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n AnotherFile:ThisTestDoesNotExist", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeNoTests', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n ThisTestDoesNotExist", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsExcludeAllTests', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-x _", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeFullFile', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n testRunnerGenerator", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses', + 'spec_ThisTestPassesWhenNormalSetupRan', + 'spec_ThisTestPassesWhenNormalTeardownRan', + 'test_NotBeConfusedByLongComplicatedStrings', + 'test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings', + 'test_StillNotBeConfusedByLongComplicatedStrings', + 'should_RunTestsStartingWithShouldByDefault', + 'spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan', + ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ 'test_ThisTestAlwaysIgnored' ], + } + }, + + { :name => 'ArgsIncludeWithAlternateFlag', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-f=\"testRunnerGenerator:ThisTestAlwaysPasses,test_ThisTestAlwaysFails\"", + :expected => { + :to_pass => [ 'test_ThisTestAlwaysPasses' ], + :to_fail => [ 'test_ThisTestAlwaysFails' ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsIncludeWithParameterized', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :cmdline => "--use_param_tests=1", + :yaml => { + :cmdline_args => true, + :test_prefix => "paratest" + }, + :cmdline_args => "-n ShouldHandleParameterizedTests", + :expected => { + :to_pass => [ 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + ], + :to_fail => [ 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' ], + :to_ignore => [ ], + } + }, + + { :name => 'ArgsList', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-l", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + :text => [ "testRunnerGenerator", + "test_ThisTestAlwaysPasses", + "test_ThisTestAlwaysFails", + "test_ThisTestAlwaysIgnored", + "spec_ThisTestPassesWhenNormalSuiteSetupAndTeardownRan", + "spec_ThisTestPassesWhenNormalSetupRan", + "spec_ThisTestPassesWhenNormalTeardownRan", + "test_NotBeConfusedByLongComplicatedStrings", + "test_NotDisappearJustBecauseTheTestBeforeAndAfterHaveCrazyStrings", + "test_StillNotBeConfusedByLongComplicatedStrings", + "should_RunTestsStartingWithShouldByDefault" + ] + } + }, + + { :name => 'ArgsListParameterized', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :test_prefix => "paratest", + :use_param_tests => true, + :cmdline_args => true, + }, + :cmdline_args => "-l", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + :text => [ "testRunnerGenerator", + 'paratest_ShouldHandleParameterizedTests\(25\)', + 'paratest_ShouldHandleParameterizedTests\(125\)', + 'paratest_ShouldHandleParameterizedTests\(5\)', + 'paratest_ShouldHandleParameterizedTests2\(7\)', + 'paratest_ShouldHandleNonParameterizedTestsWhenParameterizationValid\(RUN_TEST_NO_ARGS\)', + 'paratest_ShouldHandleParameterizedTestsThatFail\(17\)' + ], + } + }, + + { :name => 'ArgsIncompleteIncludeFlags', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-n", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + :text => [ "ERROR: No Test String to Include Matches For" ], + } + }, + + { :name => 'ArgsIncompleteExcludeFlags', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-x", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + :text => [ "ERROR: No Test String to Exclude Matches For" ], + } + }, + + { :name => 'ArgsIllegalFlags', + :testfile => 'testdata/testRunnerGenerator.c', + :testdefines => ['TEST', 'UNITY_USE_COMMAND_LINE_ARGS'], + :options => { + :cmdline_args => true, + }, + :cmdline_args => "-z", + :expected => { + :to_pass => [ ], + :to_fail => [ ], + :to_ignore => [ ], + :text => [ "ERROR: Unknown Option z" ], + } + }, +] + +def runner_test(test, runner, expected, test_defines, cmdline_args) + # Tack on TEST define for compiling unit tests + load_configuration($cfg_file) + + #compile objects + obj_list = [ + compile(runner, test_defines), + compile(test, test_defines), + compile('../src/unity.c', test_defines), + ] + + # Link the test executable + test_base = File.basename(test, C_EXTENSION) + link_it(test_base, obj_list) + + # Execute unit test and generate results file + simulator = build_simulator_fields + cmdline_args ||= "" + executable = $cfg['linker']['bin_files']['destination'] + test_base + $cfg['linker']['bin_files']['extension'] + " #{cmdline_args}" + if simulator.nil? + cmd_str = executable + else + cmd_str = "#{simulator[:command]} #{simulator[:pre_support]} #{executable} #{simulator[:post_support]}" + end + output = execute(cmd_str, true) + + #compare to the expected pass/fail + allgood = expected[:to_pass].inject(true) {|s,v| s && verify_match(/#{v}:PASS/, output) } + allgood = expected[:to_fail].inject(allgood) {|s,v| s && verify_match(/#{v}:FAIL/, output) } + allgood = expected[:to_ignore].inject(allgood) {|s,v| s && verify_match(/#{v}:IGNORE/, output) } + + #verify there weren't more pass/fail/etc than expected + allgood &&= verify_number( expected[:to_pass], /(:PASS)/, output) + allgood &&= verify_number( expected[:to_fail], /(:FAIL)/, output) + allgood &&= verify_number( expected[:to_ignore], /(:IGNORE)/, output) + + #if we care about any other text, check that too + if (expected[:text]) + allgood = expected[:text].inject(allgood) {|s,v| s && verify_match(/#{v}/, output) } + allgood &&= verify_number( expected[:text], /.+/, output ) + end + + report output if (!allgood && !$verbose) #report failures if not already reporting everything + return allgood +end + +def verify_match(expression, output) + if (expression =~ output) + return true + else + report " FAIL: No Match For /#{expression.to_s}/" + return false + end +end + +def verify_number(expected, expression, output) + exp = expected.length + act = output.scan(expression).length + if (exp == act) + return true + else + report " FAIL: Expected #{exp} Matches For /#{expression.to_s}/. Was #{act}" + return false + end +end + +RUNNER_TESTS.each do |testset| + basename = File.basename(testset[:testfile], C_EXTENSION) + testset_name = "Runner_#{basename}_#{testset[:name]}" + should testset_name do + runner_name = OUT_FILE + testset[:name] + '_runner.c' + + #create a yaml file first if required + yaml_option = "" + if (testset[:yaml]) + File.open("build/runner_options.yml",'w') {|f| f << { :unity => testset[:yaml] }.to_yaml } + yaml_option = "build/runner_options.yml" + end + + #run script via command line or through hash function call, as requested + if (testset[:cmdline]) + cmdstr = "ruby ../auto/generate_test_runner.rb #{yaml_option} #{testset[:cmdline]} \"#{testset[:testfile]}\" \"#{runner_name}\"" + `#{cmdstr}` + else + UnityTestRunnerGenerator.new(testset[:options]).run(testset[:testfile], runner_name) + end + + #test the script against the specified test file and check results + if (runner_test(testset[:testfile], runner_name, testset[:expected], testset[:testdefines], testset[:cmdline_args])) + report "#{testset_name}:PASS" + else + report "#{testset_name}:FAIL" + $generate_test_runner_failures += 1 + end + $generate_test_runner_tests += 1 + end +end + +raise "There were #{$generate_test_runner_failures.to_s} failures while testing generate_test_runner.rb" if ($generate_test_runner_failures > 0) diff --git a/test/tests/testparameterized.c b/test/tests/testparameterized.c new file mode 100644 index 0000000..aa6d173 --- /dev/null +++ b/test/tests/testparameterized.c @@ -0,0 +1,110 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#include +#include +#include "unity.h" + +void putcharSpy(int c) { (void)putchar(c);} // include passthrough for linking tests + +#define TEST_CASE(...) + +#define EXPECT_ABORT_BEGIN \ + if (TEST_PROTECT()) \ + { + +#define VERIFY_FAILS_END \ + } \ + Unity.CurrentTestFailed = (Unity.CurrentTestFailed != 0) ? 0 : 1; \ + if (Unity.CurrentTestFailed == 1) { \ + SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ + UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ + UNITY_OUTPUT_CHAR(':'); \ + UnityPrint(Unity.CurrentTestName); \ + UnityPrint(":FAIL: [[[[ Test Should Have Failed But Did Not ]]]]"); \ + UNITY_OUTPUT_CHAR('\n'); \ + } + +#define VERIFY_IGNORES_END \ + } \ + Unity.CurrentTestFailed = (Unity.CurrentTestIgnored != 0) ? 0 : 1; \ + Unity.CurrentTestIgnored = 0; \ + if (Unity.CurrentTestFailed == 1) { \ + SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ + UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ + UNITY_OUTPUT_CHAR(':'); \ + UnityPrint(Unity.CurrentTestName); \ + UnityPrint(":FAIL: [[[[ Test Should Have Ignored But Did Not ]]]]"); \ + UNITY_OUTPUT_CHAR('\n'); \ + } + +int SetToOneToFailInTearDown; +int SetToOneMeanWeAlreadyCheckedThisGuy; + +void setUp(void) +{ + SetToOneToFailInTearDown = 0; + SetToOneMeanWeAlreadyCheckedThisGuy = 0; +} + +void tearDown(void) +{ + if (SetToOneToFailInTearDown == 1) + TEST_FAIL_MESSAGE("<= Failed in tearDown"); + if ((SetToOneMeanWeAlreadyCheckedThisGuy == 0) && (Unity.CurrentTestFailed > 0)) + { + UnityPrint(": [[[[ Test Should Have Passed But Did Not ]]]]"); + UNITY_OUTPUT_CHAR('\n'); + } +} + +TEST_CASE(0) +TEST_CASE(44) +TEST_CASE((90)+9) +void test_TheseShouldAllPass(int Num) +{ + TEST_ASSERT_TRUE(Num < 100); +} + +TEST_CASE(3) +TEST_CASE(77) +TEST_CASE( (99) + 1 - (1)) +void test_TheseShouldAllFail(int Num) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_TRUE(Num > 100); + VERIFY_FAILS_END +} + +TEST_CASE(1) +TEST_CASE(44) +TEST_CASE(99) +TEST_CASE(98) +void test_TheseAreEveryOther(int Num) +{ + if (Num & 1) + { + EXPECT_ABORT_BEGIN + TEST_ASSERT_TRUE(Num > 100); + VERIFY_FAILS_END + } + else + { + TEST_ASSERT_TRUE(Num < 100); + } +} + +void test_NormalPassesStillWork(void) +{ + TEST_ASSERT_TRUE(1); +} + +void test_NormalFailsStillWork(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_TRUE(0); + VERIFY_FAILS_END +} diff --git a/test/tests/testunity.c b/test/tests/testunity.c new file mode 100644 index 0000000..f062894 --- /dev/null +++ b/test/tests/testunity.c @@ -0,0 +1,4058 @@ +/* ========================================== + Unity Project - A Test Framework for C + Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams + [Released under MIT License. Please refer to license.txt for details] +========================================== */ + +#include "unity.h" +#include +#include + +// Dividing by these constants produces +/- infinity. +// The rationale is given in UnityAssertFloatIsInf's body. +#ifndef UNITY_EXCLUDE_FLOAT +static const UNITY_FLOAT f_zero = 0.0f; +#endif + +#ifndef UNITY_EXCLUDE_DOUBLE +static const UNITY_DOUBLE d_zero = 0.0; +#endif + +#define EXPECT_ABORT_BEGIN \ + startPutcharSpy(); \ + if (TEST_PROTECT()) \ + { + +#define VERIFY_FAILS_END \ + } \ + endPutcharSpy(); /* start/end Spy to suppress output of failure message */ \ + Unity.CurrentTestFailed = (Unity.CurrentTestFailed == 1) ? 0 : 1; \ + if (Unity.CurrentTestFailed == 1) { \ + SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ + UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ + UNITY_OUTPUT_CHAR(':'); \ + UnityPrint(Unity.CurrentTestName); \ + UnityPrint(":FAIL: [[[[ Test Should Have Failed But Did Not ]]]]"); \ + UNITY_OUTPUT_CHAR('\n'); \ + } + +#define VERIFY_IGNORES_END \ + } \ + endPutcharSpy(); /* start/end Spy to suppress output of ignore message */ \ + Unity.CurrentTestFailed = (Unity.CurrentTestIgnored == 1) ? 0 : 1; \ + Unity.CurrentTestIgnored = 0; \ + if (Unity.CurrentTestFailed == 1) { \ + SetToOneMeanWeAlreadyCheckedThisGuy = 1; \ + UnityPrintNumberUnsigned(Unity.CurrentTestLineNumber); \ + UNITY_OUTPUT_CHAR(':'); \ + UnityPrint(Unity.CurrentTestName); \ + UnityPrint(":FAIL: [[[[ Test Should Have Ignored But Did Not ]]]]"); \ + UNITY_OUTPUT_CHAR('\n'); \ + } + +void startPutcharSpy(void); +void endPutcharSpy(void); +char* getBufferPutcharSpy(void); + +static int SetToOneToFailInTearDown; +static int SetToOneMeanWeAlreadyCheckedThisGuy; + +void setUp(void) +{ + SetToOneToFailInTearDown = 0; + SetToOneMeanWeAlreadyCheckedThisGuy = 0; +} + +void tearDown(void) +{ + endPutcharSpy(); /* Stop suppressing test output */ + if (SetToOneToFailInTearDown == 1) + { + /* These will be skipped internally if already failed/ignored */ + TEST_FAIL_MESSAGE("<= Failed in tearDown"); + TEST_IGNORE_MESSAGE("<= Ignored in tearDown"); + } + if ((SetToOneMeanWeAlreadyCheckedThisGuy == 0) && (Unity.CurrentTestFailed > 0)) + { + UnityPrint(": [[[[ Test Should Have Passed But Did Not ]]]]"); + UNITY_OUTPUT_CHAR('\n'); + } +} + +void testUnitySizeInitializationReminder(void) +{ + /* This test ensures that sizeof(struct UNITY_STORAGE_T) doesn't change. If this + * test breaks, go look at the initialization of the Unity global variable + * in unity.c and make sure we're filling in the proper fields. */ + const char* message = "Unexpected size for UNITY_STORAGE_T struct. Please check that " + "the initialization of the Unity symbol in unity.c is " + "still correct."; + + /* Define a structure with all the same fields as `struct UNITY_STORAGE_T`. */ +#ifdef UNITY_EXCLUDE_DETAILS + struct { + const char* TestFile; + const char* CurrentTestName; + UNITY_LINE_TYPE CurrentTestLineNumber; + UNITY_COUNTER_TYPE NumberOfTests; + UNITY_COUNTER_TYPE TestFailures; + UNITY_COUNTER_TYPE TestIgnores; + UNITY_COUNTER_TYPE CurrentTestFailed; + UNITY_COUNTER_TYPE CurrentTestIgnored; +#ifndef UNITY_EXCLUDE_SETJMP_H + jmp_buf AbortFrame; +#endif + } _Expected_Unity; +#else + struct { + const char* TestFile; + const char* CurrentTestName; + const char* CurrentDetails1; + const char* CurrentDetails2; + UNITY_LINE_TYPE CurrentTestLineNumber; + UNITY_COUNTER_TYPE NumberOfTests; + UNITY_COUNTER_TYPE TestFailures; + UNITY_COUNTER_TYPE TestIgnores; + UNITY_COUNTER_TYPE CurrentTestFailed; + UNITY_COUNTER_TYPE CurrentTestIgnored; +#ifndef UNITY_EXCLUDE_SETJMP_H + jmp_buf AbortFrame; +#endif + } _Expected_Unity; +#endif + + /* Compare our fake structure's size to the actual structure's size. They + * should be the same. + * + * This accounts for alignment, padding, and packing issues that might come + * up between different architectures. */ + TEST_ASSERT_EQUAL_MESSAGE(sizeof(_Expected_Unity), sizeof(Unity), message); +} + +void testPassShouldEndImmediatelyWithPass(void) +{ + TEST_PASS(); + TEST_FAIL_MESSAGE("We should have passed already and finished this test"); +} + +void testTrue(void) +{ + TEST_ASSERT(1); + + TEST_ASSERT_TRUE(1); +} + +void testFalse(void) +{ + TEST_ASSERT_FALSE(0); + + TEST_ASSERT_UNLESS(0); +} + +void testPreviousPass(void) +{ + TEST_ASSERT_EQUAL_INT(0U, Unity.TestFailures); +} + +void testNotVanilla(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT(0); + VERIFY_FAILS_END +} + +void testNotTrue(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_TRUE(0); + VERIFY_FAILS_END +} + +void testNotFalse(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_FALSE(1); + VERIFY_FAILS_END +} + +void testNotUnless(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UNLESS(1); + VERIFY_FAILS_END +} + +void testNotNotEqual(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_NOT_EQUAL(10, 10); + VERIFY_FAILS_END +} + +void testFail(void) +{ + EXPECT_ABORT_BEGIN + TEST_FAIL_MESSAGE("Expected for testing"); + VERIFY_FAILS_END +} + +void testIsNull(void) +{ + char* ptr1 = NULL; + const char* ptr2 = "hello"; + + TEST_ASSERT_NULL(ptr1); + TEST_ASSERT_NOT_NULL(ptr2); +} + +void testIsNullShouldFailIfNot(void) +{ + const char* ptr1 = "hello"; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_NULL(ptr1); + VERIFY_FAILS_END +} + +void testNotNullShouldFailIfNULL(void) +{ + char* ptr1 = NULL; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_NOT_NULL(ptr1); + VERIFY_FAILS_END +} + +void testIgnore(void) +{ + EXPECT_ABORT_BEGIN + TEST_IGNORE(); + TEST_FAIL_MESSAGE("This should not be reached"); + VERIFY_IGNORES_END +} + +void testIgnoreMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_IGNORE_MESSAGE("This is an expected TEST_IGNORE_MESSAGE string!"); + TEST_FAIL_MESSAGE("This should not be reached"); + VERIFY_IGNORES_END +} + +void testNotEqualInts(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT(3982, 3983); + VERIFY_FAILS_END +} + +void testNotEqualInt8s(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT8(-127, -126); + VERIFY_FAILS_END +} + +void testNotEqualInt16s(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT16(-16383, -16382); + VERIFY_FAILS_END +} + +void testNotEqualInt32s(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT32(-2147483647, -2147483648); //use largest 32 bit negative to test printability + VERIFY_FAILS_END +} + +void testNotEqualBits(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_BITS(0xFF00, 0x5555, 0x5A55); + VERIFY_FAILS_END +} + +void testNotEqualUInts(void) +{ + UNITY_UINT16 v0, v1; + + v0 = 9000; + v1 = 9001; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualUInt8s(void) +{ + UNITY_UINT8 v0, v1; + + v0 = 254; + v1 = 255; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT8(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualUInt16s(void) +{ + UNITY_UINT16 v0, v1; + + v0 = 65535; + v1 = 65534; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT16(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualUInt32s(void) +{ + UNITY_UINT32 v0, v1; + + v0 = 4294967295; + v1 = 4294967294; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT32(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualHex8s(void) +{ + UNITY_UINT8 v0, v1; + + v0 = 0x23; + v1 = 0x22; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX8(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualHex8sIfSigned(void) +{ + UNITY_INT8 v0, v1; + + v0 = -2; + v1 = 2; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX8(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualHex16s(void) +{ + UNITY_UINT16 v0, v1; + + v0 = 0x1234; + v1 = 0x1235; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX16(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualHex16sIfSigned(void) +{ + UNITY_INT16 v0, v1; + + v0 = -1024; + v1 = -1028; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX16(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualHex32s(void) +{ + UNITY_UINT32 v0, v1; + + v0 = 900000; + v1 = 900001; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX32(v0, v1); + VERIFY_FAILS_END +} + +void testNotEqualHex32sIfSigned(void) +{ + UNITY_INT32 v0, v1; + + v0 = -900000; + v1 = 900001; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX32(v0, v1); + VERIFY_FAILS_END +} + +void testEqualInts(void) +{ + int v0, v1; + int *p0, *p1; + + v0 = 19467; + v1 = 19467; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT(1837, 1837); + TEST_ASSERT_EQUAL_INT(-27365, -27365); + TEST_ASSERT_EQUAL_INT(v0, v1); + TEST_ASSERT_EQUAL_INT(19467, v1); + TEST_ASSERT_EQUAL_INT(v0, 19467); + TEST_ASSERT_EQUAL_INT(*p0, v1); + TEST_ASSERT_EQUAL_INT(*p0, *p1); + TEST_ASSERT_EQUAL_INT(*p0, 19467); +} + +void testEqualInt8s(void) +{ + UNITY_INT8 v0, v1; + UNITY_INT8 *p0, *p1; + + v0 = 0x22; + v1 = 0x22; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT8(0x22, 0x22); + TEST_ASSERT_EQUAL_INT8(v0, v1); + TEST_ASSERT_EQUAL_INT8(0x22, v1); + TEST_ASSERT_EQUAL_INT8(v0, 0x22); + TEST_ASSERT_EQUAL_INT8(*p0, v1); + TEST_ASSERT_EQUAL_INT8(*p0, *p1); + TEST_ASSERT_EQUAL_INT8(*p0, 0x22); +} + +void testEqualInt8sWhenThereAreDifferencesOutside8Bits(void) +{ + TEST_ASSERT_EQUAL_INT8(0x321,0x421); + TEST_ASSERT_EQUAL_INT8(0xFF21,0x0021); +} + +void testEqualInt16s(void) +{ + UNITY_INT16 v0, v1; + UNITY_INT16 *p0, *p1; + + v0 = 0x7876; + v1 = 0x7876; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT16(0x7876, 0x7876); + TEST_ASSERT_EQUAL_INT16(v0, v1); + TEST_ASSERT_EQUAL_INT16(0x7876, v1); + TEST_ASSERT_EQUAL_INT16(v0, 0x7876); + TEST_ASSERT_EQUAL_INT16(*p0, v1); + TEST_ASSERT_EQUAL_INT16(*p0, *p1); + TEST_ASSERT_EQUAL_INT16(*p0, 0x7876); +} + +void testEqualInt16sNegatives(void) +{ + UNITY_INT16 v0, v1; + UNITY_INT16 *p0, *p1; + + v0 = -7876; + v1 = -7876; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT16(-7876, -7876); + TEST_ASSERT_EQUAL_INT16(v0, v1); + TEST_ASSERT_EQUAL_INT16(-7876, v1); + TEST_ASSERT_EQUAL_INT16(v0, -7876); + TEST_ASSERT_EQUAL_INT16(*p0, v1); + TEST_ASSERT_EQUAL_INT16(*p0, *p1); + TEST_ASSERT_EQUAL_INT16(*p0, -7876); +} + +void testEqualInt16sWhenThereAreDifferencesOutside16Bits(void) +{ + TEST_ASSERT_EQUAL_INT16(0x54321,0x64321); + TEST_ASSERT_EQUAL_INT16(0xFFFF4321,0x00004321); +} + +void testEqualInt32s(void) +{ + UNITY_INT32 v0, v1; + UNITY_INT32 *p0, *p1; + + v0 = 0x78760000; + v1 = 0x78760000; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT32(0x78760000, 0x78760000); + TEST_ASSERT_EQUAL_INT32(v0, v1); + TEST_ASSERT_EQUAL_INT32(0x78760000, v1); + TEST_ASSERT_EQUAL_INT32(v0, 0x78760000); + TEST_ASSERT_EQUAL_INT32(*p0, v1); + TEST_ASSERT_EQUAL_INT32(*p0, *p1); + TEST_ASSERT_EQUAL_INT32(*p0, 0x78760000); +} + +void testEqualInt32sNegatives(void) +{ + UNITY_INT32 v0, v1; + UNITY_INT32 *p0, *p1; + + v0 = -123456789; + v1 = -123456789; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT32(-123456789, -123456789); + TEST_ASSERT_EQUAL_INT32(v0, v1); + TEST_ASSERT_EQUAL_INT32(-123456789, v1); + TEST_ASSERT_EQUAL_INT32(v0, -123456789); + TEST_ASSERT_EQUAL_INT32(*p0, v1); + TEST_ASSERT_EQUAL_INT32(*p0, *p1); + TEST_ASSERT_EQUAL_INT32(*p0, -123456789); +} + + +void testEqualUints(void) +{ + unsigned int v0, v1; + unsigned int *p0, *p1; + + v0 = 19467; + v1 = 19467; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_UINT(1837, 1837); + TEST_ASSERT_EQUAL_UINT(v0, v1); + TEST_ASSERT_EQUAL_UINT(19467, v1); + TEST_ASSERT_EQUAL_UINT(v0, 19467); + TEST_ASSERT_EQUAL_UINT(*p0, v1); + TEST_ASSERT_EQUAL_UINT(*p0, *p1); + TEST_ASSERT_EQUAL_UINT(*p0, 19467); + TEST_ASSERT_EQUAL_UINT(60872u, 60872u); +} + + +void testEqualUint8s(void) +{ + UNITY_UINT8 v0, v1; + UNITY_UINT8 *p0, *p1; + + v0 = 0x22; + v1 = 0x22; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_UINT8(0x22, 0x22); + TEST_ASSERT_EQUAL_UINT8(v0, v1); + TEST_ASSERT_EQUAL_UINT8(0x22, v1); + TEST_ASSERT_EQUAL_UINT8(v0, 0x22); + TEST_ASSERT_EQUAL_UINT8(*p0, v1); + TEST_ASSERT_EQUAL_UINT8(*p0, *p1); + TEST_ASSERT_EQUAL_UINT8(*p0, 0x22); +} + +void testEqualUint8sWhenThereAreDifferencesOutside8Bits(void) +{ + TEST_ASSERT_EQUAL_UINT8(0x321,0x421); + TEST_ASSERT_EQUAL_UINT8(0xFF21,0x0021); +} + +void testEqualUint16s(void) +{ + UNITY_UINT16 v0, v1; + UNITY_UINT16 *p0, *p1; + + v0 = 0x9876; + v1 = 0x9876; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_UINT16(0x9876, 0x9876); + TEST_ASSERT_EQUAL_UINT16(v0, v1); + TEST_ASSERT_EQUAL_UINT16(0x9876, v1); + TEST_ASSERT_EQUAL_UINT16(v0, 0x9876); + TEST_ASSERT_EQUAL_UINT16(*p0, v1); + TEST_ASSERT_EQUAL_UINT16(*p0, *p1); + TEST_ASSERT_EQUAL_UINT16(*p0, 0x9876); +} + +void testEqualUint16sWhenThereAreDifferencesOutside16Bits(void) +{ + TEST_ASSERT_EQUAL_UINT16(0x54321,0x64321); + TEST_ASSERT_EQUAL_UINT16(0xFFFF4321,0x00004321); +} + +void testEqualUint32s(void) +{ + UNITY_UINT32 v0, v1; + UNITY_UINT32 *p0, *p1; + + v0 = 0x98760000; + v1 = 0x98760000; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_UINT32(0x98760000, 0x98760000); + TEST_ASSERT_EQUAL_UINT32(v0, v1); + TEST_ASSERT_EQUAL_UINT32(0x98760000, v1); + TEST_ASSERT_EQUAL_UINT32(v0, 0x98760000); + TEST_ASSERT_EQUAL_UINT32(*p0, v1); + TEST_ASSERT_EQUAL_UINT32(*p0, *p1); + TEST_ASSERT_EQUAL_UINT32(*p0, 0x98760000); +} + +void testNotEqual(void) +{ + TEST_ASSERT_NOT_EQUAL(0, 1); + TEST_ASSERT_NOT_EQUAL(1, 0); + TEST_ASSERT_NOT_EQUAL(100, 101); + TEST_ASSERT_NOT_EQUAL(0, -1); + TEST_ASSERT_NOT_EQUAL(65535, -65535); + TEST_ASSERT_NOT_EQUAL(75, 900); + TEST_ASSERT_NOT_EQUAL(-100, -101); +} + +void testEqualHex8s(void) +{ + UNITY_UINT8 v0, v1; + UNITY_UINT8 *p0, *p1; + + v0 = 0x22; + v1 = 0x22; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_HEX8(0x22, 0x22); + TEST_ASSERT_EQUAL_HEX8(v0, v1); + TEST_ASSERT_EQUAL_HEX8(0x22, v1); + TEST_ASSERT_EQUAL_HEX8(v0, 0x22); + TEST_ASSERT_EQUAL_HEX8(*p0, v1); + TEST_ASSERT_EQUAL_HEX8(*p0, *p1); + TEST_ASSERT_EQUAL_HEX8(*p0, 0x22); +} + +void testEqualHex8sWhenThereAreDifferencesOutside8Bits(void) +{ + TEST_ASSERT_EQUAL_HEX8(0x321,0x421); + TEST_ASSERT_EQUAL_HEX8(0xFF21,0x0021); +} + +void testEqualHex8sNegatives(void) +{ + UNITY_UINT8 v0, v1; + UNITY_UINT8 *p0, *p1; + + v0 = 0xDD; + v1 = 0xDD; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_HEX8(0xDD, 0xDD); + TEST_ASSERT_EQUAL_HEX8(v0, v1); + TEST_ASSERT_EQUAL_HEX8(0xDD, v1); + TEST_ASSERT_EQUAL_HEX8(v0, 0xDD); + TEST_ASSERT_EQUAL_HEX8(*p0, v1); + TEST_ASSERT_EQUAL_HEX8(*p0, *p1); + TEST_ASSERT_EQUAL_HEX8(*p0, 0xDD); +} + +void testEqualHex16s(void) +{ + UNITY_UINT16 v0, v1; + UNITY_UINT16 *p0, *p1; + + v0 = 0x9876; + v1 = 0x9876; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_HEX16(0x9876, 0x9876); + TEST_ASSERT_EQUAL_HEX16(v0, v1); + TEST_ASSERT_EQUAL_HEX16(0x9876, v1); + TEST_ASSERT_EQUAL_HEX16(v0, 0x9876); + TEST_ASSERT_EQUAL_HEX16(*p0, v1); + TEST_ASSERT_EQUAL_HEX16(*p0, *p1); + TEST_ASSERT_EQUAL_HEX16(*p0, 0x9876); +} + +void testEqualHex16sWhenThereAreDifferencesOutside16Bits(void) +{ + TEST_ASSERT_EQUAL_HEX16(0x54321,0x64321); + TEST_ASSERT_EQUAL_HEX16(0xFFFF4321,0x00004321); +} + +void testEqualHex32s(void) +{ + UNITY_UINT32 v0, v1; + UNITY_UINT32 *p0, *p1; + + v0 = 0x98765432ul; + v1 = 0x98765432ul; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_HEX32(0x98765432ul, 0x98765432ul); + TEST_ASSERT_EQUAL_HEX32(v0, v1); + TEST_ASSERT_EQUAL_HEX32(0x98765432ul, v1); + TEST_ASSERT_EQUAL_HEX32(v0, 0x98765432ul); + TEST_ASSERT_EQUAL_HEX32(*p0, v1); + TEST_ASSERT_EQUAL_HEX32(*p0, *p1); + TEST_ASSERT_EQUAL_HEX32(*p0, 0x98765432ul); +} + +void testEqualBits(void) +{ + UNITY_UINT32 v0 = 0xFF55AA00; + UNITY_UINT32 v1 = 0x55550000; + + TEST_ASSERT_BITS(v1, v0, 0x55550000); + TEST_ASSERT_BITS(v1, v0, 0xFF55CC00); + TEST_ASSERT_BITS(0xFFFFFFFF, v0, 0xFF55AA00); + TEST_ASSERT_BITS(0xFFFFFFFF, v0, v0); + TEST_ASSERT_BITS(0xF0F0F0F0, v0, 0xFC5DAE0F); + TEST_ASSERT_BITS_HIGH(v1, v0); + TEST_ASSERT_BITS_LOW(0x000055FF, v0); + TEST_ASSERT_BIT_HIGH(30, v0); + TEST_ASSERT_BIT_LOW(5, v0); +} + +void testNotEqualBitHigh(void) +{ + UNITY_UINT32 v0 = 0x7F55AA00; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_BIT_HIGH(31, v0); + VERIFY_FAILS_END +} + +void testNotEqualBitLow(void) +{ + UNITY_UINT32 v0 = 0xFF55AA00; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_BIT_LOW(30, v0); + VERIFY_FAILS_END +} + +void testNotEqualBitsHigh(void) +{ + UNITY_UINT32 v0 = 0xFF55AA00; + UNITY_UINT32 v1 = 0x55550000; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_BITS_HIGH(v0, v1); + VERIFY_FAILS_END + +} + +void testNotEqualBitsLow(void) +{ + UNITY_UINT32 v0 = 0xFF55AA00; + UNITY_UINT32 v1 = 0x55550000; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_BITS_LOW(v0, v1); + VERIFY_FAILS_END + +} +void testEqualShorts(void) +{ + short v0, v1; + short *p0, *p1; + + v0 = 19467; + v1 = 19467; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT(1837, 1837); + TEST_ASSERT_EQUAL_INT(-2987, -2987); + TEST_ASSERT_EQUAL_INT(v0, v1); + TEST_ASSERT_EQUAL_INT(19467, v1); + TEST_ASSERT_EQUAL_INT(v0, 19467); + TEST_ASSERT_EQUAL_INT(*p0, v1); + TEST_ASSERT_EQUAL_INT(*p0, *p1); + TEST_ASSERT_EQUAL_INT(*p0, 19467); +} + +void testEqualUShorts(void) +{ + unsigned short v0, v1; + unsigned short *p0, *p1; + + v0 = 19467; + v1 = 19467; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_UINT(1837, 1837); + TEST_ASSERT_EQUAL_UINT(2987, 2987); + TEST_ASSERT_EQUAL_UINT(v0, v1); + TEST_ASSERT_EQUAL_UINT(19467, v1); + TEST_ASSERT_EQUAL_UINT(v0, 19467); + TEST_ASSERT_EQUAL_UINT(*p0, v1); + TEST_ASSERT_EQUAL_UINT(*p0, *p1); + TEST_ASSERT_EQUAL_UINT(*p0, 19467); +} + +void testEqualChars(void) +{ + signed char v0, v1; + signed char *p0, *p1; + + v0 = 109; + v1 = 109; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT(42, 42); + TEST_ASSERT_EQUAL_INT(-116, -116); + TEST_ASSERT_EQUAL_INT(v0, v1); + TEST_ASSERT_EQUAL_INT(109, v1); + TEST_ASSERT_EQUAL_INT(v0, 109); + TEST_ASSERT_EQUAL_INT(*p0, v1); + TEST_ASSERT_EQUAL_INT(*p0, *p1); + TEST_ASSERT_EQUAL_INT(*p0, 109); +} + +void testEqualUChars(void) +{ + unsigned char v0, v1; + unsigned char *p0, *p1; + + v0 = 251; + v1 = 251; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT(42, 42); + TEST_ASSERT_EQUAL_INT(v0, v1); + TEST_ASSERT_EQUAL_INT(251, v1); + TEST_ASSERT_EQUAL_INT(v0, 251); + TEST_ASSERT_EQUAL_INT(*p0, v1); + TEST_ASSERT_EQUAL_INT(*p0, *p1); + TEST_ASSERT_EQUAL_INT(*p0, 251); +} + +void testEqualPointers(void) +{ + int v0, v1; + int *p0, *p1, *p2; + + v0 = 19467; + v1 = 18271; + p0 = &v0; + p1 = &v1; + p2 = &v1; + + TEST_ASSERT_EQUAL_PTR(p0, &v0); + TEST_ASSERT_EQUAL_PTR(&v1, p1); + TEST_ASSERT_EQUAL_PTR(p2, p1); + TEST_ASSERT_EQUAL_PTR(&v0, &v0); +} + +void testNotEqualPointers(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_PTR(0x12345678, 0x12345677); + VERIFY_FAILS_END +} + +void testIntsWithinDelta(void) +{ + TEST_ASSERT_INT_WITHIN(1, 5000, 5001); + TEST_ASSERT_INT_WITHIN(5, 5000, 4996); + TEST_ASSERT_INT_WITHIN(5, 5000, 5005); + TEST_ASSERT_INT_WITHIN(500, 50, -440); + + TEST_ASSERT_INT_WITHIN(2, -1, -1); + TEST_ASSERT_INT_WITHIN(5, 1, -1); + TEST_ASSERT_INT_WITHIN(5, -1, 1); +} + +void testIntsWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_INT_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); + TEST_ASSERT_INT_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message."); + TEST_ASSERT_INT_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message."); + TEST_ASSERT_INT_WITHIN_MESSAGE(500, 50, -440, "Custom Message."); + + TEST_ASSERT_INT_WITHIN_MESSAGE(2, -1, -1, "Custom Message."); + TEST_ASSERT_INT_WITHIN_MESSAGE(5, 1, -1, "Custom Message."); + TEST_ASSERT_INT_WITHIN_MESSAGE(5, -1, 1, "Custom Message."); +} + +void testIntsNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT_WITHIN(5, 5000, 5006); + VERIFY_FAILS_END +} + +void testIntsNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT_WITHIN_MESSAGE(5, 5000, 5006, "Custom Message."); + VERIFY_FAILS_END +} + +void testUIntsWithinDelta(void) +{ + TEST_ASSERT_UINT_WITHIN(1, 5000, 5001); + TEST_ASSERT_UINT_WITHIN(5, 5000, 4996); + TEST_ASSERT_UINT_WITHIN(5, 5000, 5005); +} + +void testUIntsWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_UINT_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); + TEST_ASSERT_UINT_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message."); + TEST_ASSERT_UINT_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message."); +} + +void testUIntsNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT_WITHIN(1, 2147483647u, 2147483649u); + VERIFY_FAILS_END +} + +void testUIntsNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT_WITHIN_MESSAGE(1, 2147483647u, 2147483649u, "Custom Message."); + VERIFY_FAILS_END +} + +void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassSmallFirst(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT_WITHIN(5, 1, -1); + VERIFY_FAILS_END +} + +void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassSmallFirstAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT_WITHIN_MESSAGE(5, 1, -1, "Custom Message."); + VERIFY_FAILS_END +} + +void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassBigFirst(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT_WITHIN(5, -1, 1); + VERIFY_FAILS_END +} + +void testUIntsNotWithinDeltaEvenThoughASignedIntWouldPassBigFirstAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT_WITHIN_MESSAGE(5, -1, 1, "Custom Message."); + VERIFY_FAILS_END +} + +void testHEX32sWithinDelta(void) +{ + TEST_ASSERT_HEX32_WITHIN(1, 5000, 5001); + TEST_ASSERT_HEX32_WITHIN(5, 5000, 4996); + TEST_ASSERT_HEX32_WITHIN(5, 5000, 5005); +} + +void testHEX32sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_HEX32_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); + TEST_ASSERT_HEX32_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message."); + TEST_ASSERT_HEX32_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message."); +} + +void testHEX32sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX32_WITHIN(1, 2147483647u, 2147483649u); + VERIFY_FAILS_END +} + +void testHEX32sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX32_WITHIN_MESSAGE(1, 2147483647u, 2147483649u, "Custom Message."); + VERIFY_FAILS_END +} + +void testHEX32sNotWithinDeltaEvenThoughASignedIntWouldPass(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX32_WITHIN(5, 1, -1); + VERIFY_FAILS_END +} + +void testHEX32sNotWithinDeltaEvenThoughASignedIntWouldPassAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX32_WITHIN_MESSAGE(5, 1, -1, "Custom Message."); + VERIFY_FAILS_END +} + +void testHEX16sWithinDelta(void) +{ + TEST_ASSERT_HEX16_WITHIN(1, 5000, 5001); + TEST_ASSERT_HEX16_WITHIN(5, 5000, 4996); + TEST_ASSERT_HEX16_WITHIN(5, 5000, 5005); +} + +void testHEX16sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_HEX16_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); + TEST_ASSERT_HEX16_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message."); + TEST_ASSERT_HEX16_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message."); +} + +void testHEX16sWithinDeltaWhenThereAreDifferenceOutsideOf16Bits(void) +{ + TEST_ASSERT_HEX16_WITHIN(5, 0x54321, 0x44321); +} + +void testHEX16sWithinDeltaWhenThereAreDifferenceOutsideOf16BitsAndCustomMessage(void) +{ + TEST_ASSERT_HEX16_WITHIN_MESSAGE(5, 0x54321, 0x44321, "Custom Message."); +} + +void testHEX16sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX16_WITHIN(2, 65535, 0); + VERIFY_FAILS_END +} + +void testHEX16sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX16_WITHIN_MESSAGE(2, 65535, 0, "Custom Message."); + VERIFY_FAILS_END +} + +void testHEX8sWithinDelta(void) +{ + TEST_ASSERT_HEX8_WITHIN(1, 254, 255); + TEST_ASSERT_HEX8_WITHIN(5, 251, 255); + TEST_ASSERT_HEX8_WITHIN(5, 1, 4); +} + +void testHEX8sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_HEX8_WITHIN_MESSAGE(1, 254, 255, "Custom Message."); + TEST_ASSERT_HEX8_WITHIN_MESSAGE(5, 251, 255, "Custom Message."); + TEST_ASSERT_HEX8_WITHIN_MESSAGE(5, 1, 4, "Custom Message."); +} + +void testHEX8sWithinDeltaWhenThereAreDifferenceOutsideOf8Bits(void) +{ + TEST_ASSERT_HEX8_WITHIN(5, 0x123, 0xF23); +} + +void testHEX8sWithinDeltaWhenThereAreDifferenceOutsideOf8BitsAndCustomMessage(void) +{ + TEST_ASSERT_HEX8_WITHIN_MESSAGE(5, 0x123, 0xF23, "Custom Message."); +} + +void testHEX8sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX8_WITHIN(2, 255, 0); + VERIFY_FAILS_END +} + +void testHEX8sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX8_WITHIN_MESSAGE(2, 255, 0, "Custom Message."); + VERIFY_FAILS_END +} + +//----------------- + +void testUINT32sWithinDelta(void) +{ + TEST_ASSERT_UINT32_WITHIN(1, 5000, 5001); + TEST_ASSERT_UINT32_WITHIN(5, 5000, 4996); + TEST_ASSERT_UINT32_WITHIN(5, 5000, 5005); +} + +void testUINT32sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_UINT32_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); + TEST_ASSERT_UINT32_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message."); + TEST_ASSERT_UINT32_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message."); +} + +void testUINT32sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT32_WITHIN(1, 2147483647u, 2147483649u); + VERIFY_FAILS_END +} + +void testUINT32sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT32_WITHIN_MESSAGE(1, 2147483647u, 2147483649u, "Custom Message."); + VERIFY_FAILS_END +} + +void testUINT32sNotWithinDeltaEvenThoughASignedIntWouldPass(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT32_WITHIN(5, 1, -1); + VERIFY_FAILS_END +} + +void testUINT32sNotWithinDeltaEvenThoughASignedIntWouldPassAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT32_WITHIN_MESSAGE(5, 1, -1, "Custom Message."); + VERIFY_FAILS_END +} + +void testUINT16sWithinDelta(void) +{ + TEST_ASSERT_UINT16_WITHIN(1, 5000, 5001); + TEST_ASSERT_UINT16_WITHIN(5, 5000, 4996); + TEST_ASSERT_UINT16_WITHIN(5, 5000, 5005); +} + +void testUINT16sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_UINT16_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); + TEST_ASSERT_UINT16_WITHIN_MESSAGE(5, 5000, 4996, "Custom Message."); + TEST_ASSERT_UINT16_WITHIN_MESSAGE(5, 5000, 5005, "Custom Message."); +} + +void testUINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16Bits(void) +{ + TEST_ASSERT_UINT16_WITHIN(5, 0x54321, 0x44321); +} + +void testUINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16BitsAndCustomMessage(void) +{ + TEST_ASSERT_UINT16_WITHIN_MESSAGE(5, 0x54321, 0x44321, "Custom Message."); +} + +void testUINT16sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT16_WITHIN(2, 65535, 0); + VERIFY_FAILS_END +} + +void testUINT16sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT16_WITHIN_MESSAGE(2, 65535, 0, "Custom Message."); + VERIFY_FAILS_END +} + +void testUINT8sWithinDelta(void) +{ + TEST_ASSERT_UINT8_WITHIN(1, 254, 255); + TEST_ASSERT_UINT8_WITHIN(5, 251, 255); + TEST_ASSERT_UINT8_WITHIN(5, 1, 4); +} + +void testUINT8sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_UINT8_WITHIN_MESSAGE(1, 254, 255, "Custom Message."); + TEST_ASSERT_UINT8_WITHIN_MESSAGE(5, 251, 255, "Custom Message."); + TEST_ASSERT_UINT8_WITHIN_MESSAGE(5, 1, 4, "Custom Message."); +} + +void testUINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8Bits(void) +{ + TEST_ASSERT_UINT8_WITHIN(5, 0x123, 0xF23); +} + +void testUINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8BitsAndCustomMessage(void) +{ + TEST_ASSERT_UINT8_WITHIN_MESSAGE(5, 0x123, 0xF23, "Custom Message."); +} + +void testUINT8sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT8_WITHIN(2, 255, 0); + VERIFY_FAILS_END +} + +void testUINT8sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT8_WITHIN_MESSAGE(2, 255, 0, "Custom Message."); + VERIFY_FAILS_END +} + +void testINT32sWithinDelta(void) +{ + TEST_ASSERT_INT32_WITHIN(1, 5000, 5001); + TEST_ASSERT_INT32_WITHIN(5, 1, -2); + TEST_ASSERT_INT32_WITHIN(5, -2, 1); +} + +void testINT32sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_INT32_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); +} + +void testINT32sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT32_WITHIN(1, -3, 1); + VERIFY_FAILS_END +} + +void testINT32sNotWithinDeltaAndDifferenceOverflows(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT32_WITHIN(1, -1, 0x7FFFFFFF); + VERIFY_FAILS_END +} +void testINT32sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT32_WITHIN_MESSAGE(1, -2, 1, "Custom Message."); + VERIFY_FAILS_END +} + +void testINT16sWithinDelta(void) +{ + TEST_ASSERT_INT16_WITHIN(1, 5000, 5001); + TEST_ASSERT_INT16_WITHIN(5, 2, -2); + TEST_ASSERT_INT16_WITHIN(5, -2, 2); +} + +void testINT16sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_INT16_WITHIN_MESSAGE(1, 5000, 5001, "Custom Message."); +} + +void testINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16Bits(void) +{ + TEST_ASSERT_INT16_WITHIN(5, 0x54321, 0x44321); +} + +void testINT16sWithinDeltaWhenThereAreDifferenceOutsideOf16BitsAndCustomMessage(void) +{ + TEST_ASSERT_INT16_WITHIN_MESSAGE(5, 0x54321, 0x44321, "Custom Message."); +} + +void testINT16sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT16_WITHIN(2, 4, -2); + VERIFY_FAILS_END +} + +void testINT16sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT16_WITHIN_MESSAGE(2, 3, 0, "Custom Message."); + VERIFY_FAILS_END +} + +void testINT8sWithinDelta(void) +{ + TEST_ASSERT_INT8_WITHIN(1, 127, 126); + TEST_ASSERT_INT8_WITHIN(5, -2, 2); + TEST_ASSERT_INT8_WITHIN(5, 2, -2); +} + +void testINT8sWithinDeltaAndCustomMessage(void) +{ + TEST_ASSERT_INT8_WITHIN_MESSAGE(5, 1, 4, "Custom Message."); +} + +void testINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8Bits(void) +{ + TEST_ASSERT_INT8_WITHIN(5, 0x123, 0xF23); +} + +void testINT8sWithinDeltaWhenThereAreDifferenceOutsideOf8BitsAndCustomMessage(void) +{ + TEST_ASSERT_INT8_WITHIN_MESSAGE(5, 0x123, 0xF23, "Custom Message."); +} + +void testINT8sNotWithinDelta(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT8_WITHIN(2, -3, 0); + VERIFY_FAILS_END +} + +void testINT8sNotWithinDeltaAndCustomMessage(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT8_WITHIN_MESSAGE(2, -4, 0, "Custom Message."); + VERIFY_FAILS_END +} + +void testEqualStrings(void) +{ + const char *testString = "foo"; + + TEST_ASSERT_EQUAL_STRING(testString, testString); + TEST_ASSERT_EQUAL_STRING_MESSAGE("foo", "foo", "foo isn't foo"); + TEST_ASSERT_EQUAL_STRING("foo", testString); + TEST_ASSERT_EQUAL_STRING(testString, "foo"); + TEST_ASSERT_EQUAL_STRING("", ""); +} + +void testEqualStringsLen(void) +{ + const char *testString = "foobar"; + TEST_ASSERT_EQUAL_STRING_LEN(testString, testString, strlen(testString)); + TEST_ASSERT_EQUAL_STRING_LEN_MESSAGE("foobar", "foobaz", 5, "fooba isn't fooba"); + TEST_ASSERT_EQUAL_STRING_LEN("foo", testString, 3); + TEST_ASSERT_EQUAL_STRING_LEN(testString, "foo", 3); + TEST_ASSERT_EQUAL_STRING_LEN("", "", 3); +} + +void testEqualStringsWithCarriageReturnsAndLineFeeds(void) +{ + const char *testString = "foo\r\nbar"; + + TEST_ASSERT_EQUAL_STRING(testString, testString); + TEST_ASSERT_EQUAL_STRING("foo\r\nbar", "foo\r\nbar"); + TEST_ASSERT_EQUAL_STRING("foo\r\nbar", testString); + TEST_ASSERT_EQUAL_STRING(testString, "foo\r\nbar"); + TEST_ASSERT_EQUAL_STRING("", ""); +} + +void testNotEqualString1(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING("foo", "bar"); + VERIFY_FAILS_END +} + +void testNotEqualStringLen1(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_LEN("foobar", "foobaz", 6); + VERIFY_FAILS_END +} + +void testNotEqualString2(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING("foo", ""); + VERIFY_FAILS_END +} + +void testNotEqualStringLen2(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_LEN("foo", "", 3); + VERIFY_FAILS_END +} + +void testNotEqualString3(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING("", "bar"); + VERIFY_FAILS_END +} + +void testNotEqualStringLen3(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_LEN("", "bar", 3); + VERIFY_FAILS_END +} + +void testNotEqualString4(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING("bar\r", "bar\n"); + VERIFY_FAILS_END +} + +void testNotEqualStringLen4(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_LEN("ba\r\x16", "ba\r\n", 4); + VERIFY_FAILS_END +} + +void testNotEqualString5(void) +{ + const char str1[] = { 0x41, 0x42, 0x03, 0x00 }; + const char str2[] = { 0x41, 0x42, 0x04, 0x00 }; + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING(str1, str2); + VERIFY_FAILS_END +} + +void testNotEqualString_ExpectedStringIsNull(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING(NULL, "bar"); + VERIFY_FAILS_END +} + +void testNotEqualStringLen_ExpectedStringIsNull(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_LEN(NULL, "bar", 1); + VERIFY_FAILS_END +} + +void testNotEqualString_ActualStringIsNull(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING("foo", NULL); + VERIFY_FAILS_END +} + +void testNotEqualStringLen_ActualStringIsNull(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_LEN("foo", NULL, 1); + VERIFY_FAILS_END +} + +void testEqualStringArrays(void) +{ + const char *testStrings[] = { "foo", "boo", "woo", "moo" }; + const char *expStrings[] = { "foo", "boo", "woo", "zoo" }; + + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, expStrings, 3); + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 3); + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 2); + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 1); +} + +void testNotEqualStringArray1(void) +{ + const char *testStrings[] = { "foo", "boo", "woo", "moo" }; + const char *expStrings[] = { "foo", "boo", "woo", "zoo" }; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4); + VERIFY_FAILS_END +} + +void testNotEqualStringArray2(void) +{ + const char *testStrings[] = { "zoo", "boo", "woo", "moo" }; + const char *expStrings[] = { "foo", "boo", "woo", "moo" }; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4); + VERIFY_FAILS_END +} + +void testNotEqualStringArray3(void) +{ + const char *testStrings[] = { "foo", "boo", "woo", NULL }; + const char *expStrings[] = { "foo", "boo", "woo", "zoo" }; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4); + VERIFY_FAILS_END +} + +void testNotEqualStringArray4(void) +{ + const char *testStrings[] = { "foo", "boo", "woo", "moo" }; + const char *expStrings[] = { "foo", NULL, "woo", "moo" }; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4); + VERIFY_FAILS_END +} + +void testNotEqualStringArray5(void) +{ + const char **testStrings = NULL; + const char *expStrings[] = { "foo", "boo", "woo", "zoo" }; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4); + VERIFY_FAILS_END +} + +void testNotEqualStringArray6(void) +{ + const char *testStrings[] = { "foo", "boo", "woo", "zoo" }; + const char **expStrings = NULL; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4); + VERIFY_FAILS_END +} + +void testEqualStringArrayIfBothNulls(void) +{ + const char **testStrings = NULL; + const char **expStrings = NULL; + + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 4); +} + +void testNotEqualStringArrayLengthZero(void) +{ + const char *testStrings[] = {NULL}; + const char **expStrings = NULL; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_ARRAY(expStrings, testStrings, 0); + VERIFY_FAILS_END +} + +void testEqualMemory(void) +{ + const char *testString = "whatever"; + + TEST_ASSERT_EQUAL_MEMORY(testString, testString, 8); + TEST_ASSERT_EQUAL_MEMORY("whatever", "whatever", 8); + TEST_ASSERT_EQUAL_MEMORY("whatever", testString, 8); + TEST_ASSERT_EQUAL_MEMORY(testString, "whatever", 8); + TEST_ASSERT_EQUAL_MEMORY(testString, "whatever", 2); + TEST_ASSERT_EQUAL_MEMORY(NULL, NULL, 1); +} + +void testNotEqualMemory1(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY("foo", "bar", 3); + VERIFY_FAILS_END +} + +void testNotEqualMemory2(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY("fool", "food", 4); + VERIFY_FAILS_END +} + +void testNotEqualMemory3(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY(NULL, "food", 4); + VERIFY_FAILS_END +} + +void testNotEqualMemory4(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY("fool", NULL, 4); + VERIFY_FAILS_END +} + +void testNotEqualMemoryLengthZero(void) +{ + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY(NULL, NULL, 0); + VERIFY_FAILS_END +} + +void testEqualIntArrays(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {1, 8, 987, -2}; + int p2[] = {1, 8, 987, 2}; + int p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p3, 1); + TEST_ASSERT_EQUAL_INT_ARRAY(NULL, NULL, 1); +} + +void testNotEqualIntArraysNullExpected(void) +{ + int* p0 = NULL; + int p1[] = {1, 8, 987, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualIntArraysNullActual(void) +{ + int* p1 = NULL; + int p0[] = {1, 8, 987, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualIntArrays1(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {1, 8, 987, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualIntArrays2(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {2, 8, 987, -2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualIntArrays3(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {1, 8, 986, -2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualIntArraysLengthZero(void) +{ + UNITY_UINT32 p0[1] = {1}; + UNITY_UINT32 p1[1] = {1}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT_ARRAY(p0, p1, 0); + VERIFY_FAILS_END +} + +void testEqualPtrArrays(void) +{ + char A = 1; + char B = 2; + char C = 3; + char* p0[] = {&A, &B, &C}; + char* p1[] = {&A, &B, &C, &A}; + char* p2[] = {&A, &B}; + char* p3[] = {&A}; + + TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p0, 3); + TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 3); + TEST_ASSERT_EQUAL_PTR_ARRAY(p1, p2, 2); + TEST_ASSERT_EQUAL_PTR_ARRAY(p3, p0, 1); +} + +void testNotEqualPtrArraysNullExpected(void) +{ + char A = 1; + char B = 2; + char** p0 = NULL; + char* p1[] = {&A, &B}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 2); + VERIFY_FAILS_END +} + +void testNotEqualPtrArraysNullActual(void) +{ + char A = 1; + char B = 2; + char** p0 = NULL; + char* p1[] = {&A, &B}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_PTR_ARRAY(p1, p0, 2); + VERIFY_FAILS_END +} + +void testNotEqualPtrArrays1(void) +{ + char A = 1; + char B = 2; + char C = 3; + char* p0[] = {&A, &B, &C, &B}; + char* p1[] = {&A, &B, &C, &A}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualPtrArrays2(void) +{ + char A = 1; + char B = 2; + char C = 3; + char* p0[] = {&B, &B, &C, &A}; + char* p1[] = {&A, &B, &C, &A}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualPtrArrays3(void) +{ + char A = 1; + char B = 2; + char C = 3; + char* p0[] = {&A, &B, &B, &A}; + char* p1[] = {&A, &B, &C, &A}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_PTR_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualInt8Arrays(void) +{ + UNITY_INT8 p0[] = {1, 8, 117, -2}; + UNITY_INT8 p1[] = {1, 8, 117, -2}; + UNITY_INT8 p2[] = {1, 8, 117, 2}; + UNITY_INT8 p3[] = {1, 50, 60, 70}; + + TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p3, 1); +} + +void testNotEqualInt8Arrays(void) +{ + UNITY_INT8 p0[] = {1, 8, 36, -2}; + UNITY_INT8 p1[] = {1, 8, 36, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT8_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualUIntArrays(void) +{ + unsigned int p0[] = {1, 8, 987, 65132u}; + unsigned int p1[] = {1, 8, 987, 65132u}; + unsigned int p2[] = {1, 8, 987, 2}; + unsigned int p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p3, 1); +} + +void testNotEqualUIntArrays1(void) +{ + unsigned int p0[] = {1, 8, 987, 65132u}; + unsigned int p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUIntArrays2(void) +{ + unsigned int p0[] = {1, 8, 987, 65132u}; + unsigned int p1[] = {2, 8, 987, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUIntArrays3(void) +{ + unsigned int p0[] = {1, 8, 987, 65132u}; + unsigned int p1[] = {1, 8, 986, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualInt16Arrays(void) +{ + UNITY_INT16 p0[] = {1, 8, 117, 3}; + UNITY_INT16 p1[] = {1, 8, 117, 3}; + UNITY_INT16 p2[] = {1, 8, 117, 2}; + UNITY_INT16 p3[] = {1, 50, 60, 70}; + + TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p3, 1); +} + +void testNotEqualInt16Arrays(void) +{ + UNITY_INT16 p0[] = {1, 8, 127, 3}; + UNITY_INT16 p1[] = {1, 8, 127, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT16_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualInt32Arrays(void) +{ + UNITY_INT32 p0[] = {1, 8, 117, 3}; + UNITY_INT32 p1[] = {1, 8, 117, 3}; + UNITY_INT32 p2[] = {1, 8, 117, 2}; + UNITY_INT32 p3[] = {1, 50, 60, 70}; + + TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p3, 1); +} + +void testNotEqualInt32Arrays(void) +{ + UNITY_INT32 p0[] = {1, 8, 127, 3}; + UNITY_INT32 p1[] = {1, 8, 127, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualUINT8Arrays(void) +{ + UNITY_UINT8 p0[] = {1, 8, 100, 127}; + UNITY_UINT8 p1[] = {1, 8, 100, 127}; + UNITY_UINT8 p2[] = {1, 8, 100, 2}; + UNITY_UINT8 p3[] = {1, 50, 60, 70}; + + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p3, 1); +} + +void testNotEqualUINT8Arrays1(void) +{ + unsigned char p0[] = {1, 8, 100, 127u}; + unsigned char p1[] = {1, 8, 100, 255u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUINT8Arrays2(void) +{ + unsigned char p0[] = {1, 8, 100, 127u}; + unsigned char p1[] = {1, 8, 100, 255u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUINT8Arrays3(void) +{ + unsigned char p0[] = {1, 8, 100, 127u}; + unsigned char p1[] = {1, 8, 100, 255u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT8_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + + +void testEqualUINT16Arrays(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {1, 8, 987, 65132u}; + unsigned short p2[] = {1, 8, 987, 2}; + unsigned short p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p3, 1); +} + +void testNotEqualUINT16Arrays1(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUINT16Arrays2(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {2, 8, 987, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUINT16Arrays3(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {1, 8, 986, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT16_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualUINT32Arrays(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p2[] = {1, 8, 987, 2}; + UNITY_UINT32 p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p3, 1); +} + +void testNotEqualUINT32Arrays1(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUINT32Arrays2(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {2, 8, 987, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualUINT32Arrays3(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 986, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualHEXArrays(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p2[] = {1, 8, 987, 2}; + UNITY_UINT32 p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p3, 1); +} + +void testNotEqualHEXArrays1(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEXArrays2(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {2, 8, 987, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEXArrays3(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 986, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualHEX32Arrays(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p2[] = {1, 8, 987, 2}; + UNITY_UINT32 p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p3, 1); +} + +void testNotEqualHEX32Arrays1(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEX32Arrays2(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {2, 8, 987, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEX32Arrays3(void) +{ + UNITY_UINT32 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT32 p1[] = {1, 8, 986, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX32_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualHEX16Arrays(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {1, 8, 987, 65132u}; + unsigned short p2[] = {1, 8, 987, 2}; + unsigned short p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p3, 1); +} + +void testNotEqualHEX16Arrays1(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEX16Arrays2(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {2, 8, 987, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEX16Arrays3(void) +{ + unsigned short p0[] = {1, 8, 987, 65132u}; + unsigned short p1[] = {1, 8, 986, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX16_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualHEX8Arrays(void) +{ + unsigned short p0[] = {1, 8, 254u, 123}; + unsigned short p1[] = {1, 8, 254u, 123}; + unsigned short p2[] = {1, 8, 254u, 2}; + unsigned short p3[] = {1, 23, 25, 26}; + + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p3, 1); +} + +void testNotEqualHEX8Arrays1(void) +{ + unsigned char p0[] = {1, 8, 254u, 253u}; + unsigned char p1[] = {1, 8, 254u, 252u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEX8Arrays2(void) +{ + unsigned char p0[] = {1, 8, 254u, 253u}; + unsigned char p1[] = {2, 8, 254u, 253u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testNotEqualHEX8Arrays3(void) +{ + unsigned char p0[] = {1, 8, 254u, 253u}; + unsigned char p1[] = {1, 8, 255u, 253u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX8_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +} + +void testEqualMemoryArrays(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {1, 8, 987, -2}; + int p2[] = {1, 8, 987, 2}; + int p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p0, sizeof(int), 1); + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p0, sizeof(int), 4); + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4); + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p2, sizeof(int), 3); + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p3, sizeof(int), 1); +} + +void testNotEqualMemoryArraysExpectedNull(void) +{ + int* p0 = NULL; + int p1[] = {1, 8, 987, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4); + VERIFY_FAILS_END +} + +void testNotEqualMemoryArraysActualNull(void) +{ + int p0[] = {1, 8, 987, -2}; + int* p1 = NULL; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4); + VERIFY_FAILS_END +} + +void testNotEqualMemoryArrays1(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {1, 8, 987, 2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4); + VERIFY_FAILS_END +} + +void testNotEqualMemoryArrays2(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {2, 8, 987, -2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4); + VERIFY_FAILS_END +} + +void testNotEqualMemoryArrays3(void) +{ + int p0[] = {1, 8, 987, -2}; + int p1[] = {1, 8, 986, -2}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_MEMORY_ARRAY(p0, p1, sizeof(int), 4); + VERIFY_FAILS_END +} + +void testProtection(void) +{ + volatile int mask = 0; + + if (TEST_PROTECT()) + { + mask |= 1; + TEST_ABORT(); + } + else + { + Unity.CurrentTestFailed = 0; + mask |= 2; + } + + TEST_ASSERT_EQUAL(3, mask); +} + +void testIgnoredAndThenFailInTearDown(void) +{ + SetToOneToFailInTearDown = 1; + TEST_IGNORE(); +} + +// Tricky series of macros to set USING_OUTPUT_SPY +#define USING_SPY_AS(a) EXPAND_AND_USE_2ND(ASSIGN_VALUE(a), 0) +#define ASSIGN_VALUE(a) VAL_##a +#define VAL_putcharSpy 0, 1 +#define EXPAND_AND_USE_2ND(a, b) SECOND_PARAM(a, b, throwaway) +#define SECOND_PARAM(a, b, ...) b +#if USING_SPY_AS(UNITY_OUTPUT_CHAR) + #define USING_OUTPUT_SPY // true only if UNITY_OUTPUT_CHAR = putcharSpy +#endif + +#ifdef USING_OUTPUT_SPY +#include +#define SPY_BUFFER_MAX 40 +static char putcharSpyBuffer[SPY_BUFFER_MAX]; +#endif +static int indexSpyBuffer; +static int putcharSpyEnabled; + +void startPutcharSpy(void) {indexSpyBuffer = 0; putcharSpyEnabled = 1;} + +void endPutcharSpy(void) {putcharSpyEnabled = 0;} + +char* getBufferPutcharSpy(void) +{ +#ifdef USING_OUTPUT_SPY + putcharSpyBuffer[indexSpyBuffer] = '\0'; + return putcharSpyBuffer; +#else + return NULL; +#endif +} + +void putcharSpy(int c) +{ +#ifdef USING_OUTPUT_SPY + if (putcharSpyEnabled) + { + if (indexSpyBuffer < SPY_BUFFER_MAX - 1) + putcharSpyBuffer[indexSpyBuffer++] = (char)c; + } else + putchar((char)c); +#endif +} + +void testFailureCountIncrementsAndIsReturnedAtEnd(void) +{ + UNITY_UINT savedFailures = Unity.TestFailures; + Unity.CurrentTestFailed = 1; + startPutcharSpy(); // Suppress output + UnityConcludeTest(); + endPutcharSpy(); + TEST_ASSERT_EQUAL(savedFailures + 1, Unity.TestFailures); + + startPutcharSpy(); // Suppress output + int failures = UnityEnd(); + Unity.TestFailures--; + endPutcharSpy(); + TEST_ASSERT_EQUAL(savedFailures + 1, failures); +} + +void testCstringsEscapeSequence(void) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + startPutcharSpy(); + UnityPrint("\x16\x10"); + endPutcharSpy(); + TEST_ASSERT_EQUAL_STRING("\\x16\\x10", getBufferPutcharSpy()); +#endif +} + +void testHexPrintsUpToMaxNumberOfNibbles(void) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + startPutcharSpy(); + UnityPrintNumberHex(0xBEE, 21); + endPutcharSpy(); + TEST_ASSERT_EQUAL_INT(sizeof(UNITY_INT)*2, strlen(getBufferPutcharSpy())); +#endif +} + +#define TEST_ASSERT_EQUAL_PRINT_NUMBERS(expected, actual) { \ + startPutcharSpy(); UnityPrintNumber((actual)); endPutcharSpy(); \ + TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy()); \ + } + +#define TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS(expected, actual) { \ + startPutcharSpy(); UnityPrintNumberUnsigned((actual)); endPutcharSpy(); \ + TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy()); \ + } + +void testPrintNumbers32(void) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE_MESSAGE("Compile with '-D UNITY_OUTPUT_CHAR=putcharSpy' to enable print testing"); +#else + TEST_ASSERT_EQUAL_PRINT_NUMBERS("0", 0); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("1", 1); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("-1", -1); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("2000000000", 2000000000); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("-2147483648", (UNITY_INT32)0x80000000); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("-1", (UNITY_INT32)0xFFFFFFFF); +#endif +} + +void testPrintNumbersUnsigned32(void) +{ +#ifndef USING_OUTPUT_SPY + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("0", 0); + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("1", 1); + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("1500000000", 1500000000); + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("2147483648", (UNITY_UINT32)0x80000000); + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("4294967295", (UNITY_UINT32)0xFFFFFFFF); +#endif +} + +// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES 64 BIT SUPPORT ================== + +void testPrintNumbersInt64(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + #ifndef USING_OUTPUT_SPY + TEST_IGNORE(); + #else + TEST_ASSERT_EQUAL_PRINT_NUMBERS("0", 0); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("10000000000", 10000000000); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("-9223372036854775808", (UNITY_INT)0x8000000000000000); + TEST_ASSERT_EQUAL_PRINT_NUMBERS("-1", (UNITY_INT)0xFFFFFFFFFFFFFFFF); + #endif +#endif +} + +void testPrintNumbersUInt64(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + #ifndef USING_OUTPUT_SPY + TEST_IGNORE(); + #else + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("0", 0); + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("70000000000", 70000000000); + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("9223372036854775808", (UNITY_UINT)0x8000000000000000); + TEST_ASSERT_EQUAL_PRINT_UNSIGNED_NUMBERS("18446744073709551615", (UNITY_UINT)0xFFFFFFFFFFFFFFFF); + #endif +#endif +} + +void testEqualHex64s(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 v0, v1; + UNITY_UINT64 *p0, *p1; + + v0 = 0x9876543201234567; + v1 = 0x9876543201234567; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_HEX64(0x9876543201234567, 0x9876543201234567); + TEST_ASSERT_EQUAL_HEX64(v0, v1); + TEST_ASSERT_EQUAL_HEX64(0x9876543201234567, v1); + TEST_ASSERT_EQUAL_HEX64(v0, 0x9876543201234567); + TEST_ASSERT_EQUAL_HEX64(*p0, v1); + TEST_ASSERT_EQUAL_HEX64(*p0, *p1); + TEST_ASSERT_EQUAL_HEX64(*p0, 0x9876543201234567); +#endif +} + +void testEqualUint64s(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 v0, v1; + UNITY_UINT64 *p0, *p1; + + v0 = 0x9876543201234567; + v1 = 0x9876543201234567; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_UINT64(0x9876543201234567, 0x9876543201234567); + TEST_ASSERT_EQUAL_UINT64(v0, v1); + TEST_ASSERT_EQUAL_UINT64(0x9876543201234567, v1); + TEST_ASSERT_EQUAL_UINT64(v0, 0x9876543201234567); + TEST_ASSERT_EQUAL_UINT64(*p0, v1); + TEST_ASSERT_EQUAL_UINT64(*p0, *p1); + TEST_ASSERT_EQUAL_UINT64(*p0, 0x9876543201234567); +#endif +} + +void testEqualInt64s(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_INT64 v0, v1; + UNITY_INT64 *p0, *p1; + + v0 = (UNITY_INT64)0x9876543201234567; + v1 = (UNITY_INT64)0x9876543201234567; + p0 = &v0; + p1 = &v1; + + TEST_ASSERT_EQUAL_INT64(0x9876543201234567, 0x9876543201234567); + TEST_ASSERT_EQUAL_INT64(v0, v1); + TEST_ASSERT_EQUAL_INT64(0x9876543201234567, v1); + TEST_ASSERT_EQUAL_INT64(v0, 0x9876543201234567); + TEST_ASSERT_EQUAL_INT64(*p0, v1); + TEST_ASSERT_EQUAL_INT64(*p0, *p1); + TEST_ASSERT_EQUAL_INT64(*p0, 0x9876543201234567); +#endif +} + + +void testNotEqualHex64s(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 v0, v1; + + v0 = 9000000000; + v1 = 9100000000; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX64(v0, v1); + VERIFY_FAILS_END +#endif +} + +void testNotEqualUint64s(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 v0, v1; + + v0 = 9000000000; + v1 = 9100000000; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT64(v0, v1); + VERIFY_FAILS_END +#endif +} + +void testNotEqualInt64s(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_INT64 v0, v1; + + v0 = -9000000000; + v1 = 9100000000; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT64(v0, v1); + VERIFY_FAILS_END +#endif +} + +void testNotEqualHex64sIfSigned(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_INT64 v0, v1; + + v0 = -9000000000; + v1 = 9000000000; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX64(v0, v1); + VERIFY_FAILS_END +#endif +} + +void testHEX64sWithinDelta(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + TEST_ASSERT_HEX64_WITHIN(1, 0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFE); + TEST_ASSERT_HEX64_WITHIN(5, 5000, 4996); + TEST_ASSERT_HEX64_WITHIN(5, 5000, 5005); +#endif +} + +void testHEX64sNotWithinDelta(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX64_WITHIN(1, 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFC); + VERIFY_FAILS_END +#endif +} + +void testHEX64sNotWithinDeltaEvenThoughASignedIntWouldPass(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_HEX64_WITHIN(5, 1, -1); + VERIFY_FAILS_END +#endif +} + +void testUINT64sWithinDelta(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + TEST_ASSERT_UINT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFE); + TEST_ASSERT_UINT64_WITHIN(5, 5000, 4996); + TEST_ASSERT_UINT64_WITHIN(5, 5000, 5005); +#endif +} + +void testUINT64sNotWithinDelta(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFC); + VERIFY_FAILS_END +#endif +} + +void testUINT64sNotWithinDeltaEvenThoughASignedIntWouldPass(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_UINT64_WITHIN(5, 1, -1); + VERIFY_FAILS_END +#endif +} + +void testINT64sWithinDelta(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + TEST_ASSERT_INT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF,0x7FFFFFFFFFFFFFFE); + TEST_ASSERT_INT64_WITHIN(5, 5000, 4996); + TEST_ASSERT_INT64_WITHIN(5, 5000, 5005); +#endif +} + +void testINT64sNotWithinDelta(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT64_WITHIN(1, 0x7FFFFFFFFFFFFFFF, 0x7FFFFFFFFFFFFFFC); + VERIFY_FAILS_END +#endif +} + +void testINT64sNotWithinDeltaAndDifferenceOverflows(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_INT64_WITHIN(1, 0x8000000000000000, 0x7FFFFFFFFFFFFFFF); + VERIFY_FAILS_END +#endif +} + +void testEqualHEX64Arrays(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT64 p1[] = {1, 8, 987, 65132u}; + UNITY_UINT64 p2[] = {1, 8, 987, 2}; + UNITY_UINT64 p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p3, 1); +#endif +} + +void testEqualUint64Arrays(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT64 p1[] = {1, 8, 987, 65132u}; + UNITY_UINT64 p2[] = {1, 8, 987, 2}; + UNITY_UINT64 p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p3, 1); +#endif +} + +void testEqualInt64Arrays(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_INT64 p0[] = {1, 8, 987, -65132}; + UNITY_INT64 p1[] = {1, 8, 987, -65132}; + UNITY_INT64 p2[] = {1, 8, 987, -2}; + UNITY_INT64 p3[] = {1, 500, 600, 700}; + + TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p3, 1); +#endif +} + + +void testNotEqualHEX64Arrays1(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT64 p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualHEX64Arrays2(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT64 p1[] = {2, 8, 987, 65132u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX64_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualUint64Arrays(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_UINT64 p0[] = {1, 8, 987, 65132u}; + UNITY_UINT64 p1[] = {1, 8, 987, 65131u}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_UINT64_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualInt64Arrays(void) +{ +#ifndef UNITY_SUPPORT_64 + TEST_IGNORE(); +#else + UNITY_INT64 p0[] = {1, 8, 987, -65132}; + UNITY_INT64 p1[] = {1, 8, 987, -65131}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT64_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} +// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES FLOAT SUPPORT ================== + +void testFloatsWithinDelta(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_WITHIN(0.00003f, 187245.03485f, 187245.03488f); + TEST_ASSERT_FLOAT_WITHIN(1.0f, 187245.0f, 187246.0f); + TEST_ASSERT_FLOAT_WITHIN(0.05f, 9273.2549f, 9273.2049f); + TEST_ASSERT_FLOAT_WITHIN(0.007f, -726.93724f, -726.94424f); +#endif +} + +void testFloatsNotWithinDelta(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_WITHIN(0.05f, 9273.2649f, 9273.2049f); + VERIFY_FAILS_END +#endif +} + +void testFloatsEqual(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_FLOAT(187245.0f, 187246.0f); + TEST_ASSERT_EQUAL_FLOAT(18724.5f, 18724.6f); + TEST_ASSERT_EQUAL_FLOAT(9273.2549f, 9273.2599f); + TEST_ASSERT_EQUAL_FLOAT(-726.93724f, -726.9374f); +#endif +} + +void testFloatsNotEqual(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(9273.9649f, 9273.0049f); + VERIFY_FAILS_END +#endif +} + +void testFloatsNotEqualNegative1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(-9273.9649f, -9273.0049f); + VERIFY_FAILS_END +#endif +} + +void testFloatsNotEqualNegative2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(-9273.0049f, -9273.9649f); + VERIFY_FAILS_END +#endif +} + +void testFloatsNotEqualActualNaN(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(85.963f, 0.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatsNotEqualExpectedNaN(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(0.0f / f_zero, 85.963f); + VERIFY_FAILS_END +#endif +} + +void testFloatsEqualBothNaN(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_FLOAT(0.0f / f_zero, 0.0f / f_zero); +#endif +} + +void testFloatsNotEqualInfNaN(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, 0.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatsNotEqualNaNInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(0.0f / f_zero, 1.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatsNotEqualActualInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(321.642f, 1.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatsNotEqualExpectedInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, 321.642f); + VERIFY_FAILS_END +#endif +} + +void testFloatsEqualBothInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, 1.0f / f_zero); +#endif +} + +void testFloatsNotEqualPlusMinusInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT(1.0f / f_zero, -1.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatIsPosInf1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_IS_INF(2.0f / f_zero); +#endif +} + +void testFloatIsPosInf2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_NOT_INF(2.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatIsNegInf1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_IS_NEG_INF(-3.0f / f_zero); +#endif +} + +void testFloatIsNegInf2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_NOT_NEG_INF(-3.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatIsNotPosInf1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_INF(2.0f); + VERIFY_FAILS_END +#endif +} + +void testFloatIsNotPosInf2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_IS_NOT_INF(2.0f); +#endif +} + +void testFloatIsNotNegInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_NEG_INF(-999.876f); + VERIFY_FAILS_END +#endif +} + +void testFloatIsNan1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_IS_NAN(0.0f / f_zero); +#endif +} + +void testFloatIsNan2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_NOT_NAN(0.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatIsNotNan1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_NAN(234.9f); + VERIFY_FAILS_END +#endif +} + +void testFloatIsNotNan2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_IS_NOT_NAN(234.9f); +#endif +} + +void testFloatInfIsNotNan(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_NAN(1.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatNanIsNotInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_INF(0.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatIsDeterminate1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_IS_DETERMINATE(0.0f); + TEST_ASSERT_FLOAT_IS_DETERMINATE(123.3f); + TEST_ASSERT_FLOAT_IS_DETERMINATE(-88.3f); +#endif +} + +void testFloatIsDeterminate2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(-88.3f); + VERIFY_FAILS_END +#endif +} + +void testFloatIsNotDeterminate1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(1.0f / f_zero); + TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(-1.0f / f_zero); + TEST_ASSERT_FLOAT_IS_NOT_DETERMINATE(0.0f / f_zero); +#endif +} + +void testFloatIsNotDeterminate2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_FLOAT_IS_DETERMINATE(-1.0f / f_zero); + VERIFY_FAILS_END +#endif +} + +void testFloatTraitFailsOnInvalidTrait(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + UnityAssertFloatSpecial(1.0f, NULL, __LINE__, UNITY_FLOAT_INVALID_TRAIT); + VERIFY_FAILS_END +#endif +} + + +void testEqualFloatArrays(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {1.0f, -8.0f, 25.4f, -0.123f}; + float p1[] = {1.0f, -8.0f, 25.4f, -0.123f}; + float p2[] = {1.0f, -8.0f, 25.4f, -0.2f}; + float p3[] = {1.0f, -23.0f, 25.0f, -0.26f}; + + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p3, 1); + TEST_ASSERT_EQUAL_FLOAT_ARRAY(NULL, NULL, 1); +#endif +} + +void testNotEqualFloatArraysExpectedNull(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float* p0 = NULL; + float p1[] = {1.0f, 8.0f, 25.4f, 0.252f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualFloatArraysActualNull(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {1.0f, 8.0f, 25.4f, 0.253f}; + float* p1 = NULL; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualFloatArrays1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {1.0f, 8.0f, 25.4f, 0.253f}; + float p1[] = {1.0f, 8.0f, 25.4f, 0.252f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualFloatArrays2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {1.0f, 8.0f, 25.4f, 0.253f}; + float p1[] = {2.0f, 8.0f, 25.4f, 0.253f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualFloatArrays3(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {1.0f, 8.0f, 25.4f, 0.253f}; + float p1[] = {1.0f, 8.0f, 25.5f, 0.253f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualFloatArraysNegative1(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {-1.0f, -8.0f, -25.4f, -0.253f}; + float p1[] = {-1.0f, -8.0f, -25.4f, -0.252f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualFloatArraysNegative2(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {-1.0f, -8.0f, -25.4f, -0.253f}; + float p1[] = {-2.0f, -8.0f, -25.4f, -0.253f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualFloatArraysNegative3(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {-1.0f, -8.0f, -25.4f, -0.253f}; + float p1[] = {-1.0f, -8.0f, -25.5f, -0.253f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testEqualFloatArraysNaN(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {1.0f, 0.0f / f_zero, 25.4f, 0.253f}; + float p1[] = {1.0f, 0.0f / f_zero, 25.4f, 0.253f}; + + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); +#endif +} + +void testEqualFloatArraysInf(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[] = {1.0f, 1.0f / f_zero, 25.4f, 0.253f}; + float p1[] = {1.0f, 1.0f / f_zero, 25.4f, 0.253f}; + + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 4); +#endif +} + +void testNotEqualFloatArraysLengthZero(void) +{ +#ifdef UNITY_EXCLUDE_FLOAT + TEST_IGNORE(); +#else + float p0[1] = {0.0f}; + float p1[1] = {0.0f}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_FLOAT_ARRAY(p0, p1, 0); + VERIFY_FAILS_END +#endif +} + +#define TEST_ASSERT_EQUAL_PRINT_FLOATING(expected, actual) { \ + startPutcharSpy(); UnityPrintFloat((actual)); endPutcharSpy(); \ + TEST_ASSERT_EQUAL_STRING((expected), getBufferPutcharSpy()); \ + } + +void testFloatPrinting(void) +{ +#if defined(UNITY_EXCLUDE_FLOAT_PRINT) || !defined(USING_OUTPUT_SPY) + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.0", 0.0f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.000000...", 0.000000499f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.000001", 0.00000050000005f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.100469", 0.100469499f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.0", 0.9999995f); /*Rounding to int place*/ + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.0", 1.0f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.25", 1.25f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("7.999999", 7.999999f); /*Not rounding*/ + TEST_ASSERT_EQUAL_PRINT_FLOATING("16.000002", 16.000002f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("16.000004", 16.000004f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("16.000006", 16.000006f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("4294967040.0", 4294967040.0f); /*Last full print integer*/ + + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.0", -0.0f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-0.000000...",-0.000000499f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-0.000001", -0.00000050000005f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-0.100469", -0.100469499f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-1.0", -0.9999995f); /*Rounding to int place*/ + TEST_ASSERT_EQUAL_PRINT_FLOATING("-1.0", -1.0f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-1.25", -1.25f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-7.999999", -7.999999f); /*Not rounding*/ + TEST_ASSERT_EQUAL_PRINT_FLOATING("-16.000002", -16.000002f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-16.000004", -16.000004f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-16.000006", -16.000006f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-4294967040.0",-4294967040.0f); /*Last full print integer*/ + + TEST_ASSERT_EQUAL_PRINT_FLOATING("4.2949673e+09", 4294967296.0f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("5.0e+09", 5000000000.0f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("8.0e+09", 8.0e+09f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("8.3099991e+09", 8309999104.0f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.0e+10", 1.0e+10f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.0e+10", 10000000000.0f); + /* Some compilers have trouble with inexact float constants, a float cast works generally */ + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.00005499e+10", (float)1.000055e+10f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.10000006e+38", (float)1.10000005e+38f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.63529943e+10", 1.63529943e+10f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("3.40282347e+38", 3.40282346638e38f); + + TEST_ASSERT_EQUAL_PRINT_FLOATING("-1.0e+10", -1.0e+10f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-3.40282347e+38",-3.40282346638e38f); +#endif +} + +void testFloatPrintingRoundTiesToEven(void) +{ +#if defined(UNITY_EXCLUDE_FLOAT_PRINT) || !defined(USING_OUTPUT_SPY) + TEST_IGNORE(); +#else + #ifdef UNITY_ROUND_TIES_AWAY_FROM_ZERO + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.007813", 0.0078125f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.976563", 0.9765625f); + #else /* Default to Round ties to even */ + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.007182", 0.0071825f); + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.976562", 0.9765625f); + #endif +#endif +} + +void testFloatPrintingInfinityAndNaN(void) +{ +#if defined(UNITY_EXCLUDE_FLOAT_PRINT) || !defined(USING_OUTPUT_SPY) + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_PRINT_FLOATING("Inf", 1.0f / f_zero); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-Inf", -1.0f / f_zero); + + TEST_ASSERT_EQUAL_PRINT_FLOATING("NaN", 0.0f / f_zero); +#endif +} + +#if defined(UNITY_TEST_ALL_FLOATS_PRINT_OK) && defined(USING_OUTPUT_SPY) +static void AllFloatPrinting_LessThan32Bits(void) +{ + char expected[18]; + union { float f_value; int32_t int_value; } u; + /* Float representations are laid out in integer order, walk up the list */ + for (u.f_value = 0.00000050000005f; u.f_value <= 4294967040.0f; u.int_value += 1) + { + startPutcharSpy(); + + UnityPrintFloat(u.f_value); /*1.5x as fast as sprintf 5e-7f - 0.01f, 20s vs 30s*/ + int len = sprintf(expected, "%.6f", u.f_value); + + while (expected[len - 1] == '0' && expected[len - 2] != '.') { len--; } + expected[len] = '\0'; /* delete trailing 0's */ + + if (strcmp(expected, getBufferPutcharSpy()) != 0) + { + double six_digits = ((double)u.f_value - (uint32_t)u.f_value)*1000000.0; + /* Not a tie (remainder != 0.5) => Can't explain the different strings */ + if (six_digits - (uint32_t)six_digits != 0.5) + { + /* Fail with diagnostic printing */ + TEST_ASSERT_EQUAL_PRINT_FLOATING(expected, u.f_value); + } + } + } +} + +/* Compared to perfect, floats are occasionally rounded wrong. It doesn't affect + * correctness, though. Two examples (of 13 total found during testing): + * Printed: 6.19256349e+20, Exact: 619256348499999981568.0f <= Eliminated by ROUND_TIES_TO_EVEN + * Printed: 2.19012272e+35, Exact: 219012271499999993621766990196637696.0f */ +static void AllFloatPrinting_Larger(const float start, const float end) +{ + unsigned int wrong = 0; + char expected[18]; + union { float f_value; int32_t int_value; } u; + for (u.f_value = start; u.f_value <= end; u.int_value += 1) + { + startPutcharSpy(); + + UnityPrintFloat(u.f_value); /*Twice as fast as sprintf 2**32-1e12, 10s vs 21s*/ + sprintf(expected, "%.8e", u.f_value); + + int len = 11 - 1; /* 11th char is 'e' in exponential format */ + while (expected[len - 1] == '0' && expected[len - 2] != '.') { len --; } + if (expected[14] != '\0') memmove(&expected[12], &expected[13], 3); /* Two char exponent */ + memmove(&expected[len], &expected[11 - 1], sizeof "e+09"); /* 5 char length */ + + if (strcmp(expected, getBufferPutcharSpy()) != 0) + { + wrong++; + /* endPutcharSpy(); UnityPrint("Expected "); UnityPrint(expected); + UnityPrint(" Was "); UnityPrint(getBufferPutcharSpy()); UNITY_OUTPUT_CHAR('\n'); */ + + if (wrong > 10 || (wrong > 3 && end <= 1e25f)) + TEST_ASSERT_EQUAL_PRINT_FLOATING(expected, u.f_value); + /* Empirical values from the current routine, don't be worse when making changes */ + } + } +} +#endif + +/* Exhaustive testing of all float values we differentiate when printing. Doubles + * are not explored here -- too many. These tests confirm that the routine works + * for all floats > 5e-7, positives only. Off by default due to test time. + * Compares Unity's routine to your sprintf() C lib, tested to pass on 3 platforms. + * Part1 takes a long time, around 3 minutes compiled with -O2 + * Runs through all floats from 0.000001 - 2**32, ~300 million values */ +void testAllFloatPrintingPart1_LessThan32Bits(void) +{ +#if defined(UNITY_TEST_ALL_FLOATS_PRINT_OK) && defined(USING_OUTPUT_SPY) + AllFloatPrinting_LessThan32Bits(); +#else + TEST_IGNORE(); /* Ignore one of three */ +#endif +} + +/* Test takes a long time, around 3.5 minutes compiled with -O2, try ~500 million values */ +void testAllFloatPrintingPart2_Larger(void) +{ +#if defined(UNITY_TEST_ALL_FLOATS_PRINT_OK) && defined(USING_OUTPUT_SPY) + AllFloatPrinting_Larger(4294967296.0f, 1e25f); +#endif +} + +/* Test takes a long time, around 3.5 minutes compiled with -O2, try ~500 million values */ +void testAllFloatPrintingPart3_LargerStill(void) +{ +#if defined(UNITY_TEST_ALL_FLOATS_PRINT_OK) && defined(USING_OUTPUT_SPY) + AllFloatPrinting_Larger(1e25f, 3.40282347e+38f); +#endif +} + +// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES DOUBLE SUPPORT ================== + +void testDoublesWithinDelta(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_WITHIN(0.00003, 187245.03485, 187245.03488); + TEST_ASSERT_DOUBLE_WITHIN(1.0, 187245.0, 187246.0); + TEST_ASSERT_DOUBLE_WITHIN(0.05, 9273.2549, 9273.2049); + TEST_ASSERT_DOUBLE_WITHIN(0.007, -726.93725, -726.94424); +#endif +} + +void testDoublesNotWithinDelta(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_WITHIN(0.05, 9273.2649, 9273.2049); + VERIFY_FAILS_END +#endif +} + + +void testDoublesEqual(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_DOUBLE(187245123456.0, 187245123456.0); + TEST_ASSERT_EQUAL_DOUBLE(187241234567.5, 187241234567.6); + TEST_ASSERT_EQUAL_DOUBLE(9273.2512345649, 9273.25123455699); + TEST_ASSERT_EQUAL_DOUBLE(-726.12345693724, -726.1234569374); +#endif +} + +void testDoublesNotEqual(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(9273.9649, 9273.0049); + VERIFY_FAILS_END +#endif +} + +void testDoublesNotEqualNegative1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(-9273.9649, -9273.0049); + VERIFY_FAILS_END +#endif +} + +void testDoublesNotEqualNegative2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(-9273.0049, -9273.9649); + VERIFY_FAILS_END +#endif +} + +void testDoublesNotEqualActualNaN(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(85.963, 0.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoublesNotEqualExpectedNaN(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(0.0 / d_zero, 85.963); + VERIFY_FAILS_END +#endif +} + +void testDoublesEqualBothNaN(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_DOUBLE(0.0 / d_zero, 0.0 / d_zero); +#endif +} + +void testDoublesNotEqualInfNaN(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, 0.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoublesNotEqualNaNInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(0.0 / d_zero, 1.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoublesNotEqualActualInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(321.642, 1.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoublesNotEqualExpectedInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, 321.642); + VERIFY_FAILS_END +#endif +} + +void testDoublesEqualBothInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, 1.0 / d_zero); +#endif +} + +void testDoublesNotEqualPlusMinusInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE(1.0 / d_zero, -1.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsPosInf1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_IS_INF(2.0 / d_zero); +#endif +} + +void testDoubleIsPosInf2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_NOT_INF(2.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsNegInf1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_IS_NEG_INF(-3.0 / d_zero); +#endif +} + +void testDoubleIsNegInf2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_NOT_NEG_INF(-3.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsNotPosInf1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_INF(2.0); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsNotPosInf2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_IS_NOT_INF(2.0); +#endif +} + +void testDoubleIsNotNegInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_NEG_INF(-999.876); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsNan1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_IS_NAN(0.0 / d_zero); +#endif +} + +void testDoubleIsNan2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_NOT_NAN(0.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsNotNan1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_NAN(234.9); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsNotNan2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_IS_NOT_NAN(234.9); +#endif +} + +void testDoubleInfIsNotNan(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_NAN(1.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoubleNanIsNotInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_INF(0.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsDeterminate1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_IS_DETERMINATE(0.0); + TEST_ASSERT_DOUBLE_IS_DETERMINATE(123.3); + TEST_ASSERT_DOUBLE_IS_DETERMINATE(-88.3); +#endif +} + +void testDoubleIsDeterminate2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(-88.3); + VERIFY_FAILS_END +#endif +} + +void testDoubleIsNotDeterminate1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(1.0 / d_zero); + TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(-1.0 / d_zero); + TEST_ASSERT_DOUBLE_IS_NOT_DETERMINATE(0.0 / d_zero); +#endif +} + +void testDoubleIsNotDeterminate2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + TEST_ASSERT_DOUBLE_IS_DETERMINATE(-1.0 / d_zero); + VERIFY_FAILS_END +#endif +} + +void testDoubleTraitFailsOnInvalidTrait(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + EXPECT_ABORT_BEGIN + UnityAssertDoubleSpecial(1.0, NULL, __LINE__, UNITY_FLOAT_INVALID_TRAIT); + VERIFY_FAILS_END +#endif +} + +void testEqualDoubleArrays(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {1.0, -8.0, 25.4, -0.123}; + double p1[] = {1.0, -8.0, 25.4, -0.123}; + double p2[] = {1.0, -8.0, 25.4, -0.2}; + double p3[] = {1.0, -23.0, 25.0, -0.26}; + + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p0, 1); + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p0, 4); + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p2, 3); + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p3, 1); + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(NULL, NULL, 1); +#endif +} + +void testNotEqualDoubleArraysExpectedNull(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double* p0 = NULL; + double p1[] = {1.0, 8.0, 25.4, 0.252}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualDoubleArraysActualNull(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {1.0, 8.0, 25.4, 0.253}; + double* p1 = NULL; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualDoubleArrays1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {1.0, 8.0, 25.4, 0.25666666667}; + double p1[] = {1.0, 8.0, 25.4, 0.25666666666}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualDoubleArrays2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {1.0, 8.0, 25.4, 0.253}; + double p1[] = {2.0, 8.0, 25.4, 0.253}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualDoubleArrays3(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {1.0, 8.0, 25.4, 0.253}; + double p1[] = {1.0, 8.0, 25.5, 0.253}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualDoubleArraysNegative1(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {-1.0, -8.0, -25.4, -0.2566666667}; + double p1[] = {-1.0, -8.0, -25.4, -0.2566666666}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualDoubleArraysNegative2(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {-1.0, -8.0, -25.4, -0.253}; + double p1[] = {-2.0, -8.0, -25.4, -0.253}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testNotEqualDoubleArraysNegative3(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {-1.0, -8.0, -25.4, -0.253}; + double p1[] = {-1.0, -8.0, -25.5, -0.253}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); + VERIFY_FAILS_END +#endif +} + +void testEqualDoubleArraysNaN(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {1.0, 0.0 / d_zero, 25.4, 0.253}; + double p1[] = {1.0, 0.0 / d_zero, 25.4, 0.253}; + + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); +#endif +} + +void testEqualDoubleArraysInf(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[] = {1.0, 1.0 / d_zero, 25.4, 0.253}; + double p1[] = {1.0, 1.0 / d_zero, 25.4, 0.253}; + + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 4); +#endif +} + +void testNotEqualDoubleArraysLengthZero(void) +{ +#ifdef UNITY_EXCLUDE_DOUBLE + TEST_IGNORE(); +#else + double p0[1] = {0.0}; + double p1[1] = {0.0}; + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_DOUBLE_ARRAY(p0, p1, 0); + VERIFY_FAILS_END +#endif +} + +void testDoublePrinting(void) +{ +#if defined(UNITY_EXCLUDE_FLOAT_PRINT) || defined(UNITY_EXCLUDE_DOUBLE) || !defined(USING_OUTPUT_SPY) + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_PRINT_FLOATING("0.100469", 0.10046949999999999); + TEST_ASSERT_EQUAL_PRINT_FLOATING("4294967295.999999", 4294967295.999999); + TEST_ASSERT_EQUAL_PRINT_FLOATING("4.2949673e+09", 4294967295.9999995); + TEST_ASSERT_EQUAL_PRINT_FLOATING("4.2949673e+09", 4294967296.0); + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.0e+10", 9999999995.0); + TEST_ASSERT_EQUAL_PRINT_FLOATING("9.00719925e+15", 9007199254740990.0); + TEST_ASSERT_EQUAL_PRINT_FLOATING("7.0e+100", 7.0e+100); + TEST_ASSERT_EQUAL_PRINT_FLOATING("3.0e+200", 3.0e+200); + TEST_ASSERT_EQUAL_PRINT_FLOATING("9.23456789e+300", 9.23456789e+300); + + TEST_ASSERT_EQUAL_PRINT_FLOATING("-0.100469", -0.10046949999999999); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-4294967295.999999", -4294967295.999999); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-4.2949673e+09", -4294967295.9999995); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-7.0e+100", -7.0e+100); +#endif +} + +void testDoublePrintingRoundTiesToEven(void) +{ +#if defined(UNITY_EXCLUDE_FLOAT_PRINT) || defined(UNITY_EXCLUDE_DOUBLE) || !defined(USING_OUTPUT_SPY) + TEST_IGNORE(); +#else + #ifdef UNITY_ROUND_TIES_AWAY_FROM_ZERO + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.00000001e+10", 10000000050.0); + TEST_ASSERT_EQUAL_PRINT_FLOATING("9.00719925e+15", 9007199245000000.0); + #else /* Default to Round ties to even */ + TEST_ASSERT_EQUAL_PRINT_FLOATING("1.0e+10", 10000000050.0); + TEST_ASSERT_EQUAL_PRINT_FLOATING("9.00719924e+15", 9007199245000000.0); + #endif +#endif +} + +void testDoublePrintingInfinityAndNaN(void) +{ +#if defined(UNITY_EXCLUDE_FLOAT_PRINT) || defined(UNITY_EXCLUDE_DOUBLE) || !defined(USING_OUTPUT_SPY) + TEST_IGNORE(); +#else + TEST_ASSERT_EQUAL_PRINT_FLOATING("Inf", 1.0 / d_zero); + TEST_ASSERT_EQUAL_PRINT_FLOATING("-Inf", -1.0 / d_zero); + + TEST_ASSERT_EQUAL_PRINT_FLOATING("NaN", 0.0 / d_zero); +#endif +} + +// ===================== THESE TEST WILL RUN IF YOUR CONFIG INCLUDES DETAIL SUPPORT ================== + +void testThatDetailsCanBeHandleOneDetail(void) +{ +#ifdef UNITY_EXCLUDE_DETAILS + TEST_IGNORE(); +#else + UNITY_SET_DETAIL("Detail1"); + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_INT_MESSAGE(5, 6, "Should Fail And Say Detail1"); + VERIFY_FAILS_END +#endif +} + +void testThatDetailsCanHandleTestFail(void) +{ +#ifdef UNITY_EXCLUDE_DETAILS + TEST_IGNORE(); +#else + UNITY_SET_DETAILS("Detail1","Detail2"); + + EXPECT_ABORT_BEGIN + TEST_FAIL_MESSAGE("Should Fail And Say Detail1 and Detail2"); + VERIFY_FAILS_END +#endif +} + +void testThatDetailsCanBeHandleTwoDetails(void) +{ +#ifdef UNITY_EXCLUDE_DETAILS + TEST_IGNORE(); +#else + UNITY_SET_DETAILS("Detail1","Detail2"); + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_HEX8_MESSAGE(7, 8, "Should Fail And Say Detail1 and Detail2"); + VERIFY_FAILS_END +#endif +} + +void testThatDetailsCanBeHandleSingleDetailClearingTwoDetails(void) +{ +#ifdef UNITY_EXCLUDE_DETAILS + TEST_IGNORE(); +#else + UNITY_SET_DETAILS("Detail1","Detail2"); + UNITY_SET_DETAIL("DetailNew"); + + EXPECT_ABORT_BEGIN + TEST_ASSERT_EQUAL_STRING_MESSAGE("MEH", "GUH", "Should Fail And Say DetailNew"); + VERIFY_FAILS_END +#endif +}