From 702c67f3781bdd327f3c23d676a9e0922b02775f Mon Sep 17 00:00:00 2001 From: Bohdan Date: Wed, 1 Mar 2017 15:07:39 +0200 Subject: [PATCH 001/188] news_announcement Initial commit of news announcement feature. --- src/zabapgit.prog.abap | 1 + src/zabapgit_css_common.w3mi.data.css | 47 +++ src/zabapgit_html_chunks.prog.abap | 63 +++- src/zabapgit_js_common.w3mi.data.js | 10 + src/zabapgit_news.prog.abap | 400 ++++++++++++++++++++++++++ src/zabapgit_news.prog.xml | 23 ++ src/zabapgit_page_main.prog.abap | 20 ++ 7 files changed, 558 insertions(+), 6 deletions(-) create mode 100644 src/zabapgit_news.prog.abap create mode 100644 src/zabapgit_news.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 55725524a..532981413 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -53,6 +53,7 @@ INCLUDE zabapgit_folder_logic. INCLUDE zabapgit_stage. INCLUDE zabapgit_git_helpers. INCLUDE zabapgit_repo. +INCLUDE zabapgit_news. INCLUDE zabapgit_stage_logic. INCLUDE zabapgit_2fa. INCLUDE zabapgit_http. diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 31365ec0b..4dc2aae0a 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -700,3 +700,50 @@ div.tutorial h2 { font-size: 14pt; color: #404040; } + +/* News Announcement */ +.change-log { + position: absolute; + z-index: 99 !important; + top: 50%; + left: 50%; + width: 40em; + margin-top: -12em; + margin-left: -20em; + border: 1px solid #ccc; + background-color: white; + padding: 0.5em; +} + +.change-log .change-log-title { + color: #888888; + font-weight: bold; + font-size: 16px; + padding-top: 4px; + padding-bottom: 4px; +} + +.change-log .attention { + background-color: #ff9800; + color: white; + opacity: 0.83; + padding: 10px; +} + +.change-log li { + margin: 4px; + padding-left: 10px; + font-size: 15px; + list-style-type: none; +} + +.change-log p.versionHeader { + font-size: 16px; + color: #888888; + font-weight: bold; + text-align: left; + padding-top: 8px; + padding-bottom: 8px; + border-bottom: 1px #ddd solid; + margin: 4px; +} \ No newline at end of file diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap index de94e6cca..03385b8ff 100644 --- a/src/zabapgit_html_chunks.prog.abap +++ b/src/zabapgit_html_chunks.prog.abap @@ -7,9 +7,9 @@ CLASS lcl_gui_chunk_lib DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS render_error - IMPORTING ix_error TYPE REF TO lcx_exception OPTIONAL - iv_error TYPE string OPTIONAL - RETURNING VALUE(ro_html) TYPE REF TO lcl_html. + IMPORTING ix_error TYPE REF TO lcx_exception OPTIONAL + iv_error TYPE string OPTIONAL + RETURNING VALUE(ro_html) TYPE REF TO lcl_html. CLASS-METHODS render_repo_top IMPORTING io_repo TYPE REF TO lcl_repo @@ -17,13 +17,15 @@ CLASS lcl_gui_chunk_lib DEFINITION FINAL. iv_show_branch TYPE abap_bool DEFAULT abap_true iv_interactive_branch TYPE abap_bool DEFAULT abap_false iv_branch TYPE string OPTIONAL + iv_has_news TYPE abap_bool OPTIONAL + iv_has_important_news TYPE abap_bool OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html RAISING lcx_exception. CLASS-METHODS render_item_state - IMPORTING iv1 TYPE char1 - iv2 TYPE char1 - RETURNING VALUE(rv_html) TYPE string. + IMPORTING iv1 TYPE char1 + iv2 TYPE char1 + RETURNING VALUE(rv_html) TYPE string. CLASS-METHODS render_branch_span IMPORTING iv_branch TYPE string @@ -36,6 +38,13 @@ CLASS lcl_gui_chunk_lib DEFINITION FINAL. RETURNING VALUE(ro_html) TYPE REF TO lcl_html RAISING lcx_exception. + CLASS-METHODS render_news_pop_up + IMPORTING + it_log TYPE lcl_news=>tt_log + iv_has_important TYPE abap_bool + RETURNING VALUE(ro_html) TYPE REF TO lcl_html + RAISING lcx_exception. + ENDCLASS. "lcl_gui_chunk_lib CLASS lcl_gui_chunk_lib IMPLEMENTATION. @@ -72,6 +81,12 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ro_html->add( '' ). + IF iv_has_news = abap_true. + ro_html->add_a( iv_act = 'displayLog()' + iv_typ = gc_action_type-onclick + iv_txt = lcl_html=>icon( iv_name = 'book/dark' ) ). + ENDIF. + IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ). lv_icon = 'star/blue' ##NO_TEXT. ELSE. @@ -215,4 +230,40 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ro_html->add( '' ). ENDMETHOD. "render_js_error_stub + METHOD render_news_pop_up. + + CREATE OBJECT ro_html. + + FIELD-SYMBOLS: LIKE LINE OF it_log. + + ro_html->add( '
' ). + + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '' ). + ro_html->add( '
' ). + ro_html->add( 'Announcement of the latest changes' ). + ro_html->add( '' ). + ro_html->add( 'close' ). + ro_html->add( '
' ). + + IF iv_has_important = abap_true. + ro_html->add( '
' + && '!!! Some changes mentioned in this announcement might be critical !!! ' + && '
' ). + ENDIF. + + " Generate changelog table + LOOP AT it_log ASSIGNING . + IF -header = 'X'. + ro_html->add( '

' && -text && '

' ). + ELSE. + ro_html->add( '
  • ' && -text && '
  • ' ). + ENDIF. + ENDLOOP. + + ro_html->add( '
    ' ). + + ENDMETHOD. "render_news_pop_up + ENDCLASS. "lcl_gui_chunk_lib diff --git a/src/zabapgit_js_common.w3mi.data.js b/src/zabapgit_js_common.w3mi.data.js index f37db91d9..d043ce10d 100644 --- a/src/zabapgit_js_common.w3mi.data.js +++ b/src/zabapgit_js_common.w3mi.data.js @@ -363,3 +363,13 @@ StageHelper.prototype.iterateStageTab = function (changeMode, cb /*, ...*/) { window.scrollTo(0, scrollOffset); } } + +/********************************************************** + * Other functions + **********************************************************/ + +// News announcement +function displayLog() { + var div = document.getElementById("changeLog"); + div.style.display = (div.style.display)?'':'none'; +} \ No newline at end of file diff --git a/src/zabapgit_news.prog.abap b/src/zabapgit_news.prog.abap new file mode 100644 index 000000000..7fac27453 --- /dev/null +++ b/src/zabapgit_news.prog.abap @@ -0,0 +1,400 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_NEWS +*&---------------------------------------------------------------------* +CLASS ltcl_news DEFINITION DEFERRED. + +*&---------------------------------------------------------------------* +*& Class lcl_news +*&---------------------------------------------------------------------* +* Class responsible for preparation of data for news announcements +*----------------------------------------------------------------------* +CLASS lcl_news DEFINITION FRIENDS ltcl_news. + + PUBLIC SECTION. + TYPES: + BEGIN OF ty_log, + version TYPE string, + header TYPE abap_bool, + important TYPE abap_bool, + text TYPE string, + END OF ty_log, + tt_log TYPE STANDARD TABLE OF ty_log WITH DEFAULT KEY. + + CONSTANTS: + mc_log_file_path TYPE string VALUE '/', + mc_log_file_name TYPE string VALUE 'changelog.txt'. + + CLASS-METHODS create + IMPORTING io_repo TYPE REF TO lcl_repo + RETURNING VALUE(ro_instance) TYPE REF TO lcl_news. + + METHODS: + constructor + IMPORTING iv_rawdata TYPE xstring + iv_version TYPE string, + has_news + RETURNING value(rv_boolean) TYPE abap_bool, + get_log + RETURNING value(rt_log) TYPE tt_log, + has_important_news + RETURNING value(rv_boolean) TYPE abap_bool. + + PRIVATE SECTION. + DATA mt_log TYPE tt_log. + + CLASS-METHODS: + split_string + IMPORTING iv_string TYPE string + RETURNING value(rt_lines) TYPE string_table, + + convert_version_to_numeric + IMPORTING iv_version TYPE string + RETURNING value(rv_version) TYPE i, + + parse_data + IMPORTING it_lines TYPE string_table + iv_version TYPE string + RETURNING value(rt_log) TYPE tt_log, + + compare_versions + IMPORTING iv_a TYPE string + iv_b TYPE string + RETURNING value(rv_result) TYPE i. + +ENDCLASS. "lcl_news + +*----------------------------------------------------------------------* +* CLASS lcl_news IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_news IMPLEMENTATION. + + METHOD constructor. + DATA: + lt_lines TYPE string_table, + lv_string TYPE string. + + lv_string = lcl_convert=>xstring_to_string_utf8( iv_rawdata ). + lt_lines = lcl_news=>split_string( lv_string ). + mt_log = lcl_news=>parse_data( it_lines = lt_lines iv_version = iv_version ). + + ENDMETHOD. "constructor + + METHOD create. + + DATA: + lt_remote TYPE ty_files_tt, + lo_repo_online TYPE REF TO lcl_repo_online. + + FIELD-SYMBOLS LIKE LINE OF lt_remote. + + IF io_repo->is_offline( ) = abap_false. + lo_repo_online ?= io_repo. + + " News announcement temporary restricted to abapGit only + IF lo_repo_online->get_url( ) CS '/abapGit.git'. + lt_remote = io_repo->get_files_remote( ). + + READ TABLE lt_remote ASSIGNING WITH KEY path = mc_log_file_path + filename = mc_log_file_name. + IF sy-subrc = 0. + CREATE OBJECT ro_instance EXPORTING + iv_rawdata = -data + iv_version = gc_abap_version. + ENDIF. + ENDIF. + ENDIF. + + ENDMETHOD. "create + + METHOD split_string. + + DATA ls_line LIKE LINE OF rt_lines. + + FIND FIRST OCCURRENCE OF cl_abap_char_utilities=>cr_lf IN iv_string. + + " Convert string into table depending on separator type CR_LF vs. LF + IF sy-subrc = 0. + SPLIT iv_string AT cl_abap_char_utilities=>cr_lf INTO TABLE rt_lines. + ELSE. + SPLIT iv_string AT cl_abap_char_utilities=>newline INTO TABLE rt_lines. + ENDIF. + + ENDMETHOD. "split_string + + METHOD parse_data. + + CONSTANTS: + lc_changelog_version TYPE string + VALUE '^\d{4}-\d{2}-\d{2}\s+v(\d{1,3}\.\d{1,3}\.\d{1,3})\s*$', + lc_internal_version TYPE string + VALUE '^v?(\d{1,3}\.\d{1,3}\.\d{1,3})\s*$'. + + DATA: + lv_first_version_found TYPE abap_bool, + lv_version TYPE string, + lv_current_version TYPE string, + ls_log LIKE LINE OF rt_log. + + FIELD-SYMBOLS: LIKE LINE OF it_lines. + + " Internal program version should be in format "vXXX.XXX.XXX" + FIND FIRST OCCURRENCE OF REGEX lc_internal_version IN iv_version SUBMATCHES lv_current_version. + + IF sy-subrc IS NOT INITIAL. + RETURN. " Internal format of program version is not correct. TODO implement error message + ENDIF. + + LOOP AT it_lines ASSIGNING . + CLEAR: lv_version, ls_log-text, ls_log-important, ls_log-header. + + IF IS INITIAL OR CO ' -='. " Skip empty and technical lines + CONTINUE. + ENDIF. + + " Check if line is a header line + FIND FIRST OCCURRENCE OF REGEX lc_changelog_version IN SUBMATCHES lv_version. + + " Skip entries before first version found + IF lv_first_version_found = abap_false. + IF sy-subrc IS NOT INITIAL. + CONTINUE. + ELSE. + lv_first_version_found = abap_true. + ENDIF. + ENDIF. + + "Skip everything below current version + IF lv_version IS NOT INITIAL + AND lcl_news=>compare_versions( iv_a = lv_version iv_b = lv_current_version ) < 1. + EXIT. + ENDIF. + + " Populate log + IF lv_version IS NOT INITIAL. " Version header + ls_log-version = lv_version. " ... stays for all subsequent non-version lines + ls_log-header = abap_true. + ELSE. " Version line item + FIND FIRST OCCURRENCE OF REGEX '^\s*!' IN . + IF sy-subrc IS INITIAL. + ls_log-important = abap_true. " Change is important + ENDIF. + ENDIF. + + ls_log-text = . + + APPEND ls_log TO rt_log. + ENDLOOP. + + ENDMETHOD. "parse_data + + METHOD has_news. + + rv_boolean = boolc( lines( mt_log ) > 0 ). + + ENDMETHOD. "has_news + + METHOD get_log. + + rt_log = me->mt_log. + + ENDMETHOD. "get_log + + METHOD has_important_news. + + READ TABLE mt_log WITH KEY important = abap_true TRANSPORTING NO FIELDS. + + rv_boolean = boolc( sy-subrc IS INITIAL ). + + ENDMETHOD. "has_important_news + + METHOD compare_versions. + + DATA: + lv_version_a TYPE i, + lv_version_b TYPE i. + + " Convert versions to numeric + lv_version_a = lcl_news=>convert_version_to_numeric( iv_a ). + lv_version_b = lcl_news=>convert_version_to_numeric( iv_b ). + + " Compare versions + IF lv_version_a > lv_version_b. + rv_result = 1. + ELSEIF lv_version_a < lv_version_b. + rv_result = -1. + ELSE. + rv_result = 0. + ENDIF. + + ENDMETHOD. "compare_versions + + METHOD convert_version_to_numeric. + + DATA: lv_major TYPE numc4, + lv_minor TYPE numc4, + lv_release TYPE numc4. + + SPLIT iv_version AT '.' INTO lv_major lv_minor lv_release. + + " Calculated value of version number + rv_version = lv_major * 1000000 + lv_minor * 1000 + lv_release. + + ENDMETHOD. "convert_version_to_numeric + +ENDCLASS. "lcl_news + +*----------------------------------------------------------------------* +* CLASS ltcl_news DEFINITION +*----------------------------------------------------------------------* +* Definition of test class for news announcement +*----------------------------------------------------------------------* +CLASS ltcl_news DEFINITION FINAL + FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. + + PRIVATE SECTION. + + METHODS: + split_string FOR TESTING, + convert_version_to_numeric FOR TESTING, + compare_versions FOR TESTING, + parse_data FOR TESTING. + +ENDCLASS. "ltcl_news DEFINITION + +*----------------------------------------------------------------------* +* CLASS ltcl_news IMPLEMENTATION +*----------------------------------------------------------------------* +* Implementation of test class for news announcement +*----------------------------------------------------------------------* +CLASS ltcl_news IMPLEMENTATION. + + METHOD split_string. + + DATA: lt_act TYPE string_table, + lt_exp TYPE string_table. + + APPEND 'ABC' TO lt_exp. + APPEND '123' TO lt_exp. + + " Case 1. String separated by CRLF + lt_act = lcl_news=>split_string( 'ABC' && cl_abap_char_utilities=>cr_lf && '123' ). + + cl_abap_unit_assert=>assert_equals( exp = lt_exp + act = lt_act + msg = ' Error during string split: CRLF' ). + + CLEAR: lt_act. + + " Case 2. String separated by LF + lt_act = lcl_news=>split_string( 'ABC' && cl_abap_char_utilities=>newline && '123' ). + + cl_abap_unit_assert=>assert_equals( exp = lt_exp + act = lt_act + msg = ' Error during string split: LF' ). + + ENDMETHOD. "split_string. + + METHOD convert_version_to_numeric. + + DATA: lv_version_exp TYPE i VALUE 1023010, + lv_version_act TYPE i. + + lv_version_act = lcl_news=>convert_version_to_numeric( '1.23.10' ). + + cl_abap_unit_assert=>assert_equals( exp = lv_version_exp + act = lv_version_act + msg = ' Error during conversion of version to numeric value' ). + + ENDMETHOD. "convert_version_to_numeric + + METHOD compare_versions. + + DATA lv_result TYPE i. + + " Case 1: version A > version B + lv_result = lcl_news=>compare_versions( iv_a = '1.28.10' iv_b = '1.23.10' ). + + cl_abap_unit_assert=>assert_equals( exp = 1 + act = lv_result + msg = ' Error during comparison of versions. Case: A > B' ). + + CLEAR: lv_result. + + " Case 2: version A < version B + lv_result = lcl_news=>compare_versions( iv_a = '1.28.10' iv_b = '2.23.10' ). + + cl_abap_unit_assert=>assert_equals( exp = -1 + act = lv_result + msg = ' Error during comparison of versions. Case: A < B' ). + + CLEAR: lv_result. + + " Case 3: version A = version B + lv_result = lcl_news=>compare_versions( iv_a = '1.28.10' iv_b = '1.28.10' ). + + cl_abap_unit_assert=>assert_equals( exp = 0 + act = lv_result + msg = ' Error during comparison of versions. Case: A = B' ). + + ENDMETHOD. "compare_versions + + DEFINE _add_news_log_entry. + CLEAR: ls_log. + ls_log-version = &1. + ls_log-header = &2. + ls_log-important = &3. + ls_log-text = &4. + APPEND ls_log TO lt_log_exp. + END-OF-DEFINITION. + + METHOD parse_data. + + DATA: + lt_log_exp TYPE lcl_news=>tt_log, + lt_log_act TYPE lcl_news=>tt_log, + ls_log LIKE LINE OF lt_log_exp, + lt_lines TYPE string_table. + + " Generate test data + APPEND '======' TO lt_lines. + APPEND '------' TO lt_lines. + APPEND ' ' TO lt_lines. + APPEND 'abapGit changelog' TO lt_lines. + APPEND '2017-02-13 v1.28.0' TO lt_lines. + APPEND '------------------' TO lt_lines. + APPEND '+ Staging page redesigned' TO lt_lines. + APPEND '! Support for core data services' TO lt_lines. + APPEND ' ' TO lt_lines. + APPEND '2017-01-25 v1.27.0' TO lt_lines. + APPEND '------------------' TO lt_lines. + APPEND '+ Two factor authentication with github.com' TO lt_lines. + APPEND '2017-01-25 v1.26.0' TO lt_lines. + + " Generate expected results + _add_news_log_entry '1.28.0' 'X' '' '2017-02-13 v1.28.0'. + _add_news_log_entry '1.28.0' '' '' '+ Staging page redesigned'. + _add_news_log_entry '1.28.0' '' 'X' '! Support for core data services'. + _add_news_log_entry '1.27.0' 'X' '' '2017-01-25 v1.27.0'. + _add_news_log_entry '1.27.0' '' '' '+ Two factor authentication with github.com'. + + " Case 1. Test parsing of data + lt_log_act = lcl_news=>parse_data( it_lines = lt_lines iv_version = '1.26.01' ). + + cl_abap_unit_assert=>assert_equals( exp = lt_log_exp + act = lt_log_act + msg = ' Error during parsing: Case 1.' ). + + CLEAR: lt_log_act, lt_log_exp. + + " Case 2. Negative test - format of version is not correct + lt_log_act = lcl_news=>parse_data( it_lines = lt_lines iv_version = 'version.1.27.00' ). + + cl_abap_unit_assert=>assert_equals( exp = lt_log_exp + act = lt_log_act + msg = ' Error during parsing: Case 2.' ). + + ENDMETHOD. "parse_data + +ENDCLASS. "ltcl_news IMPLEMENTATION diff --git a/src/zabapgit_news.prog.xml b/src/zabapgit_news.prog.xml new file mode 100644 index 000000000..753deeb21 --- /dev/null +++ b/src/zabapgit_news.prog.xml @@ -0,0 +1,23 @@ + + + + + + ZABAPGIT_NEWS + A + X + I + K + E + X + + + + R + Include ZABAPGIT_NEWS + 21 + + + + + diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 63adfaad4..ab3a39186 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -307,11 +307,31 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD render_repo. + DATA: + lo_news TYPE REF TO lcl_news, + lv_has_news TYPE abap_bool VALUE abap_false. + CREATE OBJECT ro_html. + lo_news = lcl_news=>create( io_repo ). + + IF lo_news IS BOUND. + lv_has_news = lo_news->has_news( ). + ENDIF. + ro_html->add( |
    | ). ro_html->add( lcl_gui_chunk_lib=>render_repo_top( io_repo = io_repo + iv_has_news = lv_has_news iv_interactive_branch = abap_true ) ). + + IF lv_has_news = abap_true. + ro_html->add( lcl_gui_chunk_lib=>render_news_pop_up( + it_log = lo_news->get_log( ) + iv_has_important = lo_news->has_important_news( ) + ) + ). + ENDIF. + ro_html->add( mo_repo_content->render( ) ). ro_html->add( '
    ' ). From 2f680d80a783f36940a25bfb04b1c324f3d1512c Mon Sep 17 00:00:00 2001 From: Bohdan Date: Thu, 2 Mar 2017 11:48:54 +0200 Subject: [PATCH 002/188] fixing of issues, small renamings --- src/zabapgit_css_common.w3mi.data.css | 17 +++++----- src/zabapgit_html_chunks.prog.abap | 48 ++++++++++++++++----------- src/zabapgit_js_common.w3mi.data.js | 6 ++-- src/zabapgit_news.prog.abap | 8 ++--- src/zabapgit_page_main.prog.abap | 18 ++-------- 5 files changed, 46 insertions(+), 51 deletions(-) diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 4dc2aae0a..fdf25d19e 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -702,9 +702,9 @@ div.tutorial h2 { } /* News Announcement */ -.change-log { +.news { position: absolute; - z-index: 99 !important; + z-index: 99; top: 50%; left: 50%; width: 40em; @@ -715,7 +715,7 @@ div.tutorial h2 { padding: 0.5em; } -.change-log .change-log-title { +.news .title { color: #888888; font-weight: bold; font-size: 16px; @@ -723,21 +723,20 @@ div.tutorial h2 { padding-bottom: 4px; } -.change-log .attention { +.news .attention { background-color: #ff9800; - color: white; - opacity: 0.83; + color: white; padding: 10px; } -.change-log li { +.news li { margin: 4px; padding-left: 10px; font-size: 15px; list-style-type: none; } -.change-log p.versionHeader { +.news p.versionHeader { font-size: 16px; color: #888888; font-weight: bold; @@ -746,4 +745,4 @@ div.tutorial h2 { padding-bottom: 8px; border-bottom: 1px #ddd solid; margin: 4px; -} \ No newline at end of file +} diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap index 03385b8ff..5db3a7f55 100644 --- a/src/zabapgit_html_chunks.prog.abap +++ b/src/zabapgit_html_chunks.prog.abap @@ -17,8 +17,7 @@ CLASS lcl_gui_chunk_lib DEFINITION FINAL. iv_show_branch TYPE abap_bool DEFAULT abap_true iv_interactive_branch TYPE abap_bool DEFAULT abap_false iv_branch TYPE string OPTIONAL - iv_has_news TYPE abap_bool OPTIONAL - iv_has_important_news TYPE abap_bool OPTIONAL + io_news TYPE REF TO lcl_news OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html RAISING lcx_exception. @@ -38,10 +37,9 @@ CLASS lcl_gui_chunk_lib DEFINITION FINAL. RETURNING VALUE(ro_html) TYPE REF TO lcl_html RAISING lcx_exception. - CLASS-METHODS render_news_pop_up + CLASS-METHODS render_news IMPORTING - it_log TYPE lcl_news=>tt_log - iv_has_important TYPE abap_bool + io_news TYPE REF TO lcl_news RETURNING VALUE(ro_html) TYPE REF TO lcl_html RAISING lcx_exception. @@ -81,10 +79,10 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ro_html->add( '' ). - IF iv_has_news = abap_true. - ro_html->add_a( iv_act = 'displayLog()' + IF io_news IS BOUND AND io_news->has_news( ) = abap_true. + ro_html->add_a( iv_act = 'displayNews()' iv_typ = gc_action_type-onclick - iv_txt = lcl_html=>icon( iv_name = 'book/dark' ) ). + iv_txt = lcl_html=>icon( iv_name = 'history/dark' ) ). ENDIF. IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ). @@ -230,40 +228,50 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ro_html->add( '' ). ENDMETHOD. "render_js_error_stub - METHOD render_news_pop_up. + METHOD render_news. + + DATA lt_log TYPE lcl_news=>tt_log. CREATE OBJECT ro_html. - FIELD-SYMBOLS: LIKE LINE OF it_log. + IF io_news IS NOT BOUND. + RETURN. + ELSEIF io_news->has_news( ) = abap_true. + lt_log = io_news->get_log( ). + ELSE. + RETURN. + ENDIF. - ro_html->add( '
    ' ). + FIELD-SYMBOLS: LIKE LINE OF lt_log. + + ro_html->add( '
    ' ). ro_html->add( '' ). - ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '
    ' ). + ro_html->add( '' ). ro_html->add( 'Announcement of the latest changes' ). ro_html->add( '' ). - ro_html->add( 'close' ). + ro_html->add( 'close' ). ro_html->add( '
    ' ). - IF iv_has_important = abap_true. + IF io_news->has_important_news( ) = abap_true. ro_html->add( '
    ' - && '!!! Some changes mentioned in this announcement might be critical !!! ' + && 'Some changes mentioned in this announcement might be critical !' && '
    ' ). ENDIF. - " Generate changelog table - LOOP AT it_log ASSIGNING . + " Generate news + LOOP AT lt_log ASSIGNING . IF -header = 'X'. - ro_html->add( '

    ' && -text && '

    ' ). + ro_html->add( |

    { -text }

    | ). ELSE. - ro_html->add( '
  • ' && -text && '
  • ' ). + ro_html->add( |
  • { -text }
  • | ). ENDIF. ENDLOOP. ro_html->add( '
    ' ). - ENDMETHOD. "render_news_pop_up + ENDMETHOD. "render_news ENDCLASS. "lcl_gui_chunk_lib diff --git a/src/zabapgit_js_common.w3mi.data.js b/src/zabapgit_js_common.w3mi.data.js index d043ce10d..46b48237f 100644 --- a/src/zabapgit_js_common.w3mi.data.js +++ b/src/zabapgit_js_common.w3mi.data.js @@ -369,7 +369,7 @@ StageHelper.prototype.iterateStageTab = function (changeMode, cb /*, ...*/) { **********************************************************/ // News announcement -function displayLog() { - var div = document.getElementById("changeLog"); +function displayNews() { + var div = document.getElementById("news"); div.style.display = (div.style.display)?'':'none'; -} \ No newline at end of file +} diff --git a/src/zabapgit_news.prog.abap b/src/zabapgit_news.prog.abap index 7fac27453..bed394801 100644 --- a/src/zabapgit_news.prog.abap +++ b/src/zabapgit_news.prog.abap @@ -21,8 +21,8 @@ CLASS lcl_news DEFINITION FRIENDS ltcl_news. tt_log TYPE STANDARD TABLE OF ty_log WITH DEFAULT KEY. CONSTANTS: - mc_log_file_path TYPE string VALUE '/', - mc_log_file_name TYPE string VALUE 'changelog.txt'. + c_log_filename TYPE string VALUE '/', + c_log_path TYPE string VALUE 'changelog.txt'. CLASS-METHODS create IMPORTING io_repo TYPE REF TO lcl_repo @@ -96,8 +96,8 @@ CLASS lcl_news IMPLEMENTATION. IF lo_repo_online->get_url( ) CS '/abapGit.git'. lt_remote = io_repo->get_files_remote( ). - READ TABLE lt_remote ASSIGNING WITH KEY path = mc_log_file_path - filename = mc_log_file_name. + READ TABLE lt_remote ASSIGNING WITH KEY path = c_log_filename + filename = c_log_path. IF sy-subrc = 0. CREATE OBJECT ro_instance EXPORTING iv_rawdata = -data diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index ab3a39186..ff85159e7 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -307,30 +307,18 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD render_repo. - DATA: - lo_news TYPE REF TO lcl_news, - lv_has_news TYPE abap_bool VALUE abap_false. + DATA lo_news TYPE REF TO lcl_news. CREATE OBJECT ro_html. lo_news = lcl_news=>create( io_repo ). - IF lo_news IS BOUND. - lv_has_news = lo_news->has_news( ). - ENDIF. - ro_html->add( |
    | ). ro_html->add( lcl_gui_chunk_lib=>render_repo_top( io_repo = io_repo - iv_has_news = lv_has_news + io_news = lo_news iv_interactive_branch = abap_true ) ). - IF lv_has_news = abap_true. - ro_html->add( lcl_gui_chunk_lib=>render_news_pop_up( - it_log = lo_news->get_log( ) - iv_has_important = lo_news->has_important_news( ) - ) - ). - ENDIF. + ro_html->add( lcl_gui_chunk_lib=>render_news( io_news = lo_news ) ). ro_html->add( mo_repo_content->render( ) ). ro_html->add( '
    ' ). From 82a7cc404c9281e9bbe6da52eab634e325036c53 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 23 Mar 2017 07:37:49 +0000 Subject: [PATCH 003/188] delete more variables --- src/zabapgit_2fa.prog.abap | 22 ----------- src/zabapgit_folder_logic.prog.abap | 2 +- src/zabapgit_html.prog.abap | 6 +-- src/zabapgit_object_fugr.prog.abap | 4 +- src/zabapgit_object_oo_functions.prog.abap | 1 - src/zabapgit_object_view.prog.abap | 2 +- src/zabapgit_page_commit.prog.abap | 2 - src/zabapgit_page_main.prog.abap | 10 ++--- src/zabapgit_popups.prog.abap | 8 ---- src/zabapgit_requirements.prog.abap | 3 +- src/zabapgit_services_repo.prog.abap | 3 +- src/zabapgit_syntax_highlighter.prog.abap | 4 +- src/zabapgit_tadir.prog.abap | 5 +-- src/zabapgit_util.prog.abap | 4 +- src/zabapgit_zip.prog.abap | 46 ---------------------- 15 files changed, 13 insertions(+), 109 deletions(-) diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index 5a2d5ab40..7506e1635 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -309,8 +309,6 @@ CLASS lcl_2fa_github_authenticator DEFINITION set_new_token_request IMPORTING ii_request TYPE REF TO if_http_request, get_token_from_response IMPORTING ii_response TYPE REF TO if_http_response RETURNING VALUE(rv_token) TYPE string, - parse_repo_from_url IMPORTING iv_url TYPE string - RETURNING VALUE(rv_repo_name) TYPE string, set_list_token_request IMPORTING ii_request TYPE REF TO if_http_request, get_tobedel_tokens_from_resp IMPORTING ii_response TYPE REF TO if_http_response RETURNING VALUE(rt_ids) TYPE stringtab, @@ -445,25 +443,6 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. ENDWHILE. ENDMETHOD. - METHOD parse_repo_from_url. -* method not used? - ASSERT 0 = 1. -* CONSTANTS: lc_search_regex TYPE string VALUE 'https?:\/\/(www\.)?github.com\/(.*)$'. -* DATA: lo_regex TYPE REF TO cl_abap_regex, -* lo_matcher TYPE REF TO cl_abap_matcher. -* -* CREATE OBJECT lo_regex -* EXPORTING -* pattern = lc_search_regex. -* -* lo_matcher = lo_regex->create_matcher( text = iv_url ). -* IF lo_matcher->match( ) = abap_true. -* rv_repo_name = lo_matcher->get_submatch( 1 ). -* ELSE. -* rv_repo_name = '???' ##NO_TEXT. -* ENDIF. - ENDMETHOD. - METHOD get_service_id_from_url. rv_id = 'github'. ENDMETHOD. @@ -689,7 +668,6 @@ CLASS lcl_2fa_authenticator_registry DEFINITION "! All authenticators managed by the registry gt_registered_authenticators TYPE HASHED TABLE OF REF TO lif_2fa_authenticator WITH UNIQUE KEY table_line READ-ONLY. - PROTECTED SECTION. PRIVATE SECTION. CLASS-METHODS: popup_token diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 5303edf23..dcc9783a1 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -274,7 +274,7 @@ CLASS ltcl_folder_logic IMPLEMENTATION. iv_package = '$FOOBAR' iv_path = '/src/' ). cl_abap_unit_assert=>fail( 'Error expected' ). - CATCH lcx_exception. + CATCH lcx_exception ##NO_HANDLER. ENDTRY. ENDMETHOD. diff --git a/src/zabapgit_html.prog.abap b/src/zabapgit_html.prog.abap index f9b984e35..9e242cb2f 100644 --- a/src/zabapgit_html.prog.abap +++ b/src/zabapgit_html.prog.abap @@ -38,7 +38,6 @@ CLASS lcl_html DEFINITION FINAL. IMPORTING iv_name TYPE string iv_hint TYPE string OPTIONAL - iv_alt TYPE string OPTIONAL iv_class TYPE string OPTIONAL. CLASS-METHODS a @@ -56,7 +55,6 @@ CLASS lcl_html DEFINITION FINAL. IMPORTING iv_name TYPE string iv_hint TYPE string OPTIONAL - iv_alt TYPE string OPTIONAL iv_class TYPE string OPTIONAL RETURNING VALUE(rv_str) TYPE string. @@ -108,8 +106,7 @@ CLASS lcl_html IMPLEMENTATION. DATA: lv_type TYPE c, lo_html TYPE REF TO lcl_html. - FIELD-SYMBOLS: TYPE string_table, - LIKE LINE OF . + FIELD-SYMBOLS: TYPE string_table. DESCRIBE FIELD iv_chunk TYPE lv_type. " Describe is faster than RTTI classes @@ -339,7 +336,6 @@ CLASS lcl_html IMPLEMENTATION. add( icon( iv_name = iv_name iv_class = iv_class - iv_alt = iv_alt iv_hint = iv_hint ) ). ENDMETHOD. "add_icon diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 750976cc8..55bb0b0c3 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -395,8 +395,7 @@ CLASS lcl_object_fugr IMPLEMENTATION. METHOD serialize_xml. - DATA: lt_functab TYPE ty_rs38l_incl_tt, - lt_includes TYPE rso_t_objnm, + DATA: lt_includes TYPE rso_t_objnm, lv_areat TYPE tlibt-areat. @@ -405,7 +404,6 @@ CLASS lcl_object_fugr IMPLEMENTATION. WHERE spras = mv_language AND area = ms_item-obj_name. "#EC CI_GENBUFF "#EC CI_SUBRC - lt_functab = functions( ). lt_includes = includes( ). io_xml->add( iv_name = 'AREAT' diff --git a/src/zabapgit_object_oo_functions.prog.abap b/src/zabapgit_object_oo_functions.prog.abap index f6fe9be8f..c77680446 100644 --- a/src/zabapgit_object_oo_functions.prog.abap +++ b/src/zabapgit_object_oo_functions.prog.abap @@ -135,7 +135,6 @@ CLASS lcl_oo_object_serializer DEFINITION. serialize_abap_clif_source IMPORTING is_class_key TYPE seoclskey - iv_type TYPE seop_include_ext_app OPTIONAL RETURNING VALUE(rt_source) TYPE ty_string_tt RAISING diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index da3799483..36a4fd7ed 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -86,7 +86,7 @@ CLASS lcl_object_view IMPLEMENTATION. IF lv_ddl_view = abap_true. rv_bool = abap_false. ENDIF. - CATCH cx_root. + CATCH cx_root ##NO_HANDLER. ENDTRY. ENDIF. diff --git a/src/zabapgit_page_commit.prog.abap b/src/zabapgit_page_commit.prog.abap index e34a2c293..5ca69ca03 100644 --- a/src/zabapgit_page_commit.prog.abap +++ b/src/zabapgit_page_commit.prog.abap @@ -157,7 +157,6 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. DATA: lo_user TYPE REF TO lcl_persistence_user, lv_user TYPE string, - lv_key TYPE lcl_persistence_db=>ty_value, lv_email TYPE string. * see https://git-scm.com/book/ch5-2.html @@ -165,7 +164,6 @@ CLASS lcl_gui_page_commit IMPLEMENTATION. * body should wrap at 72 characters lo_user = lcl_app=>user( ). - lv_key = mo_repo->get_key( ). lv_user = lo_user->get_repo_git_user_name( mo_repo->get_url( ) ). IF lv_user IS INITIAL. diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 73c9720ed..99c024f47 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -145,12 +145,10 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD retrieve_active_repo. - DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, - lo_repo LIKE LINE OF lt_repos, - lv_show_old LIKE mv_show. + DATA: lv_show_old LIKE mv_show. TRY. - lt_repos = lcl_app=>repo_srv( )->list( ). + lcl_app=>repo_srv( )->list( ). CATCH lcx_exception. RETURN. ENDTRY. @@ -160,7 +158,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. IF mv_show IS NOT INITIAL. TRY. " verify the key exists - lo_repo = lcl_app=>repo_srv( )->get( mv_show ). + lcl_app=>repo_srv( )->get( mv_show ). CATCH lcx_exception. CLEAR mv_show. lcl_app=>user( )->set_repo_show( mv_show ). @@ -274,7 +272,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( '' ). ro_html->add( || ). ro_html->add( '| ). diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap index 263c22cdb..210e95fbc 100644 --- a/src/zabapgit_page_debug.prog.abap +++ b/src/zabapgit_page_debug.prog.abap @@ -67,7 +67,7 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION. DATA: lt_objects TYPE STANDARD TABLE OF ko100, lv_list TYPE string, - ls_item TYPE ty_item. + ls_item TYPE lif_defs=>ty_item. FIELD-SYMBOLS LIKE LINE OF lt_objects. diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap index c0d33c715..7033d6221 100644 --- a/src/zabapgit_page_diff.prog.abap +++ b/src/zabapgit_page_diff.prog.abap @@ -28,8 +28,8 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page. METHODS: constructor IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key - is_file TYPE ty_file OPTIONAL - is_object TYPE ty_item OPTIONAL + is_file TYPE lif_defs=>ty_file OPTIONAL + is_object TYPE lif_defs=>ty_item OPTIONAL iv_supress_stage TYPE abap_bool DEFAULT abap_false RAISING lcx_exception, lif_gui_page~on_event REDEFINITION. @@ -73,9 +73,9 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page. IMPORTING is_diff_line TYPE lcl_diff=>ty_diff OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS append_diff - IMPORTING it_remote TYPE ty_files_tt - it_local TYPE ty_files_item_tt - is_status TYPE ty_result + IMPORTING it_remote TYPE lif_defs=>ty_files_tt + it_local TYPE lif_defs=>ty_files_item_tt + is_status TYPE lif_defs=>ty_result RAISING lcx_exception. METHODS build_menu IMPORTING iv_supress_stage TYPE abap_bool @@ -91,9 +91,9 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. METHOD constructor. - DATA: lt_remote TYPE ty_files_tt, - lt_local TYPE ty_files_item_tt, - lt_status TYPE ty_results_tt, + DATA: lt_remote TYPE lif_defs=>ty_files_tt, + lt_local TYPE lif_defs=>ty_files_item_tt, + lt_status TYPE lif_defs=>ty_results_tt, lo_repo TYPE REF TO lcl_repo_online, lv_ts TYPE timestamp. @@ -295,9 +295,9 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. IF iv_supress_stage = abap_false. ro_menu->add( iv_txt = 'Stage' - iv_act = |{ gc_action-go_stage }?{ mv_repo_key }| + iv_act = |{ lif_defs=>gc_action-go_stage }?{ mv_repo_key }| iv_id = 'stage-button' - iv_opt = gc_html_opt-strong ). + iv_opt = lif_defs=>gc_html_opt-strong ). ENDIF. IF lines( lt_types ) > 1 OR lines( lt_users ) > 1. @@ -305,10 +305,10 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. " File types IF lines( lt_types ) > 1. - lo_sub->add( iv_txt = 'TYPE' iv_typ = gc_action_type-separator ). + lo_sub->add( iv_txt = 'TYPE' iv_typ = lif_defs=>gc_action_type-separator ). LOOP AT lt_types ASSIGNING . lo_sub->add( iv_txt = - iv_typ = gc_action_type-onclick + iv_typ = lif_defs=>gc_action_type-onclick iv_aux = 'type' iv_chk = abap_true ). ENDLOOP. @@ -316,10 +316,10 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. " Changed by IF lines( lt_users ) > 1. - lo_sub->add( iv_txt = 'CHANGED BY' iv_typ = gc_action_type-separator ). + lo_sub->add( iv_txt = 'CHANGED BY' iv_typ = lif_defs=>gc_action_type-separator ). LOOP AT lt_users ASSIGNING . lo_sub->add( iv_txt = - iv_typ = gc_action_type-onclick + iv_typ = lif_defs=>gc_action_type-onclick iv_aux = 'changed-by' iv_chk = abap_true ). ENDLOOP. @@ -343,7 +343,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. CASE iv_action. WHEN c_actions-toggle_unified. " Toggle file diplay mv_unified = lcl_app=>user( )->toggle_diff_unified( ). - ev_state = gc_event_state-re_render. + ev_state = lif_defs=>gc_event_state-re_render. ENDCASE. ENDMETHOD. "lif_gui_page~on_event @@ -645,7 +645,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ro_html->add( 'var gHelper = new DiffHelper({' ). ro_html->add( | seed: "{ mv_seed }",| ). - ro_html->add( | stageAction: "{ gc_action-go_stage }",| ). + ro_html->add( | stageAction: "{ lif_defs=>gc_action-go_stage }",| ). ro_html->add( ' ids: {' ). ro_html->add( ' diffList: "diff-list",' ). ro_html->add( ' filterMenu: "diff-filter",' ). diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 34652313f..c527ef5da 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -65,7 +65,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ei_page = ei_page ev_state = ev_state ). - IF ev_state <> gc_event_state-not_handled. + IF ev_state <> lif_defs=>gc_event_state-not_handled. RETURN. ENDIF. ENDIF. @@ -80,10 +80,10 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CATCH lcx_exception ##NO_HANDLER. ENDTRY. - ev_state = gc_event_state-re_render. + ev_state = lif_defs=>gc_event_state-re_render. WHEN c_actions-changed_by. test_changed_by( ). - ev_state = gc_event_state-no_more_act. + ev_state = lif_defs=>gc_event_state-no_more_act. ENDCASE. ENDMETHOD. "on_event @@ -92,7 +92,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. DATA: ls_tadir TYPE tadir, lv_user TYPE xubname, - ls_item TYPE ty_item. + ls_item TYPE lif_defs=>ty_item. ls_tadir = lcl_popups=>popup_object( ). @@ -183,21 +183,21 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT lo_advsub. CREATE OBJECT lo_helpsub. - lo_advsub->add( iv_txt = 'Database util' iv_act = gc_action-go_db ) ##NO_TEXT. - lo_advsub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT. - lo_advsub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT. - lo_advsub->add( iv_txt = 'Object to files' iv_act = gc_action-zip_object ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Database util' iv_act = lif_defs=>gc_action-go_db ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Package to zip' iv_act = lif_defs=>gc_action-zip_package ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Transport to zip' iv_act = lif_defs=>gc_action-zip_transport ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Object to files' iv_act = lif_defs=>gc_action-zip_object ) ##NO_TEXT. lo_advsub->add( iv_txt = 'Test changed by' iv_act = c_actions-changed_by ) ##NO_TEXT. - lo_advsub->add( iv_txt = 'Page playground' iv_act = gc_action-go_playground ) ##NO_TEXT. - lo_advsub->add( iv_txt = 'Debug info' iv_act = gc_action-go_debuginfo ) ##NO_TEXT. - lo_advsub->add( iv_txt = 'Settings' iv_act = gc_action-go_settings ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Page playground' iv_act = lif_defs=>gc_action-go_playground ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Debug info' iv_act = lif_defs=>gc_action-go_debuginfo ) ##NO_TEXT. + lo_advsub->add( iv_txt = 'Settings' iv_act = lif_defs=>gc_action-go_settings ) ##NO_TEXT. - lo_helpsub->add( iv_txt = 'Tutorial' iv_act = gc_action-go_tutorial ) ##NO_TEXT. - lo_helpsub->add( iv_txt = 'abapGit wiki' iv_act = gc_action-abapgit_wiki ) ##NO_TEXT. + lo_helpsub->add( iv_txt = 'Tutorial' iv_act = lif_defs=>gc_action-go_tutorial ) ##NO_TEXT. + lo_helpsub->add( iv_txt = 'abapGit wiki' iv_act = lif_defs=>gc_action-abapgit_wiki ) ##NO_TEXT. - ro_menu->add( iv_txt = '+ Clone' iv_act = gc_action-repo_clone ) ##NO_TEXT. - ro_menu->add( iv_txt = '+ Offline' iv_act = gc_action-repo_newoffline ) ##NO_TEXT. - ro_menu->add( iv_txt = 'Explore' iv_act = gc_action-go_explore ) ##NO_TEXT. + ro_menu->add( iv_txt = '+ Clone' iv_act = lif_defs=>gc_action-repo_clone ) ##NO_TEXT. + ro_menu->add( iv_txt = '+ Offline' iv_act = lif_defs=>gc_action-repo_newoffline ) ##NO_TEXT. + ro_menu->add( iv_txt = 'Explore' iv_act = lif_defs=>gc_action-go_explore ) ##NO_TEXT. ro_menu->add( iv_txt = 'Advanced' io_sub = lo_advsub ) ##NO_TEXT. ro_menu->add( iv_txt = 'Help' io_sub = lo_helpsub ) ##NO_TEXT. @@ -280,7 +280,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( lo_favbar->render( iv_sort = abap_true ) ). ELSE. ro_html->add( |No favorites so far. For more info please check { - lcl_html=>a( iv_txt = 'tutorial' iv_act = gc_action-go_tutorial ) + lcl_html=>a( iv_txt = 'tutorial' iv_act = lif_defs=>gc_action-go_tutorial ) }| ). ENDIF. ro_html->add( '' ). diff --git a/src/zabapgit_page_merge.prog.abap b/src/zabapgit_page_merge.prog.abap index e45836557..7a94693c9 100644 --- a/src/zabapgit_page_merge.prog.abap +++ b/src/zabapgit_page_merge.prog.abap @@ -6,8 +6,8 @@ CLASS lcl_merge DEFINITION FINAL. PUBLIC SECTION. TYPES: BEGIN OF ty_ancestor, - commit TYPE ty_sha1, - tree TYPE ty_sha1, + commit TYPE lif_defs=>ty_sha1, + tree TYPE lif_defs=>ty_sha1, time TYPE string, body TYPE string, END OF ty_ancestor. @@ -35,7 +35,7 @@ CLASS lcl_merge DEFINITION FINAL. PRIVATE SECTION. CLASS-DATA: gs_merge TYPE ty_merge, - gt_objects TYPE ty_objects_tt. + gt_objects TYPE lif_defs=>ty_objects_tt. TYPES: ty_ancestor_tt TYPE STANDARD TABLE OF ty_ancestor WITH DEFAULT KEY. @@ -45,7 +45,7 @@ CLASS lcl_merge DEFINITION FINAL. calculate_result RAISING lcx_exception, find_ancestors - IMPORTING iv_commit TYPE ty_sha1 + IMPORTING iv_commit TYPE lif_defs=>ty_sha1 RETURNING VALUE(rt_ancestors) TYPE ty_ancestor_tt RAISING lcx_exception, find_first_common @@ -115,7 +115,7 @@ CLASS lcl_merge IMPLEMENTATION. DEFINE _from_source. READ TABLE gt_objects ASSIGNING - WITH KEY type = gc_type-blob + WITH KEY type = lif_defs=>gc_type-blob sha1 = -sha1. ASSERT sy-subrc = 0. @@ -260,7 +260,7 @@ CLASS lcl_merge IMPLEMENTATION. END-OF-DEFINITION. DATA: ls_commit TYPE lcl_git_pack=>ty_commit, - lt_visit TYPE STANDARD TABLE OF ty_sha1, + lt_visit TYPE STANDARD TABLE OF lif_defs=>ty_sha1, lv_commit LIKE LINE OF lt_visit. FIELD-SYMBOLS: LIKE LINE OF rt_ancestors, @@ -271,7 +271,7 @@ CLASS lcl_merge IMPLEMENTATION. LOOP AT lt_visit INTO lv_commit. READ TABLE gt_objects ASSIGNING - WITH KEY type = gc_type-commit sha1 = lv_commit. + WITH KEY type = lif_defs=>gc_type-commit sha1 = lv_commit. ASSERT sy-subrc = 0. ls_commit = lcl_git_pack=>decode_commit( -data ). @@ -283,7 +283,7 @@ CLASS lcl_merge IMPLEMENTATION. -commit = lv_commit. -tree = ls_commit-tree. -body = ls_commit-body. - FIND REGEX gc_author_regex IN ls_commit-author + FIND REGEX lif_defs=>gc_author_regex IN ls_commit-author SUBMATCHES -time ##NO_TEXT. ASSERT sy-subrc = 0. ENDLOOP. @@ -372,7 +372,7 @@ CLASS lcl_gui_page_merge IMPLEMENTATION. EXPORTING io_repo = mo_repo io_stage = ms_merge-stage. - ev_state = gc_event_state-new_page. + ev_state = lif_defs=>gc_event_state-new_page. ENDCASE. ENDMETHOD. diff --git a/src/zabapgit_page_repo_settings.prog.abap b/src/zabapgit_page_repo_settings.prog.abap index 52889dfd5..2d1604cba 100644 --- a/src/zabapgit_page_repo_settings.prog.abap +++ b/src/zabapgit_page_repo_settings.prog.abap @@ -92,7 +92,7 @@ CLASS lcl_gui_page_repo_settings IMPLEMENTATION. mo_repo->set_dot_abapgit( lo_dot ). mo_repo->refresh( ). - ev_state = gc_event_state-go_back. + ev_state = lif_defs=>gc_event_state-go_back. ENDCASE. ENDMETHOD. diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index 46726b0b4..02cfed03e 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -125,7 +125,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. persist_settings( ). ENDIF. - ev_state = gc_event_state-go_back. + ev_state = lif_defs=>gc_event_state-go_back. ENDCASE. ENDMETHOD. diff --git a/src/zabapgit_page_stage.prog.abap b/src/zabapgit_page_stage.prog.abap index 8394e2056..3a207cb33 100644 --- a/src/zabapgit_page_stage.prog.abap +++ b/src/zabapgit_page_stage.prog.abap @@ -13,8 +13,8 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page. METHODS: constructor IMPORTING - io_repo TYPE REF TO lcl_repo_online - iv_seed TYPE string OPTIONAL + io_repo TYPE REF TO lcl_repo_online + iv_seed TYPE string OPTIONAL RAISING lcx_exception, lif_gui_page~on_event REDEFINITION. @@ -25,7 +25,7 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page. PRIVATE SECTION. DATA: mo_repo TYPE REF TO lcl_repo_online, - ms_files TYPE ty_stage_files, + ms_files TYPE lif_defs=>ty_stage_files, mv_seed TYPE string. " Unique page id to bind JS sessionStorage METHODS: @@ -34,15 +34,15 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page. render_file IMPORTING iv_context TYPE string - is_file TYPE ty_file - is_item TYPE ty_item OPTIONAL + is_file TYPE lif_defs=>ty_file + is_item TYPE lif_defs=>ty_item OPTIONAL RETURNING VALUE(ro_html) TYPE REF TO lcl_html, render_actions RETURNING VALUE(ro_html) TYPE REF TO lcl_html, read_last_changed_by - IMPORTING is_file TYPE ty_file + IMPORTING is_file TYPE lif_defs=>ty_file RETURNING VALUE(rv_user) TYPE xubname, process_stage_list @@ -83,7 +83,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. IF lines( ms_files-local ) > 0. ro_menu->add( iv_txt = |All diffs| - iv_act = |{ gc_action-go_diff }?key={ mo_repo->get_key( ) }| ). + iv_act = |{ lif_defs=>gc_action-go_diff }?key={ mo_repo->get_key( ) }| ). ENDIF. ENDMETHOD. "build_menu @@ -117,7 +117,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. io_repo = mo_repo io_stage = lo_stage. - ev_state = gc_event_state-new_page. + ev_state = lif_defs=>gc_event_state-new_page. ENDMETHOD. @@ -125,7 +125,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. DATA: lv_string TYPE string, lt_fields TYPE tihttpnvp, - ls_file TYPE ty_file. + ls_file TYPE lif_defs=>ty_file. FIELD-SYMBOLS: LIKE LINE OF ms_files-local, LIKE LINE OF lt_fields. @@ -243,7 +243,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. lv_param = lcl_html_action_utils=>file_encode( iv_key = mo_repo->get_key( ) ig_file = is_file ). lv_filename = lcl_html=>a( iv_txt = lv_filename - iv_act = |{ gc_action-go_diff }?{ lv_param }| ). + iv_act = |{ lif_defs=>gc_action-go_diff }?{ lv_param }| ). ro_html->add( || ). ro_html->add( || ). ro_html->add( || ). @@ -293,11 +293,11 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. " Action buttons ro_html->add( '' ). - lv_exp = ''. cl_abap_unit_assert=>assert_equals( @@ -1358,8 +1358,8 @@ CLASS ltcl_html IMPLEMENTATION. mo_html->add( '' ). mo_html->add( '' ). - lv_exp = ''. cl_abap_unit_assert=>assert_equals( @@ -1376,8 +1376,8 @@ CLASS ltcl_html IMPLEMENTATION. mo_html->add( '' ). mo_html->add( '' ). - lv_exp = ''. cl_abap_unit_assert=>assert_equals( @@ -1394,8 +1394,8 @@ CLASS ltcl_html IMPLEMENTATION. mo_html->add( 'foo
    bar' ). mo_html->add( '' ). - lv_exp = '
    '. cl_abap_unit_assert=>assert_equals( @@ -1415,11 +1415,11 @@ CLASS ltcl_html IMPLEMENTATION. mo_html->add( '}' ). mo_html->add( '' ). - lv_exp = ''. cl_abap_unit_assert=>assert_equals( @@ -1442,7 +1442,7 @@ CLASS ltcl_serialize DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT F METHODS: check - IMPORTING is_item TYPE ty_item + IMPORTING is_item TYPE lif_defs=>ty_item RAISING lcx_exception, serialize_tabl FOR TESTING RAISING lcx_exception, serialize_enqu FOR TESTING RAISING lcx_exception, @@ -1469,7 +1469,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_enqu. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'ENQU'. @@ -1481,7 +1481,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_shlp. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'SHLP'. @@ -1493,7 +1493,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_view. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'VIEW'. @@ -1505,7 +1505,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_tabl. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'TABL'. @@ -1517,7 +1517,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_auth. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'AUTH'. @@ -1529,7 +1529,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_clas. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'CLAS'. @@ -1541,7 +1541,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_doma. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'DOMA'. @@ -1553,7 +1553,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_dtel. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'DTEL'. @@ -1565,7 +1565,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_fugr. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'FUGR'. @@ -1577,7 +1577,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_msag. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'MSAG'. @@ -1589,7 +1589,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_prog. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'PROG'. @@ -1601,7 +1601,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_tran. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'TRAN'. @@ -1613,7 +1613,7 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD serialize_ttyp. - DATA: ls_item TYPE ty_item. + DATA: ls_item TYPE lif_defs=>ty_item. ls_item-obj_type = 'TTYP'. @@ -1625,10 +1625,10 @@ CLASS ltcl_serialize IMPLEMENTATION. METHOD check. - DATA: lt_files TYPE ty_files_tt. + DATA: lt_files TYPE lif_defs=>ty_files_tt. lt_files = lcl_objects=>serialize( is_item = is_item - iv_language = gc_english ). + iv_language = lif_defs=>gc_english ). cl_abap_unit_assert=>assert_not_initial( lt_files ). @@ -1931,11 +1931,11 @@ CLASS ltcl_file_status IMPLEMENTATION. METHOD calculate_status. - DATA: lt_local TYPE ty_files_item_tt, - lt_remote TYPE ty_files_tt, - lt_state TYPE ty_file_signatures_tt, - lt_results TYPE ty_results_tt, - lt_results_exp TYPE ty_results_tt. + DATA: lt_local TYPE lif_defs=>ty_files_item_tt, + lt_remote TYPE lif_defs=>ty_files_tt, + lt_state TYPE lif_defs=>ty_file_signatures_tt, + lt_results TYPE lif_defs=>ty_results_tt, + lt_results_exp TYPE lif_defs=>ty_results_tt. FIELD-SYMBOLS: LIKE LINE OF lt_local, LIKE LINE OF lt_remote, @@ -2032,7 +2032,7 @@ CLASS ltcl_file_status2 IMPLEMENTATION. METHOD check. - DATA: lt_results TYPE ty_results_tt, + DATA: lt_results TYPE lif_defs=>ty_results_tt, lo_log TYPE REF TO lcl_log. FIELD-SYMBOLS: LIKE LINE OF lt_results. diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap index cac3a44e1..8ae3779e1 100644 --- a/src/zabapgit_unit_test_clas_intf.prog.abap +++ b/src/zabapgit_unit_test_clas_intf.prog.abap @@ -14,14 +14,14 @@ CLASS ltd_spy_oo_object DEFINITION FOR TESTING. mt_local_test_classes TYPE rswsourcet, mv_force TYPE seoflag, ms_deserialize_key TYPE seoclskey, - mt_source TYPE ty_string_tt, - ms_item_to_activate TYPE ty_item, - mt_descriptions TYPE ty_seocompotx_tt, + mt_source TYPE lif_defs=>ty_string_tt, + ms_item_to_activate TYPE lif_defs=>ty_item, + mt_descriptions TYPE lif_defs=>ty_seocompotx_tt, ms_description_key TYPE seoclskey, mv_text_pool_class_name TYPE seoclsname, mt_text_pool TYPE textpool_table, mv_text_pool_inserted TYPE abap_bool, - mt_sotr TYPE ty_sotr_tt, + mt_sotr TYPE lif_defs=>ty_sotr_tt, mt_sotr_package TYPE devclass, mv_docu_object_name TYPE dokhl-object, mv_docu_language TYPE spras, @@ -184,7 +184,7 @@ CLASS ltd_fake_object_files IMPLEMENTATION. exp = abap_false ). ENDMETHOD. METHOD constructor. - DATA ls_empty_item TYPE ty_item. + DATA ls_empty_item TYPE lif_defs=>ty_item. super->constructor( ls_empty_item ). APPEND 'source' TO me->mt_sources. APPEND 'definition' TO me->mt_local_definitions. @@ -217,19 +217,19 @@ CLASS ltc_oo_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. mo_xml_input TYPE REF TO lcl_xml_input, mo_xml_out TYPE REF TO lcl_xml_output, mo_oo_object TYPE REF TO lif_object, - ms_item TYPE ty_item. + ms_item TYPE lif_defs=>ty_item. METHODS: when_deserializing RAISING lcx_exception, then_should_deserialize_source, given_the_descriptions IMPORTING - it_descriptions TYPE ty_seocompotx_tt + it_descriptions TYPE lif_defs=>ty_seocompotx_tt RAISING lcx_exception, then_shuld_update_descriptions IMPORTING - it_descriptions TYPE ty_seocompotx_tt, + it_descriptions TYPE lif_defs=>ty_seocompotx_tt, then_it_should_add_activation, given_documentation_in_xml_as IMPORTING @@ -384,7 +384,7 @@ CLASS ltcl_class_deserialization IMPLEMENTATION. METHOD should_update_descriptions. DATA: ls_description TYPE seocompotx, - lt_descriptions TYPE ty_seocompotx_tt. + lt_descriptions TYPE lif_defs=>ty_seocompotx_tt. given_a_class_properties( ). @@ -461,7 +461,7 @@ CLASS ltcl_class_deserialization IMPLEMENTATION. METHOD insert_text_pool. DATA: lt_pool_external TYPE textpool_table, - ls_pool_external TYPE ty_tpool. + ls_pool_external TYPE lif_defs=>ty_tpool. ls_pool_external-id = 'ID'. ls_pool_external-key = 'KEY'. APPEND ls_pool_external TO lt_pool_external. @@ -485,7 +485,7 @@ CLASS ltcl_class_deserialization IMPLEMENTATION. METHOD create_stor_from_xml. DATA: - lt_sotr TYPE ty_sotr_tt, + lt_sotr TYPE lif_defs=>ty_sotr_tt, ls_sotr LIKE LINE OF lt_sotr. given_a_class_properties( ). @@ -569,7 +569,7 @@ CLASS ltcl_interface_deserialization IMPLEMENTATION. METHOD update_descriptions. DATA: ls_description TYPE seocompotx, - lt_descriptions TYPE ty_seocompotx_tt. + lt_descriptions TYPE lif_defs=>ty_seocompotx_tt. given_an_interface_properties( ). @@ -824,7 +824,7 @@ CLASS ltcl_serialize_class IMPLEMENTATION. ENDMETHOD. METHOD serialize_abap. - DATA lt_abap_source TYPE ty_string_tt. + DATA lt_abap_source TYPE lif_defs=>ty_string_tt. APPEND 'a_source_line' TO me->mo_spy_oo_object_functions->mt_source. @@ -839,7 +839,7 @@ CLASS ltcl_serialize_class IMPLEMENTATION. ENDMETHOD. METHOD serialize_local_definitions. - DATA lt_abap_source TYPE ty_string_tt. + DATA lt_abap_source TYPE lif_defs=>ty_string_tt. APPEND 'a_local_definition' TO me->mo_spy_oo_object_functions->mt_local_definitions. @@ -855,7 +855,7 @@ CLASS ltcl_serialize_class IMPLEMENTATION. ENDMETHOD. METHOD serialize_local_implementation. - DATA lt_abap_source TYPE ty_string_tt. + DATA lt_abap_source TYPE lif_defs=>ty_string_tt. APPEND 'a_local_implementation' TO me->mo_spy_oo_object_functions->mt_local_implementations. @@ -871,7 +871,7 @@ CLASS ltcl_serialize_class IMPLEMENTATION. ENDMETHOD. METHOD serialize_local_macros. - DATA lt_abap_source TYPE ty_string_tt. + DATA lt_abap_source TYPE lif_defs=>ty_string_tt. APPEND 'a_local_macro' TO me->mo_spy_oo_object_functions->mt_local_macros. mo_oo_object->serialize( mo_xml_out ). @@ -886,7 +886,7 @@ CLASS ltcl_serialize_class IMPLEMENTATION. ENDMETHOD. METHOD serialize_test_classes. - DATA lt_abap_source TYPE ty_string_tt. + DATA lt_abap_source TYPE lif_defs=>ty_string_tt. APPEND 'a_local_test' TO me->mo_spy_oo_object_functions->mt_local_test_classes. mo_oo_object->serialize( mo_xml_out ). @@ -999,8 +999,8 @@ CLASS ltcl_serialize_class IMPLEMENTATION. METHOD read_sotr_if_exception_class. DATA: - lt_sotr TYPE ty_sotr_tt, - lt_actual_sotr TYPE ty_sotr_tt, + lt_sotr TYPE lif_defs=>ty_sotr_tt, + lt_actual_sotr TYPE lif_defs=>ty_sotr_tt, ls_sotr LIKE LINE OF lt_sotr. me->mo_spy_oo_object_functions->ms_class_properties-category = seoc_category_exception. @@ -1028,7 +1028,7 @@ CLASS ltcl_serialize_class IMPLEMENTATION. METHOD do_not_read_sotr_regular_class. DATA: - lt_actual_sotr TYPE ty_sotr_tt. + lt_actual_sotr TYPE lif_defs=>ty_sotr_tt. CLEAR: me->mo_spy_oo_object_functions->ms_class_properties-category. @@ -1075,9 +1075,9 @@ CLASS ltcl_serialize_class IMPLEMENTATION. METHOD should_serialize_descriptions. DATA: - lt_descriptions TYPE ty_seocompotx_tt, - lt_actual_descriptions TYPE ty_seocompotx_tt, - ls_description TYPE LINE OF ty_seocompotx_tt. + lt_descriptions TYPE lif_defs=>ty_seocompotx_tt, + lt_actual_descriptions TYPE lif_defs=>ty_seocompotx_tt, + ls_description TYPE LINE OF lif_defs=>ty_seocompotx_tt. ls_description-clsname = 'class'. APPEND ls_description TO lt_descriptions. @@ -1141,7 +1141,7 @@ CLASS ltcl_serialize_interface IMPLEMENTATION. ENDMETHOD. METHOD serialize_abap. - DATA lt_abap_source TYPE ty_string_tt. + DATA lt_abap_source TYPE lif_defs=>ty_string_tt. APPEND 'a_source_line' TO me->mo_spy_oo_object_functions->mt_source. @@ -1227,9 +1227,9 @@ CLASS ltcl_serialize_interface IMPLEMENTATION. METHOD should_serialize_descriptions. DATA: - lt_descriptions TYPE ty_seocompotx_tt, - lt_actual_descriptions TYPE ty_seocompotx_tt, - ls_description TYPE LINE OF ty_seocompotx_tt. + lt_descriptions TYPE lif_defs=>ty_seocompotx_tt, + lt_actual_descriptions TYPE lif_defs=>ty_seocompotx_tt, + ls_description TYPE LINE OF lif_defs=>ty_seocompotx_tt. ls_description-clsname = 'class'. APPEND ls_description TO lt_descriptions. diff --git a/src/zabapgit_unit_test_transport.prog.abap b/src/zabapgit_unit_test_transport.prog.abap index e5bff13a5..2947c5a36 100644 --- a/src/zabapgit_unit_test_transport.prog.abap +++ b/src/zabapgit_unit_test_transport.prog.abap @@ -34,12 +34,12 @@ CLASS ltcl_transport_objects DEFINITION FOR TESTING. iv_filename TYPE string iv_path TYPE string iv_data TYPE string - RETURNING VALUE(rs_local_file) TYPE ty_file_item, + RETURNING VALUE(rs_local_file) TYPE lif_defs=>ty_file_item, when_staging RAISING lcx_exception, then_file_should_be_added IMPORTING - is_local_file TYPE ty_file_item, + is_local_file TYPE lif_defs=>ty_file_item, then_it_should_raise_exception IMPORTING with_text TYPE string, @@ -50,8 +50,8 @@ CLASS ltcl_transport_objects DEFINITION FOR TESTING. DATA: mo_transport_objects TYPE REF TO lcl_transport_objects, mt_transport_objects TYPE scts_tadir, - mt_object_statuses TYPE ty_results_tt, - ms_stage_objects TYPE ty_stage_files, + mt_object_statuses TYPE lif_defs=>ty_results_tt, + ms_stage_objects TYPE lif_defs=>ty_stage_files, mo_stage TYPE REF TO lcl_stage. ENDCLASS. @@ -63,7 +63,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. iv_branch_sha1 = 'Branch_SH1'. ENDMETHOD. METHOD add_new_to_local_files. - DATA ls_local_file TYPE ty_file_item. + DATA ls_local_file TYPE lif_defs=>ty_file_item. given_the_transport_object( iv_obj_name = 'CL_FOO' @@ -73,7 +73,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.abap' - iv_lstate = gc_state-added ). + iv_lstate = lif_defs=>gc_state-added ). ls_local_file = given_the_local_file( iv_obj_name = 'CL_FOO' @@ -87,7 +87,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. then_file_should_be_added( ls_local_file ). ENDMETHOD. METHOD modified_to_new_local_files. - DATA ls_local_file TYPE ty_file_item. + DATA ls_local_file TYPE lif_defs=>ty_file_item. given_the_transport_object( iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' ). @@ -96,7 +96,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.abap' - iv_lstate = gc_state-modified ). + iv_lstate = lif_defs=>gc_state-modified ). ls_local_file = given_the_local_file( iv_obj_name = 'CL_FOO' @@ -111,8 +111,8 @@ CLASS ltcl_transport_objects IMPLEMENTATION. ENDMETHOD. METHOD should_add_all_local_files. "Not only .abap, but also .xml and other includes - DATA ls_abap_local_file TYPE ty_file_item. - DATA ls_xml_local_file TYPE ty_file_item. + DATA ls_abap_local_file TYPE lif_defs=>ty_file_item. + DATA ls_xml_local_file TYPE lif_defs=>ty_file_item. given_the_transport_object( iv_obj_name = 'CL_FOO' @@ -122,13 +122,13 @@ CLASS ltcl_transport_objects IMPLEMENTATION. iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.abap' - iv_lstate = gc_state-modified ). + iv_lstate = lif_defs=>gc_state-modified ). given_the_object_status( iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.xml' - iv_lstate = gc_state-modified ). + iv_lstate = lif_defs=>gc_state-modified ). ls_abap_local_file = given_the_local_file( iv_obj_name = 'CL_FOO' @@ -157,7 +157,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. given_the_object_status( iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' - iv_lstate = gc_state-added ). + iv_lstate = lif_defs=>gc_state-added ). then_it_should_raise_exception( with_text = 'Object CL_A_CLASS_NOT_IN_REPO not found in the local repository files' ). @@ -172,7 +172,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. given_the_object_status( iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' - iv_lstate = gc_state-added ). + iv_lstate = lif_defs=>gc_state-added ). given_the_local_file( iv_obj_name = 'CL_ANOTHER_LOCAL_FILE' @@ -194,7 +194,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. given_the_object_status( iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' - iv_lstate = gc_state-added ). + iv_lstate = lif_defs=>gc_state-added ). then_it_should_raise_exception( with_text = 'Object CL_FOO should be added/modified, but has deletion flag in transport' ). @@ -209,7 +209,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. given_the_object_status( iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' - iv_lstate = gc_state-modified ). + iv_lstate = lif_defs=>gc_state-modified ). then_it_should_raise_exception( with_text = 'Object CL_FOO should be added/modified, but has deletion flag in transport' ). @@ -225,7 +225,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.abap' iv_path = '/a_path' - iv_lstate = gc_state-deleted ). + iv_lstate = lif_defs=>gc_state-deleted ). when_staging( ). @@ -246,14 +246,14 @@ CLASS ltcl_transport_objects IMPLEMENTATION. iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.abap' iv_path = '/a_path' - iv_lstate = gc_state-deleted ). + iv_lstate = lif_defs=>gc_state-deleted ). given_the_object_status( iv_obj_name = 'CL_FOO' iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.xml' iv_path = '/a_path' - iv_lstate = gc_state-deleted ). + iv_lstate = lif_defs=>gc_state-deleted ). when_staging( ). @@ -277,7 +277,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. iv_obj_type = 'CLAS' iv_filename = 'CL_FOO.abap' iv_path = '/a_path' - iv_lstate = gc_state-deleted ). + iv_lstate = lif_defs=>gc_state-deleted ). then_it_should_raise_exception( with_text = 'Object CL_FOO should be removed, but has NO deletion flag in transport' ). @@ -292,7 +292,7 @@ CLASS ltcl_transport_objects IMPLEMENTATION. ENDMETHOD. METHOD given_the_object_status. - DATA ls_object_status TYPE ty_result. + DATA ls_object_status TYPE lif_defs=>ty_result. ls_object_status-obj_name = iv_obj_name. ls_object_status-obj_type = iv_obj_type. ls_object_status-filename = iv_filename. diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 464e66671..45db5048c 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -89,7 +89,7 @@ CLASS lcl_convert DEFINITION FINAL. CLASS-METHODS x_to_bitbyte IMPORTING iv_x TYPE x - RETURNING VALUE(rv_bitbyte) TYPE ty_bitbyte. + RETURNING VALUE(rv_bitbyte) TYPE lif_defs=>ty_bitbyte. CLASS-METHODS string_to_xstring_utf8 IMPORTING iv_string TYPE string @@ -252,14 +252,14 @@ CLASS lcl_hash DEFINITION FINAL. RETURNING VALUE(rv_checksum) TYPE ty_adler32. CLASS-METHODS sha1 - IMPORTING iv_type TYPE ty_type + IMPORTING iv_type TYPE lif_defs=>ty_type iv_data TYPE xstring - RETURNING VALUE(rv_sha1) TYPE ty_sha1 + RETURNING VALUE(rv_sha1) TYPE lif_defs=>ty_sha1 RAISING lcx_exception. CLASS-METHODS sha1_raw IMPORTING iv_data TYPE xstring - RETURNING VALUE(rv_sha1) TYPE ty_sha1 + RETURNING VALUE(rv_sha1) TYPE lif_defs=>ty_sha1 RAISING lcx_exception. ENDCLASS. "lcl_hash DEFINITION @@ -578,7 +578,7 @@ CLASS lcl_diff DEFINITION FINAL. update TYPE i, END OF ty_count. - DATA mt_beacons TYPE ty_string_tt READ-ONLY. + DATA mt_beacons TYPE lif_defs=>ty_string_tt READ-ONLY. * assumes data is UTF8 based with newlines * only works with lines up to 255 characters @@ -643,8 +643,8 @@ CLASS lcl_diff IMPLEMENTATION. lv_new = lcl_convert=>xstring_to_string_utf8( iv_new ). lv_old = lcl_convert=>xstring_to_string_utf8( iv_old ). - SPLIT lv_new AT gc_newline INTO TABLE et_new. - SPLIT lv_old AT gc_newline INTO TABLE et_old. + SPLIT lv_new AT lif_defs=>gc_newline INTO TABLE et_new. + SPLIT lv_old AT lif_defs=>gc_newline INTO TABLE et_old. ENDMETHOD. "unpack diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index 677472278..c7820ca55 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -102,21 +102,21 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. CASE iv_action. WHEN c_actions-toggle_hide_files. " Toggle file diplay mv_hide_files = lcl_app=>user( )->toggle_hide_files( ). - ev_state = gc_event_state-re_render. + ev_state = lif_defs=>gc_event_state-re_render. WHEN c_actions-change_dir. " Change dir lv_path = lcl_html_action_utils=>dir_decode( iv_getdata ). mv_cur_dir = lcl_path=>change_dir( iv_cur_dir = mv_cur_dir iv_cd = lv_path ). - ev_state = gc_event_state-re_render. + ev_state = lif_defs=>gc_event_state-re_render. WHEN c_actions-toggle_folders. " Toggle folder view mv_show_folders = boolc( mv_show_folders <> abap_true ). mv_cur_dir = '/'. " Root - ev_state = gc_event_state-re_render. + ev_state = lif_defs=>gc_event_state-re_render. WHEN c_actions-toggle_changes. " Toggle changes only view mv_changes_only = lcl_app=>user( )->toggle_changes_only( ). - ev_state = gc_event_state-re_render. + ev_state = lif_defs=>gc_event_state-re_render. WHEN c_actions-display_more. " Increase MAX lines limit mv_max_lines = mv_max_lines + mv_max_setting. - ev_state = gc_event_state-re_render. + ev_state = lif_defs=>gc_event_state-re_render. ENDCASE. ENDMETHOD. "lif_gui_page~on_event @@ -199,7 +199,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ro_html->add( |Only { lv_max_str } shown in list. Display { lcl_html=>a( iv_txt = lv_add_str iv_act = c_actions-display_more ) } more. (Set in Advanced > { - lcl_html=>a( iv_txt = 'Settings' iv_act = gc_action-go_settings ) + lcl_html=>a( iv_txt = 'Settings' iv_act = lif_defs=>gc_action-go_settings ) } )| ). ro_html->add( '' ). ENDIF. @@ -263,9 +263,9 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. DATA: lo_tb_advanced TYPE REF TO lcl_html_toolbar, lo_tb_branch TYPE REF TO lcl_html_toolbar, lv_key TYPE lcl_persistence_db=>ty_value, - lv_wp_opt LIKE gc_html_opt-crossout, - lv_crossout LIKE gc_html_opt-crossout, - lv_pull_opt LIKE gc_html_opt-crossout. + lv_wp_opt LIKE lif_defs=>gc_html_opt-crossout, + lv_crossout LIKE lif_defs=>gc_html_opt-crossout, + lv_pull_opt LIKE lif_defs=>gc_html_opt-crossout. CREATE OBJECT ro_toolbar. CREATE OBJECT lo_tb_branch. @@ -274,58 +274,58 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. lv_key = mo_repo->get_key( ). IF mo_repo->is_write_protected( ) = abap_true. - lv_wp_opt = gc_html_opt-crossout. - lv_pull_opt = gc_html_opt-crossout. + lv_wp_opt = lif_defs=>gc_html_opt-crossout. + lv_pull_opt = lif_defs=>gc_html_opt-crossout. ELSE. - lv_pull_opt = gc_html_opt-strong. + lv_pull_opt = lif_defs=>gc_html_opt-strong. ENDIF. " Build branch drop-down ======================== IF mo_repo->is_offline( ) = abap_false. " Online ? lo_tb_branch->add( iv_txt = 'Overview' - iv_act = |{ gc_action-go_branch_overview }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-go_branch_overview }?{ lv_key }| ). lo_tb_branch->add( iv_txt = 'Switch' - iv_act = |{ gc_action-git_branch_switch }?{ lv_key }| + iv_act = |{ lif_defs=>gc_action-git_branch_switch }?{ lv_key }| iv_opt = lv_wp_opt ). lo_tb_branch->add( iv_txt = 'Create' - iv_act = |{ gc_action-git_branch_create }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-git_branch_create }?{ lv_key }| ). lo_tb_branch->add( iv_txt = 'Delete' - iv_act = |{ gc_action-git_branch_delete }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-git_branch_delete }?{ lv_key }| ). ENDIF. " Build advanced drop-down ======================== IF mo_repo->is_offline( ) = abap_false. " Online ? lo_tb_advanced->add( iv_txt = 'Reset local' - iv_act = |{ gc_action-git_reset }?{ lv_key }| + iv_act = |{ lif_defs=>gc_action-git_reset }?{ lv_key }| iv_opt = lv_wp_opt ). lo_tb_advanced->add( iv_txt = 'Background mode' - iv_act = |{ gc_action-go_background }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-go_background }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Change remote' - iv_act = |{ gc_action-repo_remote_change }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_remote_change }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Make off-line' - iv_act = |{ gc_action-repo_remote_detach }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_remote_detach }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Force stage' - iv_act = |{ gc_action-go_stage }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-go_stage }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Transport to Branch' - iv_act = |{ gc_action-repo_transport_to_branch }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_transport_to_branch }?{ lv_key }| ). ELSE. lo_tb_advanced->add( iv_txt = 'Make on-line' - iv_act = |{ gc_action-repo_remote_attach }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_remote_attach }?{ lv_key }| ). ENDIF. lo_tb_advanced->add( iv_txt = 'Repo settings' - iv_act = |{ gc_action-repo_settings }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_settings }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Update local checksums' - iv_act = |{ gc_action-repo_refresh_checksums }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_refresh_checksums }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Remove' - iv_act = |{ gc_action-repo_remove }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_remove }?{ lv_key }| ). CLEAR lv_crossout. IF mo_repo->is_write_protected( ) = abap_true OR lcl_auth=>is_allowed( gc_authorization-uninstall ) = abap_false. - lv_crossout = gc_html_opt-crossout. + lv_crossout = lif_defs=>gc_html_opt-crossout. ENDIF. lo_tb_advanced->add( iv_txt = 'Uninstall' - iv_act = |{ gc_action-repo_purge }?{ lv_key }| + iv_act = |{ lif_defs=>gc_action-repo_purge }?{ lv_key }| iv_opt = lv_crossout ). " Build main toolbar ============================== @@ -333,18 +333,18 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. TRY. IF iv_rstate IS NOT INITIAL. " Something new at remote ro_toolbar->add( iv_txt = 'Pull' - iv_act = |{ gc_action-git_pull }?{ lv_key }| + iv_act = |{ lif_defs=>gc_action-git_pull }?{ lv_key }| iv_opt = lv_pull_opt ). ENDIF. IF iv_lstate IS NOT INITIAL. " Something new at local ro_toolbar->add( iv_txt = 'Stage' - iv_act = |{ gc_action-go_stage }?{ lv_key }| - iv_opt = gc_html_opt-strong ). + iv_act = |{ lif_defs=>gc_action-go_stage }?{ lv_key }| + iv_opt = lif_defs=>gc_html_opt-strong ). ENDIF. IF iv_rstate IS NOT INITIAL OR iv_lstate IS NOT INITIAL. " Any changes ro_toolbar->add( iv_txt = 'Show diff' - iv_act = |{ gc_action-go_diff }?key={ lv_key }| - iv_opt = gc_html_opt-strong ). + iv_act = |{ lif_defs=>gc_action-go_diff }?key={ lv_key }| + iv_opt = lif_defs=>gc_html_opt-strong ). ENDIF. CATCH lcx_exception ##NO_HANDLER. " authorization error or repository does not exist @@ -354,17 +354,17 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. io_sub = lo_tb_branch ) ##NO_TEXT. ELSE. ro_toolbar->add( iv_txt = 'Import ZIP' - iv_act = |{ gc_action-zip_import }?{ lv_key }| - iv_opt = gc_html_opt-strong ). + iv_act = |{ lif_defs=>gc_action-zip_import }?{ lv_key }| + iv_opt = lif_defs=>gc_html_opt-strong ). ro_toolbar->add( iv_txt = 'Export ZIP' - iv_act = |{ gc_action-zip_export }?{ lv_key }| - iv_opt = gc_html_opt-strong ). + iv_act = |{ lif_defs=>gc_action-zip_export }?{ lv_key }| + iv_opt = lif_defs=>gc_html_opt-strong ). ENDIF. ro_toolbar->add( iv_txt = 'Advanced' io_sub = lo_tb_advanced ) ##NO_TEXT. ro_toolbar->add( iv_txt = 'Refresh' - iv_act = |{ gc_action-repo_refresh }?{ lv_key }| ). + iv_act = |{ lif_defs=>gc_action-repo_refresh }?{ lv_key }| ). ro_toolbar->add( iv_txt = lcl_html=>icon( iv_name = 'settings/grey70' ) io_sub = build_grid_menu( ) ). @@ -493,7 +493,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. ro_html->add( '
    ' ). ro_html->add_a( iv_txt = |view diff ({ is_item-changes })| - iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ). + iv_act = |{ lif_defs=>gc_action-go_diff }?{ lv_difflink }| ). ro_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_item-lstate iv2 = is_item-rstate ) ). ro_html->add( '
    ' ). @@ -507,7 +507,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. iv_key = mo_repo->get_key( ) ig_file = ls_file ). ro_html->add_a( iv_txt = 'view diff' - iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ). + iv_act = |{ lif_defs=>gc_action-go_diff }?{ lv_difflink }| ). ro_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = ls_file-lstate iv2 = ls_file-rstate ) ). ELSE. @@ -566,7 +566,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. iv_obj_name = is_item-obj_name ). rv_html = lcl_html=>a( iv_txt = |{ is_item-obj_name }| - iv_act = |{ gc_action-jump }?{ lv_encode }| ). + iv_act = |{ lif_defs=>gc_action-jump }?{ lv_encode }| ). ENDMETHOD. "build_obj_jump_link diff --git a/src/zabapgit_view_tutorial.prog.abap b/src/zabapgit_view_tutorial.prog.abap index 631508e1c..26aae5e7d 100644 --- a/src/zabapgit_view_tutorial.prog.abap +++ b/src/zabapgit_view_tutorial.prog.abap @@ -16,7 +16,7 @@ ENDCLASS. "lcl_gui_view_tutorial CLASS lcl_gui_view_tutorial IMPLEMENTATION. METHOD lif_gui_page~on_event. - ev_state = gc_event_state-not_handled. + ev_state = lif_defs=>gc_event_state-not_handled. ENDMETHOD. " lif_gui_page~on_event. METHOD lif_gui_page~render. @@ -40,17 +40,17 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION. ro_html->add( '

      ' ). ro_html->add( `
    • To clone a remote repo (e.g. from github) click ` ). - ro_html->add_a( iv_txt = '+ Clone' iv_act = gc_action-repo_clone ). + ro_html->add_a( iv_txt = '+ Clone' iv_act = lif_defs=>gc_action-repo_clone ). ro_html->add( ' from the top menu. This will copy a remote repo to your system.
    • ' ). ro_html->add( `
    • To add a local package as a repo click ` ). - ro_html->add_a( iv_txt = '+ Offline' iv_act = gc_action-repo_newoffline ). + ro_html->add_a( iv_txt = '+ Offline' iv_act = lif_defs=>gc_action-repo_newoffline ). ro_html->add( ' from the top menu. This will track a repo which already exist in' ). ro_html->add( ' the system with abapGit. You''ll be able to attach it to remote origin' ). ro_html->add( ' or just serialize as a zip file
    • ' ). ro_html->add( `
    • Go ` ). - ro_html->add_a( iv_txt = 'Explore' iv_act = gc_action-go_explore ). + ro_html->add_a( iv_txt = 'Explore' iv_act = lif_defs=>gc_action-go_explore ). ro_html->add( ' to find projects using abapGit
    • ' ). ro_html->add( '

    ' ). @@ -70,7 +70,7 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION. ro_html->add( 'abapGit installed in package ' ). ro_html->add( lcl_services_abapgit=>c_package_abapgit ). ELSE. - ro_html->add_a( iv_txt = 'install abapGit repo' iv_act = gc_action-abapgit_install ). + ro_html->add_a( iv_txt = 'install abapGit repo' iv_act = lif_defs=>gc_action-abapgit_install ). ro_html->add( ' - To keep abapGit up-to-date (or also to contribute) you need to' ). ro_html->add( 'install it as a repository.' ). ENDIF. @@ -80,7 +80,7 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION. ro_html->add( 'abapGit plugins installed in package ' ). ro_html->add( lcl_services_abapgit=>c_package_plugins ). ELSE. - ro_html->add_a( iv_txt = 'install abapGit plugins' iv_act = gc_action-abapgit_install_pi ). + ro_html->add_a( iv_txt = 'install abapGit plugins' iv_act = lif_defs=>gc_action-abapgit_install_pi ). ro_html->add( ' - you can also install plugins to extend supported object types' ). ENDIF. ro_html->add( '' ). diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index 3579df410..a0a06955e 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -16,7 +16,7 @@ CLASS lcl_xml DEFINITION ABSTRACT. PROTECTED SECTION. DATA: mi_ixml TYPE REF TO if_ixml, mi_xml_doc TYPE REF TO if_ixml_document, - ms_metadata TYPE ty_metadata. + ms_metadata TYPE lif_defs=>ty_metadata. CONSTANTS: c_abapgit_tag TYPE string VALUE 'abapGit' ##NO_TEXT, c_attr_version TYPE string VALUE 'version' ##NO_TEXT, @@ -185,7 +185,7 @@ CLASS lcl_xml_output DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC. ii_xml TYPE REF TO if_ixml_element, render IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true - is_metadata TYPE ty_metadata OPTIONAL + is_metadata TYPE lif_defs=>ty_metadata OPTIONAL RETURNING VALUE(rv_xml) TYPE string. PRIVATE SECTION. @@ -301,7 +301,7 @@ CLASS lcl_xml_input DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC. RETURNING VALUE(ri_raw) TYPE REF TO if_ixml_document, * todo, add read_xml to match add_xml in lcl_xml_output get_metadata - RETURNING VALUE(rs_metadata) TYPE ty_metadata. + RETURNING VALUE(rs_metadata) TYPE lif_defs=>ty_metadata. PRIVATE SECTION. METHODS: fix_xml. diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 2765cc6ef..d1e2fb9cb 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -32,11 +32,11 @@ CLASS lcl_zip DEFINITION FINAL. CLASS-METHODS unzip_file IMPORTING iv_xstr TYPE xstring - RETURNING VALUE(rt_files) TYPE ty_files_tt + RETURNING VALUE(rt_files) TYPE lif_defs=>ty_files_tt RAISING lcx_exception. CLASS-METHODS normalize_path - CHANGING ct_files TYPE ty_files_tt + CHANGING ct_files TYPE lif_defs=>ty_files_tt RAISING lcx_exception. CLASS-METHODS filename @@ -51,7 +51,7 @@ CLASS lcl_zip DEFINITION FINAL. RAISING lcx_exception. CLASS-METHODS encode_files - IMPORTING it_files TYPE ty_files_item_tt + IMPORTING it_files TYPE lif_defs=>ty_files_item_tt RETURNING VALUE(rv_xstr) TYPE xstring RAISING lcx_exception. @@ -342,7 +342,7 @@ CLASS lcl_zip IMPLEMENTATION. -data = lv_data. - -sha1 = lcl_hash=>sha1( iv_type = gc_type-blob + -sha1 = lcl_hash=>sha1( iv_type = lif_defs=>gc_type-blob iv_data = -data ). ENDLOOP. @@ -354,7 +354,7 @@ CLASS lcl_zip IMPLEMENTATION. METHOD export. DATA: lo_log TYPE REF TO lcl_log, - lt_zip TYPE ty_files_item_tt. + lt_zip TYPE lif_defs=>ty_files_item_tt. CREATE OBJECT lo_log. @@ -410,12 +410,12 @@ CLASS lcl_zip IMPLEMENTATION. METHOD export_object. DATA: ls_tadir TYPE tadir, - ls_item TYPE ty_item, + ls_item TYPE lif_defs=>ty_item, lv_folder TYPE string, lv_fullpath TYPE string, lt_rawdata TYPE solix_tab, lv_sep TYPE c LENGTH 1, - lt_files TYPE ty_files_tt. + lt_files TYPE lif_defs=>ty_files_tt. STATICS: lv_prev TYPE string. From aefaa9f730970a1633023e511a3bc797042efe7a Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 7 Jun 2017 18:32:29 +0000 Subject: [PATCH 155/188] move auth definitions to interface --- src/zabapgit_authorizations.prog.abap | 14 +++++++------- src/zabapgit_view_repo.prog.abap | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/zabapgit_authorizations.prog.abap b/src/zabapgit_authorizations.prog.abap index 0e69d39ba..b9cdce214 100644 --- a/src/zabapgit_authorizations.prog.abap +++ b/src/zabapgit_authorizations.prog.abap @@ -2,13 +2,13 @@ *& Include ZABAPGIT_AUTHORIZATIONS *&---------------------------------------------------------------------* -TYPES: ty_authorization TYPE string. - -CONSTANTS: BEGIN OF gc_authorization, - uninstall TYPE ty_authorization VALUE 'UNINSTALL', - END OF gc_authorization. - INTERFACE lif_auth. + TYPES: ty_authorization TYPE string. + + CONSTANTS: BEGIN OF gc_authorization, + uninstall TYPE ty_authorization VALUE 'UNINSTALL', + END OF gc_authorization. + METHODS: is_allowed IMPORTING iv_authorization TYPE ty_authorization @@ -27,7 +27,7 @@ CLASS lcl_auth DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: is_allowed - IMPORTING iv_authorization TYPE ty_authorization + IMPORTING iv_authorization TYPE lif_auth=>ty_authorization iv_param TYPE string OPTIONAL RETURNING VALUE(rv_allowed) TYPE abap_bool. diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index c7820ca55..700a58823 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -321,7 +321,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. CLEAR lv_crossout. IF mo_repo->is_write_protected( ) = abap_true - OR lcl_auth=>is_allowed( gc_authorization-uninstall ) = abap_false. + OR lcl_auth=>is_allowed( lif_auth=>gc_authorization-uninstall ) = abap_false. lv_crossout = lif_defs=>gc_html_opt-crossout. ENDIF. lo_tb_advanced->add( iv_txt = 'Uninstall' From 824195f63a073e2248903174c3e822631aaaaa43 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 9 Jun 2017 07:41:05 +0000 Subject: [PATCH 156/188] rename classes #733 --- src/zabapgit_2fa.prog.abap | 58 +++++++++-------- src/zabapgit_app.prog.abap | 6 +- src/zabapgit_background.prog.abap | 16 ++--- src/zabapgit_gui_router.prog.abap | 10 +-- src/zabapgit_html_action_utils.prog.abap | 2 +- src/zabapgit_html_chunks.prog.abap | 2 +- src/zabapgit_http.prog.abap | 8 +-- src/zabapgit_migrations.prog.abap | 2 +- src/zabapgit_object_acid.prog.abap | 2 +- src/zabapgit_object_auth.prog.abap | 2 +- src/zabapgit_object_clas.prog.abap | 49 ++++++++------- src/zabapgit_object_dcls.prog.abap | 2 +- src/zabapgit_object_ddls.prog.abap | 2 +- src/zabapgit_object_doct.prog.abap | 2 +- src/zabapgit_object_docv.prog.abap | 2 +- src/zabapgit_object_doma.prog.abap | 2 +- src/zabapgit_object_dtel.prog.abap | 2 +- src/zabapgit_object_enho.prog.abap | 14 ++--- src/zabapgit_object_enhs.prog.abap | 2 +- src/zabapgit_object_enqu.prog.abap | 2 +- src/zabapgit_object_ensc.prog.abap | 2 +- src/zabapgit_object_form.prog.abap | 2 +- src/zabapgit_object_fugr.prog.abap | 2 +- src/zabapgit_object_iarp.prog.abap | 2 +- src/zabapgit_object_iasp.prog.abap | 2 +- src/zabapgit_object_iatu.prog.abap | 2 +- src/zabapgit_object_intf.prog.abap | 35 ++++++----- src/zabapgit_object_msag.prog.abap | 2 +- src/zabapgit_object_nrob.prog.abap | 2 +- src/zabapgit_object_oo_factory.prog.abap | 10 +-- src/zabapgit_object_oo_functions.prog.abap | 69 +++++++++++---------- src/zabapgit_object_para.prog.abap | 2 +- src/zabapgit_object_pinf.prog.abap | 2 +- src/zabapgit_object_prog.prog.abap | 2 +- src/zabapgit_object_samc.prog.abap | 4 +- src/zabapgit_object_sapc.prog.abap | 4 +- src/zabapgit_object_sfbf.prog.abap | 2 +- src/zabapgit_object_sfbs.prog.abap | 2 +- src/zabapgit_object_sfpf.prog.abap | 2 +- src/zabapgit_object_sfpi.prog.abap | 2 +- src/zabapgit_object_sfsw.prog.abap | 2 +- src/zabapgit_object_shi3.prog.abap | 2 +- src/zabapgit_object_shlp.prog.abap | 2 +- src/zabapgit_object_sicf.prog.abap | 2 +- src/zabapgit_object_smim.prog.abap | 2 +- src/zabapgit_object_splo.prog.abap | 2 +- src/zabapgit_object_ssfo.prog.abap | 2 +- src/zabapgit_object_ssst.prog.abap | 2 +- src/zabapgit_object_styl.prog.abap | 2 +- src/zabapgit_object_susc.prog.abap | 2 +- src/zabapgit_object_suso.prog.abap | 2 +- src/zabapgit_object_tabl.prog.abap | 6 +- src/zabapgit_object_tabl_valid.prog.abap | 20 +++--- src/zabapgit_object_tobj.prog.abap | 2 +- src/zabapgit_object_tran.prog.abap | 2 +- src/zabapgit_object_ttyp.prog.abap | 2 +- src/zabapgit_object_type.prog.abap | 4 +- src/zabapgit_object_vcls.prog.abap | 2 +- src/zabapgit_object_view.prog.abap | 2 +- src/zabapgit_object_w3xx.prog.abap | 2 +- src/zabapgit_object_wapa.prog.abap | 2 +- src/zabapgit_object_wdya.prog.abap | 2 +- src/zabapgit_object_wdyn.prog.abap | 2 +- src/zabapgit_object_webi.prog.abap | 2 +- src/zabapgit_object_xslt.prog.abap | 2 +- src/zabapgit_objects.prog.abap | 18 +++--- src/zabapgit_objects_impl.prog.abap | 2 +- src/zabapgit_page_background.prog.abap | 26 ++++---- src/zabapgit_page_branch_overview.prog.abap | 4 +- src/zabapgit_page_db.prog.abap | 6 +- src/zabapgit_page_main.prog.abap | 4 +- src/zabapgit_page_repo_settings.prog.abap | 6 +- src/zabapgit_page_settings.prog.abap | 4 +- src/zabapgit_persistence.prog.abap | 14 ++--- src/zabapgit_persistence_old.prog.abap | 6 +- src/zabapgit_repo_browser_util.prog.abap | 4 +- src/zabapgit_services_background.prog.abap | 10 +-- src/zabapgit_services_repo.prog.abap | 10 +-- src/zabapgit_transport.prog.abap | 4 +- src/zabapgit_unit_test.prog.abap | 2 +- src/zabapgit_unit_test_clas_intf.prog.abap | 41 ++++++------ src/zabapgit_view_repo.prog.abap | 20 +++--- 82 files changed, 299 insertions(+), 295 deletions(-) diff --git a/src/zabapgit_2fa.prog.abap b/src/zabapgit_2fa.prog.abap index 7506e1635..58b7bcf2a 100644 --- a/src/zabapgit_2fa.prog.abap +++ b/src/zabapgit_2fa.prog.abap @@ -50,13 +50,13 @@ CLASS lcx_2fa_auth_failed IMPLEMENTATION. ENDMETHOD. ENDCLASS. -CLASS lcx_2fa_token_gen_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. +CLASS lcx_2fa_gen_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. PROTECTED SECTION. METHODS: get_default_text REDEFINITION. ENDCLASS. -CLASS lcx_2fa_token_gen_failed IMPLEMENTATION. +CLASS lcx_2fa_gen_failed IMPLEMENTATION. METHOD get_default_text. rv_text = 'Two factor access token generation failed.' ##NO_TEXT. ENDMETHOD. @@ -74,25 +74,25 @@ CLASS lcx_2fa_unsupported IMPLEMENTATION. ENDMETHOD. ENDCLASS. -CLASS lcx_2fa_token_del_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. +CLASS lcx_2fa_del_failed DEFINITION INHERITING FROM lcx_2fa_error FINAL. PROTECTED SECTION. METHODS: get_default_text REDEFINITION. ENDCLASS. -CLASS lcx_2fa_token_del_failed IMPLEMENTATION. +CLASS lcx_2fa_del_failed IMPLEMENTATION. METHOD get_default_text. rv_text = 'Deleting previous access tokens failed.' ##NO_TEXT. ENDMETHOD. ENDCLASS. -CLASS lcx_2fa_communication_error DEFINITION INHERITING FROM lcx_2fa_error FINAL. +CLASS lcx_2fa_comm_error DEFINITION INHERITING FROM lcx_2fa_error FINAL. PROTECTED SECTION. METHODS: get_default_text REDEFINITION. ENDCLASS. -CLASS lcx_2fa_communication_error IMPLEMENTATION. +CLASS lcx_2fa_comm_error IMPLEMENTATION. METHOD get_default_text. rv_text = 'Communication error.' ##NO_TEXT. ENDMETHOD. @@ -143,8 +143,8 @@ INTERFACE lif_2fa_authenticator. iv_2fa_token TYPE string RETURNING VALUE(rv_access_token) TYPE string RAISING lcx_2fa_auth_failed - lcx_2fa_token_gen_failed - lcx_2fa_communication_error, + lcx_2fa_gen_failed + lcx_2fa_comm_error, "! Check if this authenticator instance supports the give repository url "! @parameter iv_url | Repository url "! @parameter rv_supported | Is supported @@ -166,7 +166,7 @@ INTERFACE lif_2fa_authenticator. iv_username TYPE string iv_password TYPE string RETURNING VALUE(rv_required) TYPE abap_bool - RAISING lcx_2fa_communication_error, + RAISING lcx_2fa_comm_error, "! Delete all previously created access tokens for abapGit "! @parameter iv_url | Repository url "! @parameter iv_username | Username @@ -178,8 +178,8 @@ INTERFACE lif_2fa_authenticator. iv_username TYPE string iv_password TYPE string iv_2fa_token TYPE string - RAISING lcx_2fa_token_del_failed - lcx_2fa_communication_error + RAISING lcx_2fa_del_failed + lcx_2fa_comm_error lcx_2fa_auth_failed, "! Begin an authenticator session that uses internal caching for authorizations "! @raising lcx_2fa_illegal_state | Session already started @@ -190,7 +190,7 @@ INTERFACE lif_2fa_authenticator. ENDINTERFACE. "! Default LIF_2FA-AUTHENTICATOR implememtation -CLASS lcl_2fa_authenticator_base DEFINITION +CLASS lcl_2fa_auth_base DEFINITION ABSTRACT CREATE PUBLIC. @@ -216,7 +216,7 @@ CLASS lcl_2fa_authenticator_base DEFINITION "!

    "! sy-msg... must be set right before calling! "!

    - raise_comm_error_from_sy RAISING lcx_2fa_communication_error. + raise_comm_error_from_sy RAISING lcx_2fa_comm_error. METHODS: "! @parameter rv_running | Internal session is currently active is_session_running RETURNING VALUE(rv_running) TYPE abap_bool. @@ -226,7 +226,7 @@ CLASS lcl_2fa_authenticator_base DEFINITION mv_session_running TYPE abap_bool. ENDCLASS. -CLASS lcl_2fa_authenticator_base IMPLEMENTATION. +CLASS lcl_2fa_auth_base IMPLEMENTATION. METHOD constructor. CREATE OBJECT mo_url_regex EXPORTING @@ -251,7 +251,7 @@ CLASS lcl_2fa_authenticator_base IMPLEMENTATION. ENDMETHOD. METHOD delete_access_tokens. - RAISE EXCEPTION TYPE lcx_2fa_token_del_failed. " Needs to be overwritten in subclasses + RAISE EXCEPTION TYPE lcx_2fa_del_failed. " Needs to be overwritten in subclasses ENDMETHOD. METHOD raise_comm_error_from_sy. @@ -260,7 +260,7 @@ CLASS lcl_2fa_authenticator_base IMPLEMENTATION. MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4 INTO lv_error_msg. - RAISE EXCEPTION TYPE lcx_2fa_communication_error + RAISE EXCEPTION TYPE lcx_2fa_comm_error EXPORTING iv_error_text = |Communication error: { lv_error_msg }| ##NO_TEXT. ENDMETHOD. @@ -286,10 +286,8 @@ CLASS lcl_2fa_authenticator_base IMPLEMENTATION. ENDMETHOD. ENDCLASS. -CLASS lcl_2fa_github_authenticator DEFINITION - INHERITING FROM lcl_2fa_authenticator_base - FINAL - CREATE PUBLIC. +CLASS lcl_2fa_github_auth DEFINITION INHERITING FROM lcl_2fa_auth_base + FINAL CREATE PUBLIC. PUBLIC SECTION. METHODS: @@ -320,12 +318,12 @@ CLASS lcl_2fa_github_authenticator DEFINITION iv_2fa_token TYPE string RETURNING VALUE(ri_client) TYPE REF TO if_http_client RAISING lcx_2fa_auth_failed - lcx_2fa_communication_error. + lcx_2fa_comm_error. DATA: mi_authenticated_session TYPE REF TO if_http_client. ENDCLASS. -CLASS lcl_2fa_github_authenticator IMPLEMENTATION. +CLASS lcl_2fa_github_auth IMPLEMENTATION. METHOD constructor. super->constructor( '^https?://(www\.)?github.com.*$' ). ENDMETHOD. @@ -360,14 +358,14 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. code = lv_http_code reason = lv_http_code_description ). IF lv_http_code <> 201. - RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed + RAISE EXCEPTION TYPE lcx_2fa_gen_failed EXPORTING iv_error_text = |Token generation failed: { lv_http_code } { lv_http_code_description }|. ENDIF. rv_access_token = get_token_from_response( li_http_client->response ). IF rv_access_token IS INITIAL. - RAISE EXCEPTION TYPE lcx_2fa_token_gen_failed + RAISE EXCEPTION TYPE lcx_2fa_gen_failed EXPORTING iv_error_text = 'Token generation failed: parser error' ##NO_TEXT. ENDIF. @@ -525,7 +523,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. code = lv_http_code reason = lv_http_code_description ). IF lv_http_code <> 200. - RAISE EXCEPTION TYPE lcx_2fa_token_del_failed + RAISE EXCEPTION TYPE lcx_2fa_del_failed EXPORTING iv_error_text = |Could not fetch current 2FA authorizations: | && |{ lv_http_code } { lv_http_code_description }|. @@ -550,7 +548,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. code = lv_http_code reason = lv_http_code_description ). IF lv_http_code <> 204. - RAISE EXCEPTION TYPE lcx_2fa_token_del_failed + RAISE EXCEPTION TYPE lcx_2fa_del_failed EXPORTING iv_error_text = |Could not delete token '{ }': | && |{ lv_http_code } { lv_http_code_description }|. @@ -630,7 +628,7 @@ CLASS lcl_2fa_github_authenticator IMPLEMENTATION. ENDCLASS. "! Static registry class to find LIF_2FA_AUTHENTICATOR instances -CLASS lcl_2fa_authenticator_registry DEFINITION +CLASS lcl_2fa_auth_registry DEFINITION FINAL CREATE PRIVATE. @@ -675,9 +673,9 @@ CLASS lcl_2fa_authenticator_registry DEFINITION RAISING lcx_exception. ENDCLASS. -CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. +CLASS lcl_2fa_auth_registry IMPLEMENTATION. METHOD class_constructor. - DEFINE register. + DEFINE _register. CREATE OBJECT li_authenticator TYPE &1. INSERT li_authenticator INTO TABLE gt_registered_authenticators. END-OF-DEFINITION. @@ -687,7 +685,7 @@ CLASS lcl_2fa_authenticator_registry IMPLEMENTATION. " If there are new authenticators these need to be added here manually. " I do not think there is an equivalent to SEO_INTERFACE_IMPLEM_GET_ALL for local classes " without invoking the compiler directly. - register: lcl_2fa_github_authenticator. + _register: lcl_2fa_github_auth. ENDMETHOD. METHOD get_authenticator_for_url. diff --git a/src/zabapgit_app.prog.abap b/src/zabapgit_app.prog.abap index f6ea82515..da8b71e6c 100644 --- a/src/zabapgit_app.prog.abap +++ b/src/zabapgit_app.prog.abap @@ -6,7 +6,7 @@ CLASS lcl_gui DEFINITION DEFERRED. CLASS lcl_persistence_user DEFINITION DEFERRED. CLASS lcl_repo_srv DEFINITION DEFERRED. CLASS lcl_persistence_db DEFINITION DEFERRED. -CLASS lcl_persistence_settings DEFINITION DEFERRED. +CLASS lcl_persist_settings DEFINITION DEFERRED. *----------------------------------------------------------------------* * CLASS lcl_app DEFINITION @@ -33,13 +33,13 @@ CLASS lcl_app DEFINITION FINAL. RETURNING VALUE(ro_db) TYPE REF TO lcl_persistence_db. CLASS-METHODS settings - RETURNING VALUE(ro_settings) TYPE REF TO lcl_persistence_settings. + RETURNING VALUE(ro_settings) TYPE REF TO lcl_persist_settings. PRIVATE SECTION. CLASS-DATA: go_gui TYPE REF TO lcl_gui, go_current_user TYPE REF TO lcl_persistence_user, go_db TYPE REF TO lcl_persistence_db, go_repo_srv TYPE REF TO lcl_repo_srv, - go_settings TYPE REF TO lcl_persistence_settings. + go_settings TYPE REF TO lcl_persist_settings. ENDCLASS. "lcl_app diff --git a/src/zabapgit_background.prog.abap b/src/zabapgit_background.prog.abap index 284a2b6b6..252883901 100644 --- a/src/zabapgit_background.prog.abap +++ b/src/zabapgit_background.prog.abap @@ -16,11 +16,11 @@ CLASS lcl_background DEFINITION FINAL. RETURNING VALUE(rv_comment) TYPE string, push IMPORTING io_repo TYPE REF TO lcl_repo_online - is_settings TYPE lcl_persistence_background=>ty_background + is_settings TYPE lcl_persist_background=>ty_background RAISING lcx_exception, push_fixed IMPORTING io_repo TYPE REF TO lcl_repo_online - is_settings TYPE lcl_persistence_background=>ty_background + is_settings TYPE lcl_persist_background=>ty_background RAISING lcx_exception, push_auto IMPORTING io_repo TYPE REF TO lcl_repo_online @@ -38,10 +38,10 @@ CLASS lcl_background IMPLEMENTATION. ENDIF. CASE is_settings-amethod. - WHEN lcl_persistence_background=>c_amethod-fixed. + WHEN lcl_persist_background=>c_amethod-fixed. push_fixed( io_repo = io_repo is_settings = is_settings ). - WHEN lcl_persistence_background=>c_amethod-auto. + WHEN lcl_persist_background=>c_amethod-auto. push_auto( io_repo ). WHEN OTHERS. lcx_exception=>raise( 'unknown push method' ). @@ -171,9 +171,9 @@ CLASS lcl_background IMPLEMENTATION. CONSTANTS: c_enq_type TYPE c LENGTH 12 VALUE 'BACKGROUND'. - DATA: lo_per TYPE REF TO lcl_persistence_background, + DATA: lo_per TYPE REF TO lcl_persist_background, lo_repo TYPE REF TO lcl_repo_online, - lt_list TYPE lcl_persistence_background=>tt_background, + lt_list TYPE lcl_persist_background=>tt_background, lv_repo_name TYPE string. FIELD-SYMBOLS: LIKE LINE OF lt_list. @@ -209,9 +209,9 @@ CLASS lcl_background IMPLEMENTATION. iv_password = -password ). CASE -method. - WHEN lcl_persistence_background=>c_method-pull. + WHEN lcl_persist_background=>c_method-pull. lo_repo->deserialize( ). - WHEN lcl_persistence_background=>c_method-push. + WHEN lcl_persist_background=>c_method-push. push( io_repo = lo_repo is_settings = ). WHEN OTHERS. diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 4a1a71e4c..8903c595f 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -77,11 +77,13 @@ CLASS lcl_gui_router IMPLEMENTATION. WHEN lif_defs=>gc_action-go_main " Go Main page OR lif_defs=>gc_action-go_explore " Go Explore page OR lif_defs=>gc_action-go_db " Go DB util page - OR lif_defs=>gc_action-go_background_run " Go background run page OR lif_defs=>gc_action-go_debuginfo " Go debug info page OR lif_defs=>gc_action-go_settings. " Go settings page ei_page = get_page_by_name( iv_action ). ev_state = lif_defs=>gc_event_state-new_page. + WHEN lif_defs=>gc_action-go_background_run. " Go background run page + CREATE OBJECT ei_page TYPE lcl_gui_page_bkg_run. + ev_state = lif_defs=>gc_event_state-new_page. WHEN lif_defs=>gc_action-go_background. " Go Background page ei_page = get_page_background( lv_key ). ev_state = lif_defs=>gc_event_state-new_page. @@ -175,7 +177,7 @@ CLASS lcl_gui_router IMPLEMENTATION. lcl_services_repo=>transport_to_branch( iv_repository_key = lv_key ). ev_state = lif_defs=>gc_event_state-re_render. WHEN lif_defs=>gc_action-repo_settings. - CREATE OBJECT ei_page TYPE lcl_gui_page_repo_settings + CREATE OBJECT ei_page TYPE lcl_gui_page_repo_sett EXPORTING io_repo = lcl_app=>repo_srv( )->get( lv_key ). ev_state = lif_defs=>gc_event_state-new_page. @@ -273,7 +275,7 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD get_page_branch_overview. DATA: lo_repo TYPE REF TO lcl_repo_online, - lo_page TYPE REF TO lcl_gui_page_branch_overview, + lo_page TYPE REF TO lcl_gui_page_boverview, lv_key TYPE lcl_persistence_repo=>ty_repo-key. @@ -346,7 +348,7 @@ CLASS lcl_gui_router IMPLEMENTATION. METHOD get_page_background. - CREATE OBJECT ri_page TYPE lcl_gui_page_background + CREATE OBJECT ri_page TYPE lcl_gui_page_bkg EXPORTING iv_key = iv_key. diff --git a/src/zabapgit_html_action_utils.prog.abap b/src/zabapgit_html_action_utils.prog.abap index b7bbe26e2..905fb4b15 100644 --- a/src/zabapgit_html_action_utils.prog.abap +++ b/src/zabapgit_html_action_utils.prog.abap @@ -80,7 +80,7 @@ CLASS lcl_html_action_utils DEFINITION FINAL. CLASS-METHODS decode_bg_update IMPORTING iv_getdata TYPE clike - RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background. + RETURNING VALUE(rs_fields) TYPE lcl_persist_background=>ty_background. CLASS-METHODS stage_decode IMPORTING iv_getdata TYPE clike diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap index 188bf75e2..bae2b2983 100644 --- a/src/zabapgit_html_chunks.prog.abap +++ b/src/zabapgit_html_chunks.prog.abap @@ -50,7 +50,7 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. METHOD render_repo_top. DATA: lo_repo_online TYPE REF TO lcl_repo_online, - lo_pback TYPE REF TO lcl_persistence_background, + lo_pback TYPE REF TO lcl_persist_background, lv_hint TYPE string, lv_icon TYPE string. diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index 554c61023..c75f907b2 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -2,7 +2,7 @@ *& Include ZABAPGIT_HTTP *&---------------------------------------------------------------------* -CLASS lcl_proxy_authentication DEFINITION FINAL. +CLASS lcl_proxy_auth DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: @@ -18,7 +18,7 @@ CLASS lcl_proxy_authentication DEFINITION FINAL. ENDCLASS. -CLASS lcl_proxy_authentication IMPLEMENTATION. +CLASS lcl_proxy_auth IMPLEMENTATION. METHOD run. @@ -450,7 +450,7 @@ CLASS lcl_http IMPLEMENTATION. ENDIF. IF lo_settings->get_proxy_authentication( ) = abap_true. - lcl_proxy_authentication=>run( li_client ). + lcl_proxy_auth=>run( li_client ). ENDIF. CREATE OBJECT ro_client @@ -565,7 +565,7 @@ CLASS lcl_http IMPLEMENTATION. ENDIF. " Offer two factor authentication if it is available and required - lcl_2fa_authenticator_registry=>use_2fa_if_required( + lcl_2fa_auth_registry=>use_2fa_if_required( EXPORTING iv_url = iv_url CHANGING diff --git a/src/zabapgit_migrations.prog.abap b/src/zabapgit_migrations.prog.abap index 4a104cd34..fe556d302 100644 --- a/src/zabapgit_migrations.prog.abap +++ b/src/zabapgit_migrations.prog.abap @@ -21,7 +21,7 @@ CLASS lcl_migrations IMPLEMENTATION. METHOD run. " Migrate STDTEXT to TABLE - lcl_persistence_migrate=>run( ). + lcl_persist_migrate=>run( ). " Rebuild local file checksums rebuild_local_checksums_161112( ). diff --git a/src/zabapgit_object_acid.prog.abap b/src/zabapgit_object_acid.prog.abap index a63bd5a94..2e339f2b8 100644 --- a/src/zabapgit_object_acid.prog.abap +++ b/src/zabapgit_object_acid.prog.abap @@ -150,7 +150,7 @@ CLASS lcl_object_acid IMPLEMENTATION. ENDMETHOD. "lif_object~jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_acid IMPLEMENTATION diff --git a/src/zabapgit_object_auth.prog.abap b/src/zabapgit_object_auth.prog.abap index 34f3be155..fde332ce9 100644 --- a/src/zabapgit_object_auth.prog.abap +++ b/src/zabapgit_object_auth.prog.abap @@ -127,7 +127,7 @@ CLASS lcl_object_auth IMPLEMENTATION. ENDMETHOD. "lif_object~jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_auth IMPLEMENTATION diff --git a/src/zabapgit_object_clas.prog.abap b/src/zabapgit_object_clas.prog.abap index 225d96144..0f58fa619 100644 --- a/src/zabapgit_object_clas.prog.abap +++ b/src/zabapgit_object_clas.prog.abap @@ -26,7 +26,7 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program. METHODS deserialize_docu IMPORTING io_xml TYPE REF TO lcl_xml_input RAISING lcx_exception. - DATA mo_object_oriented_object_fct TYPE REF TO lif_object_oriented_object_fnc. + DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc. PRIVATE SECTION. DATA mv_skip_testclass TYPE abap_bool. @@ -389,36 +389,36 @@ CLASS lcl_object_clas IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. METHOD constructor. super->constructor( is_item = is_item iv_language = iv_language ). - mo_object_oriented_object_fct = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ). + mo_object_oriented_object_fct = lcl_oo_factory=>make( iv_object_type = ms_item-obj_type ). ENDMETHOD. ENDCLASS. "lcl_object_CLAS IMPLEMENTATION +CLASS lcl_oo_class DEFINITION INHERITING FROM lcl_oo_base. -CLASS lcl_object_oriented_class DEFINITION - INHERITING FROM lcl_object_oriented_base. PUBLIC SECTION. METHODS: - lif_object_oriented_object_fnc~create REDEFINITION, - lif_object_oriented_object_fnc~generate_locals REDEFINITION, - lif_object_oriented_object_fnc~insert_text_pool REDEFINITION, - lif_object_oriented_object_fnc~create_sotr REDEFINITION, - lif_object_oriented_object_fnc~get_includes REDEFINITION, - lif_object_oriented_object_fnc~get_class_properties REDEFINITION, - lif_object_oriented_object_fnc~read_text_pool REDEFINITION, - lif_object_oriented_object_fnc~read_sotr REDEFINITION, - lif_object_oriented_object_fnc~delete REDEFINITION. + lif_oo_object_fnc~create REDEFINITION, + lif_oo_object_fnc~generate_locals REDEFINITION, + lif_oo_object_fnc~insert_text_pool REDEFINITION, + lif_oo_object_fnc~create_sotr REDEFINITION, + lif_oo_object_fnc~get_includes REDEFINITION, + lif_oo_object_fnc~get_class_properties REDEFINITION, + lif_oo_object_fnc~read_text_pool REDEFINITION, + lif_oo_object_fnc~read_sotr REDEFINITION, + lif_oo_object_fnc~delete REDEFINITION. ENDCLASS. -CLASS lcl_object_oriented_class IMPLEMENTATION. - METHOD lif_object_oriented_object_fnc~create. + +CLASS lcl_oo_class IMPLEMENTATION. + METHOD lif_oo_object_fnc~create. CALL FUNCTION 'SEO_CLASS_CREATE_COMPLETE' EXPORTING devclass = iv_package @@ -437,7 +437,8 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. lcx_exception=>raise( 'error from SEO_CLASS_CREATE_COMPLETE' ). ENDIF. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~generate_locals. + + METHOD lif_oo_object_fnc~generate_locals. CALL FUNCTION 'SEO_CLASS_GENERATE_LOCALS' EXPORTING clskey = is_key @@ -456,7 +457,7 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. lcx_exception=>raise( 'error from generate_locals' ). ENDIF. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~insert_text_pool. + METHOD lif_oo_object_fnc~insert_text_pool. DATA: lv_cp TYPE program. lv_cp = cl_oo_classname_service=>get_classpool_name( iv_class_name ). @@ -473,7 +474,7 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. iv_name = lv_cp ). ENDMETHOD. - METHOD lif_object_oriented_object_fnc~create_sotr. + METHOD lif_oo_object_fnc~create_sotr. DATA: lt_sotr TYPE lif_defs=>ty_sotr_tt, lt_objects TYPE sotr_objects, ls_paket TYPE sotr_pack, @@ -533,7 +534,7 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. ENDLOOP. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_includes. + METHOD lif_oo_object_fnc~get_includes. * note: includes returned might not exist * method cl_oo_classname_service=>GET_ALL_CLASS_INCLUDES does not exist in 702 @@ -566,7 +567,7 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_class_properties. + METHOD lif_oo_object_fnc~get_class_properties. CALL FUNCTION 'SEO_CLIF_GET' EXPORTING cifkey = is_class_key @@ -585,7 +586,7 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. ENDIF. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_text_pool. + METHOD lif_oo_object_fnc~read_text_pool. DATA: lv_cp TYPE program. @@ -593,7 +594,7 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. READ TEXTPOOL lv_cp INTO rt_text_pool LANGUAGE iv_language. "#EC CI_READ_REP ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_sotr. + METHOD lif_oo_object_fnc~read_sotr. DATA: lv_concept TYPE sotr_head-concept, lt_seocompodf TYPE STANDARD TABLE OF seocompodf WITH DEFAULT KEY, ls_header TYPE sotr_head, @@ -652,7 +653,7 @@ CLASS lcl_object_oriented_class IMPLEMENTATION. ENDLOOP. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~delete. + METHOD lif_oo_object_fnc~delete. CALL FUNCTION 'SEO_CLASS_DELETE_COMPLETE' EXPORTING clskey = is_deletion_key diff --git a/src/zabapgit_object_dcls.prog.abap b/src/zabapgit_object_dcls.prog.abap index 1f2789c76..9fda374ee 100644 --- a/src/zabapgit_object_dcls.prog.abap +++ b/src/zabapgit_object_dcls.prog.abap @@ -183,7 +183,7 @@ CLASS lcl_object_dcls IMPLEMENTATION. ENDMETHOD. METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. diff --git a/src/zabapgit_object_ddls.prog.abap b/src/zabapgit_object_ddls.prog.abap index c5a665605..fcf760998 100644 --- a/src/zabapgit_object_ddls.prog.abap +++ b/src/zabapgit_object_ddls.prog.abap @@ -207,7 +207,7 @@ CLASS lcl_object_ddls IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. "lif_object~compare_to_remote_version METHOD open_adt_stob. diff --git a/src/zabapgit_object_doct.prog.abap b/src/zabapgit_object_doct.prog.abap index 250730cd6..6700ab155 100644 --- a/src/zabapgit_object_doct.prog.abap +++ b/src/zabapgit_object_doct.prog.abap @@ -152,7 +152,7 @@ CLASS lcl_object_doct IMPLEMENTATION. ENDMETHOD. "serialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_msag IMPLEMENTATION diff --git a/src/zabapgit_object_docv.prog.abap b/src/zabapgit_object_docv.prog.abap index ef3374284..da0aaaeea 100644 --- a/src/zabapgit_object_docv.prog.abap +++ b/src/zabapgit_object_docv.prog.abap @@ -156,7 +156,7 @@ CLASS lcl_object_docv IMPLEMENTATION. ENDMETHOD. "serialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_msag IMPLEMENTATION diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index 5fe7f932c..f3384b9ba 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -360,7 +360,7 @@ CLASS lcl_object_doma IMPLEMENTATION. ENDMETHOD. "deserialize_texts METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_doma IMPLEMENTATION diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index 9a56112b4..ab9e75ce8 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -328,7 +328,7 @@ CLASS lcl_object_dtel IMPLEMENTATION. ENDMETHOD. METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_dtel IMPLEMENTATION diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index f89b040b7..30debffb4 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -23,7 +23,7 @@ ENDINTERFACE. "lif_object_enho *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_object_enho_wdyconf DEFINITION. +CLASS lcl_object_enho_wdyc DEFINITION. PUBLIC SECTION. METHODS: constructor @@ -43,7 +43,7 @@ ENDCLASS. "lcl_object_enho_wdyconf DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_object_enho_wdyconf IMPLEMENTATION. +CLASS lcl_object_enho_wdyc IMPLEMENTATION. METHOD constructor. ms_item = is_item. @@ -633,7 +633,7 @@ ENDCLASS. "lcl_object_enho_hook IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_object_enho_interface DEFINITION. +CLASS lcl_object_enho_intf DEFINITION. PUBLIC SECTION. METHODS: @@ -654,7 +654,7 @@ ENDCLASS. "lcl_object_enho_interface DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_object_enho_interface IMPLEMENTATION. +CLASS lcl_object_enho_intf IMPLEMENTATION. METHOD constructor. ms_item = is_item. @@ -979,12 +979,12 @@ CLASS lcl_object_enho IMPLEMENTATION. is_item = ms_item io_files = mo_files. WHEN cl_enh_tool_intf=>tooltype. - CREATE OBJECT ri_enho TYPE lcl_object_enho_interface + CREATE OBJECT ri_enho TYPE lcl_object_enho_intf EXPORTING is_item = ms_item io_files = mo_files. WHEN cl_wdr_cfg_enhancement=>tooltype. - CREATE OBJECT ri_enho TYPE lcl_object_enho_wdyconf + CREATE OBJECT ri_enho TYPE lcl_object_enho_wdyc EXPORTING is_item = ms_item io_files = mo_files. @@ -1051,7 +1051,7 @@ CLASS lcl_object_enho IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. "lif_object~compare_to_remote_version ENDCLASS. "lcl_object_enho IMPLEMENTATION diff --git a/src/zabapgit_object_enhs.prog.abap b/src/zabapgit_object_enhs.prog.abap index 623d4dbbd..c15baca28 100644 --- a/src/zabapgit_object_enhs.prog.abap +++ b/src/zabapgit_object_enhs.prog.abap @@ -212,7 +212,7 @@ CLASS lcl_object_enhs IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_enhs diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap index 0daf862d9..e3425e9d8 100644 --- a/src/zabapgit_object_enqu.prog.abap +++ b/src/zabapgit_object_enqu.prog.abap @@ -184,7 +184,7 @@ CLASS lcl_object_enqu IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_enqu IMPLEMENTATION diff --git a/src/zabapgit_object_ensc.prog.abap b/src/zabapgit_object_ensc.prog.abap index c7bdc0a8b..5b5ba51c5 100644 --- a/src/zabapgit_object_ensc.prog.abap +++ b/src/zabapgit_object_ensc.prog.abap @@ -191,7 +191,7 @@ CLASS lcl_object_ensc IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_ensc diff --git a/src/zabapgit_object_form.prog.abap b/src/zabapgit_object_form.prog.abap index 248ff1f81..63b5a6c32 100644 --- a/src/zabapgit_object_form.prog.abap +++ b/src/zabapgit_object_form.prog.abap @@ -260,7 +260,7 @@ CLASS lcl_object_form IMPLEMENTATION. ENDMETHOD. METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. METHOD _build_extra_from_header. diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 96d898321..85396b89a 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -769,7 +769,7 @@ CLASS lcl_object_fugr IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_fugr IMPLEMENTATION diff --git a/src/zabapgit_object_iarp.prog.abap b/src/zabapgit_object_iarp.prog.abap index ecf2118d5..ff3cd15b0 100644 --- a/src/zabapgit_object_iarp.prog.abap +++ b/src/zabapgit_object_iarp.prog.abap @@ -189,7 +189,7 @@ CLASS lcl_object_iarp IMPLEMENTATION. ENDMETHOD. "lif_object~jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_iarp IMPLEMENTATION diff --git a/src/zabapgit_object_iasp.prog.abap b/src/zabapgit_object_iasp.prog.abap index ae8338707..74c24d2a1 100644 --- a/src/zabapgit_object_iasp.prog.abap +++ b/src/zabapgit_object_iasp.prog.abap @@ -189,7 +189,7 @@ CLASS lcl_object_iasp IMPLEMENTATION. ENDMETHOD. "lif_object~jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_iasp IMPLEMENTATION diff --git a/src/zabapgit_object_iatu.prog.abap b/src/zabapgit_object_iatu.prog.abap index 57321b2cb..e589eaff8 100644 --- a/src/zabapgit_object_iatu.prog.abap +++ b/src/zabapgit_object_iatu.prog.abap @@ -206,7 +206,7 @@ CLASS lcl_object_iatu IMPLEMENTATION. ENDMETHOD. "lif_object~jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_iatu IMPLEMENTATION diff --git a/src/zabapgit_object_intf.prog.abap b/src/zabapgit_object_intf.prog.abap index 7ec595a45..2cfd0ec6f 100644 --- a/src/zabapgit_object_intf.prog.abap +++ b/src/zabapgit_object_intf.prog.abap @@ -26,7 +26,7 @@ CLASS lcl_object_intf DEFINITION FINAL INHERITING FROM lcl_objects_program. RAISING lcx_exception. PRIVATE SECTION. - DATA mo_object_oriented_object_fct TYPE REF TO lif_object_oriented_object_fnc. + DATA mo_object_oriented_object_fct TYPE REF TO lif_oo_object_fnc. METHODS serialize_xml IMPORTING io_xml TYPE REF TO lcl_xml_output @@ -40,23 +40,25 @@ CLASS lcl_object_intf IMPLEMENTATION. super->constructor( is_item = is_item iv_language = iv_language ). - mo_object_oriented_object_fct = lcl_object_oriented_factory=>make( iv_object_type = ms_item-obj_type ). + mo_object_oriented_object_fct = lcl_oo_factory=>make( iv_object_type = ms_item-obj_type ). ENDMETHOD. + METHOD lif_object~deserialize. deserialize_abap( io_xml = io_xml iv_package = iv_package ). deserialize_docu( io_xml ). ENDMETHOD. + METHOD deserialize_abap. DATA: ls_vseointerf TYPE vseointerf, lt_source TYPE seop_source_string, lt_descriptions TYPE lif_defs=>ty_seocompotx_tt, ls_clskey TYPE seoclskey. + + ls_clskey-clsname = ms_item-obj_name. - lt_source = mo_files->read_abap( ). - io_xml->read( EXPORTING iv_name = 'VSEOINTERF' CHANGING cg_data = ls_vseointerf ). @@ -212,7 +214,7 @@ CLASS lcl_object_intf IMPLEMENTATION. ENDMETHOD. METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. METHOD lif_object~delete. @@ -259,18 +261,18 @@ CLASS lcl_object_intf IMPLEMENTATION. ENDCLASS. -CLASS lcl_object_oriented_interface DEFINITION - INHERITING FROM lcl_object_oriented_base. +CLASS lcl_oo_interface DEFINITION + INHERITING FROM lcl_oo_base. PUBLIC SECTION. METHODS: - lif_object_oriented_object_fnc~create REDEFINITION, - lif_object_oriented_object_fnc~get_includes REDEFINITION, - lif_object_oriented_object_fnc~get_interface_properties REDEFINITION, - lif_object_oriented_object_fnc~delete REDEFINITION. + lif_oo_object_fnc~create REDEFINITION, + lif_oo_object_fnc~get_includes REDEFINITION, + lif_oo_object_fnc~get_interface_properties REDEFINITION, + lif_oo_object_fnc~delete REDEFINITION. ENDCLASS. -CLASS lcl_object_oriented_interface IMPLEMENTATION. - METHOD lif_object_oriented_object_fnc~create. +CLASS lcl_oo_interface IMPLEMENTATION. + METHOD lif_oo_object_fnc~create. CALL FUNCTION 'SEO_INTERFACE_CREATE_COMPLETE' EXPORTING devclass = iv_package @@ -289,13 +291,14 @@ CLASS lcl_object_oriented_interface IMPLEMENTATION. lcx_exception=>raise( 'Error from SEO_INTERFACE_CREATE_COMPLETE' ). ENDIF. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_includes. + + METHOD lif_oo_object_fnc~get_includes. DATA lv_interface_name TYPE seoclsname. lv_interface_name = iv_object_name. APPEND cl_oo_classname_service=>get_interfacepool_name( lv_interface_name ) TO rt_includes. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_interface_properties. + METHOD lif_oo_object_fnc~get_interface_properties. CALL FUNCTION 'SEO_CLIF_GET' EXPORTING cifkey = is_interface_key @@ -314,7 +317,7 @@ CLASS lcl_object_oriented_interface IMPLEMENTATION. ENDIF. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~delete. + METHOD lif_oo_object_fnc~delete. CALL FUNCTION 'SEO_INTERFACE_DELETE_COMPLETE' EXPORTING intkey = is_deletion_key diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap index af778b680..e14a7f751 100644 --- a/src/zabapgit_object_msag.prog.abap +++ b/src/zabapgit_object_msag.prog.abap @@ -299,7 +299,7 @@ CLASS lcl_object_msag IMPLEMENTATION. ENDMETHOD. METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_msag IMPLEMENTATION diff --git a/src/zabapgit_object_nrob.prog.abap b/src/zabapgit_object_nrob.prog.abap index 489db90f5..1e4fa6e63 100644 --- a/src/zabapgit_object_nrob.prog.abap +++ b/src/zabapgit_object_nrob.prog.abap @@ -255,7 +255,7 @@ CLASS lcl_object_nrob IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_nrob IMPLEMENTATION diff --git a/src/zabapgit_object_oo_factory.prog.abap b/src/zabapgit_object_oo_factory.prog.abap index 06c7f5444..b825492ea 100644 --- a/src/zabapgit_object_oo_factory.prog.abap +++ b/src/zabapgit_object_oo_factory.prog.abap @@ -1,16 +1,16 @@ *&---------------------------------------------------------------------* *& Include zabapgit_object_oo_factory *&---------------------------------------------------------------------* -CLASS lcl_object_oriented_factory IMPLEMENTATION. +CLASS lcl_oo_factory IMPLEMENTATION. METHOD make. IF go_object_oriented_object IS BOUND. ro_object_oriented_object = go_object_oriented_object. RETURN. ENDIF. IF iv_object_type = 'CLAS'. - CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_class. + CREATE OBJECT ro_object_oriented_object TYPE lcl_oo_class. ELSEIF iv_object_type = 'INTF'. - CREATE OBJECT ro_object_oriented_object TYPE lcl_object_oriented_interface. + CREATE OBJECT ro_object_oriented_object TYPE lcl_oo_interface. ENDIF. ENDMETHOD. ENDCLASS. @@ -20,11 +20,11 @@ CLASS ltcl_oo_factory_injector DEFINITION FOR TESTING. CLASS-METHODS: inject IMPORTING - io_object_oriented_object TYPE REF TO lif_object_oriented_object_fnc. + io_object_oriented_object TYPE REF TO lif_oo_object_fnc. ENDCLASS. CLASS ltcl_oo_factory_injector IMPLEMENTATION. METHOD inject. - lcl_object_oriented_factory=>go_object_oriented_object = io_object_oriented_object. + lcl_oo_factory=>go_object_oriented_object = io_object_oriented_object. ENDMETHOD. ENDCLASS. diff --git a/src/zabapgit_object_oo_functions.prog.abap b/src/zabapgit_object_oo_functions.prog.abap index 08157f5b8..fe6c1da0b 100644 --- a/src/zabapgit_object_oo_functions.prog.abap +++ b/src/zabapgit_object_oo_functions.prog.abap @@ -1,6 +1,6 @@ "This interface contains SAP object oriented functions that can't be put under test "(i.e. creating a Class in the system) -INTERFACE lif_object_oriented_object_fnc. +INTERFACE lif_oo_object_fnc. TYPES: BEGIN OF ty_includes, programm TYPE programm, END OF ty_includes, @@ -128,7 +128,7 @@ INTERFACE lif_object_oriented_object_fnc. lcx_exception. ENDINTERFACE. -CLASS lcl_oo_object_serializer DEFINITION. +CLASS lcl_oo_serializer DEFINITION. PUBLIC SECTION. METHODS: @@ -187,7 +187,7 @@ CLASS lcl_oo_object_serializer DEFINITION. CHANGING ct_source TYPE lif_defs=>ty_string_tt. ENDCLASS. -CLASS lcl_oo_object_serializer IMPLEMENTATION. +CLASS lcl_oo_serializer IMPLEMENTATION. METHOD serialize_abap_clif_source. TRY. rt_source = serialize_abap_new( is_class_key ). @@ -195,6 +195,7 @@ CLASS lcl_oo_object_serializer IMPLEMENTATION. rt_source = serialize_abap_old( is_class_key ). ENDTRY. ENDMETHOD. + METHOD serialize_abap_old. * for old ABAP AS versions DATA: lo_source TYPE REF TO cl_oo_source. @@ -383,11 +384,13 @@ CLASS lcl_oo_object_serializer IMPLEMENTATION. ENDCLASS. -CLASS lcl_object_oriented_base DEFINITION ABSTRACT. +CLASS lcl_oo_base DEFINITION ABSTRACT. PUBLIC SECTION. - INTERFACES: lif_object_oriented_object_fnc. + INTERFACES: lif_oo_object_fnc. + PRIVATE SECTION. DATA mv_skip_test_classes TYPE abap_bool. + METHODS deserialize_abap_source_old IMPORTING is_clskey TYPE seoclskey it_source TYPE lif_defs=>ty_string_tt @@ -400,13 +403,13 @@ CLASS lcl_object_oriented_base DEFINITION ABSTRACT. cx_sy_dyn_call_error. ENDCLASS. -CLASS lcl_object_oriented_base IMPLEMENTATION. +CLASS lcl_oo_base IMPLEMENTATION. - METHOD lif_object_oriented_object_fnc~create. + METHOD lif_oo_object_fnc~create. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~deserialize_source. + METHOD lif_oo_object_fnc~deserialize_source. TRY. deserialize_abap_source_new( is_clskey = is_key @@ -418,7 +421,7 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. ENDTRY. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~generate_locals. + METHOD lif_oo_object_fnc~generate_locals. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. @@ -479,24 +482,25 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. CALL METHOD lo_source->('IF_OO_CLIF_SOURCE~UNLOCK'). ENDMETHOD. - METHOD lif_object_oriented_object_fnc~add_to_activation_list. + + METHOD lif_oo_object_fnc~add_to_activation_list. lcl_objects_activation=>add_item( is_item ). ENDMETHOD. - METHOD lif_object_oriented_object_fnc~update_descriptions. + METHOD lif_oo_object_fnc~update_descriptions. DELETE FROM seocompotx WHERE clsname = is_key-clsname. "#EC CI_SUBRC INSERT seocompotx FROM TABLE it_descriptions. "#EC CI_SUBRC ENDMETHOD. - METHOD lif_object_oriented_object_fnc~insert_text_pool. + METHOD lif_oo_object_fnc~insert_text_pool. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~create_sotr. + METHOD lif_oo_object_fnc~create_sotr. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~create_documentation. + METHOD lif_oo_object_fnc~create_documentation. CALL FUNCTION 'DOCU_UPD' EXPORTING id = 'CL' @@ -512,11 +516,11 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. ENDIF. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_includes. + METHOD lif_oo_object_fnc~get_includes. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~exists. + METHOD lif_oo_object_fnc~exists. CALL FUNCTION 'SEO_CLASS_EXISTENCE_CHECK' EXPORTING clskey = iv_object_name @@ -530,8 +534,8 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. rv_exists = boolc( sy-subrc <> 2 ). ENDMETHOD. - METHOD lif_object_oriented_object_fnc~serialize_abap. - DATA lo_oo_serializer TYPE REF TO lcl_oo_object_serializer. + METHOD lif_oo_object_fnc~serialize_abap. + DATA lo_oo_serializer TYPE REF TO lcl_oo_serializer. CREATE OBJECT lo_oo_serializer. CASE iv_type. WHEN seop_ext_class_locals_def. @@ -548,31 +552,30 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. ENDCASE. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_skip_test_classes. + METHOD lif_oo_object_fnc~get_skip_test_classes. rv_skip = mv_skip_test_classes. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_class_properties. + METHOD lif_oo_object_fnc~get_class_properties. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_interface_properties. + METHOD lif_oo_object_fnc~get_interface_properties. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_text_pool. + METHOD lif_oo_object_fnc~read_text_pool. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_sotr. + METHOD lif_oo_object_fnc~read_sotr. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_documentation. - DATA: - lv_state TYPE dokstate, - lv_object TYPE dokhl-object, - lt_lines TYPE tlinetab. + METHOD lif_oo_object_fnc~read_documentation. + DATA: lv_state TYPE dokstate, + lv_object TYPE dokhl-object, + lt_lines TYPE tlinetab. lv_object = iv_class_name. @@ -598,13 +601,13 @@ CLASS lcl_object_oriented_base IMPLEMENTATION. ENDIF. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_descriptions. + METHOD lif_oo_object_fnc~read_descriptions. SELECT * FROM seocompotx INTO TABLE rt_descriptions WHERE clsname = iv_obejct_name. "#EC CI_SUBRC DELETE rt_descriptions WHERE descript IS INITIAL. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~delete. + METHOD lif_oo_object_fnc~delete. ASSERT 0 = 1. "Subclass responsibility ENDMETHOD. @@ -613,7 +616,7 @@ ENDCLASS. "Backdoor injection for test purposes CLASS ltcl_oo_factory_injector DEFINITION DEFERRED. -CLASS lcl_object_oriented_factory DEFINITION +CLASS lcl_oo_factory DEFINITION FRIENDS ltcl_oo_factory_injector. PUBLIC SECTION. @@ -622,10 +625,10 @@ CLASS lcl_object_oriented_factory DEFINITION IMPORTING iv_object_type TYPE tadir-object RETURNING - VALUE(ro_object_oriented_object) TYPE REF TO lif_object_oriented_object_fnc. + VALUE(ro_object_oriented_object) TYPE REF TO lif_oo_object_fnc. PRIVATE SECTION. CLASS-DATA: - go_object_oriented_object TYPE REF TO lif_object_oriented_object_fnc. + go_object_oriented_object TYPE REF TO lif_oo_object_fnc. ENDCLASS. "lcl_object_oriented_factory implementation is in include ZABAPGIT_OBJECT_OO_FACTORY. "Reason: In this way, clas and intf specific OO functions implementations can be done diff --git a/src/zabapgit_object_para.prog.abap b/src/zabapgit_object_para.prog.abap index c3ad3e5b8..be4d3613b 100644 --- a/src/zabapgit_object_para.prog.abap +++ b/src/zabapgit_object_para.prog.abap @@ -145,7 +145,7 @@ CLASS lcl_object_para IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_para IMPLEMENTATION diff --git a/src/zabapgit_object_pinf.prog.abap b/src/zabapgit_object_pinf.prog.abap index 887be21e3..810d7696e 100644 --- a/src/zabapgit_object_pinf.prog.abap +++ b/src/zabapgit_object_pinf.prog.abap @@ -356,7 +356,7 @@ CLASS lcl_object_pinf IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_PINF IMPLEMENTATION diff --git a/src/zabapgit_object_prog.prog.abap b/src/zabapgit_object_prog.prog.abap index c76690046..76867444d 100644 --- a/src/zabapgit_object_prog.prog.abap +++ b/src/zabapgit_object_prog.prog.abap @@ -158,7 +158,7 @@ CLASS lcl_object_prog IMPLEMENTATION. ENDMETHOD. "lif_serialize~deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. "lif_object~compare_to_remote_version METHOD serialize_texts. diff --git a/src/zabapgit_object_samc.prog.abap b/src/zabapgit_object_samc.prog.abap index 9e21027c3..166d48a1c 100644 --- a/src/zabapgit_object_samc.prog.abap +++ b/src/zabapgit_object_samc.prog.abap @@ -256,9 +256,7 @@ CLASS lcl_object_samc IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. - + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. METHOD get_data_object. diff --git a/src/zabapgit_object_sapc.prog.abap b/src/zabapgit_object_sapc.prog.abap index fce33c9ef..f05010fa7 100644 --- a/src/zabapgit_object_sapc.prog.abap +++ b/src/zabapgit_object_sapc.prog.abap @@ -256,9 +256,7 @@ CLASS lcl_object_sapc IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. - + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. METHOD get_data_object. diff --git a/src/zabapgit_object_sfbf.prog.abap b/src/zabapgit_object_sfbf.prog.abap index 83a73b3ad..c9b1147d4 100644 --- a/src/zabapgit_object_sfbf.prog.abap +++ b/src/zabapgit_object_sfbf.prog.abap @@ -249,7 +249,7 @@ CLASS lcl_object_sfbf IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_SFBF IMPLEMENTATION diff --git a/src/zabapgit_object_sfbs.prog.abap b/src/zabapgit_object_sfbs.prog.abap index bef654d9c..10d8a8737 100644 --- a/src/zabapgit_object_sfbs.prog.abap +++ b/src/zabapgit_object_sfbs.prog.abap @@ -223,7 +223,7 @@ CLASS lcl_object_sfbs IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_SFBS IMPLEMENTATION diff --git a/src/zabapgit_object_sfpf.prog.abap b/src/zabapgit_object_sfpf.prog.abap index 1210ece1d..b8da5dc5b 100644 --- a/src/zabapgit_object_sfpf.prog.abap +++ b/src/zabapgit_object_sfpf.prog.abap @@ -216,7 +216,7 @@ CLASS lcl_object_sfpf IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_doma IMPLEMENTATION diff --git a/src/zabapgit_object_sfpi.prog.abap b/src/zabapgit_object_sfpi.prog.abap index 1e9a75873..9ba05f810 100644 --- a/src/zabapgit_object_sfpi.prog.abap +++ b/src/zabapgit_object_sfpi.prog.abap @@ -162,7 +162,7 @@ CLASS lcl_object_sfpi IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_doma IMPLEMENTATION diff --git a/src/zabapgit_object_sfsw.prog.abap b/src/zabapgit_object_sfsw.prog.abap index 0892f359c..b6ca85aef 100644 --- a/src/zabapgit_object_sfsw.prog.abap +++ b/src/zabapgit_object_sfsw.prog.abap @@ -215,7 +215,7 @@ CLASS lcl_object_sfsw IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_sfsw IMPLEMENTATION diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap index 35fb97238..8e9ffbdec 100644 --- a/src/zabapgit_object_shi3.prog.abap +++ b/src/zabapgit_object_shi3.prog.abap @@ -336,7 +336,7 @@ CLASS lcl_object_shi3 IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_shi3 IMPLEMENTATION diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap index 604d6f897..307980a74 100644 --- a/src/zabapgit_object_shlp.prog.abap +++ b/src/zabapgit_object_shlp.prog.abap @@ -205,7 +205,7 @@ CLASS lcl_object_shlp IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_shlp IMPLEMENTATION diff --git a/src/zabapgit_object_sicf.prog.abap b/src/zabapgit_object_sicf.prog.abap index 7eb829388..8fa11f59f 100644 --- a/src/zabapgit_object_sicf.prog.abap +++ b/src/zabapgit_object_sicf.prog.abap @@ -423,7 +423,7 @@ CLASS lcl_object_sicf IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_sicf IMPLEMENTATION diff --git a/src/zabapgit_object_smim.prog.abap b/src/zabapgit_object_smim.prog.abap index 92074dcca..4f13dda9e 100644 --- a/src/zabapgit_object_smim.prog.abap +++ b/src/zabapgit_object_smim.prog.abap @@ -332,7 +332,7 @@ CLASS lcl_object_smim IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_smim IMPLEMENTATION diff --git a/src/zabapgit_object_splo.prog.abap b/src/zabapgit_object_splo.prog.abap index a50b721b5..af0407f6c 100644 --- a/src/zabapgit_object_splo.prog.abap +++ b/src/zabapgit_object_splo.prog.abap @@ -120,7 +120,7 @@ CLASS lcl_object_splo IMPLEMENTATION. ENDMETHOD. "lif_object~jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_splo IMPLEMENTATION diff --git a/src/zabapgit_object_ssfo.prog.abap b/src/zabapgit_object_ssfo.prog.abap index 671881b61..dfdd4aa39 100644 --- a/src/zabapgit_object_ssfo.prog.abap +++ b/src/zabapgit_object_ssfo.prog.abap @@ -240,7 +240,7 @@ CLASS lcl_object_ssfo IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_ssfo IMPLEMENTATION diff --git a/src/zabapgit_object_ssst.prog.abap b/src/zabapgit_object_ssst.prog.abap index def3c24af..70bb33c9e 100644 --- a/src/zabapgit_object_ssst.prog.abap +++ b/src/zabapgit_object_ssst.prog.abap @@ -204,7 +204,7 @@ CLASS lcl_object_ssst IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_ssst IMPLEMENTATION diff --git a/src/zabapgit_object_styl.prog.abap b/src/zabapgit_object_styl.prog.abap index dfc70e266..3e6537cb8 100644 --- a/src/zabapgit_object_styl.prog.abap +++ b/src/zabapgit_object_styl.prog.abap @@ -157,7 +157,7 @@ CLASS lcl_object_styl IMPLEMENTATION. ENDMETHOD. "serialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_styl IMPLEMENTATION diff --git a/src/zabapgit_object_susc.prog.abap b/src/zabapgit_object_susc.prog.abap index 3c6b3d706..e29eed257 100644 --- a/src/zabapgit_object_susc.prog.abap +++ b/src/zabapgit_object_susc.prog.abap @@ -122,7 +122,7 @@ CLASS lcl_object_susc IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_susc IMPLEMENTATION diff --git a/src/zabapgit_object_suso.prog.abap b/src/zabapgit_object_suso.prog.abap index c17f5251d..eeaa5d49f 100644 --- a/src/zabapgit_object_suso.prog.abap +++ b/src/zabapgit_object_suso.prog.abap @@ -172,7 +172,7 @@ CLASS lcl_object_suso IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_suso IMPLEMENTATION diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 5fc1ca688..d1cff6ed3 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -426,7 +426,7 @@ CLASS lcl_object_tabl IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - DATA: lo_table_validation TYPE REF TO lcl_object_tabl_validation, + DATA: lo_table_validation TYPE REF TO lcl_object_tabl_valid, lo_local_version_output TYPE REF TO lcl_xml_output, lo_local_version_input TYPE REF TO lcl_xml_input, lv_validation_text TYPE string. @@ -445,11 +445,11 @@ CLASS lcl_object_tabl IMPLEMENTATION. io_local_version = lo_local_version_input ). IF lv_validation_text IS NOT INITIAL. lv_validation_text = |Database Table { ms_item-obj_name }: { lv_validation_text }|. - CREATE OBJECT ro_comparison_result TYPE lcl_tabl_validation_dialog + CREATE OBJECT ro_comparison_result TYPE lcl_tabl_valid_dialog EXPORTING iv_message = lv_validation_text. ELSE. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDIF. ENDMETHOD. diff --git a/src/zabapgit_object_tabl_valid.prog.abap b/src/zabapgit_object_tabl_valid.prog.abap index 6c33de4a5..19d7887f3 100644 --- a/src/zabapgit_object_tabl_valid.prog.abap +++ b/src/zabapgit_object_tabl_valid.prog.abap @@ -2,7 +2,7 @@ *& Include zabapgit_object_tabl_valid *&---------------------------------------------------------------------* -CLASS lcl_object_tabl_validation DEFINITION FINAL. +CLASS lcl_object_tabl_valid DEFINITION FINAL. PUBLIC SECTION. METHODS validate IMPORTING @@ -14,20 +14,20 @@ CLASS lcl_object_tabl_validation DEFINITION FINAL. lcx_exception. ENDCLASS. -CLASS lcl_tabl_validation_dialog DEFINITION FINAL. +CLASS lcl_tabl_valid_dialog DEFINITION FINAL. PUBLIC SECTION. METHODS: constructor IMPORTING iv_message TYPE string. - INTERFACES: lif_object_comparison_result. + INTERFACES: lif_comparison_result. + PRIVATE SECTION. DATA mv_message TYPE string. DATA mv_halt TYPE string. - ENDCLASS. -CLASS lcl_object_tabl_validation IMPLEMENTATION. +CLASS lcl_object_tabl_valid IMPLEMENTATION. METHOD validate. DATA: lt_previous_table_fields TYPE TABLE OF dd03p, @@ -60,15 +60,16 @@ CLASS lcl_object_tabl_validation IMPLEMENTATION. ENDCLASS. -CLASS lcl_tabl_validation_dialog IMPLEMENTATION. +CLASS lcl_tabl_valid_dialog IMPLEMENTATION. METHOD constructor. mv_message = iv_message. ENDMETHOD. - METHOD lif_object_comparison_result~is_result_complete_halt. + + METHOD lif_comparison_result~is_result_complete_halt. rv_response = mv_halt. ENDMETHOD. - METHOD lif_object_comparison_result~show_confirmation_dialog. + METHOD lif_comparison_result~show_confirmation_dialog. DATA lv_answer TYPE string. TRY. lv_answer = lcl_popups=>popup_to_confirm( @@ -102,7 +103,8 @@ CLASS lct_table_validation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION S create_xmls RAISING lcx_exception. - DATA: mo_table_validator TYPE REF TO lcl_object_tabl_validation, + + DATA: mo_table_validator TYPE REF TO lcl_object_tabl_valid, mo_previous_version_out_xml TYPE REF TO lcl_xml_output, mo_previous_version_input_xml TYPE REF TO lcl_xml_input, mo_current_version_out_xml TYPE REF TO lcl_xml_output, diff --git a/src/zabapgit_object_tobj.prog.abap b/src/zabapgit_object_tobj.prog.abap index 63e83801b..3e1f83f49 100644 --- a/src/zabapgit_object_tobj.prog.abap +++ b/src/zabapgit_object_tobj.prog.abap @@ -195,7 +195,7 @@ CLASS lcl_object_tobj IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_tobj IMPLEMENTATION diff --git a/src/zabapgit_object_tran.prog.abap b/src/zabapgit_object_tran.prog.abap index bde7cd698..6e742dd2d 100644 --- a/src/zabapgit_object_tran.prog.abap +++ b/src/zabapgit_object_tran.prog.abap @@ -430,7 +430,7 @@ CLASS lcl_object_tran IMPLEMENTATION. ENDMETHOD. "serialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. METHOD serialize_texts. diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap index a621527ca..659af989c 100644 --- a/src/zabapgit_object_ttyp.prog.abap +++ b/src/zabapgit_object_ttyp.prog.abap @@ -184,7 +184,7 @@ CLASS lcl_object_ttyp IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_ttyp IMPLEMENTATION diff --git a/src/zabapgit_object_type.prog.abap b/src/zabapgit_object_type.prog.abap index 1908b94e0..562b057d7 100644 --- a/src/zabapgit_object_type.prog.abap +++ b/src/zabapgit_object_type.prog.abap @@ -199,14 +199,12 @@ CLASS lcl_object_type IMPLEMENTATION. ENDMETHOD. "delete METHOD lif_object~jump. - jump_se11( iv_radio = 'RSRD1-TYMA' iv_field = 'RSRD1-TYMA_VAL' ). - ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_type IMPLEMENTATION diff --git a/src/zabapgit_object_vcls.prog.abap b/src/zabapgit_object_vcls.prog.abap index 4b4952620..b6afa441b 100644 --- a/src/zabapgit_object_vcls.prog.abap +++ b/src/zabapgit_object_vcls.prog.abap @@ -196,7 +196,7 @@ CLASS lcl_object_vcls IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_vcls IMPLEMENTATION diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index 36a4fd7ed..c540e7e2f 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -261,7 +261,7 @@ CLASS lcl_object_view IMPLEMENTATION. ENDMETHOD. "deserialize METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. "lif_object~compare_to_remote_version ENDCLASS. "lcl_object_view IMPLEMENTATION diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index bd54a7193..f5a76ef68 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -434,7 +434,7 @@ CLASS lcl_object_w3super IMPLEMENTATION. ENDMETHOD. " find_param. METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION diff --git a/src/zabapgit_object_wapa.prog.abap b/src/zabapgit_object_wapa.prog.abap index 83d21d0e5..303ff239d 100644 --- a/src/zabapgit_object_wapa.prog.abap +++ b/src/zabapgit_object_wapa.prog.abap @@ -422,7 +422,7 @@ CLASS lcl_object_wapa IMPLEMENTATION. ENDMETHOD. METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_tran IMPLEMENTATION diff --git a/src/zabapgit_object_wdya.prog.abap b/src/zabapgit_object_wdya.prog.abap index 33dec6469..867396b44 100644 --- a/src/zabapgit_object_wdya.prog.abap +++ b/src/zabapgit_object_wdya.prog.abap @@ -236,7 +236,7 @@ CLASS lcl_object_wdya IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_wdya IMPLEMENTATION diff --git a/src/zabapgit_object_wdyn.prog.abap b/src/zabapgit_object_wdyn.prog.abap index 363aed4b0..ad1cfcf86 100644 --- a/src/zabapgit_object_wdyn.prog.abap +++ b/src/zabapgit_object_wdyn.prog.abap @@ -809,7 +809,7 @@ CLASS lcl_object_wdyn IMPLEMENTATION. ENDMETHOD. "jump METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. "lif_object~compare_to_remote_version ENDCLASS. "lcl_object_wdyn IMPLEMENTATION diff --git a/src/zabapgit_object_webi.prog.abap b/src/zabapgit_object_webi.prog.abap index d2c5a9110..65189e3c9 100644 --- a/src/zabapgit_object_webi.prog.abap +++ b/src/zabapgit_object_webi.prog.abap @@ -444,7 +444,7 @@ CLASS lcl_object_webi IMPLEMENTATION. ENDMETHOD. "lif_object~get_metadata METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_webi IMPLEMENTATION diff --git a/src/zabapgit_object_xslt.prog.abap b/src/zabapgit_object_xslt.prog.abap index 5037bb3d7..21cddb4f2 100644 --- a/src/zabapgit_object_xslt.prog.abap +++ b/src/zabapgit_object_xslt.prog.abap @@ -199,7 +199,7 @@ CLASS lcl_object_xslt IMPLEMENTATION. ENDMETHOD. "lif_object~get_metadata METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_object_xslt IMPLEMENTATION diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 3df50888b..da243eb83 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -234,26 +234,26 @@ CLASS lcl_objects_files DEFINITION. ENDCLASS. "lcl_objects_files DEFINITION -INTERFACE lif_object_comparison_result. +INTERFACE lif_comparison_result. METHODS: show_confirmation_dialog, is_result_complete_halt RETURNING VALUE(rv_response) TYPE abap_bool. - ENDINTERFACE. "Null Object Pattern -CLASS lcl_null_comparison_result DEFINITION FINAL. +CLASS lcl_comparison_null DEFINITION FINAL. PUBLIC SECTION. - INTERFACES lif_object_comparison_result. + INTERFACES lif_comparison_result. ENDCLASS. -CLASS lcl_null_comparison_result IMPLEMENTATION. - METHOD lif_object_comparison_result~is_result_complete_halt. +CLASS lcl_comparison_null IMPLEMENTATION. + + METHOD lif_comparison_result~is_result_complete_halt. rv_response = abap_false. ENDMETHOD. - METHOD lif_object_comparison_result~show_confirmation_dialog. + METHOD lif_comparison_result~show_confirmation_dialog. RETURN. ENDMETHOD. @@ -293,7 +293,7 @@ INTERFACE lif_object. METHODS: compare_to_remote_version IMPORTING io_remote_version_xml TYPE REF TO lcl_xml_input - RETURNING VALUE(ro_comparison_result) TYPE REF TO lif_object_comparison_result + RETURNING VALUE(ro_comparison_result) TYPE REF TO lif_comparison_result RAISING lcx_exception. DATA: mo_files TYPE REF TO lcl_objects_files. @@ -785,7 +785,7 @@ CLASS lcl_objects_bridge IMPLEMENTATION. ENDMETHOD. "class_constructor METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + CREATE OBJECT ro_comparison_result TYPE lcl_comparison_null. ENDMETHOD. ENDCLASS. "lcl_objects_bridge IMPLEMENTATION diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index cd3e342f1..2fba5ea1e 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -702,7 +702,7 @@ CLASS lcl_objects IMPLEMENTATION. DATA: ls_remote_file TYPE lif_defs=>ty_file, lo_remote_version TYPE REF TO lcl_xml_input, - lo_comparison_result TYPE REF TO lif_object_comparison_result. + lo_comparison_result TYPE REF TO lif_comparison_result. IF is_result-filename CS '.XML'. diff --git a/src/zabapgit_page_background.prog.abap b/src/zabapgit_page_background.prog.abap index e1d392b0c..de86b3422 100644 --- a/src/zabapgit_page_background.prog.abap +++ b/src/zabapgit_page_background.prog.abap @@ -2,7 +2,7 @@ *& Include ZABAPGIT_PAGE_BACKGROUND *&---------------------------------------------------------------------* -CLASS lcl_gui_page_background_run DEFINITION FINAL +CLASS lcl_gui_page_bkg_run DEFINITION FINAL INHERITING FROM lcl_gui_page. PUBLIC SECTION. @@ -19,7 +19,7 @@ CLASS lcl_gui_page_background_run DEFINITION FINAL ENDCLASS. -CLASS lcl_gui_page_background_run IMPLEMENTATION. +CLASS lcl_gui_page_bkg_run IMPLEMENTATION. METHOD constructor. super->constructor( ). @@ -72,16 +72,16 @@ CLASS lcl_gui_page_background_run IMPLEMENTATION. ENDCLASS. -CLASS lcl_gui_page_background DEFINITION FINAL +CLASS lcl_gui_page_bkg DEFINITION FINAL INHERITING FROM lcl_gui_page. PUBLIC SECTION. METHODS: - constructor IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key, + constructor IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key, lif_gui_page~on_event REDEFINITION. PROTECTED SECTION. - METHODS render_content REDEFINITION. + METHODS render_content REDEFINITION. PRIVATE SECTION. DATA: @@ -96,7 +96,7 @@ CLASS lcl_gui_page_background DEFINITION FINAL ENDCLASS. -CLASS lcl_gui_page_background IMPLEMENTATION. +CLASS lcl_gui_page_bkg IMPLEMENTATION. METHOD constructor. @@ -116,13 +116,13 @@ CLASS lcl_gui_page_background IMPLEMENTATION. METHOD lif_gui_page~on_event. - DATA ls_bg_task TYPE lcl_persistence_background=>ty_background. + DATA ls_bg_task TYPE lcl_persist_background=>ty_background. CASE iv_action. WHEN lif_defs=>gc_action-bg_update. ls_bg_task = lcl_html_action_utils=>decode_bg_update( iv_getdata ). ls_bg_task-key = mv_key. - lcl_services_background=>update_task( ls_bg_task ). + lcl_services_bkg=>update_task( ls_bg_task ). ev_state = lif_defs=>gc_event_state-re_render. ENDCASE. @@ -131,8 +131,8 @@ CLASS lcl_gui_page_background IMPLEMENTATION. METHOD render_data. DATA: lo_repo TYPE REF TO lcl_repo_online, - lo_per TYPE REF TO lcl_persistence_background, - lt_per TYPE lcl_persistence_background=>tt_background, + lo_per TYPE REF TO lcl_persist_background, + lt_per TYPE lcl_persist_background=>tt_background, ls_per LIKE LINE OF lt_per, lv_nothing TYPE string, lv_push TYPE string, @@ -163,16 +163,16 @@ CLASS lcl_gui_page_background IMPLEMENTATION. ENDIF. CASE ls_per-method. - WHEN lcl_persistence_background=>c_method-push. + WHEN lcl_persist_background=>c_method-push. lv_push = ' checked' ##NO_TEXT. - WHEN lcl_persistence_background=>c_method-pull. + WHEN lcl_persist_background=>c_method-pull. lv_pull = ' checked' ##NO_TEXT. WHEN OTHERS. lv_nothing = ' checked' ##NO_TEXT. ENDCASE. CASE ls_per-amethod. - WHEN lcl_persistence_background=>c_amethod-auto. + WHEN lcl_persist_background=>c_amethod-auto. lv_aauto = ' checked' ##NO_TEXT. WHEN OTHERS. lv_afixed = ' checked' ##NO_TEXT. diff --git a/src/zabapgit_page_branch_overview.prog.abap b/src/zabapgit_page_branch_overview.prog.abap index da2a2d0c9..6850e845f 100644 --- a/src/zabapgit_page_branch_overview.prog.abap +++ b/src/zabapgit_page_branch_overview.prog.abap @@ -302,7 +302,7 @@ ENDCLASS. *********************** -CLASS lcl_gui_page_branch_overview DEFINITION FINAL INHERITING FROM lcl_gui_page. +CLASS lcl_gui_page_boverview DEFINITION FINAL INHERITING FROM lcl_gui_page. PUBLIC SECTION. METHODS: @@ -358,7 +358,7 @@ CLASS lcl_gui_page_branch_overview DEFINITION FINAL INHERITING FROM lcl_gui_page ENDCLASS. "lcl_gui_page_explore DEFINITION -CLASS lcl_gui_page_branch_overview IMPLEMENTATION. +CLASS lcl_gui_page_boverview IMPLEMENTATION. METHOD constructor. super->constructor( ). diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap index f9721172d..ef8183605 100644 --- a/src/zabapgit_page_db.prog.abap +++ b/src/zabapgit_page_db.prog.abap @@ -2,7 +2,7 @@ *& Include ZABAPGIT_PAGE_DB *&---------------------------------------------------------------------* -CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page. +CLASS lcl_gui_page_db_dis DEFINITION FINAL INHERITING FROM lcl_gui_page. PUBLIC SECTION. METHODS: constructor @@ -20,7 +20,7 @@ CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page. ENDCLASS. -CLASS lcl_gui_page_db_display IMPLEMENTATION. +CLASS lcl_gui_page_db_dis IMPLEMENTATION. METHOD constructor. super->constructor( ). @@ -131,7 +131,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. " Banners & Toolbar ro_html->add( '
    { - lcl_html=>icon( iv_name = 'star/blue' iv_alt = 'Favs' iv_hint = 'Favorites' ) + lcl_html=>icon( iv_name = 'star/blue' iv_hint = 'Favorites' ) }' ). " Maximize width diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 5f19b86ee..0386728b4 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -71,7 +71,6 @@ CLASS lcl_popups DEFINITION FINAL. RAISING lcx_exception, popup_to_create_transp_branch IMPORTING it_transport_headers TYPE trwbo_request_headers - it_transport_objects TYPE scts_tadir RETURNING VALUE(rs_transport_branch) TYPE ty_transport_to_branch RAISING lcx_exception lcx_cancel, @@ -592,9 +591,6 @@ CLASS lcl_popups IMPLEMENTATION. METHOD popup_to_create_transp_branch. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval, - lv_icon_ok TYPE icon-name, - lv_button_transport TYPE svalbutton-buttontext, - lv_icon_transport TYPE icon-name, lv_transports_as_text TYPE string, ls_transport_header LIKE LINE OF it_transport_headers. @@ -609,10 +605,6 @@ CLASS lcl_popups IMPLEMENTATION. _add_dialog_fld 'TEXTL' 'LINE' 'Branch name' lv_transports_as_text ''. _add_dialog_fld 'ABAPTXT255' 'LINE' 'Commit text' lv_transports_as_text ''. - lv_icon_ok = icon_okay. - lv_button_transport = 'Transport(s)->Branch' ##NO_TEXT. - lv_icon_transport = icon_import_all_requests. - CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING * no_value_check = SPACE " Deactivates data type check diff --git a/src/zabapgit_requirements.prog.abap b/src/zabapgit_requirements.prog.abap index b692c0a27..782a71dfa 100644 --- a/src/zabapgit_requirements.prog.abap +++ b/src/zabapgit_requirements.prog.abap @@ -40,7 +40,6 @@ CLASS lcl_requirement_helper DEFINITION FINAL. get_requirement_met_status IMPORTING it_requirements TYPE lcl_dot_abapgit=>ty_requirement_tt RETURNING value(rt_status) TYPE ty_requirement_status_tt RAISING lcx_exception. - PROTECTED SECTION. PRIVATE SECTION. CLASS-METHODS: show_requirement_popup IMPORTING it_requirements TYPE ty_requirement_status_tt @@ -122,7 +121,7 @@ CLASS lcl_requirement_helper IMPLEMENTATION. ENDMETHOD. "get_requirement_met_status METHOD version_greater_or_equal. - DATA: lv_number TYPE numc4. + DATA: lv_number TYPE numc4 ##NEEDED. TRY. MOVE EXACT: is_status-installed_release TO lv_number, diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index 0df11ba5e..f29539745 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -335,8 +335,7 @@ CLASS lcl_services_repo IMPLEMENTATION. lcx_exception=>raise( 'Canceled or List of objects is empty ' ). ENDIF. ls_transport_to_branch = lcl_popups=>popup_to_create_transp_branch( - it_transport_headers = lt_transport_headers - it_transport_objects = lt_transport_objects ). + lt_transport_headers ). CREATE OBJECT lo_transport_to_branch. lo_transport_to_branch->create( diff --git a/src/zabapgit_syntax_highlighter.prog.abap b/src/zabapgit_syntax_highlighter.prog.abap index cb1e391d3..3c10caf4a 100644 --- a/src/zabapgit_syntax_highlighter.prog.abap +++ b/src/zabapgit_syntax_highlighter.prog.abap @@ -577,7 +577,6 @@ CLASS lcl_syntax_xml IMPLEMENTATION. DATA: lv_index TYPE sy-tabix, - lv_line_len TYPE i, lv_prev_token TYPE c, lv_state TYPE c VALUE 'O'. " O - for open tag; C - for closed tag; @@ -585,9 +584,8 @@ CLASS lcl_syntax_xml IMPLEMENTATION. TYPE ty_match, TYPE ty_match. - SORT ct_matches BY offset. - lv_line_len = strlen( iv_line ). + SORT ct_matches BY offset. LOOP AT ct_matches ASSIGNING . lv_index = sy-tabix. diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index f6239b0d1..2979cc603 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -126,8 +126,7 @@ CLASS lcl_tadir IMPLEMENTATION. METHOD build. - DATA: lv_index TYPE i, - lt_tadir TYPE ty_tadir_tt, + DATA: lt_tadir TYPE ty_tadir_tt, lt_tdevc TYPE STANDARD TABLE OF tdevc, lv_path TYPE string. @@ -154,8 +153,6 @@ CLASS lcl_tadir IMPLEMENTATION. ENDIF. LOOP AT rt_tadir ASSIGNING . - lv_index = sy-tabix. - -path = lv_path. CASE -object. diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 6f3b9a3e2..c6feac78d 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -371,12 +371,10 @@ CLASS lcl_path IMPLEMENTATION. METHOD split_file_location. DATA: lv_cnt TYPE i, - lv_off TYPE i, lv_len TYPE i. FIND FIRST OCCURRENCE OF REGEX '^/(.*/)?' IN iv_fullpath MATCH COUNT lv_cnt - MATCH OFFSET lv_off MATCH LENGTH lv_len. IF lv_cnt > 0. @@ -513,7 +511,7 @@ CLASS lcl_url IMPLEMENTATION. METHOD path_name. - DATA: lv_host TYPE string. + DATA: lv_host TYPE string ##NEEDED. FIND REGEX '(.*://[^/]*)(.*)' IN iv_repo SUBMATCHES lv_host rv_path_name. diff --git a/src/zabapgit_zip.prog.abap b/src/zabapgit_zip.prog.abap index 2bc4650c2..e80b18bc4 100644 --- a/src/zabapgit_zip.prog.abap +++ b/src/zabapgit_zip.prog.abap @@ -55,10 +55,6 @@ CLASS lcl_zip DEFINITION FINAL. RETURNING VALUE(rv_xstr) TYPE xstring RAISING lcx_exception. - CLASS-METHODS get_message - RETURNING VALUE(rv_message) TYPE string - RAISING lcx_exception. - ENDCLASS. "lcl_zip DEFINITION *----------------------------------------------------------------------* @@ -68,46 +64,6 @@ ENDCLASS. "lcl_zip DEFINITION *----------------------------------------------------------------------* CLASS lcl_zip IMPLEMENTATION. - METHOD get_message. -* method not in use? - ASSERT 0 = 1. - -* DATA: lv_returncode TYPE c, -* lt_fields TYPE TABLE OF sval. -* -* FIELD-SYMBOLS: LIKE LINE OF lt_fields. -* -* -* APPEND INITIAL LINE TO lt_fields ASSIGNING . -* -tabname = 'ABAPTXT255'. -* -fieldname = 'LINE'. -* -fieldtext = 'Commit message'. "#EC NOTEXT -* -field_obl = abap_true. -* -* CALL FUNCTION 'POPUP_GET_VALUES' -* EXPORTING -* no_value_check = abap_true -* popup_title = 'Enter commit message' "#EC NOTEXT -* IMPORTING -* returncode = lv_returncode -* TABLES -* fields = lt_fields -* EXCEPTIONS -* error_in_fields = 1 -* OTHERS = 2. -* IF sy-subrc <> 0. -* lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ). -* ENDIF. -* IF lv_returncode = 'A'. -* lcx_exception=>raise( 'cancelled' ). -* ENDIF. -* -* READ TABLE lt_fields INDEX 1 ASSIGNING . -* ASSERT sy-subrc = 0. -* rv_message = -value. - - ENDMETHOD. "get_message - METHOD file_download. DATA: lt_rawdata TYPE solix_tab, @@ -400,8 +356,6 @@ CLASS lcl_zip IMPLEMENTATION. DATA: lo_log TYPE REF TO lcl_log, lt_zip TYPE ty_files_item_tt. - FIELD-SYMBOLS: LIKE LINE OF lt_zip. - CREATE OBJECT lo_log. From c09124be7a793d96027ee9597e580d0a39e098c4 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 23 Mar 2017 18:30:04 +0000 Subject: [PATCH 004/188] fix transport to branch --- src/zabapgit_transport.prog.abap | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index 74ddeadc5..cff4aabe4 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -205,8 +205,9 @@ CLASS lcl_transport_objects IMPLEMENTATION. LOOP AT mt_transport_objects INTO ls_transport_object. LOOP AT it_object_statuses INTO ls_object_status - WHERE obj_name = ls_transport_object-obj_name - AND obj_type = ls_transport_object-object. + WHERE obj_name = ls_transport_object-obj_name + AND obj_type = ls_transport_object-object + AND NOT lstate IS INITIAL. CASE ls_object_status-lstate. WHEN gc_state-added OR gc_state-modified. @@ -285,11 +286,11 @@ CLASS lcl_transport_to_branch IMPLEMENTATION. METHOD create. DATA: - lv_branch_name TYPE string, - ls_comment TYPE ty_comment, - lo_stage TYPE REF TO lcl_stage, - ls_stage_objects TYPE ty_stage_files, - lt_object_statuses TYPE ty_results_tt. + lv_branch_name TYPE string, + ls_comment TYPE ty_comment, + lo_stage TYPE REF TO lcl_stage, + ls_stage_objects TYPE ty_stage_files, + lt_object_statuses TYPE ty_results_tt. lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ). From 4c36a2bfec43782067297aa3857523b3718a5fda Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Mar 2017 07:21:11 +0100 Subject: [PATCH 005/188] bugfix #693 --- src/zabapgit_migrations.prog.abap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/zabapgit_migrations.prog.abap b/src/zabapgit_migrations.prog.abap index 7c311bc7b..30cd12307 100644 --- a/src/zabapgit_migrations.prog.abap +++ b/src/zabapgit_migrations.prog.abap @@ -58,6 +58,10 @@ CLASS lcl_migrations IMPLEMENTATION. ENDIF. ->refresh( ). lo_dot_abapgit = ->find_remote_dot_abapgit( ). + IF lo_dot_abapgit IS INITIAL. +* .abapgit.xml is not in the remote repo yet + lo_dot_abapgit = lcl_dot_abapgit=>build_default( ). + ENDIF. ENDIF. ->set_dot_abapgit( lo_dot_abapgit ). ENDIF. From 6fd25aa1d0e1370cde926e65b1efec61c944cfe0 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 24 Mar 2017 07:22:57 +0100 Subject: [PATCH 006/188] v1.33.3 --- src/zabapgit.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 29fb467eb..856308b7b 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.33.2'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.33.3'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) From 49904c906aacc527ec8277cc45f817ccf8efece7 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 24 Mar 2017 07:23:46 +0100 Subject: [PATCH 007/188] v1.33.3 --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index 9b1b30e73..788bdf6fe 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,6 +8,11 @@ Legend + : added - : removed +2017-03-24 v1.33.3 +------------------ +* fix dump in transport to branch +* fix dump in migration of .abapgit.xml to local state + 2017-03-23 v1.33.2 ------------------ * fix Microsoft TFS zlib decompression error From 35f3cce022958dafe779f1f55389ef780ebc3ca5 Mon Sep 17 00:00:00 2001 From: Jakub Filak Date: Fri, 24 Mar 2017 12:04:10 +0100 Subject: [PATCH 008/188] migrations: skip repos that cannot be fetched On systems where users do not allow everybody to fetch their repo, you need to be able skip certain repos. Currently, if you cannot authorize yourself to read a migrated repo, abapGit exits. With this patch applied, failed authorization attempts are notified to the user and the repo is skipped. Signed-off-by: Jakub Filak --- src/zabapgit_migrations.prog.abap | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_migrations.prog.abap b/src/zabapgit_migrations.prog.abap index 30cd12307..b99db4d51 100644 --- a/src/zabapgit_migrations.prog.abap +++ b/src/zabapgit_migrations.prog.abap @@ -35,7 +35,8 @@ CLASS lcl_migrations IMPLEMENTATION. DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, lv_shown TYPE abap_bool, - lo_dot_abapgit TYPE REF TO lcl_dot_abapgit. + lo_dot_abapgit TYPE REF TO lcl_dot_abapgit, + lx_exception TYPE REF TO lcx_exception. FIELD-SYMBOLS: LIKE LINE OF lt_repos. @@ -56,7 +57,23 @@ CLASS lcl_migrations IMPLEMENTATION. txt2 = 'Login to remote repositories if needed'. lv_shown = abap_true. ENDIF. - ->refresh( ). + + " Skip repos that cannot be fetched. + " Particuarly useful on systems where users do not allow + " everybody to fetch their repos. + TRY. + ->refresh( ). + CATCH lcx_exception INTO lx_exception. + CALL FUNCTION 'POPUP_TO_INFORM' + EXPORTING + titel = 'Migration has failed' + txt1 = lx_exception->mv_text + txt2 = 'Please do not use the ''' && ->get_name( ) && ''' repository until migrated.' + txt3 = 'You will be prompted to migrate the repository every time you run abapGit.' + txt4 = 'You can safely remove the repository in its ''Advanced -> Remove'' menu.'. + CONTINUE. + ENDTRY. + lo_dot_abapgit = ->find_remote_dot_abapgit( ). IF lo_dot_abapgit IS INITIAL. * .abapgit.xml is not in the remote repo yet From 734f8e838ac8bf46780312c810dde85352039d33 Mon Sep 17 00:00:00 2001 From: larshp Date: Mon, 27 Mar 2017 13:14:24 +0200 Subject: [PATCH 009/188] better error message --- src/zabapgit_folder_logic.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index dcc9783a1..d0fc5516b 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -86,7 +86,7 @@ CLASS lcl_folder_logic IMPLEMENTATION. lv_parentcl = lcl_sap_package=>get( iv_package )->read_parent( ). IF lv_parentcl IS INITIAL. - lcx_exception=>raise( 'error, expected parent package' ). + lcx_exception=>raise( |error, expected parent package, { iv_package }| ). ELSE. CASE io_dot->get_folder_logic( ). WHEN lcl_dot_abapgit=>c_folder_logic-full. From 5c99c0e443b2c2c30f82d0a214021fe8069f6148 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 30 Mar 2017 06:33:40 +0000 Subject: [PATCH 010/188] ignore files outside of starting folder #696 --- src/zabapgit_dot_abapgit.prog.abap | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index 5588dfbfb..7e21db9c2 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -15,7 +15,7 @@ CLASS lcl_dot_abapgit DEFINITION FINAL FRIENDS ltcl_dot_abapgit. TYPES: BEGIN OF ty_requirement, component TYPE dlvunit, min_release TYPE saprelease, - min_patch TYPE sappatchlv, + min_patch TYPE sappatchlv, END OF ty_requirement, ty_requirement_tt TYPE STANDARD TABLE OF ty_requirement WITH DEFAULT KEY, BEGIN OF ty_dot_abapgit, @@ -199,14 +199,22 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. METHOD is_ignored. - DATA: lv_name TYPE string, - lv_ignore TYPE string. + DATA: lv_name TYPE string, + lv_starting TYPE string, + lv_dot TYPE string, + lv_ignore TYPE string. lv_name = iv_path && iv_filename. + CONCATENATE ms_data-starting_folder '*' INTO lv_starting. + CONCATENATE '/' gc_dot_abapgit INTO lv_dot. + LOOP AT ms_data-ignore INTO lv_ignore. - IF lv_name CP lv_ignore. + IF lv_name CP lv_ignore + OR ( ms_data-starting_folder <> '/' + AND NOT lv_name CP lv_starting + AND NOT lv_name = lv_dot ). rv_ignored = abap_true. RETURN. ENDIF. From cd88ec6c786778535a79d8a4b731d27f796e16a2 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 30 Mar 2017 06:45:39 +0000 Subject: [PATCH 011/188] fix deleting db table with contents #695 --- src/zabapgit_object_tabl.prog.abap | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index de2f10201..04d3f8f90 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -99,14 +99,35 @@ CLASS lcl_object_tabl IMPLEMENTATION. METHOD lif_object~delete. - DATA: lv_objname TYPE rsedd0-ddobjname. + DATA: lv_objname TYPE rsedd0-ddobjname, + lv_tabclass TYPE dd02l-tabclass, + lv_foo TYPE c LENGTH 1, + lv_no_ask TYPE abap_bool, + lr_data TYPE REF TO data. + + FIELD-SYMBOLS: TYPE any. lv_objname = ms_item-obj_name. + lv_no_ask = abap_true. + SELECT SINGLE tabclass FROM dd02l INTO lv_tabclass + WHERE tabname = ms_item-obj_name + AND as4local = 'A' + AND as4vers = '0000'. + IF sy-subrc = 0 AND lv_tabclass = 'TRANSP'. +* it cannot delete table with table wihtout asking + CREATE DATA lr_data TYPE (lv_objname). + ASSIGN lr_data->* TO . + SELECT SINGLE * FROM (lv_objname) INTO . + IF sy-subrc = 0. + lv_no_ask = abap_false. + ENDIF. + ENDIF. + CALL FUNCTION 'RS_DD_DELETE_OBJ' EXPORTING - no_ask = abap_true + no_ask = lv_no_ask objname = lv_objname objtype = 'T' EXCEPTIONS From d5f8fddbaf5010bd37c412c918739385dab9521a Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 30 Mar 2017 06:57:05 +0000 Subject: [PATCH 012/188] repo settings, add starting_folder #227 --- src/zabapgit_page_repo_settings.prog.abap | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_page_repo_settings.prog.abap b/src/zabapgit_page_repo_settings.prog.abap index 7f8b4fff5..52889dfd5 100644 --- a/src/zabapgit_page_repo_settings.prog.abap +++ b/src/zabapgit_page_repo_settings.prog.abap @@ -59,6 +59,9 @@ CLASS lcl_gui_page_repo_settings IMPLEMENTATION. ro_html->add( 'Folder logic: ' ). ro_html->add( '
    ' ). + ro_html->add( 'Starting folder: ' ). + ro_html->add( '
    ' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). @@ -76,12 +79,18 @@ CLASS lcl_gui_page_repo_settings IMPLEMENTATION. WHEN c_action-save_settings. lt_post_fields = parse_post( it_postdata ). + lo_dot = mo_repo->get_dot_abapgit( ). + READ TABLE lt_post_fields INTO ls_post_field WITH KEY name = 'folder_logic'. ASSERT sy-subrc = 0. - - lo_dot = mo_repo->get_dot_abapgit( ). lo_dot->set_folder_logic( ls_post_field-value ). + + READ TABLE lt_post_fields INTO ls_post_field WITH KEY name = 'starting_folder'. + ASSERT sy-subrc = 0. + lo_dot->set_starting_folder( ls_post_field-value ). + mo_repo->set_dot_abapgit( lo_dot ). + mo_repo->refresh( ). ev_state = gc_event_state-go_back. ENDCASE. From 03aff682f7cd3c9d230399f39c98a29f7e6b211e Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 30 Mar 2017 06:59:00 +0000 Subject: [PATCH 013/188] fix spaces in error message --- src/zabapgit_file_status.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 032e16876..64364902a 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -99,8 +99,8 @@ CLASS lcl_file_status IMPLEMENTATION. BINARY SEARCH. " Sorted above IF sy-subrc <> 0 OR -path <> -path. " All paths are same - io_log->add( iv_msg = |Files for object { -obj_type }{ - -obj_name }are not placed in the same folder| + io_log->add( iv_msg = |Files for object { -obj_type } { + -obj_name } are not placed in the same folder| iv_type = 'W' iv_rc = '1' ) ##no_text. ENDIF. From a10a0d35d448a1421aa09fbf5b91b79307c00789 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Thu, 30 Mar 2017 09:02:59 +0200 Subject: [PATCH 014/188] update screenshot --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 05f1472e0..cfebb04cc 100644 --- a/README.md +++ b/README.md @@ -24,4 +24,4 @@ See [Wiki](https://github.com/larshp/abapGit/wiki/) ## FAQ ## For questions/comments/bugs/feature requests/wishes please create an [issue](https://github.com/larshp/abapGit/issues) -![abapgit](https://github.com/larshp/abapGit/wiki/img/abapgit_1_17_17.png) +![abapgit](https://github.com/larshp/abapGit/wiki/img/abapgit_1_33_3.png) From 7faba909e710c6d13d575978d131c00543a49ed8 Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 30 Mar 2017 08:05:55 +0000 Subject: [PATCH 015/188] proxy authentication #646 --- src/zabapgit_http.prog.abap | 108 ++++++++++++++++++++------- src/zabapgit_page_settings.prog.abap | 22 +++++- src/zabapgit_persistence.prog.abap | 47 ++++++++++-- 3 files changed, 140 insertions(+), 37 deletions(-) diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index 9cfaba173..400c91def 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -2,20 +2,68 @@ *& Include ZABAPGIT_HTTP *&---------------------------------------------------------------------* +CLASS lcl_proxy_authentication DEFINITION FINAL. + + PUBLIC SECTION. + CLASS-METHODS: + run + IMPORTING ii_client TYPE REF TO if_http_client + RAISING lcx_exception. + + PRIVATE SECTION. + CLASS-DATA: gv_username TYPE string, + gv_password TYPE string. + + CLASS-METHODS: enter RAISING lcx_exception. + +ENDCLASS. + +CLASS lcl_proxy_authentication IMPLEMENTATION. + + METHOD run. + + IF gv_username IS INITIAL OR gv_password IS INITIAL. + enter( ). + ENDIF. + + ii_client->authenticate( + proxy_authentication = abap_true + username = gv_username + password = gv_password ). + + ENDMETHOD. + + METHOD enter. + + lcl_password_dialog=>popup( + EXPORTING + iv_repo_url = 'Proxy Authentication' + CHANGING + cv_user = gv_username + cv_pass = gv_password ). + + IF gv_username IS INITIAL OR gv_password IS INITIAL. + lcx_exception=>raise( 'Proxy auth failed' ). + ENDIF. + + ENDMETHOD. + +ENDCLASS. + CLASS lcl_http_digest DEFINITION FINAL. PUBLIC SECTION. METHODS: constructor IMPORTING - ii_client TYPE REF TO if_http_client - iv_username TYPE string - iv_password TYPE string - RAISING lcx_exception, + ii_client TYPE REF TO if_http_client + iv_username TYPE string + iv_password TYPE string + RAISING lcx_exception, run IMPORTING - ii_client TYPE REF TO if_http_client - RAISING lcx_exception. + ii_client TYPE REF TO if_http_client + RAISING lcx_exception. PRIVATE SECTION. DATA: mv_ha1 TYPE string, @@ -29,22 +77,22 @@ CLASS lcl_http_digest DEFINITION FINAL. CLASS-METHODS: md5 IMPORTING - iv_data TYPE string + iv_data TYPE string RETURNING - VALUE(rv_hash) TYPE string - RAISING lcx_exception. + VALUE(rv_hash) TYPE string + RAISING lcx_exception. METHODS: hash IMPORTING - iv_qop TYPE string - iv_nonce TYPE string - iv_uri TYPE string - iv_method TYPE string - iv_cnonse TYPE string + iv_qop TYPE string + iv_nonce TYPE string + iv_uri TYPE string + iv_method TYPE string + iv_cnonse TYPE string RETURNING - VALUE(rv_response) TYPE string - RAISING lcx_exception, + VALUE(rv_response) TYPE string + RAISING lcx_exception, parse IMPORTING ii_client TYPE REF TO if_http_client. @@ -63,16 +111,16 @@ CLASS lcl_http_client DEFINITION FINAL. IMPORTING io_digest TYPE REF TO lcl_http_digest, send_receive_close IMPORTING - iv_data TYPE xstring + iv_data TYPE xstring RETURNING - VALUE(rv_data) TYPE xstring - RAISING lcx_exception, + VALUE(rv_data) TYPE xstring + RAISING lcx_exception, get_cdata RETURNING VALUE(rv_value) TYPE string, check_http_200 - RAISING lcx_exception, + RAISING lcx_exception, send_receive - RAISING lcx_exception, + RAISING lcx_exception, set_headers IMPORTING iv_url TYPE string iv_service TYPE string @@ -347,9 +395,9 @@ CLASS lcl_http DEFINITION FINAL. IMPORTING iv_url TYPE string RETURNING VALUE(rv_bool) TYPE abap_bool, acquire_login_details - IMPORTING ii_client TYPE REF TO if_http_client - io_client TYPE REF TO lcl_http_client - iv_url TYPE string + IMPORTING ii_client TYPE REF TO if_http_client + io_client TYPE REF TO lcl_http_client + iv_url TYPE string RETURNING VALUE(rv_scheme) TYPE string RAISING lcx_exception. @@ -383,6 +431,10 @@ CLASS lcl_http IMPLEMENTATION. IMPORTING client = li_client ). + IF lo_settings->get_proxy_authentication( ) = abap_true. + lcl_proxy_authentication=>run( li_client ). + ENDIF. + CREATE OBJECT ro_client EXPORTING ii_client = li_client. @@ -469,10 +521,10 @@ CLASS lcl_http IMPLEMENTATION. METHOD acquire_login_details. - DATA: lv_default_user TYPE string, - lv_user TYPE string, - lv_pass TYPE string, - lo_digest TYPE REF TO lcl_http_digest. + DATA: lv_default_user TYPE string, + lv_user TYPE string, + lv_pass TYPE string, + lo_digest TYPE REF TO lcl_http_digest. lv_default_user = lcl_app=>user( )->get_repo_login( iv_url ). diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index 075ecedc6..06692df16 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -78,12 +78,22 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ro_html->add( |

    Proxy

    | ). ro_html->add( || ). ro_html->add( |
    | ). - ro_html->add( `` ). + ro_html->add( `` ). ro_html->add( |
    | ). ro_html->add( || ). ro_html->add( |
    | ). - ro_html->add( `` ). + ro_html->add( `` ). ro_html->add( |
    | ). + ro_html->add( || ). + IF mo_settings->get_proxy_authentication( ) = abap_true. + ro_html->add( `` ). + ELSE. + ro_html->add( `` ). + ENDIF. + ro_html->add( |
    | ). + ro_html->add( |
    | ). ENDMETHOD. @@ -117,6 +127,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. DATA: ls_post_field TYPE ihttpnvp, lv_max_lines_as_integer TYPE i. + CREATE OBJECT mo_settings. READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_url'. IF sy-subrc <> 0. @@ -130,6 +141,13 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. ENDIF. mo_settings->set_proxy_port( ls_post_field-value ). + READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'proxy_auth'. + IF sy-subrc = 0. + mo_settings->set_proxy_authentication( abap_true ). + ELSE. + mo_settings->set_proxy_authentication( abap_false ). + ENDIF. + READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'critical_tests'. IF sy-subrc = 0. mo_settings->set_run_critical_tests( abap_true ). diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 2acae64cc..b4cd59fd3 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -1511,12 +1511,18 @@ CLASS lcl_settings DEFINITION FINAL. METHODS set_proxy_port IMPORTING iv_port TYPE string. + METHODS set_proxy_authentication + IMPORTING + iv_auth TYPE abap_bool. METHODS get_proxy_url RETURNING VALUE(rv_proxy_url) TYPE string. METHODS get_proxy_port RETURNING VALUE(rv_port) TYPE string. + METHODS get_proxy_authentication + RETURNING + VALUE(rv_auth) TYPE abap_bool. METHODS set_run_critical_tests IMPORTING iv_run TYPE abap_bool. @@ -1530,15 +1536,23 @@ CLASS lcl_settings DEFINITION FINAL. VALUE(rv_lines) TYPE i. PRIVATE SECTION. - DATA mv_proxy_url TYPE string. - DATA mv_proxy_port TYPE string. - DATA mv_run_critical_tests TYPE abap_bool. - DATA mv_lines TYPE i. + DATA: mv_proxy_url TYPE string, + mv_proxy_port TYPE string, + mv_proxy_auth TYPE string, + mv_run_critical_tests TYPE abap_bool, + mv_lines TYPE i. ENDCLASS. CLASS lcl_settings IMPLEMENTATION. + METHOD set_proxy_authentication. + mv_proxy_auth = iv_auth. + ENDMETHOD. + + METHOD get_proxy_authentication. + rv_auth = mv_proxy_auth. + ENDMETHOD. METHOD set_proxy_url. mv_proxy_url = iv_url. @@ -1574,7 +1588,6 @@ CLASS lcl_settings IMPLEMENTATION. ENDCLASS. - CLASS lcl_persistence_settings DEFINITION FINAL. PUBLIC SECTION. @@ -1590,9 +1603,10 @@ CLASS lcl_persistence_settings DEFINITION FINAL. ENDCLASS. CLASS lcl_persistence_settings IMPLEMENTATION. - +* todo, refactor this to use XML and only 1 row in the database? METHOD modify. + lcl_app=>db( )->modify( iv_type = 'SETTINGS' iv_value = 'PROXY_URL' @@ -1603,6 +1617,11 @@ CLASS lcl_persistence_settings IMPLEMENTATION. iv_value = 'PROXY_PORT' iv_data = io_settings->get_proxy_port( ) ). + lcl_app=>db( )->modify( + iv_type = 'SETTINGS' + iv_value = 'PROXY_AUTH' + iv_data = io_settings->get_proxy_authentication( ) ). + lcl_app=>db( )->modify( iv_type = 'SETTINGS' iv_value = 'CRIT_TESTS' @@ -1615,14 +1634,17 @@ CLASS lcl_persistence_settings IMPLEMENTATION. ENDMETHOD. - METHOD read. + DATA: lv_critical_tests_as_string TYPE string, lv_critical_tests_as_boolean TYPE abap_bool, lv_max_lines_as_string TYPE string, + lv_flag TYPE abap_bool, lv_max_lines_as_integer TYPE i. + CREATE OBJECT ro_settings. + TRY. ro_settings->set_proxy_url( lcl_app=>db( )->read( @@ -1631,6 +1653,7 @@ CLASS lcl_persistence_settings IMPLEMENTATION. CATCH lcx_not_found. ro_settings->set_proxy_url( '' ). ENDTRY. + TRY. ro_settings->set_proxy_port( lcl_app=>db( )->read( @@ -1639,6 +1662,16 @@ CLASS lcl_persistence_settings IMPLEMENTATION. CATCH lcx_not_found. ro_settings->set_proxy_port( '' ). ENDTRY. + + TRY. + lv_flag = lcl_app=>db( )->read( + iv_type = 'SETTINGS' + iv_value = 'PROXY_AUTH' ). + ro_settings->set_proxy_authentication( lv_flag ). + CATCH lcx_not_found. + ro_settings->set_proxy_authentication( abap_false ). + ENDTRY. + TRY. lv_critical_tests_as_string = lcl_app=>db( )->read( iv_type = 'SETTINGS' From b10f06f33dfbd0e8f63a7093db488b0ac8eb21ec Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 30 Mar 2017 08:57:46 +0000 Subject: [PATCH 016/188] first draft #640 --- src/zabapgit.prog.abap | 1 + src/zabapgit_authorizations.prog.abap | 49 +++++++++++++++++++++++++++ src/zabapgit_authorizations.prog.xml | 22 ++++++++++++ src/zabapgit_view_repo.prog.abap | 13 +++++-- 4 files changed, 82 insertions(+), 3 deletions(-) create mode 100644 src/zabapgit_authorizations.prog.abap create mode 100644 src/zabapgit_authorizations.prog.xml diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 856308b7b..b4340853e 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -50,6 +50,7 @@ INCLUDE zabapgit_persistence. INCLUDE zabapgit_sap_package. INCLUDE zabapgit_folder_logic. INCLUDE zabapgit_requirements. +INCLUDE zabapgit_authorizations. INCLUDE zabapgit_stage. INCLUDE zabapgit_git_helpers. diff --git a/src/zabapgit_authorizations.prog.abap b/src/zabapgit_authorizations.prog.abap new file mode 100644 index 000000000..377192832 --- /dev/null +++ b/src/zabapgit_authorizations.prog.abap @@ -0,0 +1,49 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_AUTHORIZATIONS +*&---------------------------------------------------------------------* + +TYPES: ty_activity TYPE string. + +CONSTANTS: BEGIN OF gc_activities, + uninstall TYPE ty_activity VALUE 'UNINSTALL', + END OF gc_activities. + +INTERFACE lif_auth. + METHODS: + is_allowed + IMPORTING iv_activity TYPE ty_activity + RETURNING VALUE(rv_allowed) TYPE abap_bool. +ENDINTERFACE. + +* implement class LCL_AUTH_EXIT implementing LIF_AUTH in following include, +* place the include in a different package than ZABAPGIT +INCLUDE zabapgit_authorizations_exit IF FOUND. + +******************* + +CLASS lcl_auth DEFINITION FINAL. + + PUBLIC SECTION. + CLASS-METHODS: + is_allowed + IMPORTING iv_activity TYPE ty_activity + RETURNING VALUE(rv_allowed) TYPE abap_bool. + +ENDCLASS. + +CLASS lcl_auth IMPLEMENTATION. + + METHOD is_allowed. + + DATA: li_auth TYPE REF TO lif_auth. + + TRY. + CREATE OBJECT li_auth TYPE ('LCL_AUTH_EXIT'). + rv_allowed = li_auth->is_allowed( iv_activity ). + CATCH cx_sy_create_object_error. + rv_allowed = abap_true. + ENDTRY. + + ENDMETHOD. + +ENDCLASS. diff --git a/src/zabapgit_authorizations.prog.xml b/src/zabapgit_authorizations.prog.xml new file mode 100644 index 000000000..b184950f7 --- /dev/null +++ b/src/zabapgit_authorizations.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_AUTHORIZATIONS + A + X + I + E + X + + + + R + Include ZABAPGIT_AUTHORIZATIONS + 31 + + + + + diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index c637a0506..b7b0668c1 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -36,8 +36,8 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL. RETURNING VALUE(ro_html) TYPE REF TO lcl_html RAISING lcx_exception, build_head_menu - IMPORTING iv_lstate TYPE char1 - iv_rstate TYPE char1 + IMPORTING iv_lstate TYPE char1 + iv_rstate TYPE char1 RETURNING VALUE(ro_toolbar) TYPE REF TO lcl_html_toolbar RAISING lcx_exception, build_grid_menu @@ -264,6 +264,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. lo_tb_branch TYPE REF TO lcl_html_toolbar, lv_key TYPE lcl_persistence_db=>ty_value, lv_wp_opt LIKE gc_html_opt-crossout, + lv_crossout LIKE gc_html_opt-crossout, lv_pull_opt LIKE gc_html_opt-crossout. CREATE OBJECT ro_toolbar. @@ -317,9 +318,15 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. iv_act = |{ gc_action-repo_refresh_checksums }?{ lv_key }| ). lo_tb_advanced->add( iv_txt = 'Remove' iv_act = |{ gc_action-repo_remove }?{ lv_key }| ). + + CLEAR lv_crossout. + IF mo_repo->is_write_protected( ) = abap_true + OR lcl_auth=>is_allowed( gc_activities-uninstall ) = abap_false. + lv_crossout = gc_html_opt-crossout. + ENDIF. lo_tb_advanced->add( iv_txt = 'Uninstall' iv_act = |{ gc_action-repo_purge }?{ lv_key }| - iv_opt = lv_wp_opt ). + iv_opt = lv_crossout ). " Build main toolbar ============================== IF mo_repo->is_offline( ) = abap_false. " Online ? From 90c4a052e8fa04fa61ea97b12ecc8da789a0f1a7 Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 4 Apr 2017 14:19:43 +0200 Subject: [PATCH 017/188] Dump on Clone or Explore #53 Fix: Dump if Strust configuration is not right yet --- src/zabapgit_http.prog.abap | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index 9cfaba173..1c9f4dcc8 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -369,7 +369,8 @@ CLASS lcl_http IMPLEMENTATION. DATA: lv_uri TYPE string, lv_scheme TYPE string, li_client TYPE REF TO if_http_client, - lo_settings TYPE REF TO lcl_settings. + lo_settings TYPE REF TO lcl_settings, + lv_text TYPE string. lo_settings = lcl_app=>settings( )->read( ). @@ -381,8 +382,25 @@ CLASS lcl_http IMPLEMENTATION. proxy_host = lo_settings->get_proxy_url( ) proxy_service = lo_settings->get_proxy_port( ) IMPORTING - client = li_client ). + client = li_client + EXCEPTIONS + argument_not_found = 1 + plugin_not_active = 2 + internal_error = 3 + OTHERS = 4 ). + IF sy-subrc <> 0. + CASE sy-subrc. + WHEN 1. + " make sure: + " a) SSL is setup properly in STRUST + lv_text = 'HTTPS ARGUMENT_NOT_FOUND | STRUST/SSL Setup correct?'. + WHEN OTHERS. + lv_text = 'While creating HTTP Client'. "#EC NOTEXT + ENDCASE. + lcx_exception=>raise( lv_text ). + ENDIF. + CREATE OBJECT ro_client EXPORTING ii_client = li_client. From c92217d7b45a34c514d6000d7cb947168dae2fd8 Mon Sep 17 00:00:00 2001 From: Pascal Date: Tue, 4 Apr 2017 14:35:28 +0200 Subject: [PATCH 018/188] #53 Whitespace at end of line Fix Whitespace at end of line --- src/zabapgit_http.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index 1c9f4dcc8..7b98b727e 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -400,7 +400,7 @@ CLASS lcl_http IMPLEMENTATION. ENDCASE. lcx_exception=>raise( lv_text ). ENDIF. - + CREATE OBJECT ro_client EXPORTING ii_client = li_client. From acbfdb5ac4973f974378fd3fbab0b2b87040bd74 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 4 Apr 2017 19:47:48 +0200 Subject: [PATCH 019/188] v1.33.4 --- src/zabapgit.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 856308b7b..c3b348877 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.33.3'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.33.4'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) From b0a328e40bffb2c95139e93373daf2292e5fb737 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 4 Apr 2017 20:22:26 +0200 Subject: [PATCH 020/188] add WAPA stub --- src/zabapgit_object_serializing.prog.abap | 1 + src/zabapgit_object_wapa.prog.abap | 73 +++++++++++++++++++++++ src/zabapgit_object_wapa.prog.xml | 22 +++++++ 3 files changed, 96 insertions(+) create mode 100644 src/zabapgit_object_wapa.prog.abap create mode 100644 src/zabapgit_object_wapa.prog.xml diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index f8153fd7d..c03e7ba86 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -50,6 +50,7 @@ INCLUDE zabapgit_object_type. INCLUDE zabapgit_object_vcls. INCLUDE zabapgit_object_view. INCLUDE zabapgit_object_w3xx. +INCLUDE zabapgit_object_wapa. INCLUDE zabapgit_object_wdya. INCLUDE zabapgit_object_wdyn. INCLUDE zabapgit_object_webi. diff --git a/src/zabapgit_object_wapa.prog.abap b/src/zabapgit_object_wapa.prog.abap new file mode 100644 index 000000000..a095fa12c --- /dev/null +++ b/src/zabapgit_object_wapa.prog.abap @@ -0,0 +1,73 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_WAPA +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_wapa DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wapa DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_TRAN DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_wapa IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wapa IMPLEMENTATION. + + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + + METHOD lif_object~changed_by. +* todo + rv_user = c_user_unknown. + ENDMETHOD. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + +* todo +* rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + +* todo + + ENDMETHOD. "jump + + METHOD lif_object~delete. + +* todo + + ENDMETHOD. "delete + + METHOD lif_object~deserialize. + +* todo + + ENDMETHOD. "deserialize + + METHOD lif_object~serialize. + +* todo + + ENDMETHOD. "serialize + + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + +ENDCLASS. "lcl_object_tran IMPLEMENTATION diff --git a/src/zabapgit_object_wapa.prog.xml b/src/zabapgit_object_wapa.prog.xml new file mode 100644 index 000000000..edd9ae545 --- /dev/null +++ b/src/zabapgit_object_wapa.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_OBJECT_WAPA + A + X + I + E + X + + + + R + Include ZABAPGIT_OBJECT_TRAN + 28 + + + + + From 36b4f4bcf342c26cae27094f8a23afef1de96206 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 4 Apr 2017 20:25:24 +0200 Subject: [PATCH 021/188] WAPA stub --- src/zabapgit_object_serializing.prog.abap | 1 + src/zabapgit_object_wapa.prog.abap | 73 +++++++++++++++++++++++ src/zabapgit_object_wapa.prog.xml | 22 +++++++ 3 files changed, 96 insertions(+) create mode 100644 src/zabapgit_object_wapa.prog.abap create mode 100644 src/zabapgit_object_wapa.prog.xml diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index f8153fd7d..c03e7ba86 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -50,6 +50,7 @@ INCLUDE zabapgit_object_type. INCLUDE zabapgit_object_vcls. INCLUDE zabapgit_object_view. INCLUDE zabapgit_object_w3xx. +INCLUDE zabapgit_object_wapa. INCLUDE zabapgit_object_wdya. INCLUDE zabapgit_object_wdyn. INCLUDE zabapgit_object_webi. diff --git a/src/zabapgit_object_wapa.prog.abap b/src/zabapgit_object_wapa.prog.abap new file mode 100644 index 000000000..a095fa12c --- /dev/null +++ b/src/zabapgit_object_wapa.prog.abap @@ -0,0 +1,73 @@ +*&---------------------------------------------------------------------* +*& Include ZABAPGIT_OBJECT_WAPA +*&---------------------------------------------------------------------* + +*----------------------------------------------------------------------* +* CLASS lcl_object_wapa DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wapa DEFINITION INHERITING FROM lcl_objects_super FINAL. + + PUBLIC SECTION. + INTERFACES lif_object. + ALIASES mo_files FOR lif_object~mo_files. + +ENDCLASS. "lcl_object_TRAN DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_object_wapa IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_object_wapa IMPLEMENTATION. + + METHOD lif_object~has_changed_since. + rv_changed = abap_true. + ENDMETHOD. "lif_object~has_changed_since + + METHOD lif_object~changed_by. +* todo + rv_user = c_user_unknown. + ENDMETHOD. + + METHOD lif_object~get_metadata. + rs_metadata = get_metadata( ). + ENDMETHOD. "lif_object~get_metadata + + METHOD lif_object~exists. + +* todo +* rv_bool = boolc( sy-subrc = 0 ). + + ENDMETHOD. "lif_object~exists + + METHOD lif_object~jump. + +* todo + + ENDMETHOD. "jump + + METHOD lif_object~delete. + +* todo + + ENDMETHOD. "delete + + METHOD lif_object~deserialize. + +* todo + + ENDMETHOD. "deserialize + + METHOD lif_object~serialize. + +* todo + + ENDMETHOD. "serialize + + METHOD lif_object~compare_to_remote_version. + CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. + ENDMETHOD. + +ENDCLASS. "lcl_object_tran IMPLEMENTATION diff --git a/src/zabapgit_object_wapa.prog.xml b/src/zabapgit_object_wapa.prog.xml new file mode 100644 index 000000000..edd9ae545 --- /dev/null +++ b/src/zabapgit_object_wapa.prog.xml @@ -0,0 +1,22 @@ + + + + + + ZABAPGIT_OBJECT_WAPA + A + X + I + E + X + + + + R + Include ZABAPGIT_OBJECT_TRAN + 28 + + + + + From 98c475ffe20b3ae1534223f9cba20011d1afbbe3 Mon Sep 17 00:00:00 2001 From: larshp Date: Tue, 4 Apr 2017 20:27:14 +0200 Subject: [PATCH 022/188] revert previous commit, wrong branch too tired --- src/zabapgit_object_serializing.prog.abap | 1 - src/zabapgit_object_wapa.prog.abap | 73 ----------------------- src/zabapgit_object_wapa.prog.xml | 22 ------- 3 files changed, 96 deletions(-) delete mode 100644 src/zabapgit_object_wapa.prog.abap delete mode 100644 src/zabapgit_object_wapa.prog.xml diff --git a/src/zabapgit_object_serializing.prog.abap b/src/zabapgit_object_serializing.prog.abap index c03e7ba86..f8153fd7d 100644 --- a/src/zabapgit_object_serializing.prog.abap +++ b/src/zabapgit_object_serializing.prog.abap @@ -50,7 +50,6 @@ INCLUDE zabapgit_object_type. INCLUDE zabapgit_object_vcls. INCLUDE zabapgit_object_view. INCLUDE zabapgit_object_w3xx. -INCLUDE zabapgit_object_wapa. INCLUDE zabapgit_object_wdya. INCLUDE zabapgit_object_wdyn. INCLUDE zabapgit_object_webi. diff --git a/src/zabapgit_object_wapa.prog.abap b/src/zabapgit_object_wapa.prog.abap deleted file mode 100644 index a095fa12c..000000000 --- a/src/zabapgit_object_wapa.prog.abap +++ /dev/null @@ -1,73 +0,0 @@ -*&---------------------------------------------------------------------* -*& Include ZABAPGIT_OBJECT_WAPA -*&---------------------------------------------------------------------* - -*----------------------------------------------------------------------* -* CLASS lcl_object_wapa DEFINITION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_wapa DEFINITION INHERITING FROM lcl_objects_super FINAL. - - PUBLIC SECTION. - INTERFACES lif_object. - ALIASES mo_files FOR lif_object~mo_files. - -ENDCLASS. "lcl_object_TRAN DEFINITION - -*----------------------------------------------------------------------* -* CLASS lcl_object_wapa IMPLEMENTATION -*----------------------------------------------------------------------* -* -*----------------------------------------------------------------------* -CLASS lcl_object_wapa IMPLEMENTATION. - - METHOD lif_object~has_changed_since. - rv_changed = abap_true. - ENDMETHOD. "lif_object~has_changed_since - - METHOD lif_object~changed_by. -* todo - rv_user = c_user_unknown. - ENDMETHOD. - - METHOD lif_object~get_metadata. - rs_metadata = get_metadata( ). - ENDMETHOD. "lif_object~get_metadata - - METHOD lif_object~exists. - -* todo -* rv_bool = boolc( sy-subrc = 0 ). - - ENDMETHOD. "lif_object~exists - - METHOD lif_object~jump. - -* todo - - ENDMETHOD. "jump - - METHOD lif_object~delete. - -* todo - - ENDMETHOD. "delete - - METHOD lif_object~deserialize. - -* todo - - ENDMETHOD. "deserialize - - METHOD lif_object~serialize. - -* todo - - ENDMETHOD. "serialize - - METHOD lif_object~compare_to_remote_version. - CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. - ENDMETHOD. - -ENDCLASS. "lcl_object_tran IMPLEMENTATION diff --git a/src/zabapgit_object_wapa.prog.xml b/src/zabapgit_object_wapa.prog.xml deleted file mode 100644 index edd9ae545..000000000 --- a/src/zabapgit_object_wapa.prog.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - ZABAPGIT_OBJECT_WAPA - A - X - I - E - X - - - - R - Include ZABAPGIT_OBJECT_TRAN - 28 - - - - - From bcd76aa0ae3e3c35d05db9941033dcc02567f245 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 5 Apr 2017 17:19:43 +0200 Subject: [PATCH 023/188] add param --- src/zabapgit_authorizations.prog.abap | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_authorizations.prog.abap b/src/zabapgit_authorizations.prog.abap index 377192832..a3b6c0977 100644 --- a/src/zabapgit_authorizations.prog.abap +++ b/src/zabapgit_authorizations.prog.abap @@ -12,6 +12,7 @@ INTERFACE lif_auth. METHODS: is_allowed IMPORTING iv_activity TYPE ty_activity + iv_param TYPE string OPTIONAL RETURNING VALUE(rv_allowed) TYPE abap_bool. ENDINTERFACE. @@ -27,6 +28,7 @@ CLASS lcl_auth DEFINITION FINAL. CLASS-METHODS: is_allowed IMPORTING iv_activity TYPE ty_activity + iv_param TYPE string OPTIONAL RETURNING VALUE(rv_allowed) TYPE abap_bool. ENDCLASS. @@ -39,7 +41,8 @@ CLASS lcl_auth IMPLEMENTATION. TRY. CREATE OBJECT li_auth TYPE ('LCL_AUTH_EXIT'). - rv_allowed = li_auth->is_allowed( iv_activity ). + rv_allowed = li_auth->is_allowed( iv_activity = iv_activity + iv_param = iv_param ). CATCH cx_sy_create_object_error. rv_allowed = abap_true. ENDTRY. From 57bf690d17888f8b88f43128854d4e677dcd4dc1 Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 5 Apr 2017 17:56:29 +0200 Subject: [PATCH 024/188] authorization constants renamed --- src/zabapgit_authorizations.prog.abap | 16 ++++++++-------- src/zabapgit_view_repo.prog.abap | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/zabapgit_authorizations.prog.abap b/src/zabapgit_authorizations.prog.abap index a3b6c0977..0e69d39ba 100644 --- a/src/zabapgit_authorizations.prog.abap +++ b/src/zabapgit_authorizations.prog.abap @@ -2,16 +2,16 @@ *& Include ZABAPGIT_AUTHORIZATIONS *&---------------------------------------------------------------------* -TYPES: ty_activity TYPE string. +TYPES: ty_authorization TYPE string. -CONSTANTS: BEGIN OF gc_activities, - uninstall TYPE ty_activity VALUE 'UNINSTALL', - END OF gc_activities. +CONSTANTS: BEGIN OF gc_authorization, + uninstall TYPE ty_authorization VALUE 'UNINSTALL', + END OF gc_authorization. INTERFACE lif_auth. METHODS: is_allowed - IMPORTING iv_activity TYPE ty_activity + IMPORTING iv_authorization TYPE ty_authorization iv_param TYPE string OPTIONAL RETURNING VALUE(rv_allowed) TYPE abap_bool. ENDINTERFACE. @@ -27,7 +27,7 @@ CLASS lcl_auth DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: is_allowed - IMPORTING iv_activity TYPE ty_activity + IMPORTING iv_authorization TYPE ty_authorization iv_param TYPE string OPTIONAL RETURNING VALUE(rv_allowed) TYPE abap_bool. @@ -41,8 +41,8 @@ CLASS lcl_auth IMPLEMENTATION. TRY. CREATE OBJECT li_auth TYPE ('LCL_AUTH_EXIT'). - rv_allowed = li_auth->is_allowed( iv_activity = iv_activity - iv_param = iv_param ). + rv_allowed = li_auth->is_allowed( iv_authorization = iv_authorization + iv_param = iv_param ). CATCH cx_sy_create_object_error. rv_allowed = abap_true. ENDTRY. diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index b7b0668c1..677472278 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -321,7 +321,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. CLEAR lv_crossout. IF mo_repo->is_write_protected( ) = abap_true - OR lcl_auth=>is_allowed( gc_activities-uninstall ) = abap_false. + OR lcl_auth=>is_allowed( gc_authorization-uninstall ) = abap_false. lv_crossout = gc_html_opt-crossout. ENDIF. lo_tb_advanced->add( iv_txt = 'Uninstall' From a338e86772169a9130f829b9b1772c570069880e Mon Sep 17 00:00:00 2001 From: larshp Date: Wed, 5 Apr 2017 19:05:45 +0200 Subject: [PATCH 025/188] WAPA serialization #12 --- src/zabapgit_object_wapa.prog.abap | 186 +++++++++++++++++++++++++++-- 1 file changed, 176 insertions(+), 10 deletions(-) diff --git a/src/zabapgit_object_wapa.prog.abap b/src/zabapgit_object_wapa.prog.abap index a095fa12c..dd4777376 100644 --- a/src/zabapgit_object_wapa.prog.abap +++ b/src/zabapgit_object_wapa.prog.abap @@ -13,6 +13,22 @@ CLASS lcl_object_wapa DEFINITION INHERITING FROM lcl_objects_super FINAL. INTERFACES lif_object. ALIASES mo_files FOR lif_object~mo_files. + PRIVATE SECTION. + TYPES: BEGIN OF ty_page, + attributes TYPE o2pagattr, + END OF ty_page. + + TYPES: ty_pages_tt TYPE STANDARD TABLE OF ty_page WITH DEFAULT KEY. + + METHODS: + get_page_content + IMPORTING io_page TYPE REF TO cl_o2_api_pages + RETURNING VALUE(rv_content) TYPE xstring, + read_page + IMPORTING is_page TYPE o2pagattr + RETURNING VALUE(rs_page) TYPE ty_page + RAISING lcx_exception. + ENDCLASS. "lcl_object_TRAN DEFINITION *----------------------------------------------------------------------* @@ -27,8 +43,26 @@ CLASS lcl_object_wapa IMPLEMENTATION. ENDMETHOD. "lif_object~has_changed_since METHOD lif_object~changed_by. -* todo - rv_user = c_user_unknown. + + DATA: lv_name TYPE o2applname, + lt_pages TYPE STANDARD TABLE OF o2pagdir WITH DEFAULT KEY, + ls_latest LIKE LINE OF lt_pages. + + + lv_name = ms_item-obj_name. + + SELECT * FROM o2pagdir INTO TABLE lt_pages WHERE applname = lv_name. + IF sy-subrc <> 0. + rv_user = c_user_unknown. + ENDIF. + + SORT lt_pages BY changedon DESCENDING changetime DESCENDING. + + READ TABLE lt_pages INDEX 1 INTO ls_latest. + ASSERT sy-subrc = 0. + + rv_user = ls_latest-changedby. + ENDMETHOD. METHOD lif_object~get_metadata. @@ -37,35 +71,167 @@ CLASS lcl_object_wapa IMPLEMENTATION. METHOD lif_object~exists. -* todo -* rv_bool = boolc( sy-subrc = 0 ). + DATA: lv_name TYPE o2applname. + + + lv_name = ms_item-obj_name. + + cl_o2_api_application=>load( + EXPORTING + p_application_name = lv_name + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 ). + rv_bool = boolc( sy-subrc = 0 ). ENDMETHOD. "lif_object~exists METHOD lif_object~jump. - -* todo - + lcx_exception=>raise( 'todo, jump, WAPA' ). ENDMETHOD. "jump METHOD lif_object~delete. -* todo +* todo, not supported yet + ASSERT 0 = 1. ENDMETHOD. "delete METHOD lif_object~deserialize. -* todo +* todo, not supported yet + ASSERT 0 = 1. ENDMETHOD. "deserialize METHOD lif_object~serialize. -* todo + DATA: lv_name TYPE o2applname, + ls_attributes TYPE o2applattr, + lt_navgraph TYPE o2applgrap_table, + lt_pages TYPE o2pagelist, + lt_pages_info TYPE ty_pages_tt, + lo_bsp TYPE REF TO cl_o2_api_application. + + FIELD-SYMBOLS: LIKE LINE OF lt_pages. + + + lv_name = ms_item-obj_name. + + cl_o2_api_application=>load( + EXPORTING + p_application_name = lv_name + IMPORTING + p_application = lo_bsp + EXCEPTIONS + object_not_existing = 1 + permission_failure = 2 + error_occured = 3 ). + IF sy-subrc <> 0. + RETURN. + ENDIF. + + lo_bsp->get_attributes( + EXPORTING + p_version = 'A' + IMPORTING + p_attributes = ls_attributes ). + + CLEAR: ls_attributes-author, + ls_attributes-createdon, + ls_attributes-changedby, + ls_attributes-changedon, + ls_attributes-devclass. + + io_xml->add( iv_name = 'ATTRIBUTES' + ig_data = ls_attributes ). + + lo_bsp->get_navgraph( + EXPORTING + p_version = 'A' + IMPORTING + p_navgraph = lt_navgraph ). + + io_xml->add( iv_name = 'NAVGRAPH' + ig_data = lt_navgraph ). + + cl_o2_api_pages=>get_all_pages( + EXPORTING + p_applname = lv_name + p_version = 'A' + IMPORTING + p_pages = lt_pages ). + + LOOP AT lt_pages ASSIGNING . + APPEND read_page( ) TO lt_pages_info. + ENDLOOP. + + io_xml->add( iv_name = 'PAGES' + ig_data = lt_pages_info ). ENDMETHOD. "serialize + METHOD read_page. + + DATA: lv_name TYPE o2applname, + ls_pagekey TYPE o2pagkey, + lv_content TYPE xstring, + lv_extra TYPE string, + lv_ext TYPE string, + lo_page TYPE REF TO cl_o2_api_pages. + + + lv_name = ms_item-obj_name. + + ls_pagekey-applname = lv_name. + ls_pagekey-pagekey = is_page-pagekey. + + cl_o2_api_pages=>load( + EXPORTING + p_pagekey = ls_pagekey + IMPORTING + p_page = lo_page ). +* todo, add moar page data into rs_page: +* event handlers +* page parameters +* type definitions + + lv_content = get_page_content( lo_page ). + SPLIT is_page-pagename AT '.' INTO lv_extra lv_ext. + REPLACE ALL OCCURRENCES OF '/' IN lv_extra WITH '_-'. + mo_files->add_raw( + iv_extra = lv_extra + iv_ext = lv_ext + iv_data = lv_content ). + + rs_page-attributes = is_page. + + CLEAR: rs_page-attributes-author, + rs_page-attributes-createdon, + rs_page-attributes-changedby, + rs_page-attributes-changedon, + rs_page-attributes-implclass, + rs_page-attributes-gendate, + rs_page-attributes-gentime. + + ENDMETHOD. + + METHOD get_page_content. + + DATA: lt_content TYPE o2pageline_table, + lv_string TYPE string. + + io_page->get_page( + IMPORTING + p_content = lt_content ). + + CONCATENATE LINES OF lt_content INTO lv_string SEPARATED BY gc_newline RESPECTING BLANKS. + + rv_content = lcl_convert=>string_to_xstring_utf8( lv_string ). + + ENDMETHOD. + METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. From 2b34ec534e42502853fb8f89ede2c46d5be057d5 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Wed, 5 Apr 2017 19:31:50 +0200 Subject: [PATCH 026/188] bugfix --- src/zabapgit_object_wapa.prog.abap | 1 + 1 file changed, 1 insertion(+) diff --git a/src/zabapgit_object_wapa.prog.abap b/src/zabapgit_object_wapa.prog.abap index dd4777376..85c2dc15f 100644 --- a/src/zabapgit_object_wapa.prog.abap +++ b/src/zabapgit_object_wapa.prog.abap @@ -54,6 +54,7 @@ CLASS lcl_object_wapa IMPLEMENTATION. SELECT * FROM o2pagdir INTO TABLE lt_pages WHERE applname = lv_name. IF sy-subrc <> 0. rv_user = c_user_unknown. + RETURN. ENDIF. SORT lt_pages BY changedon DESCENDING changetime DESCENDING. From 07d109c138bebda64a5dcb2abca428bc361dedef Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Sat, 8 Apr 2017 09:19:10 +0300 Subject: [PATCH 027/188] fixes #706 --- src/zabapgit_migrations.prog.abap | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/zabapgit_migrations.prog.abap b/src/zabapgit_migrations.prog.abap index b99db4d51..4a104cd34 100644 --- a/src/zabapgit_migrations.prog.abap +++ b/src/zabapgit_migrations.prog.abap @@ -34,6 +34,7 @@ CLASS lcl_migrations IMPLEMENTATION. METHOD local_dot_abapgit. DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, + lv_msg TYPE string, lv_shown TYPE abap_bool, lo_dot_abapgit TYPE REF TO lcl_dot_abapgit, lx_exception TYPE REF TO lcx_exception. @@ -64,19 +65,19 @@ CLASS lcl_migrations IMPLEMENTATION. TRY. ->refresh( ). CATCH lcx_exception INTO lx_exception. + lv_msg = |Please do not use the "{ ->get_name( ) }" repository until migrated|. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING titel = 'Migration has failed' txt1 = lx_exception->mv_text - txt2 = 'Please do not use the ''' && ->get_name( ) && ''' repository until migrated.' + txt2 = lv_msg txt3 = 'You will be prompted to migrate the repository every time you run abapGit.' txt4 = 'You can safely remove the repository in its ''Advanced -> Remove'' menu.'. CONTINUE. ENDTRY. lo_dot_abapgit = ->find_remote_dot_abapgit( ). - IF lo_dot_abapgit IS INITIAL. -* .abapgit.xml is not in the remote repo yet + IF lo_dot_abapgit IS INITIAL. " .abapgit.xml is not in the remote repo yet lo_dot_abapgit = lcl_dot_abapgit=>build_default( ). ENDIF. ENDIF. From 57c12b8d80b9429b33849c1811e9626179b64e73 Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Sat, 8 Apr 2017 09:44:29 +0300 Subject: [PATCH 028/188] toc css fix (conflicts between line height and sup tag) --- src/zabapgit_css_common.w3mi.data.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 032ee97f0..960708d7f 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -24,7 +24,7 @@ img { border: 0px; vertical-align: middle; } table { border-collapse: collapse; } pre { display: inline; } sup { - vertical-align: baseline; + vertical-align: top; position: relative; top: -0.5em; font-size: 75%; From 7d7e4dafaee93fa747bd90387c00787667226941 Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Sat, 8 Apr 2017 10:19:13 +0300 Subject: [PATCH 029/188] Implementation of lif_object~changed_by for W3xx --- src/zabapgit_object_w3xx.prog.abap | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index 26e19791b..bb3b555f8 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -75,7 +75,17 @@ CLASS lcl_object_w3super IMPLEMENTATION. ENDMETHOD. "lif_object~has_changed_since METHOD lif_object~changed_by. - rv_user = c_user_unknown. " todo + + SELECT SINGLE chname INTO rv_user + FROM wwwdata + WHERE relid = ms_key-relid + AND objid = ms_key-objid + AND srtf2 = 0. + + IF sy-subrc IS NOT INITIAL OR rv_user IS INITIAL. + rv_user = c_user_unknown. + ENDIF. + ENDMETHOD. METHOD lif_object~jump. From 09b7fe0601d213c370bc65d10bbf975663bb1ded Mon Sep 17 00:00:00 2001 From: larshp Date: Thu, 13 Apr 2017 08:52:11 +0200 Subject: [PATCH 030/188] issue #696 dont ignore files in root folder, only subfolders --- src/zabapgit_dot_abapgit.prog.abap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index 7e21db9c2..c2d6e19c1 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -202,6 +202,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. DATA: lv_name TYPE string, lv_starting TYPE string, lv_dot TYPE string, + lv_count TYPE i, lv_ignore TYPE string. @@ -211,8 +212,11 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. CONCATENATE '/' gc_dot_abapgit INTO lv_dot. LOOP AT ms_data-ignore INTO lv_ignore. + FIND ALL OCCURRENCES OF '/' IN lv_name MATCH COUNT lv_count. + IF lv_name CP lv_ignore OR ( ms_data-starting_folder <> '/' + AND lv_count > 1 AND NOT lv_name CP lv_starting AND NOT lv_name = lv_dot ). rv_ignored = abap_true. From 782aa27d984c16617330a7120393af1777ed6da4 Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Thu, 13 Apr 2017 09:56:27 +0300 Subject: [PATCH 031/188] news finetuning --- src/zabapgit_css_common.w3mi.data.css | 63 ++++++++++++++------------- src/zabapgit_html_chunks.prog.abap | 40 ++++++++--------- src/zabapgit_news.prog.abap | 30 +++++++------ 3 files changed, 67 insertions(+), 66 deletions(-) diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css index 053a3501e..584ca974e 100644 --- a/src/zabapgit_css_common.w3mi.data.css +++ b/src/zabapgit_css_common.w3mi.data.css @@ -62,6 +62,8 @@ input:focus, textarea:focus { .pad4px { padding: 4px; } .w100 { width: 100%; } .w40 { width: 40%; } +.float-right { float: right; } +.pad-right { padding-right: 6px; } /* STRUCTURE DIVS, HEADER & FOOTER */ div#header { @@ -126,6 +128,7 @@ div.repo { margin-top: 3px; background-color: #f2f2f2; padding: 0.5em 1em 0.5em 1em; + position: relative; } .repo_name span.name { font-weight: bold; @@ -744,47 +747,47 @@ div.tutorial h2 { .nav-container ul ul li.separator:hover { background-color: inherit; } /* News Announcement */ -.news { + +div.news { position: absolute; z-index: 99; - top: 50%; + top: 36px; left: 50%; width: 40em; - margin-top: -12em; margin-left: -20em; - border: 1px solid #ccc; background-color: white; + box-shadow: 1px 1px 3px 2px #dcdcdc; +} + +div.news div.headbar { + text-transform: uppercase; + font-size: small; + padding: 4px 6px; +} + +div.news div.title { + color: #f8f8f8; + background-color: #888; +} + +div.news div.title a { color: #c6d6ec; } +div.news div.important { color: #e8961b; } + +div.news div.newslist { padding: 0.5em; + color: #444; } -.news .title { - color: #888888; - font-weight: bold; - font-size: 16px; - padding-top: 4px; - padding-bottom: 4px; -} - -.news .attention { - background-color: #ff9800; - color: white; - padding: 10px; -} - -.news li { - margin: 4px; +div.news li { padding-left: 10px; - font-size: 15px; list-style-type: none; } -.news p.versionHeader { - font-size: 16px; - color: #888888; - font-weight: bold; - text-align: left; - padding-top: 8px; - padding-bottom: 8px; - border-bottom: 1px #ddd solid; - margin: 4px; +div.news h1:first-child { margin: auto; } +div.news h1 { + font-size: inherit; + padding: 6px 4px; + margin: 4px auto auto; + text-decoration: underline; + font-weight: normal; } diff --git a/src/zabapgit_html_chunks.prog.abap b/src/zabapgit_html_chunks.prog.abap index 5db3a7f55..7b6238512 100644 --- a/src/zabapgit_html_chunks.prog.abap +++ b/src/zabapgit_html_chunks.prog.abap @@ -80,9 +80,10 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. ro_html->add( '
    ' ). IF io_news IS BOUND AND io_news->has_news( ) = abap_true. - ro_html->add_a( iv_act = 'displayNews()' - iv_typ = gc_action_type-onclick - iv_txt = lcl_html=>icon( iv_name = 'history/dark' ) ). + ro_html->add_a( iv_act = 'displayNews()' + iv_typ = gc_action_type-onclick + iv_txt = lcl_html=>icon( iv_name = 'pulse/blue' + iv_hint = 'Display changelog' ) ). ENDIF. IF abap_true = lcl_app=>user( )->is_favorite_repo( io_repo->get_key( ) ). @@ -231,44 +232,39 @@ CLASS lcl_gui_chunk_lib IMPLEMENTATION. METHOD render_news. DATA lt_log TYPE lcl_news=>tt_log. + FIELD-SYMBOLS: LIKE LINE OF lt_log. CREATE OBJECT ro_html. - IF io_news IS NOT BOUND. - RETURN. - ELSEIF io_news->has_news( ) = abap_true. - lt_log = io_news->get_log( ). - ELSE. + IF io_news IS NOT BOUND OR io_news->has_news( ) = abap_false. RETURN. ENDIF. - FIELD-SYMBOLS: LIKE LINE OF lt_log. + lt_log = io_news->get_log( ). - ro_html->add( '
    ' ). + ro_html->add( '
    { -type }{ is_item-obj_type }{ lv_filename }{ read_last_changed_by( is_file ) }' ). ro_html->add_a( iv_act = 'errorStub(event)' " Will be reinit by JS - iv_typ = gc_action_type-onclick + iv_typ = lif_defs=>gc_action_type-onclick iv_id = 'commitButton' iv_style = 'display: none' iv_txt = 'Commit ()' - iv_opt = gc_html_opt-strong ) ##NO_TEXT. + iv_opt = lif_defs=>gc_html_opt-strong ) ##NO_TEXT. ro_html->add_a( iv_act = |{ c_action-stage_all }| iv_id = 'commitAllButton' iv_txt = lv_add_all_txt ) ##NO_TEXT. @@ -335,8 +335,8 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. ENDMETHOD. "scripts METHOD read_last_changed_by. - DATA: ls_local_file TYPE ty_file_item, - lt_files_local type ty_files_item_tt. + DATA: ls_local_file TYPE lif_defs=>ty_file_item, + lt_files_local TYPE lif_defs=>ty_files_item_tt. TRY. lt_files_local = mo_repo->get_files_local( ). READ TABLE lt_files_local INTO ls_local_file WITH KEY file = is_file. diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index e71636def..57f6cb7f9 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -92,8 +92,8 @@ CLASS lcl_persistence_repo DEFINITION FINAL. PUBLIC SECTION. TYPES: BEGIN OF ty_local_checksum, - item TYPE ty_item, - files TYPE ty_file_signatures_tt, + item TYPE lif_defs=>ty_item, + files TYPE lif_defs=>ty_file_signatures_tt, END OF ty_local_checksum. TYPES: ty_local_checksum_tt TYPE STANDARD TABLE OF ty_local_checksum WITH DEFAULT KEY. @@ -101,7 +101,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL. TYPES: BEGIN OF ty_repo_xml, url TYPE string, branch_name TYPE string, - sha1 TYPE ty_sha1, + sha1 TYPE lif_defs=>ty_sha1, package TYPE devclass, offline TYPE sap_bool, local_checksums TYPE ty_local_checksum_tt, @@ -162,7 +162,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL. METHODS add IMPORTING iv_url TYPE string iv_branch_name TYPE string - iv_branch TYPE ty_sha1 OPTIONAL + iv_branch TYPE lif_defs=>ty_sha1 OPTIONAL iv_package TYPE devclass iv_offline TYPE sap_bool DEFAULT abap_false is_dot_abapgit TYPE lcl_dot_abapgit=>ty_dot_abapgit @@ -480,7 +480,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. BEGIN OF ty_repo_config, url TYPE lcl_persistence_repo=>ty_repo-url, login TYPE string, - git_user TYPE ty_git_user, + git_user TYPE lif_defs=>ty_git_user, last_change_seen TYPE string, END OF ty_repo_config. @@ -488,7 +488,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. TYPES: BEGIN OF ty_user, - default_git_user TYPE ty_git_user, + default_git_user TYPE lif_defs=>ty_git_user, repo_show TYPE lcl_persistence_repo=>ty_repo-key, hide_files TYPE abap_bool, changes_only TYPE abap_bool, @@ -1353,7 +1353,7 @@ CLASS lcl_persistence_migrate IMPLEMENTATION. ls_dd25v-viewname = lcl_persistence_db=>c_lock. ls_dd25v-aggtype = 'E'. ls_dd25v-roottab = lcl_persistence_db=>c_tabname. - ls_dd25v-ddlanguage = gc_english. + ls_dd25v-ddlanguage = lif_defs=>gc_english. ls_dd25v-ddtext = c_text. APPEND INITIAL LINE TO lt_dd26e ASSIGNING . @@ -1446,7 +1446,7 @@ CLASS lcl_persistence_migrate IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_dd03p. ls_dd02v-tabname = lcl_persistence_db=>c_tabname. - ls_dd02v-ddlanguage = gc_english. + ls_dd02v-ddlanguage = lif_defs=>gc_english. ls_dd02v-tabclass = 'TRANSP'. ls_dd02v-ddtext = c_text. ls_dd02v-contflag = 'A'. diff --git a/src/zabapgit_persistence_old.prog.abap b/src/zabapgit_persistence_old.prog.abap index a4fd61bd5..6123998b6 100644 --- a/src/zabapgit_persistence_old.prog.abap +++ b/src/zabapgit_persistence_old.prog.abap @@ -17,7 +17,7 @@ CLASS lcl_persistence DEFINITION FINAL FRIENDS lcl_persistence_migrate. TYPES: BEGIN OF ty_repo_persi, url TYPE string, branch_name TYPE string, - sha1 TYPE ty_sha1, + sha1 TYPE lif_defs=>ty_sha1, package TYPE devclass, offline TYPE sap_bool, END OF ty_repo_persi. @@ -30,13 +30,13 @@ CLASS lcl_persistence DEFINITION FINAL FRIENDS lcl_persistence_migrate. METHODS update IMPORTING iv_url TYPE ty_repo_persi-url iv_branch_name TYPE ty_repo_persi-branch_name - iv_branch TYPE ty_sha1 + iv_branch TYPE lif_defs=>ty_sha1 RAISING lcx_exception. METHODS add IMPORTING iv_url TYPE string iv_branch_name TYPE string - iv_branch TYPE ty_sha1 OPTIONAL + iv_branch TYPE lif_defs=>ty_sha1 OPTIONAL iv_package TYPE devclass iv_offline TYPE sap_bool DEFAULT abap_false RAISING lcx_exception. @@ -109,14 +109,14 @@ CLASS lcl_persistence IMPLEMENTATION. METHOD header_online. rs_header-tdid = 'ST'. - rs_header-tdspras = gc_english. + rs_header-tdspras = lif_defs=>gc_english. rs_header-tdname = 'ZABAPGIT'. rs_header-tdobject = 'TEXT'. ENDMETHOD. "header METHOD header_offline. rs_header-tdid = 'ST'. - rs_header-tdspras = gc_english. + rs_header-tdspras = lif_defs=>gc_english. rs_header-tdname = 'ZABAPGIT_OFFLINE'. rs_header-tdobject = 'TEXT'. ENDMETHOD. "header_offline @@ -437,7 +437,7 @@ CLASS lcl_user IMPLEMENTATION. CALL FUNCTION 'READ_TEXT' EXPORTING id = 'ST' - language = gc_english + language = lif_defs=>gc_english name = iv_name object = 'TEXT' TABLES @@ -474,7 +474,7 @@ CLASS lcl_user IMPLEMENTATION. APPEND ls_line TO lt_lines. ls_header-tdid = 'ST'. - ls_header-tdspras = gc_english. + ls_header-tdspras = lif_defs=>gc_english. ls_header-tdname = iv_name. ls_header-tdobject = 'TEXT'. diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index fbc651331..05bfa24bb 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -72,7 +72,7 @@ CLASS lcl_popups DEFINITION FINAL. RAISING lcx_exception, popup_to_create_transp_branch IMPORTING it_transport_headers TYPE trwbo_request_headers - RETURNING VALUE(rs_transport_branch) TYPE ty_transport_to_branch + RETURNING VALUE(rs_transport_branch) TYPE lif_defs=>ty_transport_to_branch RAISING lcx_exception lcx_cancel, popup_to_select_transports diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index b6590bb16..0f07cdfa4 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -19,14 +19,14 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv. get_files_local IMPORTING io_log TYPE REF TO lcl_log OPTIONAL it_filter TYPE scts_tadir OPTIONAL - RETURNING VALUE(rt_files) TYPE ty_files_item_tt + RETURNING VALUE(rt_files) TYPE lif_defs=>ty_files_item_tt RAISING lcx_exception, get_local_checksums RETURNING VALUE(rt_checksums) TYPE lcl_persistence_repo=>ty_local_checksum_tt, get_local_checksums_per_file - RETURNING VALUE(rt_checksums) TYPE ty_file_signatures_tt, + RETURNING VALUE(rt_checksums) TYPE lif_defs=>ty_file_signatures_tt, get_files_remote - RETURNING VALUE(rt_files) TYPE ty_files_tt + RETURNING VALUE(rt_files) TYPE lif_defs=>ty_files_tt RAISING lcx_exception, get_package RETURNING VALUE(rv_package) TYPE lcl_persistence_repo=>ty_repo-package, @@ -50,7 +50,7 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv. RAISING lcx_exception, refresh_local, " For testing purposes, maybe removed later update_local_checksums - IMPORTING it_files TYPE ty_file_signatures_tt + IMPORTING it_files TYPE lif_defs=>ty_file_signatures_tt RAISING lcx_exception, rebuild_local_checksums RAISING lcx_exception, @@ -62,15 +62,15 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv. RAISING lcx_exception. PROTECTED SECTION. - DATA: mt_local TYPE ty_files_item_tt, - mt_remote TYPE ty_files_tt, + DATA: mt_local TYPE lif_defs=>ty_files_item_tt, + mt_remote TYPE lif_defs=>ty_files_tt, mv_do_local_refresh TYPE abap_bool, mv_last_serialization TYPE timestamp, ms_data TYPE lcl_persistence_repo=>ty_repo. METHODS: set - IMPORTING iv_sha1 TYPE ty_sha1 OPTIONAL + IMPORTING iv_sha1 TYPE lif_defs=>ty_sha1 OPTIONAL it_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt OPTIONAL iv_url TYPE lcl_persistence_repo=>ty_repo-url OPTIONAL iv_branch_name TYPE lcl_persistence_repo=>ty_repo-branch_name OPTIONAL @@ -118,27 +118,27 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. RAISING lcx_exception, get_files_remote REDEFINITION, get_objects - RETURNING VALUE(rt_objects) TYPE ty_objects_tt + RETURNING VALUE(rt_objects) TYPE lif_defs=>ty_objects_tt RAISING lcx_exception, deserialize REDEFINITION, status IMPORTING io_log TYPE REF TO lcl_log OPTIONAL - RETURNING VALUE(rt_results) TYPE ty_results_tt + RETURNING VALUE(rt_results) TYPE lif_defs=>ty_results_tt RAISING lcx_exception, reset_status, rebuild_local_checksums REDEFINITION, push - IMPORTING is_comment TYPE ty_comment + IMPORTING is_comment TYPE lif_defs=>ty_comment io_stage TYPE REF TO lcl_stage RAISING lcx_exception. PRIVATE SECTION. DATA: - mt_objects TYPE ty_objects_tt, - mv_branch TYPE ty_sha1, + mt_objects TYPE lif_defs=>ty_objects_tt, + mv_branch TYPE lif_defs=>ty_sha1, mv_initialized TYPE abap_bool, mo_branches TYPE REF TO lcl_git_branch_list, - mt_status TYPE ty_results_tt. + mt_status TYPE lif_defs=>ty_results_tt. METHODS: handle_stage_ignore @@ -159,7 +159,7 @@ CLASS lcl_repo_offline DEFINITION INHERITING FROM lcl_repo FINAL. PUBLIC SECTION. METHODS: set_files_remote - IMPORTING it_files TYPE ty_files_tt + IMPORTING it_files TYPE lif_defs=>ty_files_tt RAISING lcx_exception. ENDCLASS. "lcl_repo_offline DEFINITION diff --git a/src/zabapgit_repo_browser_util.prog.abap b/src/zabapgit_repo_browser_util.prog.abap index c66a01f66..ecbda6fc5 100644 --- a/src/zabapgit_repo_browser_util.prog.abap +++ b/src/zabapgit_repo_browser_util.prog.abap @@ -23,7 +23,7 @@ CLASS lcl_repo_content_browser DEFINITION FINAL. changes TYPE i, lstate TYPE char1, rstate TYPE char1, - files TYPE tt_repo_files, + files TYPE lif_defs=>tt_repo_files, END OF ty_repo_item. TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY. @@ -69,7 +69,7 @@ DEFINE _reduce_state. ELSEIF &1 IS INITIAL. &1 = &2. ELSE. - &1 = gc_state-mixed. + &1 = lif_defs=>gc_state-mixed. ENDIF. END-OF-DEFINITION. @@ -175,7 +175,7 @@ CLASS lcl_repo_content_browser IMPLEMENTATION. METHOD build_repo_items_offline. - DATA: lt_tadir TYPE ty_tadir_tt. + DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt. FIELD-SYMBOLS: LIKE LINE OF rt_repo_items, LIKE LINE OF lt_tadir. @@ -198,8 +198,8 @@ CLASS lcl_repo_content_browser IMPLEMENTATION. METHOD build_repo_items_online. DATA: lo_repo_online TYPE REF TO lcl_repo_online, - ls_file TYPE ty_repo_file, - lt_status TYPE ty_results_tt. + ls_file TYPE lif_defs=>ty_repo_file, + lt_status TYPE lif_defs=>ty_results_tt. FIELD-SYMBOLS: LIKE LINE OF lt_status, LIKE LINE OF rt_repo_items. diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 0e106dc63..85e26ac1e 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -181,8 +181,8 @@ CLASS lcl_repo_online IMPLEMENTATION. METHOD push. - DATA: lv_branch TYPE ty_sha1, - lt_updated_files TYPE ty_file_signatures_tt. + DATA: lv_branch TYPE lif_defs=>ty_sha1, + lt_updated_files TYPE lif_defs=>ty_file_signatures_tt. handle_stage_ignore( io_stage ). @@ -234,8 +234,8 @@ CLASS lcl_repo_online IMPLEMENTATION. IF lv_add = abap_true. io_stage->add( - iv_path = gc_root_dir - iv_filename = gc_dot_abapgit + iv_path = lif_defs=>gc_root_dir + iv_filename = lif_defs=>gc_dot_abapgit iv_data = lo_dot_abapgit->serialize( ) ). set_dot_abapgit( lo_dot_abapgit ). @@ -245,9 +245,9 @@ CLASS lcl_repo_online IMPLEMENTATION. METHOD rebuild_local_checksums. "REMOTE - DATA: lt_remote TYPE ty_files_tt, - lt_local TYPE ty_files_item_tt, - ls_last_item TYPE ty_item, + DATA: lt_remote TYPE lif_defs=>ty_files_tt, + lt_local TYPE lif_defs=>ty_files_item_tt, + ls_last_item TYPE lif_defs=>ty_item, lv_branch_equal TYPE abap_bool, lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt. @@ -262,7 +262,7 @@ CLASS lcl_repo_online IMPLEMENTATION. DELETE lt_local " Remove non-code related files except .abapgit WHERE item IS INITIAL - AND NOT ( file-path = gc_root_dir AND file-filename = gc_dot_abapgit ). + AND NOT ( file-path = lif_defs=>gc_root_dir AND file-filename = lif_defs=>gc_dot_abapgit ). SORT lt_local BY item. SORT lt_remote BY path filename. @@ -318,8 +318,8 @@ CLASS lcl_repo IMPLEMENTATION. READ TABLE mt_remote ASSIGNING - WITH KEY path = gc_root_dir - filename = gc_dot_abapgit. + WITH KEY path = lif_defs=>gc_root_dir + filename = lif_defs=>gc_dot_abapgit. IF sy-subrc = 0. ro_dot = lcl_dot_abapgit=>deserialize( -data ). ENDIF. @@ -403,8 +403,8 @@ CLASS lcl_repo IMPLEMENTATION. " If this is not true that there is an error somewhere but not here DATA: lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt, - lt_files_idx TYPE ty_file_signatures_tt, - lt_local TYPE ty_files_item_tt, + lt_files_idx TYPE lif_defs=>ty_file_signatures_tt, + lt_local TYPE lif_defs=>ty_files_item_tt, lv_chks_row TYPE i, lv_file_row TYPE i. @@ -476,7 +476,7 @@ CLASS lcl_repo IMPLEMENTATION. METHOD deserialize. - DATA: lt_updated_files TYPE ty_file_signatures_tt, + DATA: lt_updated_files TYPE lif_defs=>ty_file_signatures_tt, lo_dot_abapgit TYPE REF TO lcl_dot_abapgit, lt_requirements TYPE STANDARD TABLE OF lcl_dot_abapgit=>ty_requirement. @@ -522,10 +522,10 @@ CLASS lcl_repo IMPLEMENTATION. METHOD get_files_local. - DATA: lt_tadir TYPE ty_tadir_tt, - ls_item TYPE ty_item, - lt_files TYPE ty_files_tt, - lt_cache TYPE SORTED TABLE OF ty_file_item + DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt, + ls_item TYPE lif_defs=>ty_item, + lt_files TYPE lif_defs=>ty_files_tt, + lt_cache TYPE SORTED TABLE OF lif_defs=>ty_file_item WITH NON-UNIQUE KEY item. DATA: lt_filter TYPE SORTED TABLE OF tadir @@ -545,10 +545,10 @@ CLASS lcl_repo IMPLEMENTATION. ENDIF. APPEND INITIAL LINE TO rt_files ASSIGNING . - -file-path = gc_root_dir. - -file-filename = gc_dot_abapgit. + -file-path = lif_defs=>gc_root_dir. + -file-filename = lif_defs=>gc_dot_abapgit. -file-data = get_dot_abapgit( )->serialize( ). - -file-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob + -file-sha1 = lcl_hash=>sha1( iv_type = lif_defs=>gc_type-blob iv_data = -file-data ). lt_cache = mt_local. @@ -601,7 +601,7 @@ CLASS lcl_repo IMPLEMENTATION. io_log = io_log ). LOOP AT lt_files ASSIGNING . -path = -path. - -sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = -data ). + -sha1 = lcl_hash=>sha1( iv_type = lif_defs=>gc_type-blob iv_data = -data ). APPEND INITIAL LINE TO rt_files ASSIGNING . -file = . @@ -687,8 +687,8 @@ CLASS lcl_repo IMPLEMENTATION. METHOD rebuild_local_checksums. "LOCAL (BASE) - DATA: lt_local TYPE ty_files_item_tt, - ls_last_item TYPE ty_item, + DATA: lt_local TYPE lif_defs=>ty_files_item_tt, + ls_last_item TYPE lif_defs=>ty_item, lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt. FIELD-SYMBOLS: LIKE LINE OF lt_checksums, @@ -700,7 +700,7 @@ CLASS lcl_repo IMPLEMENTATION. DELETE lt_local " Remove non-code related files except .abapgit WHERE item IS INITIAL - AND NOT ( file-path = gc_root_dir AND file-filename = gc_dot_abapgit ). + AND NOT ( file-path = lif_defs=>gc_root_dir AND file-filename = lif_defs=>gc_dot_abapgit ). SORT lt_local BY item. diff --git a/src/zabapgit_services_git.prog.abap b/src/zabapgit_services_git.prog.abap index fcc5041b7..29eb0ded3 100644 --- a/src/zabapgit_services_git.prog.abap +++ b/src/zabapgit_services_git.prog.abap @@ -181,7 +181,7 @@ CLASS lcl_services_git IMPLEMENTATION. METHOD commit. - DATA: ls_comment TYPE ty_comment, + DATA: ls_comment TYPE lif_defs=>ty_comment, lo_user TYPE REF TO lcl_persistence_user. lo_user = lcl_app=>user( ). @@ -208,7 +208,7 @@ CLASS lcl_services_git IMPLEMENTATION. IF NOT is_commit-body IS INITIAL. CONCATENATE ls_comment-comment '' is_commit-body - INTO ls_comment-comment SEPARATED BY gc_newline. + INTO ls_comment-comment SEPARATED BY lif_defs=>gc_newline. ENDIF. io_repo->push( is_comment = ls_comment diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index f29539745..f34e24db2 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -123,7 +123,7 @@ CLASS lcl_services_repo IMPLEMENTATION. METHOD purge. - DATA: lt_tadir TYPE ty_tadir_tt, + DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt, lv_answer TYPE c LENGTH 1, lo_repo TYPE REF TO lcl_repo, lv_package TYPE devclass, @@ -325,7 +325,7 @@ CLASS lcl_services_repo IMPLEMENTATION. lo_transport_to_branch TYPE REF TO lcl_transport_to_branch, lt_transport_headers TYPE trwbo_request_headers, lt_transport_objects TYPE scts_tadir, - ls_transport_to_branch TYPE ty_transport_to_branch. + ls_transport_to_branch TYPE lif_defs=>ty_transport_to_branch. lo_repository ?= lcl_app=>repo_srv( )->get( iv_repository_key ). diff --git a/src/zabapgit_stage.prog.abap b/src/zabapgit_stage.prog.abap index bbd75d976..04dbdda3a 100644 --- a/src/zabapgit_stage.prog.abap +++ b/src/zabapgit_stage.prog.abap @@ -16,7 +16,7 @@ CLASS lcl_stage DEFINITION FINAL. END OF c_method. TYPES: BEGIN OF ty_stage, - file TYPE ty_file, + file TYPE lif_defs=>ty_file, method TYPE ty_method, END OF ty_stage. @@ -31,37 +31,37 @@ CLASS lcl_stage DEFINITION FINAL. METHODS: constructor IMPORTING iv_branch_name TYPE string - iv_branch_sha1 TYPE ty_sha1 - iv_merge_source TYPE ty_sha1 OPTIONAL, + iv_branch_sha1 TYPE lif_defs=>ty_sha1 + iv_merge_source TYPE lif_defs=>ty_sha1 OPTIONAL, get_branch_name RETURNING VALUE(rv_branch) TYPE string, get_branch_sha1 - RETURNING VALUE(rv_branch) TYPE ty_sha1, + RETURNING VALUE(rv_branch) TYPE lif_defs=>ty_sha1, add - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE lif_defs=>ty_file-path + iv_filename TYPE lif_defs=>ty_file-filename iv_data TYPE xstring RAISING lcx_exception, reset - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE lif_defs=>ty_file-path + iv_filename TYPE lif_defs=>ty_file-filename RAISING lcx_exception, reset_all RAISING lcx_exception, rm - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE lif_defs=>ty_file-path + iv_filename TYPE lif_defs=>ty_file-filename RAISING lcx_exception, ignore - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE lif_defs=>ty_file-path + iv_filename TYPE lif_defs=>ty_file-filename RAISING lcx_exception, lookup - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE lif_defs=>ty_file-path + iv_filename TYPE lif_defs=>ty_file-filename RETURNING VALUE(rv_method) TYPE ty_method, get_merge_source - RETURNING VALUE(rv_source) TYPE ty_sha1, + RETURNING VALUE(rv_source) TYPE lif_defs=>ty_sha1, count RETURNING VALUE(rv_count) TYPE i, get_all @@ -70,13 +70,13 @@ CLASS lcl_stage DEFINITION FINAL. PRIVATE SECTION. DATA: mt_stage TYPE ty_stage_tt, mv_branch_name TYPE string, - mv_branch_sha1 TYPE ty_sha1, - mv_merge_source TYPE ty_sha1. + mv_branch_sha1 TYPE lif_defs=>ty_sha1, + mv_merge_source TYPE lif_defs=>ty_sha1. METHODS: append - IMPORTING iv_path TYPE ty_file-path - iv_filename TYPE ty_file-filename + IMPORTING iv_path TYPE lif_defs=>ty_file-path + iv_filename TYPE lif_defs=>ty_file-filename iv_method TYPE ty_method iv_data TYPE xstring OPTIONAL RAISING lcx_exception. diff --git a/src/zabapgit_stage_logic.prog.abap b/src/zabapgit_stage_logic.prog.abap index 14e05763d..124bc04fb 100644 --- a/src/zabapgit_stage_logic.prog.abap +++ b/src/zabapgit_stage_logic.prog.abap @@ -10,7 +10,7 @@ CLASS lcl_stage_logic DEFINITION FINAL. CLASS-METHODS: get IMPORTING io_repo TYPE REF TO lcl_repo_online - RETURNING VALUE(rs_files) TYPE ty_stage_files + RETURNING VALUE(rs_files) TYPE lif_defs=>ty_stage_files RAISING lcx_exception, count IMPORTING io_repo TYPE REF TO lcl_repo_online @@ -21,9 +21,9 @@ CLASS lcl_stage_logic DEFINITION FINAL. CLASS-METHODS: remove_ignored IMPORTING io_repo TYPE REF TO lcl_repo_online - CHANGING cs_files TYPE ty_stage_files, + CHANGING cs_files TYPE lif_defs=>ty_stage_files, remove_identical - CHANGING cs_files TYPE ty_stage_files. + CHANGING cs_files TYPE lif_defs=>ty_stage_files. ENDCLASS. @@ -41,7 +41,7 @@ CLASS lcl_stage_logic IMPLEMENTATION. METHOD count. - DATA: ls_files TYPE ty_stage_files. + DATA: ls_files TYPE lif_defs=>ty_stage_files. ls_files = get( io_repo ). @@ -63,7 +63,7 @@ CLASS lcl_stage_logic IMPLEMENTATION. iv_path = -path iv_filename = -filename ) = abap_true. DELETE cs_files-remote INDEX lv_index. - ELSEIF -path = gc_root_dir AND -filename = gc_dot_abapgit. + ELSEIF -path = lif_defs=>gc_root_dir AND -filename = lif_defs=>gc_dot_abapgit. " Remove .abapgit from remotes - it cannot be removed or ignored DELETE cs_files-remote INDEX lv_index. ENDIF. diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index 2979cc603..8b678d823 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -15,7 +15,7 @@ CLASS lcl_tadir DEFINITION FINAL. IMPORTING iv_package TYPE tadir-devclass iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false io_dot TYPE REF TO lcl_dot_abapgit OPTIONAL - RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt + RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt RAISING lcx_exception, read_single IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR' @@ -31,15 +31,15 @@ CLASS lcl_tadir DEFINITION FINAL. PRIVATE SECTION. CLASS-METHODS: check_exists - IMPORTING it_tadir TYPE ty_tadir_tt - RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt + IMPORTING it_tadir TYPE lif_defs=>ty_tadir_tt + RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt RAISING lcx_exception, build IMPORTING iv_package TYPE tadir-devclass iv_top TYPE tadir-devclass io_dot TYPE REF TO lcl_dot_abapgit iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false - RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt + RETURNING VALUE(rt_tadir) TYPE lif_defs=>ty_tadir_tt RAISING lcx_exception. ENDCLASS. "lcl_tadir DEFINITION @@ -88,7 +88,7 @@ CLASS lcl_tadir IMPLEMENTATION. METHOD check_exists. DATA: lv_exists TYPE abap_bool, - ls_item TYPE ty_item. + ls_item TYPE lif_defs=>ty_item. FIELD-SYMBOLS: LIKE LINE OF it_tadir. @@ -126,7 +126,7 @@ CLASS lcl_tadir IMPLEMENTATION. METHOD build. - DATA: lt_tadir TYPE ty_tadir_tt, + DATA: lt_tadir TYPE lif_defs=>ty_tadir_tt, lt_tdevc TYPE STANDARD TABLE OF tdevc, lv_path TYPE string. diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index cff4aabe4..58624f287 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -185,8 +185,8 @@ CLASS lcl_transport_objects DEFINITION. METHODS to_stage IMPORTING io_stage TYPE REF TO lcl_stage - is_stage_objects TYPE ty_stage_files - it_object_statuses TYPE ty_results_tt + is_stage_objects TYPE lif_defs=>ty_stage_files + it_object_statuses TYPE lif_defs=>ty_results_tt RAISING lcx_exception. PRIVATE SECTION. @@ -200,8 +200,8 @@ CLASS lcl_transport_objects IMPLEMENTATION. METHOD to_stage. DATA: ls_transport_object TYPE tadir, - ls_local_file TYPE ty_file_item, - ls_object_status TYPE ty_result. + ls_local_file TYPE lif_defs=>ty_file_item, + ls_object_status TYPE lif_defs=>ty_result. LOOP AT mt_transport_objects INTO ls_transport_object. LOOP AT it_object_statuses INTO ls_object_status @@ -210,7 +210,7 @@ CLASS lcl_transport_objects IMPLEMENTATION. AND NOT lstate IS INITIAL. CASE ls_object_status-lstate. - WHEN gc_state-added OR gc_state-modified. + WHEN lif_defs=>gc_state-added OR lif_defs=>gc_state-modified. IF ls_transport_object-delflag = abap_true. lcx_exception=>raise( |Object { ls_transport_object-obj_name } should be added/modified, but has deletion flag in transport| ). @@ -230,7 +230,7 @@ CLASS lcl_transport_objects IMPLEMENTATION. iv_path = ls_local_file-file-path iv_filename = ls_local_file-file-filename iv_data = ls_local_file-file-data ). - WHEN gc_state-deleted. + WHEN lif_defs=>gc_state-deleted. IF ls_transport_object-delflag = abap_false. lcx_exception=>raise( |Object { ls_transport_object-obj_name } should be removed, but has NO deletion flag in transport| ). @@ -256,7 +256,7 @@ CLASS lcl_transport_to_branch DEFINITION. METHODS: create IMPORTING io_repository TYPE REF TO lcl_repo_online - is_transport_to_branch TYPE ty_transport_to_branch + is_transport_to_branch TYPE lif_defs=>ty_transport_to_branch it_transport_objects TYPE scts_tadir RAISING lcx_exception. PRIVATE SECTION. @@ -269,15 +269,15 @@ CLASS lcl_transport_to_branch DEFINITION. lcx_exception. METHODS generate_commit_message IMPORTING - is_transport_to_branch TYPE ty_transport_to_branch + is_transport_to_branch TYPE lif_defs=>ty_transport_to_branch RETURNING - VALUE(rs_comment) TYPE ty_comment. + VALUE(rs_comment) TYPE lif_defs=>ty_comment. METHODS stage_transport_objects IMPORTING it_transport_objects TYPE scts_tadir io_stage TYPE REF TO lcl_stage - is_stage_objects TYPE ty_stage_files - it_object_statuses TYPE ty_results_tt + is_stage_objects TYPE lif_defs=>ty_stage_files + it_object_statuses TYPE lif_defs=>ty_results_tt RAISING lcx_exception. ENDCLASS. @@ -287,10 +287,10 @@ CLASS lcl_transport_to_branch IMPLEMENTATION. METHOD create. DATA: lv_branch_name TYPE string, - ls_comment TYPE ty_comment, + ls_comment TYPE lif_defs=>ty_comment, lo_stage TYPE REF TO lcl_stage, - ls_stage_objects TYPE ty_stage_files, - lt_object_statuses TYPE ty_results_tt. + ls_stage_objects TYPE lif_defs=>ty_stage_files, + lt_object_statuses TYPE lif_defs=>ty_results_tt. lv_branch_name = lcl_git_branch_list=>complete_heads_branch_name( lcl_git_branch_list=>normalize_branch_name( is_transport_to_branch-branch_name ) ). diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 0661a8377..2c23487c0 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -168,9 +168,9 @@ CLASS ltcl_dangerous IMPLEMENTATION. METHOD run. DATA: lo_repo TYPE REF TO lcl_repo_online, - lt_tadir TYPE ty_tadir_tt, + lt_tadir TYPE lif_defs=>ty_tadir_tt, lv_msg TYPE string, - lt_results TYPE ty_results_tt, + lt_results TYPE lif_defs=>ty_results_tt, lt_types TYPE lcl_objects=>ty_types_tt. FIELD-SYMBOLS: LIKE LINE OF lt_results, @@ -295,8 +295,8 @@ CLASS ltcl_diff IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_diff. - CONCATENATE LINES OF mt_new INTO lv_new SEPARATED BY gc_newline. - CONCATENATE LINES OF mt_old INTO lv_old SEPARATED BY gc_newline. + CONCATENATE LINES OF mt_new INTO lv_new SEPARATED BY lif_defs=>gc_newline. + CONCATENATE LINES OF mt_old INTO lv_old SEPARATED BY lif_defs=>gc_newline. lv_xnew = lcl_convert=>string_to_xstring_utf8( lv_new ). lv_xold = lcl_convert=>string_to_xstring_utf8( lv_old ). @@ -512,7 +512,7 @@ CLASS ltcl_git_porcelain IMPLEMENTATION. -path = iv_path. -name = iv_name. -sha1 = 'a'. - -chmod = gc_chmod-file. + -chmod = lif_defs=>gc_chmod-file. ENDMETHOD. @@ -848,7 +848,7 @@ CLASS ltcl_object_types IMPLEMENTATION. METHOD is_supported. - DATA: ls_item TYPE ty_item, + DATA: ls_item TYPE lif_defs=>ty_item, lv_supported TYPE abap_bool, lt_types TYPE lcl_objects=>ty_types_tt. @@ -874,7 +874,7 @@ CLASS ltcl_object_types IMPLEMENTATION. METHOD not_exist. - DATA: ls_item TYPE ty_item, + DATA: ls_item TYPE lif_defs=>ty_item, lv_exists TYPE abap_bool, lt_types TYPE lcl_objects=>ty_types_tt. @@ -934,7 +934,7 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION. METHOD add. - CONCATENATE mv_str iv_string gc_newline INTO mv_str. + CONCATENATE mv_str iv_string lif_defs=>gc_newline INTO mv_str. ENDMETHOD. @@ -1067,7 +1067,7 @@ CLASS ltcl_git_pack DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FI METHODS: object_blob IMPORTING iv_data TYPE xstring - RETURNING VALUE(rs_object) TYPE ty_object + RETURNING VALUE(rs_object) TYPE lif_defs=>ty_object RAISING lcx_exception. ENDCLASS. "test DEFINITION @@ -1087,12 +1087,12 @@ CLASS ltcl_git_pack IMPLEMENTATION. APPEND INITIAL LINE TO lt_tree ASSIGNING . - -chmod = gc_chmod-file. + -chmod = lif_defs=>gc_chmod-file. -name = 'b.txt'. -sha1 = '0123'. APPEND INITIAL LINE TO lt_tree ASSIGNING . - -chmod = gc_chmod-file. + -chmod = lif_defs=>gc_chmod-file. -name = 'a.txt'. -sha1 = '0123'. @@ -1115,12 +1115,12 @@ CLASS ltcl_git_pack IMPLEMENTATION. APPEND INITIAL LINE TO lt_tree ASSIGNING . - -chmod = gc_chmod-file. + -chmod = lif_defs=>gc_chmod-file. -name = 'foo.txt'. -sha1 = '0123'. APPEND INITIAL LINE TO lt_tree ASSIGNING . - -chmod = gc_chmod-dir. + -chmod = lif_defs=>gc_chmod-dir. -name = 'foo'. -sha1 = '0123'. @@ -1138,22 +1138,22 @@ CLASS ltcl_git_pack IMPLEMENTATION. METHOD pack_multiple. CONSTANTS: lc_data TYPE x LENGTH 15 VALUE '123456789ABCDEF545794254754554', - lc_sha TYPE ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'. + lc_sha TYPE lif_defs=>ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'. - DATA: lt_objects TYPE ty_objects_tt, + DATA: lt_objects TYPE lif_defs=>ty_objects_tt, ls_object LIKE LINE OF lt_objects, lt_nodes TYPE lcl_git_pack=>ty_nodes_tt, ls_node LIKE LINE OF lt_nodes, ls_commit TYPE lcl_git_pack=>ty_commit, - lt_result TYPE ty_objects_tt, + lt_result TYPE lif_defs=>ty_objects_tt, lv_data TYPE xstring. * blob lv_data = lc_data. CLEAR ls_object. - ls_object-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob iv_data = lv_data ). - ls_object-type = gc_type-blob. + ls_object-sha1 = lcl_hash=>sha1( iv_type = lif_defs=>gc_type-blob iv_data = lv_data ). + ls_object-type = lif_defs=>gc_type-blob. ls_object-data = lv_data. APPEND ls_object TO lt_objects. @@ -1166,8 +1166,8 @@ CLASS ltcl_git_pack IMPLEMENTATION. ls_commit-body = 'body'. lv_data = lcl_git_pack=>encode_commit( ls_commit ). CLEAR ls_object. - ls_object-sha1 = lcl_hash=>sha1( iv_type = gc_type-commit iv_data = lv_data ). - ls_object-type = gc_type-commit. + ls_object-sha1 = lcl_hash=>sha1( iv_type = lif_defs=>gc_type-commit iv_data = lv_data ). + ls_object-type = lif_defs=>gc_type-commit. ls_object-data = lv_data. APPEND ls_object TO lt_objects. @@ -1179,8 +1179,8 @@ CLASS ltcl_git_pack IMPLEMENTATION. APPEND ls_node TO lt_nodes. lv_data = lcl_git_pack=>encode_tree( lt_nodes ). CLEAR ls_object. - ls_object-sha1 = lcl_hash=>sha1( iv_type = gc_type-tree iv_data = lv_data ). - ls_object-type = gc_type-tree. + ls_object-sha1 = lcl_hash=>sha1( iv_type = lif_defs=>gc_type-tree iv_data = lv_data ). + ls_object-type = lif_defs=>gc_type-tree. ls_object-data = lv_data. APPEND ls_object TO lt_objects. @@ -1197,9 +1197,9 @@ CLASS ltcl_git_pack IMPLEMENTATION. METHOD object_blob. - rs_object-sha1 = lcl_hash=>sha1( iv_type = gc_type-blob + rs_object-sha1 = lcl_hash=>sha1( iv_type = lif_defs=>gc_type-blob iv_data = iv_data ). - rs_object-type = gc_type-blob. + rs_object-type = lif_defs=>gc_type-blob. rs_object-data = iv_data. ENDMETHOD. "object_blob @@ -1208,9 +1208,9 @@ CLASS ltcl_git_pack IMPLEMENTATION. CONSTANTS: lc_data TYPE x LENGTH 8 VALUE '0123456789ABCDEF'. - DATA: lt_objects TYPE ty_objects_tt, + DATA: lt_objects TYPE lif_defs=>ty_objects_tt, ls_object LIKE LINE OF lt_objects, - lt_result TYPE ty_objects_tt, + lt_result TYPE lif_defs=>ty_objects_tt, lv_data TYPE xstring. @@ -1233,10 +1233,10 @@ CLASS ltcl_git_pack IMPLEMENTATION. CONSTANTS: lc_data TYPE x LENGTH 8 VALUE '0123456789ABCDEF'. - DATA: lt_objects TYPE ty_objects_tt, + DATA: lt_objects TYPE lif_defs=>ty_objects_tt, ls_object LIKE LINE OF lt_objects, lv_xstring TYPE xstring, - lt_result TYPE ty_objects_tt, + lt_result TYPE lif_defs=>ty_objects_tt, lv_data TYPE xstring. @@ -1260,7 +1260,7 @@ CLASS ltcl_git_pack IMPLEMENTATION. METHOD tree. - CONSTANTS: lc_sha TYPE ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'. + CONSTANTS: lc_sha TYPE lif_defs=>ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc'. DATA: lt_nodes TYPE lcl_git_pack=>ty_nodes_tt, ls_node LIKE LINE OF lt_nodes, @@ -1268,7 +1268,7 @@ CLASS ltcl_git_pack IMPLEMENTATION. lt_result TYPE lcl_git_pack=>ty_nodes_tt. CLEAR ls_node. - ls_node-chmod = gc_chmod-file. + ls_node-chmod = lif_defs=>gc_chmod-file. ls_node-name = 'foobar.txt'. ls_node-sha1 = lc_sha. APPEND ls_node TO lt_nodes. @@ -1284,8 +1284,8 @@ CLASS ltcl_git_pack IMPLEMENTATION. METHOD commit. - CONSTANTS: lc_tree TYPE ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc', - lc_parent TYPE ty_sha1 VALUE '1236cb3c4b7f0b3600b64f744cde614a283a88dc'. + CONSTANTS: lc_tree TYPE lif_defs=>ty_sha1 VALUE '5f46cb3c4b7f0b3600b64f744cde614a283a88dc', + lc_parent TYPE lif_defs=>ty_sha1 VALUE '1236cb3c4b7f0b3600b64f744cde614a283a88dc'. DATA: ls_commit TYPE lcl_git_pack=>ty_commit, ls_result TYPE lcl_git_pack=>ty_commit, @@ -1340,8 +1340,8 @@ CLASS ltcl_html IMPLEMENTATION. mo_html->add( 'hello world' ). mo_html->add( '' && gc_newline && - ' hello world' && gc_newline && + lv_exp = '' && lif_defs=>gc_newline && + ' hello world' && lif_defs=>gc_newline && '' && gc_newline && - ' ' && gc_newline && + lv_exp = '' && lif_defs=>gc_newline && + ' ' && lif_defs=>gc_newline && '' && gc_newline && - ' ' && gc_newline && + lv_exp = '' && lif_defs=>gc_newline && + ' ' && lif_defs=>gc_newline && '' && gc_newline && - ' foo
    bar' && gc_newline && + lv_exp = '
    ' && lif_defs=>gc_newline && + ' foo
    bar' && lif_defs=>gc_newline && '
    ' ). - ro_html->add( lcl_gui_page_db_display=>render_record_banner( ms_key ) ). + ro_html->add( lcl_gui_page_db_dis=>render_record_banner( ms_key ) ). ro_html->add( '' ). ro_html->add( lo_toolbar->render( iv_right = abap_true ) ). ro_html->add( '
    ' ). diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index c527ef5da..6aa393b40 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -20,7 +20,7 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page. END OF c_actions. DATA: mv_show TYPE lcl_persistence_db=>ty_value, - mo_repo_content TYPE REF TO lcl_gui_view_repo_content. + mo_repo_content TYPE REF TO lcl_gui_view_repo. METHODS: test_changed_by @@ -206,7 +206,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD render_toc. - DATA: lo_pback TYPE REF TO lcl_persistence_background, + DATA: lo_pback TYPE REF TO lcl_persist_background, lv_current TYPE abap_bool, lv_key TYPE lcl_persistence_repo=>ty_repo-key, lv_icon TYPE string, diff --git a/src/zabapgit_page_repo_settings.prog.abap b/src/zabapgit_page_repo_settings.prog.abap index 2d1604cba..0b135fb55 100644 --- a/src/zabapgit_page_repo_settings.prog.abap +++ b/src/zabapgit_page_repo_settings.prog.abap @@ -2,7 +2,7 @@ *& Include ZABAPGIT_PAGE_REPO_SETTINGS *&---------------------------------------------------------------------* -CLASS lcl_gui_page_repo_settings DEFINITION FINAL INHERITING FROM lcl_gui_page. +CLASS lcl_gui_page_repo_sett DEFINITION FINAL INHERITING FROM lcl_gui_page. PUBLIC SECTION. METHODS: constructor @@ -25,9 +25,9 @@ CLASS lcl_gui_page_repo_settings DEFINITION FINAL INHERITING FROM lcl_gui_page. RETURNING VALUE(rt_post_fields) TYPE tihttpnvp. -ENDCLASS. "lcl_gui_page_debuginfo +ENDCLASS. -CLASS lcl_gui_page_repo_settings IMPLEMENTATION. +CLASS lcl_gui_page_repo_sett IMPLEMENTATION. METHOD constructor. super->constructor( ). diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index 02cfed03e..687ba4b68 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -226,7 +226,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. METHOD persist_settings. - DATA lo_settings_persistence TYPE REF TO lcl_persistence_settings. + DATA lo_settings_persistence TYPE REF TO lcl_persist_settings. lo_settings_persistence = lcl_app=>settings( ). lo_settings_persistence->modify( mo_settings ). @@ -254,7 +254,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION. METHOD read_settings. - DATA lo_settings_persistence TYPE REF TO lcl_persistence_settings. + DATA lo_settings_persistence TYPE REF TO lcl_persist_settings. lo_settings_persistence = lcl_app=>settings( ). mo_settings = lo_settings_persistence->read( ). diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index 57f6cb7f9..dfe670c3b 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -2,7 +2,7 @@ *& Include ZABAPGIT_PERSISTENCE *&---------------------------------------------------------------------* -CLASS lcl_persistence_migrate DEFINITION FINAL. +CLASS lcl_persist_migrate DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS: run RAISING lcx_exception. @@ -204,7 +204,7 @@ CLASS lcl_persistence_repo DEFINITION FINAL. ENDCLASS. -CLASS lcl_persistence_background DEFINITION FINAL. +CLASS lcl_persist_background DEFINITION FINAL. PUBLIC SECTION. @@ -270,7 +270,7 @@ CLASS lcl_persistence_background DEFINITION FINAL. ENDCLASS. "lcl_persistence_background DEFINITION -CLASS lcl_persistence_background IMPLEMENTATION. +CLASS lcl_persist_background IMPLEMENTATION. METHOD constructor. mo_db = lcl_app=>db( ). @@ -1010,7 +1010,7 @@ CLASS lcl_persistence_repo IMPLEMENTATION. METHOD delete. - DATA: lo_background TYPE REF TO lcl_persistence_background. + DATA: lo_background TYPE REF TO lcl_persist_background. CREATE OBJECT lo_background. lo_background->delete( iv_key ). @@ -1271,7 +1271,7 @@ CLASS lcl_persistence_repo IMPLEMENTATION. ENDCLASS. -CLASS lcl_persistence_migrate IMPLEMENTATION. +CLASS lcl_persist_migrate IMPLEMENTATION. METHOD run. @@ -1662,7 +1662,7 @@ CLASS lcl_settings IMPLEMENTATION. ENDCLASS. -CLASS lcl_persistence_settings DEFINITION FINAL. +CLASS lcl_persist_settings DEFINITION FINAL. PUBLIC SECTION. METHODS modify @@ -1676,7 +1676,7 @@ CLASS lcl_persistence_settings DEFINITION FINAL. ENDCLASS. -CLASS lcl_persistence_settings IMPLEMENTATION. +CLASS lcl_persist_settings IMPLEMENTATION. * todo, refactor this to use XML and only 1 row in the database? METHOD modify. diff --git a/src/zabapgit_persistence_old.prog.abap b/src/zabapgit_persistence_old.prog.abap index 6123998b6..60255aa33 100644 --- a/src/zabapgit_persistence_old.prog.abap +++ b/src/zabapgit_persistence_old.prog.abap @@ -2,14 +2,14 @@ *& Include ZABAPGIT_PERSISTENCE_OLD *&---------------------------------------------------------------------* -CLASS lcl_persistence_migrate DEFINITION DEFERRED. +CLASS lcl_persist_migrate DEFINITION DEFERRED. *----------------------------------------------------------------------* * CLASS lcl_persistence DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_persistence DEFINITION FINAL FRIENDS lcl_persistence_migrate. +CLASS lcl_persistence DEFINITION FINAL FRIENDS lcl_persist_migrate. * this class is obsolete, use LCL_PERSISTENCE_REPO instead @@ -370,7 +370,7 @@ ENDCLASS. "lcl_persistence IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* -CLASS lcl_user DEFINITION FINAL FRIENDS lcl_persistence_migrate. +CLASS lcl_user DEFINITION FINAL FRIENDS lcl_persist_migrate. * this class is obsolete, use LCL_PERSISTENCE_USER instead diff --git a/src/zabapgit_repo_browser_util.prog.abap b/src/zabapgit_repo_browser_util.prog.abap index ecbda6fc5..50e69eeea 100644 --- a/src/zabapgit_repo_browser_util.prog.abap +++ b/src/zabapgit_repo_browser_util.prog.abap @@ -2,7 +2,7 @@ *& Include ZABAPGIT_REPO_BROWSER_UTIL *&---------------------------------------------------------------------* -CLASS lcl_repo_content_browser DEFINITION FINAL. +CLASS lcl_repo_content_list DEFINITION FINAL. PUBLIC SECTION. @@ -73,7 +73,7 @@ DEFINE _reduce_state. ENDIF. END-OF-DEFINITION. -CLASS lcl_repo_content_browser IMPLEMENTATION. +CLASS lcl_repo_content_list IMPLEMENTATION. METHOD constructor. mo_repo = io_repo. diff --git a/src/zabapgit_services_background.prog.abap b/src/zabapgit_services_background.prog.abap index 4e372ddc2..40a38dc2e 100644 --- a/src/zabapgit_services_background.prog.abap +++ b/src/zabapgit_services_background.prog.abap @@ -2,25 +2,25 @@ *& Include ZABAPGIT_SERVICES_BACKGROUND *&---------------------------------------------------------------------* -CLASS lcl_services_background DEFINITION FINAL. +CLASS lcl_services_bkg DEFINITION FINAL. PUBLIC SECTION. CLASS-METHODS update_task - IMPORTING is_bg_task TYPE lcl_persistence_background=>ty_background + IMPORTING is_bg_task TYPE lcl_persist_background=>ty_background RAISING lcx_exception. ENDCLASS. "lcl_services_background -CLASS lcl_services_background IMPLEMENTATION. +CLASS lcl_services_bkg IMPLEMENTATION. METHOD update_task. - DATA lo_persistence TYPE REF TO lcl_persistence_background. + DATA lo_persistence TYPE REF TO lcl_persist_background. CREATE OBJECT lo_persistence. - IF is_bg_task-method = lcl_persistence_background=>c_method-nothing. + IF is_bg_task-method = lcl_persist_background=>c_method-nothing. lo_persistence->delete( is_bg_task-key ). ELSE. lo_persistence->modify( is_bg_task ). diff --git a/src/zabapgit_services_repo.prog.abap b/src/zabapgit_services_repo.prog.abap index f34e24db2..4f5b1234e 100644 --- a/src/zabapgit_services_repo.prog.abap +++ b/src/zabapgit_services_repo.prog.abap @@ -311,20 +311,19 @@ CLASS lcl_services_repo IMPLEMENTATION. CALL FUNCTION 'RS_TOOL_ACCESS' EXPORTING operation = 'SHOW' - in_new_window = 'X' + in_new_window = abap_true object_name = iv_package object_type = 'DEVC' - with_objectlist = 'X'. + with_objectlist = abap_true. ENDMETHOD. " open_se80. - METHOD transport_to_branch. DATA: lo_repository TYPE REF TO lcl_repo_online, - lo_transport_to_branch TYPE REF TO lcl_transport_to_branch, + lo_transport_to_branch TYPE REF TO lcl_transport_2_branch, lt_transport_headers TYPE trwbo_request_headers, - lt_transport_objects TYPE scts_tadir, + lt_transport_objects TYPE scts_tadir, ls_transport_to_branch TYPE lif_defs=>ty_transport_to_branch. lo_repository ?= lcl_app=>repo_srv( )->get( iv_repository_key ). @@ -334,6 +333,7 @@ CLASS lcl_services_repo IMPLEMENTATION. IF lt_transport_objects IS INITIAL. lcx_exception=>raise( 'Canceled or List of objects is empty ' ). ENDIF. + ls_transport_to_branch = lcl_popups=>popup_to_create_transp_branch( lt_transport_headers ). diff --git a/src/zabapgit_transport.prog.abap b/src/zabapgit_transport.prog.abap index 58624f287..b2e9badd2 100644 --- a/src/zabapgit_transport.prog.abap +++ b/src/zabapgit_transport.prog.abap @@ -251,7 +251,7 @@ CLASS lcl_transport_objects IMPLEMENTATION. ENDCLASS. -CLASS lcl_transport_to_branch DEFINITION. +CLASS lcl_transport_2_branch DEFINITION. PUBLIC SECTION. METHODS: create @@ -282,7 +282,7 @@ CLASS lcl_transport_to_branch DEFINITION. lcx_exception. ENDCLASS. -CLASS lcl_transport_to_branch IMPLEMENTATION. +CLASS lcl_transport_2_branch IMPLEMENTATION. METHOD create. DATA: diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 2c23487c0..9ef13f80e 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -2159,7 +2159,7 @@ CLASS ltcl_persistence_settings DEFINITION FINAL FOR TESTING read_run_critical_tests FOR TESTING RAISING cx_static_check, read_not_found_critical_tests FOR TESTING RAISING cx_static_check. DATA: - mo_persistence_settings TYPE REF TO lcl_persistence_settings, + mo_persistence_settings TYPE REF TO lcl_persist_settings, mo_settings TYPE REF TO lcl_settings. ENDCLASS. diff --git a/src/zabapgit_unit_test_clas_intf.prog.abap b/src/zabapgit_unit_test_clas_intf.prog.abap index 8ae3779e1..de0f19545 100644 --- a/src/zabapgit_unit_test_clas_intf.prog.abap +++ b/src/zabapgit_unit_test_clas_intf.prog.abap @@ -1,7 +1,7 @@ CLASS ltd_spy_oo_object DEFINITION FOR TESTING. PUBLIC SECTION. - INTERFACES: lif_object_oriented_object_fnc. + INTERFACES: lif_oo_object_fnc. DATA: mv_package TYPE devclass, mv_overwrite TYPE seox_boolean, @@ -37,7 +37,7 @@ CLASS ltd_spy_oo_object DEFINITION FOR TESTING. ENDCLASS. CLASS ltd_spy_oo_object IMPLEMENTATION. - METHOD lif_object_oriented_object_fnc~create. + METHOD lif_oo_object_fnc~create. DATA lv_properties_structure_name TYPE string. lv_properties_structure_name = cl_abap_typedescr=>describe_by_data( is_properties )->absolute_name. IF lv_properties_structure_name = cl_abap_typedescr=>describe_by_data( ms_interface_properties )->absolute_name. @@ -48,7 +48,8 @@ CLASS ltd_spy_oo_object IMPLEMENTATION. mv_package = iv_package. mv_overwrite = iv_overwrite. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~generate_locals. + + METHOD lif_oo_object_fnc~generate_locals. ms_locals_key = is_key. mt_local_definitions = it_local_definitions. mt_local_implementations = it_local_implementations. @@ -57,21 +58,21 @@ CLASS ltd_spy_oo_object IMPLEMENTATION. mv_force = iv_force. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~deserialize_source. + METHOD lif_oo_object_fnc~deserialize_source. ms_deserialize_key = is_key. mt_source = it_source. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~add_to_activation_list. + METHOD lif_oo_object_fnc~add_to_activation_list. ms_item_to_activate = is_item. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~update_descriptions. + METHOD lif_oo_object_fnc~update_descriptions. ms_description_key = is_key. mt_descriptions = it_descriptions. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~insert_text_pool. + METHOD lif_oo_object_fnc~insert_text_pool. mv_text_pool_inserted = abap_true. mv_text_pool_class_name = iv_class_name. mt_text_pool = it_text_pool. @@ -80,28 +81,28 @@ CLASS ltd_spy_oo_object IMPLEMENTATION. exp = sy-langu ). ENDMETHOD. - METHOD lif_object_oriented_object_fnc~create_sotr. + METHOD lif_oo_object_fnc~create_sotr. mt_sotr = it_sotr. mt_sotr_package = iv_package. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~create_documentation. + METHOD lif_oo_object_fnc~create_documentation. mv_docu_object_name = iv_object_name. mv_docu_language = iv_language. mt_docu_lines = it_lines. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_includes. + METHOD lif_oo_object_fnc~get_includes. APPEND 'dummy' TO rt_includes. mv_get_includes_called = abap_true. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~exists. + METHOD lif_oo_object_fnc~exists. mv_exists_called = abap_true. rv_exists = mv_exists. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~serialize_abap. + METHOD lif_oo_object_fnc~serialize_abap. ms_serialize_key = is_class_key. CASE iv_type. WHEN seop_ext_class_locals_def. @@ -117,35 +118,35 @@ CLASS ltd_spy_oo_object IMPLEMENTATION. ENDCASE. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_class_properties. + METHOD lif_oo_object_fnc~get_class_properties. rs_class_properties = ms_class_properties. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_interface_properties. + METHOD lif_oo_object_fnc~get_interface_properties. rs_interface_properties = ms_interface_properties. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_text_pool. + METHOD lif_oo_object_fnc~read_text_pool. rt_text_pool = mt_text_pool. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_sotr. + METHOD lif_oo_object_fnc~read_sotr. rt_sotr = mt_sotr. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_documentation. + METHOD lif_oo_object_fnc~read_documentation. rt_lines = mt_docu_lines. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~read_descriptions. + METHOD lif_oo_object_fnc~read_descriptions. rt_descriptions = mt_descriptions. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~get_skip_test_classes. + METHOD lif_oo_object_fnc~get_skip_test_classes. rv_skip = mv_skip_test_classes. ENDMETHOD. - METHOD lif_object_oriented_object_fnc~delete. + METHOD lif_oo_object_fnc~delete. ms_delete_key = is_deletion_key. ENDMETHOD. diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index 700a58823..8c88e7394 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -2,7 +2,7 @@ *& Include ZABAPGIT_VIEW_REPO *&---------------------------------------------------------------------* -CLASS lcl_gui_view_repo_content DEFINITION FINAL. +CLASS lcl_gui_view_repo DEFINITION FINAL. PUBLIC SECTION. INTERFACES lif_gui_page. ALIASES render FOR lif_gui_page~render. @@ -44,20 +44,20 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL. RETURNING VALUE(ro_toolbar) TYPE REF TO lcl_html_toolbar RAISING lcx_exception, render_item - IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item + IMPORTING is_item TYPE lcl_repo_content_list=>ty_repo_item RETURNING VALUE(ro_html) TYPE REF TO lcl_html RAISING lcx_exception, render_item_files - IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item + IMPORTING is_item TYPE lcl_repo_content_list=>ty_repo_item RETURNING VALUE(ro_html) TYPE REF TO lcl_html, render_item_command - IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item + IMPORTING is_item TYPE lcl_repo_content_list=>ty_repo_item RETURNING VALUE(ro_html) TYPE REF TO lcl_html, get_item_class - IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item + IMPORTING is_item TYPE lcl_repo_content_list=>ty_repo_item RETURNING VALUE(rv_html) TYPE string, get_item_icon - IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item + IMPORTING is_item TYPE lcl_repo_content_list=>ty_repo_item RETURNING VALUE(rv_html) TYPE string, render_empty_package RETURNING VALUE(rv_html) TYPE string, @@ -67,7 +67,7 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL. METHODS: build_obj_jump_link - IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item + IMPORTING is_item TYPE lcl_repo_content_list=>ty_repo_item RETURNING VALUE(rv_html) TYPE string, build_dir_jump_link IMPORTING iv_path TYPE string @@ -75,7 +75,7 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL. ENDCLASS. "lcl_gui_view_repo_content -CLASS lcl_gui_view_repo_content IMPLEMENTATION. +CLASS lcl_gui_view_repo IMPLEMENTATION. METHOD constructor. @@ -123,8 +123,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. METHOD lif_gui_page~render. - DATA: lt_repo_items TYPE lcl_repo_content_browser=>tt_repo_items, - lo_browser TYPE REF TO lcl_repo_content_browser, + DATA: lt_repo_items TYPE lcl_repo_content_list=>tt_repo_items, + lo_browser TYPE REF TO lcl_repo_content_list, lx_error TYPE REF TO lcx_exception, lv_lstate TYPE char1, lv_rstate TYPE char1, From 4d9f8bc8278c7bf1597f8a7f4f9520f50b1157a0 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 9 Jun 2017 09:20:55 +0000 Subject: [PATCH 157/188] fix --- src/zabapgit_dot_abapgit.prog.abap | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/zabapgit_dot_abapgit.prog.abap b/src/zabapgit_dot_abapgit.prog.abap index 883a014b8..a56aeae0b 100644 --- a/src/zabapgit_dot_abapgit.prog.abap +++ b/src/zabapgit_dot_abapgit.prog.abap @@ -257,10 +257,6 @@ CLASS lcl_dot_abapgit IMPLEMENTATION. rv_language = ms_data-master_language. ENDMETHOD. -* METHOD set_master_language. -* ms_data-master_language = iv_language. -* ENDMETHOD. - METHOD get_signature. rs_signature-path = lif_defs=>gc_root_dir. From a03c61d2c69a081f71a14cb0d76fc50dfdf0e512 Mon Sep 17 00:00:00 2001 From: larshp Date: Fri, 9 Jun 2017 09:34:02 +0000 Subject: [PATCH 158/188] fix comments --- src/zabapgit_page_diff.prog.abap | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap index 7033d6221..d2f8de46e 100644 --- a/src/zabapgit_page_diff.prog.abap +++ b/src/zabapgit_page_diff.prog.abap @@ -334,10 +334,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ENDMETHOD. " build_menu. -********************************************************************** -* EVENT HANDLING -********************************************************************** - METHOD lif_gui_page~on_event. CASE iv_action. @@ -348,10 +344,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ENDMETHOD. "lif_gui_page~on_event -********************************************************************** -* RENDER LOGIC -********************************************************************** - METHOD render_content. DATA ls_diff_file LIKE LINE OF mt_diff_files. @@ -400,10 +392,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION. ENDMETHOD. " render_diff -********************************************************************** -* CHUNKS -********************************************************************** - METHOD render_diff_head. DATA: ls_stats TYPE lcl_diff=>ty_count. From d9a245e38f69146bc43fd6d6140a7cf35092de50 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 06:36:35 +0000 Subject: [PATCH 159/188] fix comment #773 --- src/zabapgit_page_main.prog.abap | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 6aa393b40..3dfa00104 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -109,10 +109,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. -********************************************************************** -* RENDERING -********************************************************************** - METHOD render_content. DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, From 1111abbbb86dc81af11de754e43c2e3681bf6183 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 06:45:43 +0000 Subject: [PATCH 160/188] fix comment #773 --- src/zabapgit_object_fugr.prog.abap | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 85396b89a..8d7f9b118 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -86,10 +86,6 @@ ENDCLASS. "lcl_object_fugr DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_fugr IMPLEMENTATION. -* function group SEUF -* function group SIFP -* function group SUNI - METHOD lif_object~has_changed_since. DATA: lt_functab TYPE ty_rs38l_incl_tt, @@ -662,6 +658,10 @@ CLASS lcl_object_fugr IMPLEMENTATION. METHOD lif_object~serialize. +* function group SEUF +* function group SIFP +* function group SUNI + DATA: lt_functions TYPE ty_function_tt, ls_progdir TYPE ty_progdir, lv_program_name TYPE programm, From 7357769944edac4c395a9aa0a03bd9d889877b50 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 06:57:45 +0000 Subject: [PATCH 161/188] fix comment #773 --- src/zabapgit_object_shi3.prog.abap | 76 ------------------------------ 1 file changed, 76 deletions(-) diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap index 8e9ffbdec..255bcdf89 100644 --- a/src/zabapgit_object_shi3.prog.abap +++ b/src/zabapgit_object_shi3.prog.abap @@ -36,17 +36,6 @@ CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL. CHANGING cs_head TYPE ttree ct_nodes TYPE hier_iface_t. -* METHODS regenerate_ids -* CHANGING ct_nodes TYPE hier_iface_t -* ct_refs TYPE hier_ref_t -* ct_texts TYPE hier_texts_t -* RAISING lcx_exception. -* -* METHODS replace_id -* IMPORTING iv_id TYPE clike -* RETURNING VALUE(rv_new_id) TYPE ttree-id -* RAISING lcx_exception. - ENDCLASS. "lcl_object_shi3 DEFINITION *----------------------------------------------------------------------* @@ -222,67 +211,6 @@ CLASS lcl_object_shi3 IMPLEMENTATION. ENDMETHOD. "strip_stamps -* METHOD regenerate_ids. -* -* DATA: ls_uid TYPE sys_uid, -* lt_map TYPE tt_id_map. -* -* FIELD-SYMBOLS: LIKE LINE OF ct_nodes, -* LIKE LINE OF ct_refs, -* LIKE LINE OF ct_texts, -* LIKE LINE OF mt_map. -* -* "Build map -* LOOP AT ct_nodes ASSIGNING . -* APPEND INITIAL LINE TO lt_map ASSIGNING . -* IF -parent_id IS INITIAL. -* -old = -node_id. -* -new = -node_id. "Root node -* ELSE. -* CALL FUNCTION 'STREE_GET_UNIQUE_ID' -* IMPORTING -* unique_id = ls_uid. -* -* -old = -node_id. -* -new = ls_uid-id. -* ENDIF. -* -node_id = -new. "Replace id -* ENDLOOP. -* -* mt_map = lt_map. "Sort -* -* LOOP AT ct_nodes ASSIGNING . -* -parent_id = replace_id( -parent_id ). -* -brother_id = replace_id( -brother_id ). -* ENDLOOP. -* -* LOOP AT ct_refs ASSIGNING . -* -node_id = replace_id( -node_id ). -* ENDLOOP. -* -* LOOP AT ct_texts ASSIGNING . -* -node_id = replace_id( -node_id ). -* ENDLOOP. -* -* ENDMETHOD. "regenerate_ids -* -* METHOD replace_id. -* -* DATA ls_map LIKE LINE OF mt_map. -* -* IF iv_id IS INITIAL. -* RETURN. "No substitution for empty values -* ENDIF. -* -* READ TABLE mt_map WITH TABLE KEY old = iv_id INTO ls_map. -* IF sy-subrc <> 0. -* lcx_exception=>raise( 'Cannot replace id, SHI3' ). -* ENDIF. -* -* rv_new_id = ls_map-new. -* -* ENDMETHOD. "replace_id - METHOD lif_object~deserialize. DATA: ls_msg TYPE hier_mess, @@ -303,10 +231,6 @@ CLASS lcl_object_shi3 IMPLEMENTATION. io_xml->read( EXPORTING iv_name = 'TREE_TEXTS' CHANGING cg_data = lt_texts ). -* regenerate_ids( CHANGING ct_nodes = lt_nodes -* ct_refs = lt_refs -* ct_texts = lt_texts ). - IF lif_object~exists( ) = abap_true. lif_object~delete( ). ENDIF. From 98b2afd918ae3a07c4fcd31fa07dafe36fe2524a Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 07:09:57 +0000 Subject: [PATCH 162/188] try adding implementation #773 --- src/zabapgit_object_w3xx.prog.abap | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index f5a76ef68..a61ea31ee 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -36,7 +36,7 @@ CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT. DATA ms_key TYPE wwwdatatab. METHODS get_ext - IMPORTING it_params TYPE ty_wwwparams_tt + IMPORTING it_params TYPE ty_wwwparams_tt RETURNING VALUE(rv_ext) TYPE string RAISING lcx_exception. @@ -46,12 +46,12 @@ CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT. RAISING lcx_exception. METHODS strip_params - CHANGING ct_params TYPE ty_wwwparams_tt - RAISING lcx_exception. + CHANGING ct_params TYPE ty_wwwparams_tt + RAISING lcx_exception. METHODS find_param - IMPORTING it_params TYPE ty_wwwparams_tt - iv_name TYPE w3_name + IMPORTING it_params TYPE ty_wwwparams_tt + iv_name TYPE w3_name RETURNING VALUE(rv_value) TYPE string RAISING lcx_exception. @@ -447,6 +447,9 @@ ENDCLASS. "lcl_object_W3SUPER IMPLEMENTATION CLASS lcl_object_w3mi DEFINITION INHERITING FROM lcl_object_w3super FINAL. ENDCLASS. "lcl_object_W3MI DEFINITION +CLASS lcl_object_w3mi IMPLEMENTATION. +ENDCLASS. + *----------------------------------------------------------------------* * CLASS lcl_object_W3HT DEFINITION *----------------------------------------------------------------------* @@ -454,3 +457,6 @@ ENDCLASS. "lcl_object_W3MI DEFINITION *----------------------------------------------------------------------* CLASS lcl_object_w3ht DEFINITION INHERITING FROM lcl_object_w3super FINAL. ENDCLASS. "lcl_object_W3HT DEFINITION + +CLASS lcl_object_w3ht IMPLEMENTATION. +ENDCLASS. From f3328c514ced9ff71f2c6cd615153e8275399d4c Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 07:23:59 +0000 Subject: [PATCH 163/188] fix comment #773 --- src/zabapgit_persistence.prog.abap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap index dfe670c3b..a01d44b84 100644 --- a/src/zabapgit_persistence.prog.abap +++ b/src/zabapgit_persistence.prog.abap @@ -1677,10 +1677,11 @@ CLASS lcl_persist_settings DEFINITION FINAL. ENDCLASS. CLASS lcl_persist_settings IMPLEMENTATION. -* todo, refactor this to use XML and only 1 row in the database? METHOD modify. +* todo, refactor this class to use XML and only 1 row in the database? + lcl_app=>db( )->modify( iv_type = 'SETTINGS' iv_value = 'PROXY_URL' From 72ca9582e8c78c6121a32661b98a4b272d42ca63 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 07:44:34 +0000 Subject: [PATCH 164/188] fix macro #773 --- src/zabapgit_popups.prog.abap | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index 05bfa24bb..b1a33356b 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -84,18 +84,17 @@ ENDCLASS. CLASS lcl_popups IMPLEMENTATION. - DEFINE _add_dialog_fld. - APPEND INITIAL LINE TO lt_fields ASSIGNING . - -tabname = &1. "#EC NOTEXT - -fieldname = &2. "#EC NOTEXT - -fieldtext = &3. "#EC NOTEXT - -value = &4. "#EC NOTEXT - -field_attr = &5. "#EC NOTEXT - END-OF-DEFINITION. - - METHOD popup_object. + DEFINE _add_dialog_fld. + APPEND INITIAL LINE TO lt_fields ASSIGNING . + -tabname = &1. "#EC NOTEXT + -fieldname = &2. "#EC NOTEXT + -fieldtext = &3. "#EC NOTEXT + -value = &4. "#EC NOTEXT + -field_attr = &5. "#EC NOTEXT + END-OF-DEFINITION. + DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval. From 83f0711a0ce1c9f1ccba14eae879906cff994a76 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 08:04:00 +0000 Subject: [PATCH 165/188] fix comment #773 --- src/zabapgit_persistence_old.prog.abap | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_persistence_old.prog.abap b/src/zabapgit_persistence_old.prog.abap index 60255aa33..7c870c7c9 100644 --- a/src/zabapgit_persistence_old.prog.abap +++ b/src/zabapgit_persistence_old.prog.abap @@ -426,10 +426,10 @@ ENDCLASS. "lcl_user DEFINITION *----------------------------------------------------------------------* CLASS lcl_user IMPLEMENTATION. -* this class is obsolete, use LCL_PERSISTENCE_USER instead - METHOD read. +* this class is obsolete, use LCL_PERSISTENCE_USER instead + DATA: lt_lines TYPE TABLE OF tline, ls_line LIKE LINE OF lt_lines. From 64aac6e04e03059a74f05c7d7880b8b1409616e4 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 09:23:15 +0000 Subject: [PATCH 166/188] fix db page --- src/zabapgit_gui_router.prog.abap | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 8903c595f..db58bf4be 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -123,9 +123,10 @@ CLASS lcl_gui_router IMPLEMENTATION. " DB actions WHEN lif_defs=>gc_action-db_display OR lif_defs=>gc_action-db_edit. " DB Display/Edit - ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ). + ei_page = get_page_db_by_name( iv_name = 'DB_DIS' + iv_getdata = iv_getdata ). ev_state = lif_defs=>gc_event_state-new_page. - IF iv_prev_page = 'PAGE_DB_DISPLAY'. + IF iv_prev_page = 'PAGE_DB_DIS'. ev_state = lif_defs=>gc_event_state-new_page_replacing. ENDIF. WHEN lif_defs=>gc_action-db_delete. " DB Delete From 0e2229d9f9825e5084c11ca51febe43bffbaeb6e Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 10:09:40 +0000 Subject: [PATCH 167/188] refactor lcl_app=>run CALL SELECTION-SCREEN not allowed in global classes --- src/zabapgit_app.prog.abap | 3 --- src/zabapgit_app_impl.prog.abap | 11 ----------- src/zabapgit_forms.prog.abap | 13 ++++++++++++- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/src/zabapgit_app.prog.abap b/src/zabapgit_app.prog.abap index da8b71e6c..cdfcd79fc 100644 --- a/src/zabapgit_app.prog.abap +++ b/src/zabapgit_app.prog.abap @@ -14,9 +14,6 @@ CLASS lcl_persist_settings DEFINITION DEFERRED. CLASS lcl_app DEFINITION FINAL. PUBLIC SECTION. - CLASS-METHODS run - RAISING lcx_exception. - CLASS-METHODS gui RETURNING VALUE(ro_gui) TYPE REF TO lcl_gui RAISING lcx_exception. diff --git a/src/zabapgit_app_impl.prog.abap b/src/zabapgit_app_impl.prog.abap index f41691290..831819ced 100644 --- a/src/zabapgit_app_impl.prog.abap +++ b/src/zabapgit_app_impl.prog.abap @@ -7,17 +7,6 @@ *----------------------------------------------------------------------* CLASS lcl_app IMPLEMENTATION. - METHOD run. - - IF sy-batch = abap_true. - lcl_background=>run( ). - ELSE. - gui( )->go_home( ). - CALL SELECTION-SCREEN 1001. " trigger screen - ENDIF. - - ENDMETHOD. "run - METHOD gui. IF go_gui IS NOT BOUND. diff --git a/src/zabapgit_forms.prog.abap b/src/zabapgit_forms.prog.abap index cf0e13bb5..3cae67f9c 100644 --- a/src/zabapgit_forms.prog.abap +++ b/src/zabapgit_forms.prog.abap @@ -22,13 +22,24 @@ FORM run. TRY. lcl_migrations=>run( ). - lcl_app=>run( ). + PERFORM open_gui. CATCH lcx_exception INTO lx_exception. MESSAGE lx_exception->mv_text TYPE 'E'. ENDTRY. ENDFORM. "run +FORM open_gui RAISING lcx_exception. + + IF sy-batch = abap_true. + lcl_background=>run( ). + ELSE. + lcl_app=>gui( )->go_home( ). + CALL SELECTION-SCREEN 1001. " trigger screen + ENDIF. + +ENDFORM. + *&---------------------------------------------------------------------* *& Form branch_popup *&---------------------------------------------------------------------* From b0b5f1e67c854297afa82fdf47dc4d549bf6e3ec Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 11:26:51 +0000 Subject: [PATCH 168/188] empty xml, fix #775 --- src/zabapgit_unit_test.prog.abap | 34 ++++++++++++++++++++++++++++++++ src/zabapgit_xml.prog.abap | 33 ++++++++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 9ef13f80e..b093fc3d7 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -666,6 +666,8 @@ CLASS ltcl_xml DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. METHODS: up FOR TESTING RAISING lcx_exception, + empty FOR TESTING + RAISING lcx_exception, down FOR TESTING RAISING lcx_exception. @@ -684,6 +686,38 @@ ENDCLASS. CLASS ltcl_xml IMPLEMENTATION. + METHOD empty. + + DATA: ls_old TYPE st_old, + ls_new TYPE st_new, + lv_xml TYPE string, + lo_input TYPE REF TO lcl_xml_input, + lo_output TYPE REF TO lcl_xml_output. + + + CLEAR ls_old. + + CREATE OBJECT lo_output. + lo_output->add( iv_name = 'DATA' + ig_data = ls_old ). + lv_xml = lo_output->render( ). + + CREATE OBJECT lo_input + EXPORTING + iv_xml = lv_xml. + lo_input->read( EXPORTING iv_name = 'DATA' + CHANGING cg_data = ls_new ). + + cl_abap_unit_assert=>assert_equals( + act = ls_new-foo + exp = ls_old-foo ). + + cl_abap_unit_assert=>assert_equals( + act = ls_new-bar + exp = ls_old-bar ). + + ENDMETHOD. + METHOD up. DATA: ls_old TYPE st_old, diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index a0a06955e..109f62f55 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -183,6 +183,8 @@ CLASS lcl_xml_output DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC. add_xml IMPORTING iv_name TYPE clike ii_xml TYPE REF TO if_ixml_element, + build_asx_node + RETURNING VALUE(ri_element) TYPE REF TO if_ixml_element, render IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true is_metadata TYPE lif_defs=>ty_metadata OPTIONAL @@ -260,17 +262,20 @@ CLASS lcl_xml_output IMPLEMENTATION. IF mi_raw IS INITIAL. li_abap ?= mi_xml_doc->get_root( )->get_first_child( ). mi_xml_doc->get_root( )->remove_child( li_abap ). + IF li_abap IS INITIAL. + li_abap = build_asx_node( ). + ENDIF. ELSE. li_abap = mi_raw. ENDIF. li_git = mi_xml_doc->create_element( c_abapgit_tag ). - li_git->set_attribute( name = c_attr_version value = gc_xml_version ). "#EC NOTEXT + li_git->set_attribute( name = c_attr_version value = gc_xml_version ). IF NOT is_metadata IS INITIAL. li_git->set_attribute( name = c_attr_serializer - value = is_metadata-class ). "#EC NOTEXT + value = is_metadata-class ). li_git->set_attribute( name = c_attr_serializer_version - value = is_metadata-version ). "#EC NOTEXT + value = is_metadata-version ). ENDIF. li_git->append_child( li_abap ). mi_xml_doc->get_root( )->append_child( li_git ). @@ -279,6 +284,28 @@ CLASS lcl_xml_output IMPLEMENTATION. ENDMETHOD. "render + METHOD build_asx_node. + + DATA: li_attr TYPE REF TO if_ixml_attribute. + + + ri_element = mi_xml_doc->create_element_ns( + name = 'abap' + prefix = 'asx' ). + + li_attr = mi_xml_doc->create_attribute_ns( + name = 'version' ). + li_attr->if_ixml_node~set_value( '1.0' ). + ri_element->set_attribute_node_ns( li_attr ). + + li_attr = mi_xml_doc->create_attribute_ns( + name = 'asx' + prefix = 'xmlns' ). + li_attr->if_ixml_node~set_value( 'http://www.sap.com/abapxml' ). + ri_element->set_attribute_node_ns( li_attr ). + + ENDMETHOD. + ENDCLASS. "lcl_xml_output IMPLEMENTATION *----------------------------------------------------------------------* From 86cb9970a78ac0e3dea141df6a62cef7ec1bd987 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 11:40:17 +0000 Subject: [PATCH 169/188] fix #778 too lazy to add unit test, the splitting of commit author should be moved to some other class --- src/zabapgit_definitions.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index fe174f51f..849e0eeaa 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -194,7 +194,7 @@ INTERFACE lif_defs. CONSTANTS: gc_root_dir TYPE string VALUE '/', gc_dot_abapgit TYPE string VALUE '.abapgit.xml' ##NO_TEXT, - gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10}).\d{4}$' ##NO_TEXT. + gc_author_regex TYPE string VALUE '^([\w\s\.@\-_1-9]+) <(.*)> (\d{10})\s?.\d{4}$' ##NO_TEXT. CONSTANTS: BEGIN OF gc_action, repo_clone TYPE string VALUE 'repo_clone', From 78e121b18b5b4c83ab4860cede17aa9ae05d7a57 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 11:41:32 +0000 Subject: [PATCH 170/188] v1.37.2 --- src/zabapgit.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 30d0b6536..53b4801e3 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100. * See http://www.abapgit.org CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.37.1'. "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.37.2'. "#EC NOTEXT ******************************************************************************** * The MIT License (MIT) From 0e63ece772baf4b5720c6ba7566529f881b769e7 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sat, 10 Jun 2017 13:42:14 +0200 Subject: [PATCH 171/188] use node 8 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index c5f4c7caf..e14ecf6b7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,6 +1,6 @@ language: node_js node_js: - - "6" + - "8" notifications: email: false deploy: From cfc0a31c7fed57b80b5a5a03e72bc12cfbb02ffa Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sat, 10 Jun 2017 13:42:58 +0200 Subject: [PATCH 172/188] v1.37.2 --- changelog.txt | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/changelog.txt b/changelog.txt index cb532467b..fb6f3f255 100644 --- a/changelog.txt +++ b/changelog.txt @@ -8,6 +8,11 @@ Legend + : added - : removed +2017-06-10 v1.37.2 +------------------ +* fixed unit tests +* fixed dump when calling branch overview page + 2017-06-07 v1.37.1 ------------------ * WDYN package popup From 847278240bdf9a5c6dadd8b8d4c3bff91e153bb1 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 12:39:07 +0000 Subject: [PATCH 173/188] refactor _ADD_RULE macro #773 --- src/zabapgit_syntax_highlighter.prog.abap | 154 ++++++++++++---------- 1 file changed, 88 insertions(+), 66 deletions(-) diff --git a/src/zabapgit_syntax_highlighter.prog.abap b/src/zabapgit_syntax_highlighter.prog.abap index 8f3273a2b..bc176e31a 100644 --- a/src/zabapgit_syntax_highlighter.prog.abap +++ b/src/zabapgit_syntax_highlighter.prog.abap @@ -17,12 +17,12 @@ CLASS lcl_syntax_highlighter DEFINITION ABSTRACT PUBLIC SECTION. CLASS-METHODS create - IMPORTING iv_filename TYPE string + IMPORTING iv_filename TYPE string RETURNING VALUE(ro_instance) TYPE REF TO lcl_syntax_highlighter. METHODS process_line - IMPORTING iv_line TYPE string - RETURNING VALUE(rv_line) TYPE string. + IMPORTING iv_line TYPE string + RETURNING VALUE(rv_line) TYPE string. PROTECTED SECTION. @@ -39,15 +39,21 @@ CLASS lcl_syntax_highlighter DEFINITION ABSTRACT TYPES: BEGIN OF ty_rule, - regex TYPE REF TO cl_abap_regex, - token TYPE char1, - style TYPE string, + regex TYPE REF TO cl_abap_regex, + token TYPE char1, + style TYPE string, END OF ty_rule. CONSTANTS c_token_none TYPE c VALUE '.'. DATA mt_rules TYPE STANDARD TABLE OF ty_rule. + METHODS add_rule + IMPORTING + iv_regex TYPE string + iv_token TYPE c + iv_style TYPE string. + METHODS parse_line IMPORTING iv_line TYPE string EXPORTING et_matches TYPE ty_match_tt. @@ -84,21 +90,21 @@ CLASS lcl_syntax_abap DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL. CONSTANTS: BEGIN OF c_css, - keyword TYPE string VALUE 'keyword', "#EC NOTEXT - text TYPE string VALUE 'text', "#EC NOTEXT - comment TYPE string VALUE 'comment', "#EC NOTEXT + keyword TYPE string VALUE 'keyword', "#EC NOTEXT + text TYPE string VALUE 'text', "#EC NOTEXT + comment TYPE string VALUE 'comment', "#EC NOTEXT END OF c_css, BEGIN OF c_token, - keyword TYPE c VALUE 'K', "#EC NOTEXT - text TYPE c VALUE 'T', "#EC NOTEXT - comment TYPE c VALUE 'C', "#EC NOTEXT + keyword TYPE c VALUE 'K', "#EC NOTEXT + text TYPE c VALUE 'T', "#EC NOTEXT + comment TYPE c VALUE 'C', "#EC NOTEXT END OF c_token, BEGIN OF c_regex, - comment TYPE string VALUE '##|"|^\*', - text TYPE string VALUE '`|''|\||\{|\}', - keyword TYPE string VALUE '&&|\b[-_a-z0-9]+\b', + comment TYPE string VALUE '##|"|^\*', + text TYPE string VALUE '`|''|\||\{|\}', + keyword TYPE string VALUE '&&|\b[-_a-z0-9]+\b', END OF c_regex. PROTECTED SECTION. @@ -126,21 +132,21 @@ CLASS lcl_syntax_xml DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL. CONSTANTS: BEGIN OF c_css, - xml_tag TYPE string VALUE 'xml_tag', "#EC NOTEXT - attr TYPE string VALUE 'attr', "#EC NOTEXT - attr_val TYPE string VALUE 'attr_val', "#EC NOTEXT + xml_tag TYPE string VALUE 'xml_tag', "#EC NOTEXT + attr TYPE string VALUE 'attr', "#EC NOTEXT + attr_val TYPE string VALUE 'attr_val', "#EC NOTEXT END OF c_css, BEGIN OF c_token, - xml_tag TYPE c VALUE 'X', "#EC NOTEXT - attr TYPE c VALUE 'A', "#EC NOTEXT - attr_val TYPE c VALUE 'V', "#EC NOTEXT + xml_tag TYPE c VALUE 'X', "#EC NOTEXT + attr TYPE c VALUE 'A', "#EC NOTEXT + attr_val TYPE c VALUE 'V', "#EC NOTEXT END OF c_token, BEGIN OF c_regex, - xml_tag TYPE string VALUE '[<>]', "#EC NOTEXT + xml_tag TYPE string VALUE '[<>]', "#EC NOTEXT attr TYPE string VALUE '\s[-a-z:_0-9]+\s*(?==)', "#EC NOTEXT - attr_val TYPE string VALUE '["''][^''"]+[''"]', "#EC NOTEXT + attr_val TYPE string VALUE '["''][^''"]+[''"]', "#EC NOTEXT END OF c_regex. PROTECTED SECTION. @@ -149,23 +155,6 @@ CLASS lcl_syntax_xml DEFINITION INHERITING FROM lcl_syntax_highlighter FINAL. ENDCLASS. " lcl_syntax_xml DEFINITION -*----------------------------------------------------------------------* -* Macros to fill table with a regular expressions to be parsed -*----------------------------------------------------------------------* - -DEFINE _add_rule. - - CREATE OBJECT ls_rule-regex - EXPORTING - pattern = c_regex-&1 - ignore_case = abap_true. - - ls_rule-token = c_token-&1. - ls_rule-style = c_css-&1. - APPEND ls_rule TO mt_rules. - -END-OF-DEFINITION. " _add_rule - *----------------------------------------------------------------------* * CLASS lcl_syntax_highlighter IMPLEMENTATION *----------------------------------------------------------------------* @@ -187,6 +176,21 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION. ENDMETHOD. " create. + METHOD add_rule. + + DATA ls_rule LIKE LINE OF mt_rules. + + CREATE OBJECT ls_rule-regex + EXPORTING + pattern = iv_regex + ignore_case = abap_true. + + ls_rule-token = iv_token. + ls_rule-style = iv_style. + APPEND ls_rule TO mt_rules. + + ENDMETHOD. + METHOD parse_line. DATA: @@ -222,10 +226,10 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION. METHOD extend_matches. DATA: - lv_line_len TYPE i, - lv_last_pos TYPE i VALUE 0, - lv_length TYPE i, - ls_match TYPE ty_match. + lv_line_len TYPE i, + lv_last_pos TYPE i VALUE 0, + lv_length TYPE i, + ls_match TYPE ty_match. FIELD-SYMBOLS TYPE ty_match. @@ -259,8 +263,8 @@ CLASS lcl_syntax_highlighter IMPLEMENTATION. METHOD format_line. DATA: - lv_chunk TYPE string, - ls_rule LIKE LINE OF mt_rules. + lv_chunk TYPE string, + ls_rule LIKE LINE OF mt_rules. FIELD-SYMBOLS TYPE ty_match. @@ -346,9 +350,18 @@ CLASS lcl_syntax_abap IMPLEMENTATION. super->constructor( ). " Initialize instances of regular expression - _add_rule keyword. - _add_rule comment. - _add_rule text. + + add_rule( iv_regex = c_regex-keyword + iv_token = c_token-keyword + iv_style = c_css-keyword ). + + add_rule( iv_regex = c_regex-comment + iv_token = c_token-comment + iv_style = c_css-comment ). + + add_rule( iv_regex = c_regex-text + iv_token = c_token-text + iv_style = c_css-text ). ENDMETHOD. " constructor @@ -567,9 +580,18 @@ CLASS lcl_syntax_xml IMPLEMENTATION. super->constructor( ). " Initialize instances of regular expressions - _add_rule xml_tag. - _add_rule attr. - _add_rule attr_val. + + add_rule( iv_regex = c_regex-xml_tag + iv_token = c_token-xml_tag + iv_style = c_css-xml_tag ). + + add_rule( iv_regex = c_regex-attr + iv_token = c_token-attr + iv_style = c_css-attr ). + + add_rule( iv_regex = c_regex-attr_val + iv_token = c_token-attr_val + iv_style = c_css-attr_val ). ENDMETHOD. @@ -603,7 +625,7 @@ CLASS lcl_syntax_xml IMPLEMENTATION. DELETE ct_matches INDEX lv_index. CONTINUE. - " Adjust length and offset of closing tag + " Adjust length and offset of closing tag ELSEIF -text_tag = '>' AND lv_prev_token <> c_token-xml_tag. lv_state = 'C'. -length = -offset - -offset - -length + -length. @@ -673,7 +695,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. ms_match-token = &1. ms_match-offset = &2. ms_match-length = &3. - append ms_match to mt_after_parse. + APPEND ms_match TO mt_after_parse. END-OF-DEFINITION. " _generate_parse DEFINE _generate_order. @@ -681,7 +703,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. ms_match-offset = &2. ms_match-length = &3. ms_match-text_tag = &4. - append ms_match to mt_after_order. + APPEND ms_match TO mt_after_order. END-OF-DEFINITION. " _generate_order DEFINE _generate_extend. @@ -689,7 +711,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. ms_match-offset = &2. ms_match-length = &3. ms_match-text_tag = &4. - append ms_match to mt_after_extend. + APPEND ms_match TO mt_after_extend. END-OF-DEFINITION. " _generate_extend METHOD do_test. @@ -1002,7 +1024,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. DATA lv_line TYPE string. - lv_line = 'Text'. "#EC NOTEXT + lv_line = 'Text'. "#EC NOTEXT " Generate table with expected values after parsing _generate_parse 'X' 0 1. @@ -1027,7 +1049,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. DATA lv_line TYPE string. - lv_line = ''. "#EC NOTEXT + lv_line = ''. "#EC NOTEXT " Generate table with expected values after parsing _generate_parse 'X' 0 1. @@ -1047,7 +1069,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. DATA lv_line TYPE string. - lv_line = ''. "#EC NOTEXT + lv_line = ''. "#EC NOTEXT " Generate table with expected values after parsing _generate_parse 'X' 0 1. @@ -1076,7 +1098,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. DATA lv_line TYPE string. - lv_line = ''. "#EC NOTEXT + lv_line = ''. "#EC NOTEXT " Generate table with expected values after parsing _generate_parse 'X' 0 1. @@ -1105,7 +1127,7 @@ CLASS ltcl_syntax_cases IMPLEMENTATION. DATA lv_line TYPE string. - lv_line = '"text"'. "#EC NOTEXT + lv_line = '"text"'. "#EC NOTEXT " Generate table with expected values after parsing _generate_parse 'X' 0 1. @@ -1207,8 +1229,8 @@ CLASS ltcl_syntax_basic_logic IMPLEMENTATION. cl_abap_unit_assert=>assert_equals( act = lv_line_act - exp = 'CALL FUNCTION' "#EC NOTEXT - msg = 'Failure during applying of style.' ). "#EC NOTEXT + exp = 'CALL FUNCTION' "#EC NOTEXT + msg = 'Failure during applying of style.' ). "#EC NOTEXT ENDMETHOD. " apply_style @@ -1222,15 +1244,15 @@ CLASS ltcl_syntax_basic_logic IMPLEMENTATION. cl_abap_unit_assert=>assert_equals( act = lv_line_act exp = '' - msg = 'Failure in method process_line.' ). "#EC NOTEXT + msg = 'Failure in method process_line.' ). "#EC NOTEXT " Call the method with non-empty line and compare results lv_line_act = mo->process_line( iv_line = '* CALL FUNCTION' ). "#EC NOTEXT cl_abap_unit_assert=>assert_equals( act = lv_line_act - exp = '* CALL FUNCTION' "#EC NOTEXT - msg = 'Failure in method process_line.' ). "#EC NOTEXT + exp = '* CALL FUNCTION' "#EC NOTEXT + msg = 'Failure in method process_line.' ). "#EC NOTEXT ENDMETHOD. " process_line From e124e5c0d93a1488d0cca19d1a8e0b0db90d6823 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 12:55:42 +0000 Subject: [PATCH 174/188] refactor _ADD_DIALOG_FLD macro #773 --- src/zabapgit_popups.prog.abap | 129 +++++++++++++++++++++++++--------- 1 file changed, 95 insertions(+), 34 deletions(-) diff --git a/src/zabapgit_popups.prog.abap b/src/zabapgit_popups.prog.abap index b1a33356b..5a3ebd202 100644 --- a/src/zabapgit_popups.prog.abap +++ b/src/zabapgit_popups.prog.abap @@ -77,32 +77,52 @@ CLASS lcl_popups DEFINITION FINAL. lcx_cancel, popup_to_select_transports RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers. - PRIVATE SECTION. + PRIVATE SECTION. + TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY. + + CLASS-METHODS: add_field + IMPORTING iv_tabname TYPE sval-tabname + iv_fieldname TYPE sval-fieldname + iv_fieldtext TYPE sval-fieldtext + iv_value TYPE clike DEFAULT '' + iv_field_attr TYPE sval-field_attr DEFAULT '' + CHANGING ct_fields TYPE ty_sval_tt. ENDCLASS. CLASS lcl_popups IMPLEMENTATION. - METHOD popup_object. + METHOD add_field. - DEFINE _add_dialog_fld. - APPEND INITIAL LINE TO lt_fields ASSIGNING . - -tabname = &1. "#EC NOTEXT - -fieldname = &2. "#EC NOTEXT - -fieldtext = &3. "#EC NOTEXT - -value = &4. "#EC NOTEXT - -field_attr = &5. "#EC NOTEXT - END-OF-DEFINITION. + FIELD-SYMBOLS: LIKE LINE OF ct_fields. + + APPEND INITIAL LINE TO ct_fields ASSIGNING . + -tabname = iv_tabname. + -fieldname = iv_fieldname. + -fieldtext = iv_fieldtext. + -value = iv_value. + -field_attr = iv_field_attr. + + ENDMETHOD. + + METHOD popup_object. DATA: lv_returncode TYPE c, lt_fields TYPE TABLE OF sval. FIELD-SYMBOLS: LIKE LINE OF lt_fields. - " TAB FLD LABEL DEF ATTR - _add_dialog_fld 'TADIR' 'OBJECT' 'Type' '' ''. - _add_dialog_fld 'TADIR' 'OBJ_NAME' 'Name' '' ''. + + add_field( EXPORTING iv_tabname = 'TADIR' + iv_fieldname = 'OBJECT' + iv_fieldtext = 'Type' + CHANGING ct_fields = lt_fields ). + + add_field( EXPORTING iv_tabname = 'TADIR' + iv_fieldname = 'OBJ_NAME' + iv_fieldtext = 'Name' + CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING @@ -145,9 +165,17 @@ CLASS lcl_popups IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_fields. - " TAB FLD LABEL DEF ATTR - _add_dialog_fld 'TDEVC' 'DEVCLASS' 'Package' '' ''. - _add_dialog_fld 'TDEVC' 'INTSYS' 'Folder logic' 'PREFIX' ''. + + add_field( EXPORTING iv_tabname = 'TDEVC' + iv_fieldname = 'DEVCLASS' + iv_fieldtext = 'Package' + CHANGING ct_fields = lt_fields ). + + add_field( EXPORTING iv_tabname = 'TDEVC' + iv_fieldname = 'INTSYS' + iv_fieldtext = 'Folder logic' + iv_value = 'PREFIX' + CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING @@ -190,8 +218,11 @@ CLASS lcl_popups IMPLEMENTATION. CLEAR: ev_name, ev_cancel. -* TAB FLD LABEL DEF ATTR - _add_dialog_fld 'TEXTL' 'LINE' 'Name' 'new-branch-name' ''. + add_field( EXPORTING iv_tabname = 'TEXTL' + iv_fieldname = 'LINE' + iv_fieldtext = 'Name' + iv_value = 'new-branch-name' + CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING @@ -228,8 +259,11 @@ CLASS lcl_popups IMPLEMENTATION. CLEAR: ev_name, ev_cancel. -* TAB FLD LABEL DEF ATTR - _add_dialog_fld 'TEXTL' 'LINE' 'Name' 'lcl_gui_page_' ''. + add_field( EXPORTING iv_tabname = 'TEXTL' + iv_fieldname = 'LINE' + iv_fieldtext = 'Name' + iv_value = 'lcl_gui_page_' + CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING @@ -266,9 +300,15 @@ CLASS lcl_popups IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF lt_fields. - " TAB FLD LABEL DEF ATTR - _add_dialog_fld 'ABAPTXT255' 'LINE' 'Name' '' ''. - _add_dialog_fld 'TDEVC' 'DEVCLASS' 'Package' '' ''. + add_field( EXPORTING iv_tabname = 'ABAPTXT255' + iv_fieldname = 'LINE' + iv_fieldtext = 'Name' + CHANGING ct_fields = lt_fields ). + + add_field( EXPORTING iv_tabname = 'TDEVC' + iv_fieldname = 'DEVCLASS' + iv_fieldtext = 'Package' + CHANGING ct_fields = lt_fields ). lv_icon_ok = icon_okay. lv_button1 = 'Create package' ##NO_TEXT. @@ -443,10 +483,26 @@ CLASS lcl_popups IMPLEMENTATION. lv_icon2 = icon_folder. ENDIF. -* TAB FLD LABEL DEF ATTR - _add_dialog_fld 'ABAPTXT255' 'LINE' 'Git clone URL' iv_url lv_uattr. - _add_dialog_fld 'TDEVC' 'DEVCLASS' 'Target package' iv_package lv_pattr. - _add_dialog_fld 'TEXTL' 'LINE' 'Branch' iv_branch '05'. + add_field( EXPORTING iv_tabname = 'ABAPTXT255' + iv_fieldname = 'LINE' + iv_fieldtext = 'Git clone URL' + iv_value = iv_url + iv_field_attr = lv_uattr + CHANGING ct_fields = lt_fields ). + + add_field( EXPORTING iv_tabname = 'TDEVC' + iv_fieldname = 'DEVCLASS' + iv_fieldtext = 'Target package' + iv_value = iv_package + iv_field_attr = lv_pattr + CHANGING ct_fields = lt_fields ). + + add_field( EXPORTING iv_tabname = 'TEXTL' + iv_fieldname = 'LINE' + iv_fieldtext = 'Branch' + iv_value = iv_branch + iv_field_attr = '05' + CHANGING ct_fields = lt_fields ). lv_icon_ok = icon_okay. lv_icon_br = icon_workflow_fork. @@ -604,20 +660,25 @@ CLASS lcl_popups IMPLEMENTATION. CONCATENATE lv_transports_as_text '_' ls_transport_header-trkorr INTO lv_transports_as_text. ENDLOOP. - " TAB FLD LABEL DEF ATTR - _add_dialog_fld 'TEXTL' 'LINE' 'Branch name' lv_transports_as_text ''. - _add_dialog_fld 'ABAPTXT255' 'LINE' 'Commit text' lv_transports_as_text ''. + add_field( EXPORTING iv_tabname = 'TEXTL' + iv_fieldname = 'LINE' + iv_fieldtext = 'Branch name' + iv_value = lv_transports_as_text + CHANGING ct_fields = lt_fields ). + + add_field( EXPORTING iv_tabname = 'ABAPTXT255' + iv_fieldname = 'LINE' + iv_fieldtext = 'Commit text' + iv_value = lv_transports_as_text + CHANGING ct_fields = lt_fields ). CALL FUNCTION 'POPUP_GET_VALUES' EXPORTING -* no_value_check = SPACE " Deactivates data type check popup_title = 'Transport to new Branch' -* start_column = '5' " Start column of the dialog box -* start_row = '5' " Start line of the dialog box IMPORTING returncode = lv_returncode TABLES - fields = lt_fields " Table fields, values and attributes + fields = lt_fields EXCEPTIONS error_in_fields = 1 OTHERS = 2. From b9ea4960a3aec0e2dd7be0ae142452a88b8f7193 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 13:12:31 +0000 Subject: [PATCH 175/188] refactor _OBJECT_CHECK_TIMESTAMP macro #773 --- src/zabapgit_macros.prog.abap | 20 ------------ src/zabapgit_object_doma.prog.abap | 8 +++-- src/zabapgit_object_dtel.prog.abap | 8 +++-- src/zabapgit_object_enqu.prog.abap | 8 +++-- src/zabapgit_object_shlp.prog.abap | 14 +++++---- src/zabapgit_object_tabl.prog.abap | 18 +++++++++-- src/zabapgit_object_ttyp.prog.abap | 5 ++- src/zabapgit_object_view.prog.abap | 19 ++++++++---- src/zabapgit_objects.prog.abap | 50 +++++++++++++++++++++++++++--- 9 files changed, 101 insertions(+), 49 deletions(-) diff --git a/src/zabapgit_macros.prog.abap b/src/zabapgit_macros.prog.abap index ddb8c245e..cf9f033a1 100644 --- a/src/zabapgit_macros.prog.abap +++ b/src/zabapgit_macros.prog.abap @@ -1,23 +1,3 @@ *&---------------------------------------------------------------------* *& Include ZABAPGIT_MACROS *&---------------------------------------------------------------------* - -* Macros - -DEFINE _object_check_timestamp. - IF sy-subrc = 0 AND &1 IS NOT INITIAL AND &2 IS NOT INITIAL. - cl_abap_tstmp=>systemtstmp_syst2utc( - EXPORTING syst_date = &1 - syst_time = &2 - IMPORTING utc_tstmp = lv_ts ). - IF lv_ts < iv_timestamp. - rv_changed = abap_false. " Unchanged - ELSE. - rv_changed = abap_true. - RETURN. - ENDIF. - ELSE. " Not found? => changed - rv_changed = abap_true. - RETURN. - ENDIF. -END-OF-DEFINITION. diff --git a/src/zabapgit_object_doma.prog.abap b/src/zabapgit_object_doma.prog.abap index f3384b9ba..bd8194ce9 100644 --- a/src/zabapgit_object_doma.prog.abap +++ b/src/zabapgit_object_doma.prog.abap @@ -53,8 +53,7 @@ CLASS lcl_object_doma IMPLEMENTATION. METHOD lif_object~has_changed_since. DATA: lv_date TYPE dats, - lv_time TYPE tims, - lv_ts TYPE timestamp. + lv_time TYPE tims. SELECT SINGLE as4date as4time FROM dd01l INTO (lv_date, lv_time) @@ -62,7 +61,10 @@ CLASS lcl_object_doma IMPLEMENTATION. AND as4local = 'A' AND as4vers = '0000'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_object_dtel.prog.abap b/src/zabapgit_object_dtel.prog.abap index ab9e75ce8..cb2bac785 100644 --- a/src/zabapgit_object_dtel.prog.abap +++ b/src/zabapgit_object_dtel.prog.abap @@ -46,8 +46,7 @@ CLASS lcl_object_dtel IMPLEMENTATION. METHOD lif_object~has_changed_since. DATA: lv_date TYPE dats, - lv_time TYPE tims, - lv_ts TYPE timestamp. + lv_time TYPE tims. SELECT SINGLE as4date as4time FROM dd04l INTO (lv_date, lv_time) @@ -55,7 +54,10 @@ CLASS lcl_object_dtel IMPLEMENTATION. AND as4local = 'A' AND as4vers = '0000'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_object_enqu.prog.abap b/src/zabapgit_object_enqu.prog.abap index e3425e9d8..e0127a955 100644 --- a/src/zabapgit_object_enqu.prog.abap +++ b/src/zabapgit_object_enqu.prog.abap @@ -25,8 +25,7 @@ CLASS lcl_object_enqu IMPLEMENTATION. METHOD lif_object~has_changed_since. DATA: lv_date TYPE dats, - lv_time TYPE tims, - lv_ts TYPE timestamp. + lv_time TYPE tims. SELECT SINGLE as4date as4time FROM dd25l INTO (lv_date, lv_time) @@ -34,7 +33,10 @@ CLASS lcl_object_enqu IMPLEMENTATION. AND as4local = 'A' AND as4vers = '0000'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_object_shlp.prog.abap b/src/zabapgit_object_shlp.prog.abap index 307980a74..3373ada0a 100644 --- a/src/zabapgit_object_shlp.prog.abap +++ b/src/zabapgit_object_shlp.prog.abap @@ -25,15 +25,17 @@ CLASS lcl_object_shlp IMPLEMENTATION. METHOD lif_object~has_changed_since. DATA: lv_date TYPE dats, - lv_time TYPE tims, - lv_ts TYPE timestamp. + lv_time TYPE tims. SELECT SINGLE as4date as4time FROM dd30l - INTO (lv_date, lv_time) - WHERE shlpname = ms_item-obj_name - AND as4local = 'A'. + INTO (lv_date, lv_time) + WHERE shlpname = ms_item-obj_name + AND as4local = 'A'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index d1cff6ed3..229167c76 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -38,7 +38,11 @@ CLASS lcl_object_tabl IMPLEMENTATION. AND as4local = 'A' AND as4vers = '0000'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). + CHECK rv_changed = abap_false. SELECT SINGLE as4date as4time FROM dd09l " Table tech settings INTO (lv_date, lv_time) @@ -46,7 +50,11 @@ CLASS lcl_object_tabl IMPLEMENTATION. AND as4local = 'A' AND as4vers = '0000'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). + CHECK rv_changed = abap_false. SELECT as4date as4time FROM dd12l " Table tech settings INTO CORRESPONDING FIELDS OF TABLE lt_indexes @@ -55,7 +63,11 @@ CLASS lcl_object_tabl IMPLEMENTATION. AND as4vers = '0000' ##TOO_MANY_ITAB_FIELDS. LOOP AT lt_indexes ASSIGNING . - _object_check_timestamp -as4date -as4time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = -as4date + iv_time = -as4time ). + CHECK rv_changed = abap_false. ENDLOOP. ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap index 659af989c..a79f4a6aa 100644 --- a/src/zabapgit_object_ttyp.prog.abap +++ b/src/zabapgit_object_ttyp.prog.abap @@ -33,7 +33,10 @@ CLASS lcl_object_ttyp IMPLEMENTATION. WHERE typename = ms_item-obj_name AND as4local = 'A'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index c540e7e2f..1d89a367d 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -25,24 +25,31 @@ CLASS lcl_object_view IMPLEMENTATION. METHOD lif_object~has_changed_since. DATA: lv_date TYPE dats, - lv_time TYPE tims, - lv_ts TYPE timestamp. + lv_time TYPE tims. - SELECT SINGLE as4date as4time FROM dd25l " View + SELECT SINGLE as4date as4time FROM dd25l INTO (lv_date, lv_time) WHERE viewname = ms_item-obj_name AND as4local = 'A' AND as4vers = '0000'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). + CHECK rv_changed = abap_false. - SELECT SINGLE as4date as4time FROM dd09l " Table tech settings + SELECT SINGLE as4date as4time FROM dd09l INTO (lv_date, lv_time) WHERE tabname = ms_item-obj_name AND as4local = 'A' AND as4vers = '0000'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). + CHECK rv_changed = abap_false. ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index da243eb83..22f9f8e2d 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -571,6 +571,13 @@ CLASS lcl_objects_super DEFINITION ABSTRACT. mv_language TYPE spras. METHODS: + check_timestamp + IMPORTING + iv_timestamp TYPE timestamp + iv_date TYPE datum + iv_time TYPE uzeit + RETURNING + VALUE(rv_changed) TYPE abap_bool, get_metadata RETURNING VALUE(rs_metadata) TYPE lif_defs=>ty_metadata, corr_insert @@ -1539,7 +1546,11 @@ CLASS lcl_objects_program IMPLEMENTATION. WHERE progname = iv_program AND r3state = 'A'. - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). + CHECK rv_changed = abap_false. SELECT SINGLE udat utime FROM repotext " Program text pool INTO (lv_date, lv_time) @@ -1547,7 +1558,11 @@ CLASS lcl_objects_program IMPLEMENTATION. AND r3state = 'A'. IF sy-subrc = 0. " Text not found ? Assuming no changes, see #404 - _object_check_timestamp lv_date lv_time. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = lv_date + iv_time = lv_time ). + CHECK rv_changed = abap_false. ENDIF. IF iv_skip_gui = abap_true. @@ -1559,7 +1574,11 @@ CLASS lcl_objects_program IMPLEMENTATION. WHERE prog = iv_program ##TOO_MANY_ITAB_FIELDS. "#EC CI_SUBRC LOOP AT lt_screens ASSIGNING . - _object_check_timestamp -dgen -tgen. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = -dgen + iv_time = -tgen ). + CHECK rv_changed = abap_false. ENDLOOP. SELECT vdatum vzeit FROM eudb " GUI @@ -1569,7 +1588,11 @@ CLASS lcl_objects_program IMPLEMENTATION. AND srtf2 = 0 ##TOO_MANY_ITAB_FIELDS. "#EC CI_SUBRC LOOP AT lt_eudb ASSIGNING . - _object_check_timestamp -vdatum -vzeit. + rv_changed = check_timestamp( + iv_timestamp = iv_timestamp + iv_date = -vdatum + iv_time = -vzeit ). + CHECK rv_changed = abap_false. ENDLOOP. ENDMETHOD. "check_prog_changed_since @@ -1690,6 +1713,25 @@ CLASS lcl_objects_super IMPLEMENTATION. ENDMETHOD. + METHOD check_timestamp. + + DATA: lv_ts TYPE timestamp. + + IF sy-subrc = 0 AND iv_date IS NOT INITIAL AND iv_time IS NOT INITIAL. + cl_abap_tstmp=>systemtstmp_syst2utc( + EXPORTING syst_date = iv_date + syst_time = iv_time + IMPORTING utc_tstmp = lv_ts ). + IF lv_ts < iv_timestamp. + rv_changed = abap_false. " Unchanged + ELSE. + rv_changed = abap_true. + ENDIF. + ELSE. " Not found? => changed + rv_changed = abap_true. + ENDIF. + + ENDMETHOD. METHOD get_metadata. rs_metadata-class = From 3a833bb97178b4803e2dc6ffc28dbb5bec0e0f93 Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 13:39:38 +0000 Subject: [PATCH 176/188] cleanup --- src/zabapgit_news.prog.abap | 6 +++--- src/zabapgit_object_auth.prog.abap | 2 +- src/zabapgit_object_enho.prog.abap | 2 +- src/zabapgit_object_fugr.prog.abap | 1 - src/zabapgit_object_shi3.prog.abap | 11 +---------- src/zabapgit_object_tabl.prog.abap | 13 +++++++++---- src/zabapgit_object_ttyp.prog.abap | 3 +-- src/zabapgit_object_view.prog.abap | 8 ++++++-- src/zabapgit_objects.prog.abap | 17 ++++++++++++----- src/zabapgit_repo_impl.prog.abap | 2 +- src/zabapgit_syntax_highlighter.prog.abap | 4 ---- src/zabapgit_util.prog.abap | 8 ++++---- src/zabapgit_xml.prog.abap | 3 +-- 13 files changed, 40 insertions(+), 40 deletions(-) diff --git a/src/zabapgit_news.prog.abap b/src/zabapgit_news.prog.abap index 0c539520b..9e51a9c16 100644 --- a/src/zabapgit_news.prog.abap +++ b/src/zabapgit_news.prog.abap @@ -394,17 +394,17 @@ CLASS ltcl_news IMPLEMENTATION. ls_log = lcl_news=>parse_line( iv_line = '======' iv_current_version = '1.26.01' ). - cl_abap_unit_assert=>assert_initial( act = ls_log ). + cl_abap_unit_assert=>assert_initial( ls_log ). ls_log = lcl_news=>parse_line( iv_line = '' iv_current_version = '1.26.01' ). - cl_abap_unit_assert=>assert_initial( act = ls_log ). + cl_abap_unit_assert=>assert_initial( ls_log ). ls_log = lcl_news=>parse_line( iv_line = '------' iv_current_version = '1.26.01' ). - cl_abap_unit_assert=>assert_initial( act = ls_log ). + cl_abap_unit_assert=>assert_initial( ls_log ). CLEAR ls_log. ls_log = lcl_news=>parse_line( diff --git a/src/zabapgit_object_auth.prog.abap b/src/zabapgit_object_auth.prog.abap index fde332ce9..8cfe21e0b 100644 --- a/src/zabapgit_object_auth.prog.abap +++ b/src/zabapgit_object_auth.prog.abap @@ -115,7 +115,7 @@ CLASS lcl_object_auth IMPLEMENTATION. METHOD lif_object~jump. - DATA: field TYPE fieldname . + DATA: field TYPE fieldname. field = ms_item-obj_name. diff --git a/src/zabapgit_object_enho.prog.abap b/src/zabapgit_object_enho.prog.abap index 30debffb4..176963fd5 100644 --- a/src/zabapgit_object_enho.prog.abap +++ b/src/zabapgit_object_enho.prog.abap @@ -262,7 +262,7 @@ CLASS lcl_object_enho_clif IMPLEMENTATION. io_xml->read( EXPORTING iv_name = 'TAB_METHODS' CHANGING cg_data = lt_tab_methods ). - io_clif->set_enhattributes( tab_attributes = lt_tab_attributes ). + io_clif->set_enhattributes( lt_tab_attributes ). * todo: deserialize includes diff --git a/src/zabapgit_object_fugr.prog.abap b/src/zabapgit_object_fugr.prog.abap index 8d7f9b118..3fd94c39f 100644 --- a/src/zabapgit_object_fugr.prog.abap +++ b/src/zabapgit_object_fugr.prog.abap @@ -419,7 +419,6 @@ CLASS lcl_object_fugr IMPLEMENTATION. DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc WITH DEFAULT KEY, ls_reposrc LIKE LINE OF lt_reposrc, lv_program TYPE program, - lv_cnam TYPE reposrc-cnam, lv_tabix LIKE sy-tabix, lt_functab TYPE ty_rs38l_incl_tt. diff --git a/src/zabapgit_object_shi3.prog.abap b/src/zabapgit_object_shi3.prog.abap index 255bcdf89..7faadf630 100644 --- a/src/zabapgit_object_shi3.prog.abap +++ b/src/zabapgit_object_shi3.prog.abap @@ -18,16 +18,7 @@ CLASS lcl_object_shi3 DEFINITION INHERITING FROM lcl_objects_super FINAL. PRIVATE SECTION. - - TYPES: BEGIN OF ty_id_map, - old TYPE ttree-id, - new TYPE ttree-id, - END OF ty_id_map. - TYPES tt_id_map TYPE STANDARD TABLE OF ty_id_map. - TYPES ts_id_map TYPE SORTED TABLE OF ty_id_map WITH UNIQUE KEY old. - - DATA: mv_tree_id TYPE ttree-id, - mt_map TYPE ts_id_map. " SORTED ! + DATA: mv_tree_id TYPE ttree-id. METHODS jump_se43 RAISING lcx_exception. diff --git a/src/zabapgit_object_tabl.prog.abap b/src/zabapgit_object_tabl.prog.abap index 229167c76..a8d4a2ab5 100644 --- a/src/zabapgit_object_tabl.prog.abap +++ b/src/zabapgit_object_tabl.prog.abap @@ -27,7 +27,6 @@ CLASS lcl_object_tabl IMPLEMENTATION. DATA: lv_date TYPE dats, lv_time TYPE tims, - lv_ts TYPE timestamp, lt_indexes TYPE STANDARD TABLE OF dd09l. FIELD-SYMBOLS LIKE LINE OF lt_indexes. @@ -42,7 +41,9 @@ CLASS lcl_object_tabl IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = lv_date iv_time = lv_time ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. SELECT SINGLE as4date as4time FROM dd09l " Table tech settings INTO (lv_date, lv_time) @@ -54,7 +55,9 @@ CLASS lcl_object_tabl IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = lv_date iv_time = lv_time ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. SELECT as4date as4time FROM dd12l " Table tech settings INTO CORRESPONDING FIELDS OF TABLE lt_indexes @@ -67,7 +70,9 @@ CLASS lcl_object_tabl IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = -as4date iv_time = -as4time ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. ENDLOOP. ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_object_ttyp.prog.abap b/src/zabapgit_object_ttyp.prog.abap index a79f4a6aa..a8031cc0e 100644 --- a/src/zabapgit_object_ttyp.prog.abap +++ b/src/zabapgit_object_ttyp.prog.abap @@ -25,8 +25,7 @@ CLASS lcl_object_ttyp IMPLEMENTATION. METHOD lif_object~has_changed_since. DATA: lv_date TYPE dats, - lv_time TYPE tims, - lv_ts TYPE timestamp. + lv_time TYPE tims. SELECT SINGLE as4date as4time FROM dd40l INTO (lv_date, lv_time) diff --git a/src/zabapgit_object_view.prog.abap b/src/zabapgit_object_view.prog.abap index 1d89a367d..bee07aff5 100644 --- a/src/zabapgit_object_view.prog.abap +++ b/src/zabapgit_object_view.prog.abap @@ -37,7 +37,9 @@ CLASS lcl_object_view IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = lv_date iv_time = lv_time ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. SELECT SINGLE as4date as4time FROM dd09l INTO (lv_date, lv_time) @@ -49,7 +51,9 @@ CLASS lcl_object_view IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = lv_date iv_time = lv_time ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. ENDMETHOD. "lif_object~has_changed_since diff --git a/src/zabapgit_objects.prog.abap b/src/zabapgit_objects.prog.abap index 22f9f8e2d..8b2907a56 100644 --- a/src/zabapgit_objects.prog.abap +++ b/src/zabapgit_objects.prog.abap @@ -1534,7 +1534,6 @@ CLASS lcl_objects_program IMPLEMENTATION. DATA: lv_date TYPE dats, lv_time TYPE tims, - lv_ts TYPE timestamp, lt_screens TYPE STANDARD TABLE OF d020s, lt_eudb TYPE STANDARD TABLE OF eudb. @@ -1550,7 +1549,9 @@ CLASS lcl_objects_program IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = lv_date iv_time = lv_time ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. SELECT SINGLE udat utime FROM repotext " Program text pool INTO (lv_date, lv_time) @@ -1562,7 +1563,9 @@ CLASS lcl_objects_program IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = lv_date iv_time = lv_time ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. ENDIF. IF iv_skip_gui = abap_true. @@ -1578,7 +1581,9 @@ CLASS lcl_objects_program IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = -dgen iv_time = -tgen ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. ENDLOOP. SELECT vdatum vzeit FROM eudb " GUI @@ -1592,7 +1597,9 @@ CLASS lcl_objects_program IMPLEMENTATION. iv_timestamp = iv_timestamp iv_date = -vdatum iv_time = -vzeit ). - CHECK rv_changed = abap_false. + IF rv_changed = abap_true. + RETURN. + ENDIF. ENDLOOP. ENDMETHOD. "check_prog_changed_since diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 85e26ac1e..ef402633c 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -558,7 +558,7 @@ CLASS lcl_repo IMPLEMENTATION. io_dot = get_dot_abapgit( ) ). lt_filter = it_filter. - lv_filter_exist = boolc( lines( lt_filter ) > 0 ) . + lv_filter_exist = boolc( lines( lt_filter ) > 0 ). LOOP AT lt_tadir ASSIGNING . IF lv_filter_exist = abap_true. diff --git a/src/zabapgit_syntax_highlighter.prog.abap b/src/zabapgit_syntax_highlighter.prog.abap index bc176e31a..27c883e37 100644 --- a/src/zabapgit_syntax_highlighter.prog.abap +++ b/src/zabapgit_syntax_highlighter.prog.abap @@ -345,8 +345,6 @@ CLASS lcl_syntax_abap IMPLEMENTATION. METHOD constructor. - DATA ls_rule LIKE LINE OF mt_rules. - super->constructor( ). " Initialize instances of regular expression @@ -575,8 +573,6 @@ CLASS lcl_syntax_xml IMPLEMENTATION. METHOD constructor. - DATA ls_rule LIKE LINE OF mt_rules. - super->constructor( ). " Initialize instances of regular expressions diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 45db5048c..db0ee274a 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -110,8 +110,8 @@ CLASS lcl_convert DEFINITION FINAL. RETURNING VALUE(rv_xstring) TYPE xstring. CLASS-METHODS split_string - IMPORTING iv_string TYPE string - RETURNING value(rt_lines) TYPE string_table. + IMPORTING iv_string TYPE string + RETURNING VALUE(rt_lines) TYPE string_table. ENDCLASS. "lcl_convert DEFINITION @@ -423,8 +423,8 @@ CLASS lcl_path IMPLEMENTATION. METHOD change_dir. - DATA lv_last TYPE i. - DATA lv_temp TYPE string. + DATA: lv_last TYPE i, + lv_temp TYPE string. lv_last = strlen( iv_cur_dir ) - 1. diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index 109f62f55..ffe3c348d 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -293,8 +293,7 @@ CLASS lcl_xml_output IMPLEMENTATION. name = 'abap' prefix = 'asx' ). - li_attr = mi_xml_doc->create_attribute_ns( - name = 'version' ). + li_attr = mi_xml_doc->create_attribute_ns( 'version' ). li_attr->if_ixml_node~set_value( '1.0' ). ri_element->set_attribute_node_ns( li_attr ). From ef18d2c716d655a56901f6f39754a7303237fffe Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 11 Jun 2017 07:40:14 +0000 Subject: [PATCH 177/188] move version constants to interface --- src/zabapgit.prog.abap | 3 --- src/zabapgit_definitions.prog.abap | 3 +++ src/zabapgit_http.prog.abap | 2 +- src/zabapgit_news.prog.abap | 2 +- src/zabapgit_page.prog.abap | 2 +- src/zabapgit_page_debug.prog.abap | 4 ++-- src/zabapgit_xml.prog.abap | 6 +++--- 7 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 53b4801e3..fa7af4c0e 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -2,9 +2,6 @@ REPORT zabapgit LINE-SIZE 100. * See http://www.abapgit.org -CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT - gc_abap_version TYPE string VALUE 'v1.37.2'. "#EC NOTEXT - ******************************************************************************** * The MIT License (MIT) * diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 849e0eeaa..07bf82a56 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -6,6 +6,9 @@ TYPE-POOLS seop. INTERFACE lif_defs. + CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT + gc_abap_version TYPE string VALUE 'v1.37.2'. "#EC NOTEXT + TYPES: ty_type TYPE c LENGTH 6, ty_bitbyte TYPE c LENGTH 8, ty_sha1 TYPE c LENGTH 40. diff --git a/src/zabapgit_http.prog.abap b/src/zabapgit_http.prog.abap index c75f907b2..72d64fc30 100644 --- a/src/zabapgit_http.prog.abap +++ b/src/zabapgit_http.prog.abap @@ -408,7 +408,7 @@ CLASS lcl_http IMPLEMENTATION. METHOD get_agent. * bitbucket require agent prefix = "git/" - rv_agent = 'git/abapGit-' && gc_abap_version. + rv_agent = 'git/abapGit-' && lif_defs=>gc_abap_version. ENDMETHOD. diff --git a/src/zabapgit_news.prog.abap b/src/zabapgit_news.prog.abap index 9e51a9c16..7a6f5a7d6 100644 --- a/src/zabapgit_news.prog.abap +++ b/src/zabapgit_news.prog.abap @@ -121,7 +121,7 @@ CLASS lcl_news IMPLEMENTATION. CREATE OBJECT ro_instance EXPORTING iv_rawdata = -data - iv_current_version = gc_abap_version " TODO refactor + iv_current_version = lif_defs=>gc_abap_version " TODO refactor iv_lastseen_version = normalize_version( lv_last_seen ). ENDIF. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 3ee83ead9..11d9bd724 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -119,7 +119,7 @@ CLASS lcl_gui_page IMPLEMENTATION. ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT - ro_html->add( || ). "#EC NOTEXT + ro_html->add( || ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT ro_html->add( '
    { gc_abap_version }{ lif_defs=>gc_abap_version }
    ' ). "#EC NOTEXT diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap index 210e95fbc..12d5b841f 100644 --- a/src/zabapgit_page_debug.prog.abap +++ b/src/zabapgit_page_debug.prog.abap @@ -55,8 +55,8 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION. CREATE OBJECT ro_html. - ro_html->add( |

    abapGit version: { gc_abap_version }

    | ). - ro_html->add( |

    XML version: { gc_xml_version }

    | ). + ro_html->add( |

    abapGit version: { lif_defs=>gc_abap_version }

    | ). + ro_html->add( |

    XML version: { lif_defs=>gc_xml_version }

    | ). ro_html->add( |

    GUI version: { lv_gui_version }

    | ). ro_html->add( |

    LCL_TIME: { lcl_time=>get( ) }

    | ). ro_html->add( |

    SY time: { sy-datum } { sy-uzeit } { sy-tzone }

    | ). diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index ffe3c348d..5e68b5bf5 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -81,7 +81,7 @@ CLASS lcl_xml IMPLEMENTATION. li_element = mi_xml_doc->find_from_name_ns( depth = 0 name = c_abapgit_tag ). li_version = li_element->if_ixml_node~get_attributes( )->get_named_item_ns( c_attr_version ) ##no_text. - IF li_version->get_value( ) <> gc_xml_version. + IF li_version->get_value( ) <> lif_defs=>gc_xml_version. display_xml_error( ). ENDIF. @@ -96,7 +96,7 @@ CLASS lcl_xml IMPLEMENTATION. DATA: lv_version TYPE string. - lv_version = |abapGit version: { gc_abap_version }|. + lv_version = |abapGit version: { lif_defs=>gc_abap_version }|. CALL FUNCTION 'POPUP_TO_INFORM' EXPORTING @@ -270,7 +270,7 @@ CLASS lcl_xml_output IMPLEMENTATION. ENDIF. li_git = mi_xml_doc->create_element( c_abapgit_tag ). - li_git->set_attribute( name = c_attr_version value = gc_xml_version ). + li_git->set_attribute( name = c_attr_version value = lif_defs=>gc_xml_version ). IF NOT is_metadata IS INITIAL. li_git->set_attribute( name = c_attr_serializer value = is_metadata-class ). From 0cdede068e4d1c89de05463238fe171731a77d30 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 11 Jun 2017 08:00:46 +0000 Subject: [PATCH 178/188] refactor macro _REDUCE_STATE --- src/zabapgit_repo_browser_util.prog.abap | 25 ++++++++------------ src/zabapgit_util.prog.abap | 29 ++++++++++++++++++++++++ src/zabapgit_view_repo.prog.abap | 6 +++-- 3 files changed, 43 insertions(+), 17 deletions(-) diff --git a/src/zabapgit_repo_browser_util.prog.abap b/src/zabapgit_repo_browser_util.prog.abap index 50e69eeea..3a0d62030 100644 --- a/src/zabapgit_repo_browser_util.prog.abap +++ b/src/zabapgit_repo_browser_util.prog.abap @@ -62,17 +62,6 @@ CLASS lcl_repo_content_list DEFINITION FINAL. ENDCLASS. "lcl_repo_content_browser -DEFINE _reduce_state. - " &1 - prev, &2 - cur - IF &1 = &2 OR &2 IS INITIAL. - ASSERT 1 = 1. " No change - ELSEIF &1 IS INITIAL. - &1 = &2. - ELSE. - &1 = lif_defs=>gc_state-mixed. - ENDIF. -END-OF-DEFINITION. - CLASS lcl_repo_content_list IMPLEMENTATION. METHOD constructor. @@ -146,8 +135,11 @@ CLASS lcl_repo_content_list IMPLEMENTATION. ENDAT. ls_folder-changes = ls_folder-changes + -changes. - _reduce_state ls_folder-lstate -lstate. - _reduce_state ls_folder-rstate -rstate. + + lcl_state=>reduce( EXPORTING iv_cur = -lstate + CHANGING cv_prev = ls_folder-lstate ). + lcl_state=>reduce( EXPORTING iv_cur = -rstate + CHANGING cv_prev = ls_folder-rstate ). AT END OF path. APPEND ls_folder TO ct_repo_items. @@ -229,8 +221,11 @@ CLASS lcl_repo_content_list IMPLEMENTATION. IF ls_file-is_changed = abap_true. -sortkey = c_sortkey-changed. " Changed files -changes = -changes + 1. - _reduce_state -lstate ls_file-lstate. - _reduce_state -rstate ls_file-rstate. + + lcl_state=>reduce( EXPORTING iv_cur = ls_file-lstate + CHANGING cv_prev = -lstate ). + lcl_state=>reduce( EXPORTING iv_cur = -rstate + CHANGING cv_prev = ls_file-rstate ). ENDIF. ENDIF. diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index db0ee274a..a1e56414e 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -2,6 +2,35 @@ *& Include ZABAPGIT_UTIL *&---------------------------------------------------------------------* +CLASS lcl_state DEFINITION. + + PUBLIC SECTION. + + CLASS-METHODS: + reduce + IMPORTING + iv_cur TYPE char1 + CHANGING + cv_prev TYPE char1. + +ENDCLASS. + +CLASS lcl_state IMPLEMENTATION. + + METHOD reduce. + + IF cv_prev = iv_cur OR iv_cur IS INITIAL. + RETURN. " No change + ELSEIF cv_prev IS INITIAL. + cv_prev = iv_cur. + ELSE. + cv_prev = lif_defs=>gc_state-mixed. + ENDIF. + + ENDMETHOD. + +ENDCLASS. + *----------------------------------------------------------------------* * CLASS lcl_time DEFINITION *----------------------------------------------------------------------* diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap index 8c88e7394..c643522f5 100644 --- a/src/zabapgit_view_repo.prog.abap +++ b/src/zabapgit_view_repo.prog.abap @@ -151,8 +151,10 @@ CLASS lcl_gui_view_repo IMPLEMENTATION. iv_changes_only = mv_changes_only ). LOOP AT lt_repo_items ASSIGNING . - _reduce_state lv_lstate -lstate. - _reduce_state lv_rstate -rstate. + lcl_state=>reduce( EXPORTING iv_cur = -lstate + CHANGING cv_prev = lv_lstate ). + lcl_state=>reduce( EXPORTING iv_cur = -rstate + CHANGING cv_prev = lv_rstate ). ENDLOOP. ro_html->add( render_head_line( iv_lstate = lv_lstate From 7f0056d1fbd01aa57c4c6ec302ef03a5aba26e74 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 11 Jun 2017 08:54:27 +0000 Subject: [PATCH 179/188] pretty print --- src/zabapgit_gui.prog.abap | 8 ++++---- src/zabapgit_page.prog.abap | 18 +++++++++--------- src/zabapgit_page_background.prog.abap | 16 ++++++++-------- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index b017f21f8..efcbe2a22 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -186,7 +186,7 @@ CLASS lcl_gui IMPLEMENTATION. METHOD call_page. - DATA: ls_stack TYPE ty_page_stack. + DATA: ls_stack TYPE ty_page_stack. IF iv_replacing = abap_false AND NOT mi_cur_page IS INITIAL. ls_stack-page = mi_cur_page. @@ -281,11 +281,11 @@ CLASS lcl_gui IMPLEMENTATION. CALL FUNCTION 'SCMS_STRING_TO_XSTRING' EXPORTING - text = iv_text + text = iv_text IMPORTING - buffer = lv_xstr + buffer = lv_xstr EXCEPTIONS - OTHERS = 1. + OTHERS = 1. ASSERT sy-subrc = 0. ELSE. " Raw input diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 11d9bd724..d791b710a 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -47,14 +47,14 @@ CLASS lcl_gui_page DEFINITION ABSTRACT. PRIVATE SECTION. METHODS html_head - RETURNING VALUE(ro_html) TYPE REF TO lcl_html. + RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS title RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS footer - RETURNING VALUE(ro_html) TYPE REF TO lcl_html. + RETURNING VALUE(ro_html) TYPE REF TO lcl_html. METHODS redirect RETURNING VALUE(ro_html) TYPE REF TO lcl_html. @@ -131,13 +131,13 @@ CLASS lcl_gui_page IMPLEMENTATION. CREATE OBJECT ro_html. - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT - ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT ro_html->add( || ). "#EC NOTEXT - ro_html->add( ''). "#EC NOTEXT - ro_html->add( ''). "#EC NOTEXT + ms_control-redirect_url }">| ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT ENDMETHOD. @@ -180,7 +180,7 @@ CLASS lcl_gui_page IMPLEMENTATION. ro_html->add( '' ). ENDIF. - ro_html->add( ''). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT ENDMETHOD. " lif_gui_page~render. diff --git a/src/zabapgit_page_background.prog.abap b/src/zabapgit_page_background.prog.abap index de86b3422..707c83174 100644 --- a/src/zabapgit_page_background.prog.abap +++ b/src/zabapgit_page_background.prog.abap @@ -181,18 +181,18 @@ CLASS lcl_gui_page_bkg IMPLEMENTATION. ro_html->add( lcl_gui_chunk_lib=>render_repo_top( lo_repo ) ). ro_html->add( '
    ' ). - ro_html->add( 'Method
    ' ) ##NO_TEXT. + ro_html->add( 'Method
    ' ) ##NO_TEXT. ro_html->add( || ). ro_html->add( 'Do nothing
    ' ) ##NO_TEXT. + lv_nothing && '>Do nothing
    ' ) ##NO_TEXT. ro_html->add( 'Automatic push
    ' ) ##NO_TEXT. + lv_push && '>Automatic push
    ' ) ##NO_TEXT. ro_html->add( 'Automatic pull
    ' ) ##NO_TEXT. + lv_pull && '>Automatic pull
    ' ) ##NO_TEXT. ro_html->add( '
    ' ). - ro_html->add( 'HTTP Authentication, optional
    ' ) ##NO_TEXT. - ro_html->add( '(password will be saved in clear text)
    ' ) ##NO_TEXT. + ro_html->add( 'HTTP Authentication, optional
    ' ) ##NO_TEXT. + ro_html->add( '(password will be saved in clear text)
    ' ) ##NO_TEXT. ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). @@ -210,9 +210,9 @@ CLASS lcl_gui_page_bkg IMPLEMENTATION. ro_html->add( 'Commit author
    ' ). ro_html->add( 'Fixed
    ' ) ##NO_TEXT. + lv_afixed && '>Fixed
    ' ) ##NO_TEXT. ro_html->add( 'Automatic
    ' ) ##NO_TEXT. + lv_aauto && '>Automatic
    ' ) ##NO_TEXT. ro_html->add( '
    ' ). ro_html->add( '
    Username:
    ' ). From b91c658583550d6486d2dd58deaca5eaf0684c86 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 11 Jun 2017 10:16:23 +0000 Subject: [PATCH 180/188] fix db edit --- src/zabapgit_gui_router.prog.abap | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index db58bf4be..1c7a0b009 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -122,13 +122,17 @@ CLASS lcl_gui_router IMPLEMENTATION. ev_state = lif_defs=>gc_event_state-no_more_act. " DB actions - WHEN lif_defs=>gc_action-db_display OR lif_defs=>gc_action-db_edit. " DB Display/Edit - ei_page = get_page_db_by_name( iv_name = 'DB_DIS' + WHEN lif_defs=>gc_action-db_edit. + ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ). ev_state = lif_defs=>gc_event_state-new_page. IF iv_prev_page = 'PAGE_DB_DIS'. ev_state = lif_defs=>gc_event_state-new_page_replacing. ENDIF. + WHEN lif_defs=>gc_action-db_display. + ei_page = get_page_db_by_name( iv_name = 'DB_DIS' + iv_getdata = iv_getdata ). + ev_state = lif_defs=>gc_event_state-new_page. WHEN lif_defs=>gc_action-db_delete. " DB Delete ls_db = lcl_html_action_utils=>dbkey_decode( iv_getdata ). lcl_services_db=>delete( ls_db ). From 9dfec89cf1386b56baed6be8304a54405de9e39b Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 11 Jun 2017 10:31:14 +0000 Subject: [PATCH 181/188] bugfix --- src/zabapgit_repo_browser_util.prog.abap | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/zabapgit_repo_browser_util.prog.abap b/src/zabapgit_repo_browser_util.prog.abap index 3a0d62030..eb0fbab85 100644 --- a/src/zabapgit_repo_browser_util.prog.abap +++ b/src/zabapgit_repo_browser_util.prog.abap @@ -211,11 +211,11 @@ CLASS lcl_repo_content_list IMPLEMENTATION. ENDAT. IF -filename IS NOT INITIAL. - ls_file-path = -path. - ls_file-filename = -filename. - ls_file-is_changed = boolc( -match = abap_false ). " TODO refactor - ls_file-rstate = -rstate. - ls_file-lstate = -lstate. + ls_file-path = -path. + ls_file-filename = -filename. + ls_file-is_changed = boolc( -match = abap_false ). " TODO refactor + ls_file-rstate = -rstate. + ls_file-lstate = -lstate. APPEND ls_file TO -files. IF ls_file-is_changed = abap_true. @@ -224,8 +224,8 @@ CLASS lcl_repo_content_list IMPLEMENTATION. lcl_state=>reduce( EXPORTING iv_cur = ls_file-lstate CHANGING cv_prev = -lstate ). - lcl_state=>reduce( EXPORTING iv_cur = -rstate - CHANGING cv_prev = ls_file-rstate ). + lcl_state=>reduce( EXPORTING iv_cur = ls_file-rstate + CHANGING cv_prev = -rstate ). ENDIF. ENDIF. From b889c83c15a4b77044f0bbce4025d5c0b9bcabc5 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 11 Jun 2017 10:40:48 +0000 Subject: [PATCH 182/188] update screenshots --- docs/img/clone1.png | Bin 7843 -> 7358 bytes docs/img/clone2.png | Bin 10209 -> 9352 bytes docs/img/code_new.png | Bin 44540 -> 39794 bytes docs/img/code_no_new.png | Bin 44121 -> 36969 bytes docs/img/existing_clone.png | Bin 10148 -> 9199 bytes docs/img/existing_result.png | Bin 34863 -> 39336 bytes docs/img/installed.png | Bin 50694 -> 40129 bytes docs/img/start.png | Bin 27893 -> 55456 bytes docs/img/uninstall1.png | Bin 43045 -> 46053 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/img/clone1.png b/docs/img/clone1.png index 665d5752bb3c1a5477140c00fd87df5b777e8c6b..a53c349e8b551127f4380e52886c0532502c4549 100644 GIT binary patch literal 7358 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 literal 7843 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 D`vY|8 diff --git a/docs/img/clone2.png b/docs/img/clone2.png index ca58399dbcd579959eaa15c1bb12db9ea05b9d0d..660bf762441d04f935e61365992b76f5366d1d7a 100644 GIT binary patch literal 9352 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 Pc?dGE6eP>U^#lF~Yuc7r diff --git a/docs/img/code_new.png b/docs/img/code_new.png index f9d5b751ca0e2efcb425d3453b02b94e17d53ee2..fc5c42c6a9cab7f110de89c5f10da05149a5f16f 100644 GIT binary patch literal 39794 zcmdqIhf@<_*EVifL_k15sUp3L2uN3Y3rO#v^kP7I2bCth*HEN)LJ7SINbfB`D3RW4 zfDi)Y3-~k5xEG)AWA|~s%IY}Yx`p3y z{eQdLuE6xxEzm{F&;Qh3X1mOC{-gd= z!nRypS3;>7N&P6Pd!{lUOk=5LkQ`C>AJNj&(&EhY-ocq^yYl5(A4ql_Vo#>${~C+- z7KIZm2+XD?d-AN??+pSbDgi=T(oA-W1Ij(`)D1j$TCrx`dc@R%xk6{lL_#Mf)Ya9W zk&^DsH@Z$1X<&R-=R@tbJuhP&Z8us*n6#YJCtAj*PYHY$6O~K~XK?nXr`b0SCYo%h zK^~(V-b(206AUs`Y{6+;BwIQ>Mb!IzELWk{c0MI3DJeZYJvLS%zpS93ASWkBeQ6|9 z!pzLf$=JrmW|MxraE-}eX(SppDECkcsI1dsr8UvFAu{TTsLhX~6jhahsjE0cN-Foh z-v9CP(T|slM7s4X3}%xksUWqnN+=KpMP4qF%^gFll?R$yW`)7}PE#Y}vn^k@?$2-G z@n&~1m7AFGARCz0^(WnrQ2Z?@keCr_-013Xu{)hwz+-NTXN}#U!o_A_=uflNrjGjz zsuLw;7Qi4Ag0DeJQ&On_c*5m8RX|oE*Wj9ieC1lq1 z9S7J8c_qQ!+o^|qW-G`3{^`9BPwD3>?X~ufI0|`4?R;$h79ecBmQ%X(ji#IOt3hHnGd4s5Dp)$@l7kTPMGhfF%gA_Jz(5ErJ&qzn z_gSKDYLp>mRqa<#)wUWD6c))xKm0#uxvrOm%YkZ*^;#plGG-U6i>Z@62A6r79kB4( zZgFFv7Nm0rarP!%yy{YT1uuA^f`*8Zbu#$*Lj6?h4tY`5gEA_LitfO*t!@kb%jshm zf(ViIhD2q7Yz~3(Y~|*+f3sESm%HKX5%%Z`&)`W(RCDpa$x3A6df zS05>l4$9X**>D0!CF-O9lx%0DdK+l9e!Ocf9bO%wCH$@kK7cv*C$DqKxjnlew9^iP zXF}@H#5H6dzvT=1>boDT_Q|xi97Pub_h}GF8;oNg&FsZa98aV0<RUJF zmJgQ2UF_n#V1su1zBTTHgS`t4^5u4glusVJ_fAF**X8vOct{KuR6r{(J7V7|kBQ^y z3ypmP?xRzy>kptUiSr`<;sn|_8Uo1Y!dgyOTOmRDka{Gd)!?!neC0NSr3K1#SWA?e z&t++%9?>#e?tv)VNZUM=n-PjdZ0K8AfbD5N$is}9x@A?=jdgt-*4kDEUSVl@??bz= zClCJKoad)`s6j@=`H`Jg>-6dO!(BnZA=bF~NFVP>lkx3q=h5wUNn?CHdia?4>#imK zJHT5ZWFS9_acohl=aZy8tqf5kh}#)t50M{Ym+j}2A7+`!&@NsyoPU= zI>pO9KUh3ovLNc(#uz>V#b3=vbM_lXFfl~`IF|@2j>kh7bKb*E+?rfv+1aqMD-=tN zT;1sxoc5BBO;Dq(7R%pwZ)oMxwwT)f<{w-F5X1d`_URUr{q^ORD+TmACu*voe~)6F zq(eavi$NyKNnnbKN$Ii~GMsVL3jJ5Ilsn*YVF;Fb5SU_Cw|G)mrXV0s+_2cCggJImlQlcY(0g@ilF1Hw}5Cp;i~r)r&tyRh-8{i zXm7jqiqQ2sZy1$wOR3kpm;yPQF0*lMDcDnk#X;&l*3}VL^=IiSWN?wAi&@bNwb?x} z%)As+hQk_yt69KyDG@=+G5?$@F{vqINN%sKV~~RfD~>Ae0lD`(&7^`@LkP59T}uhk zQ09rCP%ASni}Oy7-IW(=oNPhhcqxLeS=`X!u(iw3VZRQ`_OLGNZrpuxr7{VObvR2_ zUo{=?J7fZKxaHKDR`Hd(tj5Iq?Ty$_K_8blR-Q zaD{w0+vN*F$StW192bBRLyae~zH`&a$V4XrR4rNRMKO<|*J^36k&<4eQ|D=28v2yx zmzwugYQz@3*V-dVBfjpw)$GH9g?G% zD!cQI{n{s=Tb4+y-wzhp7YJVMt|<>Sdrt>Y$*2xBn!E$5Zro74SMch%Tbj zs3w_o{uielEt^HP9o{hjF@M13={|?czK!;O#cav1tr0Vt!tC?=I$fpd>!fC~{?{VZ z`IW`|>mH_SM)f@O#jK-!o6C^n9psCVM^_Hm{PL<@W_WL8 z-;Td!KOU|>w~X916l=c;)o#8(g+uq_=657AYNIyqrTy7C? zHJ?K#ti}_;+ElGPw21fkY2Wh-6qdysg~VZ|b6<)|%8Ck$%S2#5qbRHx9ArU|n2+Z0 ztcXZ1dFW$38QsH7Df0vWSC5FYMm!803fO_ZT`OSotGypXzRi2{RYJ$EgPpG49*etv z%8fbeg=9{}{1aj1YKg>SDnmv>$Ju`8YUo5C1hUcRsJQiFDUQd`y%{+H&IfDPdvuri zm)sR_Is+UgNC%y2w?PUki}LbLErIhD(*6)RHk=P*q;QTsEs>UYQpF^h=AzXe4&A~F zc8V$0GvzIr5l-JOUZcA<@urW@?m8c3%J!}Jq)LN`vcgL)mZ!c<-c}Z#dNf8ZLH)deM3{ue0AY>wA9uqF56wH=XA8QYbN^ znPqG&ZbYe`PeWsB#ASYTpMp?#9RkSc;b9Lq;ijc{xWU23uyX4~PDc7^ zx7g+KTQ?(h1j%MnTLiN2D6qXR>s!b?7*V3!a^aBos9~t;W4xsfaq&Z z#=9|g==(s#>D-NkZR@6HcG2F^pA$YR=!WPQ=ZI%t93F!8A_oT<3bVi!LRBBBPD5L) z7rAwZ+>wp>D>{vqUz#FDQ^G22xJA}iRyo7vF1B|)n_86E-ezaup($aF(Al>FoE9C^ zV37{z<(abF{Fe)6#%18B)8*Er_Wk0~Z(saJ2J}HSm79FTDLE)GA~ygV41^(uiSabO zJp(D+HhV0-^{bJ)hF9Ync9)x53mm*!Dhq;$KK@}#4Xw=XmMK>Ol24Gti?&a}ZT7kOSBx%c=@`DQg-4-KLXat*We?Dl@=@ib2rx zQU(~ePBsgD)Pv;iWUW&{L{a$@z(5bk;-JZ1+Ou!lLjQ1!X13Ys+-x}ArOl*OaC;4d zKB>nbV%0GFD@I~R)3M9l%1QioS6$&CcpJXQ?I}Z?J_dAzO z_2&UgFCf$#%HLg-Bt1{3OJXdxPwGaa*9O{^vxgPqE_F4$h_Q>GkCx441ton$z4Mj4 z=SwyGsTXLM)~jys*2aTgxDgC-+@CJiJlLvihY(K+$U7FUAKmBLL^XysV)mBueOyOl z^9>Hp?1na-wq~e&-OYnC(p)w%R~G{`muFf`mn(@{29C>UKhcY$esBUiiqm8Ebi&&z z;9+Qlx;ixG4X>uUIEfS}0*elMA2a)N#5xn$M{5ydLqVy_GMKyS=^R{%+sH15EP9j3 zY4x_H?+5^$(hnZreIT-+ZK2USSfX2ln~k?WHeIJUEUdlmgTg8qAgso0#&OEG#K0Di(rSD&Txp2fkTDz@`03AC%JPaFeZ_9Djo*;jmT16dehVipFpUHTcG1 zrrz=9Yj33S&dODJ7JmP%2q|U=5AHt}KJBL|h_$ocke$)trDMz<=o6$ELadE3`V$Vn z6FSAQdxt;g@fhN`bol0Ly6Ucdc6RDx_i;}~7-i}pHe_z$mQL|jS9dZnc*evefVD?` z|NgQmL$A;HitY2aUUm>**7FxrjWDMKzQW5~(nA;hFMO}`8c(O@T)O8Yg`p?SEtg^x z0uJqef_cn`E^If)IP_{6cjrN|AkUt&_-gAndD3k1mf4oE0=Zr9VSi}q?N8%HP}zS= zG7i98h_mGZ28=b_PCxJPs|K7p%S!`}Q@kOjZo?_gseu`!nCd+H606gdX%3-wbTi6+ z!KH7vAX8DSSkk>|r1WY0bxL6e--G44X<@S`xSu@<9T;h{MNo_;VO)%#l)HAnY&5#q zjnfOK+h5V^HhvYo4->F=f1zzL{CnFzyJ8p=4A~SQwrbtsOhG-pb&LE#DSUNxRYymM zo10r9fjwE!c`J$AL^|v__m}B%WwA>q*|QH-`m869nywLSTX~A($k0I_M^}KkxH8U+? z^DI!~Jt?v~R#Rob6#prnvXE#5%gAu>FxwxreKz-LSsFvdCO2_*xW>XU&aGRoNMdkw z>q0|Ak^68OGO}8iU07!*nJ;>`md9c!mD}Wjj%?kBs;v6KbP>;?RDrk3F*)~fNuv&; zSw~lT6I^ztqf=8AU%4IpZL6%T+}g5sh&v!;l(vN6d^7KGt7VfkC#Ck6oVs<3kbq+b z;;*HtnUIjMwz86wm$$djEF>x_%E)Nm*jw}U2OxM&I#4E-UIJF{Xdx~xZfyLjP}Rdj za7NX~M^xvNySo66nt_3V_Pi;Pe<5E5hHR>RTNf8LT5-^@CNm3u1jZ+T)T_8jP5%NY z`)f7c0p7Xg|Hxd4{)J2gC9S)l+ri6Z8CzRU9d$Qx$9|qnchYCiuthUc5|YsYIq{9B zMMXu{Ha0U}jn3^(y+&j|mVn zr^?OwzY`0N{*%o={Ug=|a$1e&J>GbfTVzJh#ws5Qy(O?Xn*K5bdQ+~@)%NGBerb{Q z3D4HPO)U^R5#&b_OdXr~m1PC^LqDCnx;nseSd1cG2;t+*ju1;K$GY|1q{FMymTJ|9 zKSPT2q{DdY8f?!8bhi1w$jQnoDJp(we|$NU+EEWv>9zbg9dO86j81D4`sz#g`1P>Rp~D{O5Awpn~qex6Hao z>6}gQLJ@=tWnu*I%>*1tv}WdD@(tSl7)~a8Ld->3W~gY;3knLh^`=nw)+{eqJA zJ4$(_i4oWUOkE`EaPNKa58VdzvZw$|zH{v`)Z9wS$XzfI=B@qp;h?H{)8(%4p`w=$XO9V)4F@A;A6>17s0aFZ-3cVO znP&med}ru!)YUh1M*N*gJWW3xi^E&i+)Ha>j6do;${}L{x0X+7x%#|GB)2q>lnsOs zWxOrm9xD=GGqoHilmHc3ZxvZb@Tpl&y1T6OD|`7|{)$gL(R10GRk*rOMBef3L!>5&3q;#4OT&55@utkqHV8Jr*y zsumZx0xx`En{|5Oe#vIyiEi@fO@4!(GkkrfZm!_LcTx0dr10Sb(f4aP&d+EqbT4~2 zwrvG?O4sifDqr!gM#HPn8Z42iN+7g{Vcp&u57f0aaX@aHIe&r9EVEjZEwh|AX{679 zjx9nf*f-^!c(Y7{)i~o=nkBKvdyoT%m^$1Kc>ajp5UA}c&NfwvmCO^y8nI^!~*3XuXF?8O(|+r;}z1TrkVDgjgwR%qNjrn*1}u3 zKQYO(x8*zj6J-L45KTTm3G=oZ$tw^1FJPY&P0qF0rc~{CTm+zxSI?R}Sm>4a!FB!v zz3Y=8{;m657JW2stTP0c3Tx``P{7jcp3{ZlSe{+ab4pr82if#f5pT}q@d$#2F~Pn< zq^yo*=A^u&SJ6sO$g;*#24lou-yGBD^n%!6IIFmE8`u|QUKbd^95;SUDA`0_-tweW z9)HmPRB7aHX^1P|Xwk}92HWX!HY(hv$)_(x^o~L^ctJ=k84acl?E))q@^YMyO9{Qf zPw>XTG1v+OP?c6g#jjB;E#KMnb0dBh;2I1f!%^FrhSnsPgS70AV-sn@ptl_=mtw-!zJE&Ig#l_4Y zhR&uXKoNJeER4Aa3fJ#faa}m;H1t1Wzmj1!E~$(VC(U3@z{Zlgx_7#rj#y-L@M#mV zb?rRoXIAHro?+-1IzEkjya#`|TTY&o_nEFw$}Na7?B$Y1zu;qt?qj%F?D}8dvgt_W z-*s1Uyx#XnG44LKj+lVvmK2EKNh}JdIp5B#oj&NgM0s&JDMt}gRlWDDX8S$Nlvn!I zYYpBazR9=B8@|wt3T+pHNBd2HQ84^F&kzO zQ7ujg)&eK^^baFEPS(ObGM!5LOBojx*^l2LR*lG%eDt=JW){#WAm&_QE7q4JW+i39 z*1~Sn4SG$ihR`#b!bcnxy1_q{NpMTyLM}Tm>wAyBU03$T1w+olqLPw&_V(!M>Hl-B?98wrpv{4xcrdOX-&J&3Dc(H+VS8 zIQl&Jw>C`OP({Z;Vz%13JB5zGd*ozZYS%FN5*ZX^ban8vhHLl=xA}1f=6s(Y*&@Vk z!`1xDbq@}}&AL1_x%W&;$q9>~r$cuHh>)NxbbU3f+&8LC;@p zcs}!Z&w$wzS(BCGwKEl0ekuZh5wDZ4$qjXjX0nl?o*G!MckhiCNs@NvtK7{4=*B;4 zq_hcmwKKWxSRA}cW&QVX3mZnm&z{sJ@>G26ZP~+&G^i!aImoF_IeOdjR^$jfobPoH z>Da@av0X?E9iCi5vRy8B|7TGSy1v3>sLCH_|DBy34!xQY*f4D5F07=eh^QHY1$qqs zu<&K6e8hAiPbHs~hJ%;%qvv44)C}+#`OmWftjdiNM4Ymo1aB)R4@Xin^k5wTaWRiD zk!GI}F+NOJCfoCI+|p!J+__ERJ`gg0Y0;UC=aPoXsL*wNJnQ@vNE9CZNU=H>AX8Li zW4#>#r51rwqAb9T3r3@Xsa9)&_3#pqBZg_WH+ciTYG1rLsqe5d;C7t>eV zc4!(Lq6tnYYxmaYWyVaVK59f(*wph0NPk*PG?5X&^*lK>^a`x|=0XmO@V^?z3L|%laOzNjo+eFbP4BkD zu@6B147HxU*OX0%%ZBsjPAEp$cfySMGO0f!?v({mZQ7}6V$)l9Vz!KOR#Z+|2jrhz zQZAN%gEYRGJmDAq_SjQX1yRgxXsEW_Q85&av^abModZ zQQ^DMH~A8XmB8};3QgvA!{!}8gGbuto)3Z5Jj*7=N~>AhH#VXvsNrYr)`pR}(((Ik zCDdLGpJ)0AJcl@4aukah79sUh60R2h&wSa=7WVRyzV$q19Q;5SeeGv^4%0(1)eyuk zN9p%RI6<0YBWGbRZDKVUx_$3u+UmwrW)NNslQd`H;|UaUnlN0lQU4?Zkz!F&sq^*i zqD!M`L>eJoy|XCB8Cjp)kZRb&{elVC#izzJ@~n^yCP}c6K|K7puuTTxntHi)uT-eh zVru9*159bJ-u$ZL&O4rG0_T?zO&7VS@6|%;`53Mf0y8idlSMG{Q){IG7<$;ywOP3P ztbjOx{5a|BU{8Qa^`7B(zJR;q>t(}i?28omb$kNpLKbx#0@P^#GJU*p#_mV#7Y;kj z7KGr1^R&%N--Z?sM0bm>pfpDIom|XUMp6$&h8K2DSQRved$OFTx8}GA>AfSCYU!XC zXJFfF*4*Y?^3ACPyJcF&n%oNsJw8hiT86#h=8pcaAFB88rD2hK^F);)hGe&6LYIdW z>_CdqCC%Ww@y8VBdl*M4E>_jtEdfloVeRoZzSYE3%4_7#&bRGEug-||YNhuT=K0V3 z2=IV!y1}m3L0nYGYLz%!Gt3~J-Dhi6`CV{(1zSwv_4-212Q#;^iu1y$wBWkTZ!;hL zNDer!q6dngrfac_$ie2YZionMvO9vQ6cf(c#pb)Q0`Xc@?i+q(%7D6$bJpZ_O&mJv zE-DewdA5{X6jl?6F~M}?KqT>g#6S3xAKSxHu+5z*LwJh zJFLU0W`Efb7e+q+9w2`tEu8I~AIG?x;=Kq)o-}=IT+B%(7D@MRD_l*sx(Oj>EksYP zOa7N`n}XHu2yyp@-;7%I$pAv1UNf8yDp5{Z;qKICnr}|SJT5E5>V$H-FPUEX!gMXCM=_gQDg3F z%syWQQBew3$bt++=i|+GbQL5pbsGd_lqak95FMd?h0(}jrG*Ge0&L%3@@>L-63&}h8x~ZI$WNgV55WH zbpjp2IW&PzRqc80|J72%;mP9HXCY@(m31|lX$=d9V<{DH$FU)Hy{HYg^87nV4BtE& zj3(pMw(KcWr!c*j;E^$&-^J0m>Q_&!l^dp;vNFNQnhFt&C%;%P=GBz}mlp>Ouig*- zJz)8PU%Y+LJl-6qr3ubl9 zs-1(@@{lKebEr`Kl@-MQCzVE+AaNYCwo^3w+c~`yK@e8Ln-#}Tt^E!Oy954wTDVW% z$!cM7FZJ=qtKVv!L8<<%qkgHiz8rR2-h-6Ir86VT->do4D%OJ?kv7kIDqAn#A*^VP@Ma>9H}bp7 zGDrOE*j%*Ie|2 zYUA6f(CBgz7QLFM<+GjZ;cJfa?9D7nW9$2XY_7Mn)~*;GZs3VMYJ@ z5&P|oaasjqpE2N>Uq`|*sM>p=QY1Tpv4!7p_ELfjQ-c1Wutte^Tg`oEMXpw#c>}tnx@Y~o%zwUDw?7ri#^}N zuufPB@c0el3-N##Wj|;tq~L~<@p4;^x6a9p%UJ4^g9-jpglBEioxM!W6TiH3XE!Lc zy@f8^HTD2w&MRO@_cpG%o}t1=&Tv!N+~3+u8~v_JxyO(rOC+;rY_Hag01dZ)qjfns^gyTU&r0SY z&WEo3WE^^d{uVbWuCN*Q=lA`&W;Vo@AO2pSJThk02FnT1`d0qI^9OU&b&1k48KVBL z6!~uGzqQG>YAc(I1z@9U4bx8O^(#i$zqv{gT3!zshY4f^nBb;&e(ytSFe|vkOyK4% zh(|x_0(yz8)WRzauua43LvCFYd5YhUNqP{-pacJa@($Ig;6wuahg9Muf#!1Ig zW_OuRwnAKmK6ZvdtrkQl2J5@^hVH4U3CydI

    -^DSWeaoo>lZaWA1?3V6f~Y-$5bKPxGM928hxcewsNQk>bSve&>@+qB`_w$G_1 z8M>LOon_b*Z-Qp#?zfK$4kg)Zjn3FX@~q2aq1e7Y7QS}A95zLeEcWiE@v{G3#}0i> ztQf{^_=1OcyCW{A>hzrBAlqn>!umiy60JXZB((ot`T)vmu>;?{4g3$56I2YqqL)BH zMVP6q+Uo*Z0a6^@d6i6nOwB%<_|W2hML`jEYDhTlcAzlDGC59l{oJC;aW>`MEY*BAQ~XO9O)njxgPH536bybe zpFk?E;bY{IX~-^*!fZ{767&*sXjw1vi8)=EhdU9&ILm6ai-X1x z3R?REUo1t-bN;MlxwgJ3VubhB(x85io(&CyV3);H^_P+&uV=iOk@nCThngsY&}&zf zRlu5|ZK%mz*|@dc@FhX zz3+V{QWScw80~TM_^|GN18a(2rLd3h$Rn!y@?q0#(_J32%3XyFolkGw;A1I5(np-J zMvZatsR$S>&xz@F46F*UAkDge(V~+To;}dEcOz4>{f{=~>nz7B>n?Be{1wfkQK^l5 zt+0j^2m%^STV#!X8r%KCQ-rt$HS=GUGnXT7RO|ht#S!}Ip@(znsI;vMoW4qu!UCwQ zP;=&U;~`cmI26D>79H|NF>UDSQ+`kNA$POV(cd+c;X`-DN7AI2qj628`raV{4!iBH zK{ue_{sTo`sW&F+_}2^0dO+4+?(~L%Dl|^;rfx5+-J^k$;L*K zL@K#K$z5QFd+(W6&h66qf5@m}k)ejg8C1G?dOSB>0_xicBFBqw93^<;hV%>;iR^O; zK1+1AlJi0;;2WOOS4uPxal#;<^k6v3aL;<)c|raE{L)U$2Xp%6=HoKqm%v z2+QXC!=_TJ8$!JNOmRa_5gjQ+P0s&%JC-Ca7L=*A?lk|`$j_LzdXU=xiV4=GgvN1O z=i_c(9DPJoLu-J83k-p4y|z$e{l7+TzOUfpxe=kLa(V3w#(92)+Go^d|4|D>6a?$i zo%ySD|7Z&Q1^8#)_dCFwo4kkf%#!%ugumW{{%OaZ`>=nVHX`N`#(z`4|IYXC9_~Gc z;QSNVkN-cN3d{Td0211R1I_coW&^jr5r6pH8y)xncJF#e*8gomQ&weGk)Uh=!@o`@ z;bW_)MF|b(58@n|fa?)IvG81PZ+-v9cl&yKue}iP@aVBCQ?Ba9cYUSrH%DJOj6#A1 z#_tZdO4z3m|C=g0v;@$eytjM$s?$p8Uw>4RQyk=Q6skJL6TpLALWmdr_&0hidY{i~ z=nu9$MEcLNpV&sF)X8WOEL(%uc`{Cyhu0Y*7odLsCY5=gLk9;I@&9+q|7Yvf>Z7|9 z1L|YcM+HmbYs+6f8~YWQ7jL8X!R54VW;}FZU#-rbitDD6`;BkY)I33We07AEtb&qK zEF|$d`FgoTi`NcvA}!)+OTC`qr3AU@S=914yeu=JR0}kh8hn548p&ICV5ZUOhDWAM zfF#LJO4moe@x4GMKVC8pd$?)!n(6w88!cq>z2V|sjykpsxjo574c# zxQ6!k-An+3Sv-L-W~h1Ia6&vleNw(!?p!$5SZQ7;alw5)bDN8#o&JuawI;S!Pvp|I zBRAJuiyisxtN0CEeJR-~0;7y1sv0&EjNKN$fsSuj!sa#4H(FO7unz*2R`6n5&OR#a zoC2B}PAbioi#%E@q!t)i&uBq(wbE=HS_TE} zHT~N5+l6~oj7K4jlKI@v(&vTTgyNa@?3idAz+^N_|GAzGu~bs*crtUT6sW1y=GXD5 zjT?oudEWIJZ(!5UH6wQSdv31f`1iXy#NAI?5Dh#KRDbN2uf_`u*lIauZncHdX+r z-3S@Bi8S)v?5&i5JOaX6oG<73FLcstd?B@qkQNb|#_w9P^o)O8x1C5<3xhP;u0Ih< zp~>e%<*eGow(=yicwa31IMZH8AFwjoI^<_EJ}!4P3wq=W)NM9y!vp%z4(s?oJ19aZ zk3D8d;RC!tRuowKE<`4GGP>Zl^TmE~q0_H-WGD ze6IQE%WMWRTSWqWAV`8rs|&m;(}%UJ;3rq#{=Obx{enAd%DXO0HJbYRdbBEX?`P;jY#omf`WBaShYYB|#8})b{g}d6^yBhM z&irA8o|;;W<$e?7``JD>r#X*Yn6Ms~#jEsfk19*(OJEj`lXrRZhG(aM*xzf4{673~ zEmSdH%(4Y$p%Zz2Jo#1$%QQM5W>Y29=H?gXtgoG}S-G-SL45aFdYc0L=2BBxmPLJP z`o+L4e|)q&$7z6vroeY3Y@Dku?w74M9E554K`M~XU6UrfV3*j$4YiueCm|3pT4~! zxt6_EE45Ly_uKwM<w?dd# z7j*Q7xVCh?#&ly$*LaYXQPcQ_ z-fC%U7U#I^I6*?y^lTaI_i1`Ld?dE|V3r79NFyMw{p6G>4i{STZ1q)ctwCBwa<5*& zv3qG~O_z{_e9om5ApmqyWxguDFqmT!BxZ$|x_SP|b3srHlYPZyU43G{TO?ItXDuJ& zB@tTbf%4KMNln_o8#1aE5{3PFR4B}=3aWImGXOpV>sPV33}1cGi*k5#`o~t+1U6oT zXJ1$;a2TywmZPg|7gN$J1@c;Zarz~47iI%|$mX4JWNeJ!rx5ab-k5AxO%&!=8R@#r zeAP($!(X(dPx$L--LPtQYFcW!00&h4Puk@0InT75HaXQ1>Yl%q+C{pz0p|Il*ih~+A~!CN}3;W9gmFyECu1xW$3^F%uLhs0XIhRc-k zjNPMQJs3ulZ6CVHy1*gkE29t5KRKqGD%ER#$4%=q*K@np&^<-JnxEx6vUeEXV0E&L ztckbLv9)&HQX?>0K7M_eD-VK#M~W?*tvSOL0IW&$c^`2ir|)K|W3x9iE- zOq2O-h-~JbegPW$%chg(0?@*lNt#u6WUiX_-H9eX1SD>E`1oUgpO_)@hkipVG8JDppDw}QxAbh zNQ*f)=`3{5aJ0|}W7d7k@#v7E7Yh7ql)~y>b>d2+nIY|Cbg0}__f9hbsi4@Z$N3z( zS|9ZnUR4J_vQ<(7F4gBY8;Tz~=S{@XJ49@AqF(6jz&*3sz&*o8uPs8NZiSp0g7N?> zPq($WK5MwUyW6!K{L)tlUZ_l%)>I1{BT%qc_q`I4`;9Llpu@mS*u*W4RLnw(ZnO*5{;;C zy}Jb|mp!cw6WV_)(Cx67+a@Qiq!q-!8wvje-I=hM%&P9KGZx%aOkyN7uhkIu%aXj) z8U73K`7#V)(S71vd<*zW_Zzk%p`~b0S5s2Shxuq`SeTZ&6jI`6W`zn;tyDOrWFBG@ z5QoL-eT1oEaj;ZMhpjvj7!TQ>{(D8)(>K@5#tF>0tgzp$8PVf%UL#?|#yd)$B&{S< z(;OQb;S@2?H{dE+Wrgs_c~(qI`h|B)T=KXy;xRD*wC2SVp_R0w0BAYQ!o*UP4+qBP z_6G1nQ1@-Ps>HnEODH2xsUDpqOX6&tqlvG;CA;j>h=pa3e7UG5@9@zfYTd9u&HbBz zJl+@kZ~=3Y7MS|}8@mOM3R`wL`hf}$tIz^>XLGx|y@@6@bjwDD#bLd04es$&t#uFZ zRS|Wsb`ia@GccnfQ1s||^(iV&DHKxyqC*sQwc4+RR~QXDj|v-FiLTKPT2WMygFX!d zJVSB;R##(%Jkk-=okmYCQv1Ppa4iG1r`_8ge^0AMPC(iVzfn093{b~5rDzk_4%UiD zS?|3S!?AkRzRASzP7c%VxQ7Hk1X>&wciG)9=wV{-r2Wd^^wWd-ocNjkkiz4SI$yDC zO=fISPjbRWDK~A8dAcTEcdRv+O31QW{*F*An|;KD?Hc0~Qiaqc?h-Ii@?xCcF1nq;)9-l;_|Pytr&Y zgb=uFrLQRz4{f&O$S=NSI#Fiatd7*BB%pLmGNyRmy`#I!Vo8Ga~j z-K*WZ>goEcPY1g9*1K0(5~QmlVD|EpT0hsf%PW!^zecdM3SZ>^IqzE!k5aa(dTI}o zJOimMX1O;R`1p**+3S|31qucys{h0m(pAEvoG2})A>};6!;F@mOlD)IG1u(ztD{ZveGK8&!0$sX^my6bG zm5TcV*}7IIf#I|{Y}GYx3b^r*p=4PN+U}O~#^nk~k}N_UYO-3ei?GTd%`kCIb-{z?{Y84SPgXR@!&cS+=Dfb!TszghO@=m!N+Dj0Ya5{%xTj-FP2Y-e z{oY1+OF^fI)^#UMg-M?z+BCP2_E~OcC1pB<>~zFMv?HbsTr9xKnc_w<22a5cttwng zE;-*Ua{D6KUzo^SOkY+n9zA=Dvs(W$Cjh?sGlz%H)k!IyhQ)XFUAhr*W8xH!Yl2?> zggvXi(wEr7=i}+|aOJGaN{G<|(ym8i0tDQIMF9Uq0g^8>J$fTEI&YPWdB>hw^bHPr zZ!OyVG2V|2v>yNM>d}YyXFl(b{}~9D#;WC>dyNUccfrXnAZ_oR5vOmVjEv@<|4`uE zQCCgt5((pCDWDi?7YtuMPm2}A|1cVDCIiDS17zjCQC*-$a0t(WRE?o9nxvz#yjz|k z3lpBb#h8>07hrX{79Eh%Q-p^T3jJX!)9e-WWc>-R7de(nlZ@RJ=;878w0-F+QL=!c9?nB#ltKzbzTvA z7kLrQ-IuF#_?);Ltt-n_^YL>!<$BU-f5$%4XnLgA*mJ{f3i4N4phsGctUil{Kd8ED zwa6sxI5*F~Y3g}M%(k0_>L6c+Q3$**IgS$oUoK-8f;tVB(u&7{928o;8hDe8mBjUJ z78y;QeHr^6q52D}E&bh3_8ZMt+p%6qEaUr9i&q`g;M^c@``UTwqvqA&x5SkrwjtE_ zvue@sghD`DK=9}%;NwmU(33iT;9T@)TUO{q5u~?%`t^>3=jB(!%iU_V+30T8$+?L} zau)oYm&4=rmAVF4vLt8>n;^A&#X~DxozomYrIK2OzvYflabMWA|C3oiV3hh9UC3|W z!Y3X%Yop=e;uZ0;JVJ_P!YFmjatvW(O!I3B2kG+);y5YH^(2yeS7-Afn+fLcb0!^u z$Ezna9FXC_mj>$Bpd5+ ze}CiESgh1%G{Ps2**jEKO_ZpGi&qCN-M2A#!S>$ukCYAE4K>j*wWI8+6E0Bzh>Keh zY08S8CFiLk+7jCx7b@P$fy`ca{C>d*%%7cVSg|kO0eBN>X8jIJRjm{8!mry(M z+2~Tl-bi>tLJh{OarzmS--(`1Ti4toVcl^ay_@}=n+EY-QepY|s-xM&Q6VhWX#g(D zqw0D0(;Ks9jdhHV2%)+ErzUIrm?1z;*`yx}K z(@wJ*t^I=)-dR(=aReMHdyT96*sSuj0{U?K?L^cM&6FNeT4yvwVK%`t;;|)fcSl8w!jDKi_+Q>$&&0*7sR=t>^L=Z-zPV6Z`Ca&OUp;P90&Rdmpg0Qky?nyH+kq5;~z7 z|Fkf(lrnK$26#mx$cF1XvdG~DO6X0!^@+fuy=i-6-U?a*>{@jxt>>#Xs)22GD%hPb zB>g1H4g%v|^E@m0xY*i5|s+!TV?bun$M;V|_}VMHITKuHPy z8>*Y2pBLV#QKaTnPgl0zWm>3>02++}I(!XEx$J+7-0|y7B=%?DY(I{VO5iQlgWLcR zkcGgPfQyg7fWZ9( zqV*&!Wq%r8+Ioag=#K#<-MmChytAgRT`RnIkuA$!JiWa_{h z^u3iMpfbW%O@39Nzg}Mt0e72&+tXkSzFKLK-mP^y42mmid{U^v;q+X1Cd>YHFVB0S;%#;C;fZeS~pj zd}29`>0wZ1VXbJfcB9LW)dX@+UD3oHf#{`xCD0&fa1n5V^QJ@a!t=lnBndlWUCfR6 zMv66fW)q2louA-h=Gs82kn8Hphver!MsZDSRa-J^)ik_#>3Q0IlQZ&`SKwRE!aYuo z%0~IpmCO;XO@Yxf;of6>P!Qm9(ndE{TI>(o1m@AracF*)IodE|64u2p54Cj0Hk*04 z(@?LLzV8d8VLdm=fUa(wvgd%e&wND;_J%S_hh&&AUc8oUdK62O0mZQenk z9povJ6=21Dt|7iWKth&Kpm)#D=lh9$cOhmMv<7B4w#dJ}eE#3M<^S!JDL4gG4*4P! z%zHDeWIt_g8zT11uKG6jO3c4LFkn0jf{cbhLCNr|4@CXr?)SUvijDE77AW_2i17ZN zW84SI_!|lFs78nH@2LiZU9}z15@Zp|KW!FJZjT{Q(!b5N-1$>qczNQr$?F2kFV)cZN5r<@`a%b)=7XlA`>Zsd zXy{X|O-3hvKk1pzj+yVo&iRBkn7d`-)ofG0>d{J_pE{UJTklW(K~B29J4xv`r%MCX zDL>F&R-)Tc2GQMPZi;)=#VlbYZOeu^)kiO(_Ud)H^*1k;hK?g*D;3@+o|17zOeKQj zo_e|OWN1cj^b(GyatZCKW#dSRrhOhY8<#1j=t$q+-Bj%nJUIU#^BIt|XDtgzxu9j3 zYN9QvUzK$T>VV8X?)HQPC3VVI8mp9xKTWV|UcXa^B1@Dr8RsvYo}s*u3DJJFMkrWG zQgN>7no%^;RvFDhWJs%%`?{xH<<&4J69=VEKT!4Lw|k%z$eC}|y7FRD%7B#;eoto# zwkqDfdPb1E-ve1#ER3>$TJkd)aapA-)JXH)IvO5S)pl;Lfba|Cjdu~L40`n9-qb07O_7kn!iQbX@7lDM8e zZOHvF5sagT?KPLJ2AAy&Gv){RAdC^HYG}5&_nD#5JH+-J(eN(GP-AHHZ^U-3r??lkDuZjDGVwCGVXZ>0! zyG~~jDf~{+%{*p@SKUa2vP4jvuFuhgXB9zfS)36HX^UY=L7pdyO}^t@x7L0K-kv)Y zkRAR|6Se7Z-{SCX|KgOruxxhwPKXJvc#tLk#>f6ju@jWJ;UknD3YO}()NRh+>lSFw z2?DlTHmtt6TIP?1jDjw3Iv=E(k>``iQwDb)xa^js#US@x^N(KQ%P>pOM+&V&TDRJXQ}C3LDpgv5yU6WHY{RWu8nt|j zpv6MYZWNMxNd1Atb)T)s-QUi@KJF@*d-MY?E4AToGX-nnUMVpM^dNprB&;V>W`x6dbd(zc^^3pUu9;e zZGTnyFazS8rCez-JxVn)K~cmgP;*>J#Wg;?vJgd%r4+6-giT873uWr%d}DEtU_gnx zF<)&v?=J!B*D~u=HBeuyiaTt2DtfRK5ge9iP5eroYIm`}V4K{dc;(zJxbe#tVh9o| zzYeC4;eFmoc3Sp|*)=}Ob;zoC)y&x1p*Rt;ISn&QwJ4|^G@gN^Nn`%cAp~BBG;EkC!pHYl zO>N<+@lze~IGGG|JPQ76n0pV74%1ZHSC5^VjNJ&mWK$Q1?@oA}I4;!|Luj(zMNCQw zr3x~OFcVYP;PGF9;d;4XsD5iTPVd8DiYQO-hDJ)Qq|u3Q(9|6o?x%mu9L5PQ`O~ZA zFK1;vBSyoAMwu~riV@xpohKQjSA8K?YK`JXiTFz?feo5c9M4U}WMRwpM=IQbF~MI8 z=Cl|{?m0iFTzg)y97o^!i6YFLeY;!gib3s=A5BTzmoMx+$X4-3g0e)vA3KD&Hz~s7 zqr`VC!4-qUH`Q*TI*?0WL72l2*|FRt@69~?tDi9uqQuu@9w#8(vl(B3a765L+q3k6 z_HYj8eYK_B;X0^iU-b&h>kX^tc6(nrj6_Mfz4Y#Gu86rk9094lV440R4GZ-Y-AJKF z?ekBTGtNA6wld;Yc7@K3Cq*s~PkN^|2+!Yta61b=WSVeQxjwD-T)NW)buiz&Okm4$ zwOxUgpbdduC$c{Qs04|wDHHV%mI@pCgO$M>(uqj}RBjL1 zwin?|wYH7M9nCHm=7up&9|U ze_B3QL=!*_ArXqae#*a5@xm!c6SY1EyAIrSW*HNV|DgO~ZQ)}oSNv>wSj)V)`Vv zoNC)ssQ|vb|6nwK=&WewES@HaGpXB=3-J|N6`PdBwKXdk6{L=+jju>Cos=N;gwwMQ zbTF(=Z@k)GMepAKAPdWplgLRix{q^Z%s9d!pndP8)^m% z7;$@?r<}$;Lkio50wbQxT3qhN60mHh0U%!u7G1;tBd9MVOHID=JG|=^(GPx-0!UD- z+e}YcVdw*)IYxk#2*kR636O`9RY%RNh15fs`o2IghC37|PqNP|gq>)ZnWmcfN(KxM zC7dzvbFRvMB(nuLI5e7v_Jy3h zZ9&}0gpQ92)yZ2cy1lG561R)GV9qb_v?O*qI@VzApM~BNlW~VezoV-#oTMA&Q3^*? z(k>C$l7)Iy<}+9wYcicBc(3NCCLn0DgP(>vJAQzc*GmV{PxTqoaY}!!m)Tcm_(-b* zWKIHy0Oi<(tKK4RlL?8Np%L8YmV^eHc#hKBpCi)1=dvN*u#Pj@nh5az_r$t&6`Mzl z^<2~PKkE9_YzdLl`oS2=qT+xm1LLviUfK|q6P$ohnX!A#i_ssh77uZ?zP=5zQ{y@m9Qy3Dti zgAh)mxx-!!7_NBik4H7=BFuNce~GrrRv|;}CZ>^bHr2_eq#Sm|B=8F$U90HHO{J$d zPxHcjDU66sD|fpLhF^6Rp;ab&a<6lM=>qH@kQ|B->h~m~Yte;IOGYy#LPyctap~0! zw6uDdM&~h54%`PCozewWKJ`Xxfvzk} zcemsh32W0^L~+9Mu`5VNd-Xs$xF+%F2R1p4Oxy4&8Qsv}13MSq#&(YT5_65A^0mY| zg(D}l1IZMhT>7!f{P~Jf<~oT(2Y=UAFHN^gm@KO5xQmQW-XA935b4V&@%An_lCA9x z>!ZqO&O-Mo?-O%gXMfxAHCs6;1>$IZFe(6p1YZH&x6+|`rk%^b zvdigN6*}q1tXbh`(XQo_pcEDz)fRPFr!Gzi$K&^;A=A2K{#T00sP)~%-=$%0ai73l zJ9Nw`WUqI(+%3BwtNxK61h13KQRML=`ay=_(v@pgB&li_RR%=1XQ|HX^Ve`&ERsCP z$F>@#u);@-0iA*41TLshtT9J#DNRe?RJb$jN~tP2b1Ku@`6kHdhZZRHFBqdKl_hP&K1rn&gR24 zT5Jk?rFXKHh<~JJDaDB})|O3uFyM)^6v|yl&h!+`f5iQ{7c0xez%V3{V4#rneK1(- zi1KK?CJ^?HpOEegn33{rCf}UXlEHN=`cd<=F}+u%Y*W~BA*7_l=wWok`yRwH_=DF? z7l)Fg*gzsL(y2kM1-oym6yoF1k_wqR=y*&A=CB@**ih72zuVuA7$v$Nn-QnVp(|y8H@Kt^Vw}bDu zS9Wk_$}5{^&KwloKc;4nNRH3Yc5+Hq42iT;s_0GbtJcmc@Poxklt|^jTbtq+!()OT zjlc<L0u|dm0j{7+!zk8sf$bVz#N{AzIg-0-*t9- zmmH>S)qrjMv*^nFA~#pnw1rFh8Jwx;LC}ex$@C|+)AqVcHq6rpwonIwh!XCq(GL#` z{ahaiZ@n00L!hX7ie!$7ZE^Co57V$R9z4t{lIunojs9wUGXXxmzhUF54t|qo^jOBZ zU4o-Thq9_zA<4GfMmr3g875s;F~epzl|QNq&vI}_8B(wU0vy7nOGcizgGo2Gv!_V# zS5V_m3vpPFhdA! z>+atcfaYHP#pakJ?SSuXhYMJ~ak7`($3>i!)2~ehMR3o{#=?2It6C@VdaDk~7(8QK zt;6t0epH#%x0mz`5pA|)kCt&oSM3+0r(2CgT38)eeLUb*vKWomK_3In4a4aUo1%ae zrr5&ep#-L>-JN|1S2TU#OPKXmv#godxkIgOJiQZSf2GhGk$^|&KNXlp|-{g?#Gb=MCWDW{ z=ha;Aek;t8Ot(;5UUsu2#Qfu%C2&ZBZu8iZPtw3(nivwYR>PnMZEe7%P5}Djzo5$F zpU^Y1CM|kLmCIv6=&vD*B6bhw@(7=o^m*5{uL%M!2@_t8&~R_uTK6K00*DUiGd|!<$f_$0$W*?@%Z(VAl{QIm>Em};$>ACep&jRt-Vf!7%bQc!Yt&>{xu%)n z4()os6S&=%3c=>xUWmZD>0841MDnk^HJEkv&Hv4=H!U4n3!L9G+f7E9Fv?ZPz-t`#p_ZMS7+5XA- z=;wVmFSu+<#EQF@1r7~#_$|U%Dbzv@Q-d)`4Hll&M^;UqSn7`@YlBgE7fKx(ZxWgI zVLSsuG6(|7==%tB**o>_?J2vQd_RSvlNeqI4%w_FwD{9nhGi443g5fF0 zS2WMC3@YW=*L(LIm?>>Jr3tZemdElSM{XlE{MI5~&BIj6FZGwuTwpP@idj_@J$Wi5 z$rOjEyu%8Gxsg;F%!^8&`OEm#QI{B%2P#wy$%_uqruss;4)?<)PtNVb-yTOtyka`_ z+V*ZRA`^CDQUol8Yj}Pd-8$C8u$&mvRHFEakW+hERJpv)gx>eG>&}^tEE0hPSx4K< zM67U4xS?mAs%OI=(G}Z#r!Ty+^8Enc(Et+_8vVq&<7fBSe0ZhlB%6tJtyLSwqx!ex z=PH7N;fIznWE%YrB-j6e)@UrBq*&xQ@p7CV0oqEkqe9Uov)`YD(LYZ zWfGqULMKN*n|U^3Js#&MP)TFA$ZJnt;g{)2b>|xvFk|m(cdx*I*v8<(1%rM z_WA_fqD-SOG#{~YKugyZ*&h_5o0GloXlLPMhilj&_UEf3F{Rg+c9U%>$2k&QW;WhM9lu+n9RnRx zne|%m{#LrYJ@~E?)z8Bxh2+6$cdQVquDUN;pGlFfO+6n(ch$;<;rWVJ%1Gy>s=CW% zs;3b9W~la>bxbZR#rR}rcDrTftm%H!NAWPf+rQR!!40NZ4*^YL>&-FVJQ)0;6zFv_ znm2q=LwpcJ-QTRjAbio!HE4WU*;RRR_Wky-&Tl+W?cS?it28eQFk9*Py;%L&bLW^+ zsfamAK-*atNo4M~6Zl9FdcRH|RyKD_B#Qu>S`c<%X zjGbEI(FAX?@!BE)wx*`dC*dz*fU4tk#9uKHP+m7e#Sj=S z3oIMXWmp@!v9d}XhO_DEjQQHR^_^WpZn&t^bdK|n_}LyC-Bp(d0{z%`<00n$;3?oh z(%h$aGb{5h(`sb|$zD%dWfxoQs-)H%_s7AQRI74gWhI?ka(%AL38JMuq&gLqmhMKL z!e4_j6SDRt(rZ!)d>Y0TiXc9nUa8|htpU-oL4mY8+eZ^UUvprfBoRa#pLJtV8X$hp z`Yl@X%a?$Pq3l2|w3=OnQ1xo~mMmwl* zJuE@vCU&cB1K97@*c^sOH7trJhDtRo!HYPW^q+Y?KY4{}(Khzk%ZQ*N2V66yAkqkt zoGuM>=j_V@r*T>#wvq+IH3W>k6*jRx|QkajYj9L306bUn#eM`;e8?)&cew4k| z**;Txa926ae&6!J0F5t83h(X`r&7(Vs(@s>PmY=XtOn-(L@uGJ%B{Z<#ax#U{^OpN z1qXZ9LASA--WQ!Q+TvjxqS%MZ&t0w)R$&DC9Vqx7o@ zVrmPUWe?A%oLGXzaT(!@Nx{!jA?_aS?{ny;wz(|>n1>1OKB7}C%PS^}x@v?FStGii zeobZMntmed$)T8QP1UZK9b+MSTmS^8Y%EOEZ@c-}5{imRMif2m7EP6^?NGB=bbfOn zFSB8yAZ3XTHT++4u>Jq-Am~3G#S_#bV$p#mn_s72>6JfV#r)v;HOqs%^UzLKkvIQE zguWX7qbRV+S~WFvQ4o2gBeqGmjDT~PPBgrRjajRdd-Pn6>42^0vHoNb%2UG;uROl6 z@HW5ol~R|=jZ%;!T0xd*`I_)A_?=# z{LJ#Yg50XQ+>+dJ8P=R|hgem5@ovW>b10OxG8pV{mwqYcAb#NQ(Byn+K7K`%%WL?n z

    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 literal 44540 zcmaI7bySn@A25taBZ72@z*j()I*pz*Y>e{}(CfSU^X8 z!2XYgHRK5i4SO9}u($Jm0nYOGrO_~%oI6iY?IwDOeNXDDrUV$#2k)l*1vs@!Ij zw1-jsm9Hz7JsS@`8BB2>I1c+hGvOlXC&{Y0kG>G|TRu*!3L1i?vdBrgPkb=ql}Qm_ zFT6!SpiDb2UFO^IS^y&81nu;sSYj9|P0ARWka^ClkRtJ1C3ogig4LS64ciKok^Mf! z>oNaeXYKCVswxns%csNrcWG7G`EE+Zyin$$3fie)h|fjLn#Re zB8lo7>}Z&4GX~2{1hPv72c1^5#55=piD8b%C56@knWy{5DupaBvONsy<-^QHX7r?U zC%aMG`Sn67S-(q7jfI4AwA$?To*o7#)5mA6^r$?e>0R#$BKB$1B?A%hJWAp?@rsS` zq8~*#a8PoHrU{k>H)h{?@DjVdA7oVV>gs)Y^r>qBzg3fkLqG@~zdJ!H*AO4Ko>YXk z)2Ub0`h+tvSaHJADA~?RayC?5_e_K41*E={!M)DA*q&mkHfw(K#goPe1YAn%y8x;z zOv28CtJPGJE-6p4jnr3~OQT%fU0cQVkvrFuC-kWb!Fp9|Uf*lEUS{Y5?wW4UN53#2 z{~iSo8xQ38))*aAnN{=;D!pHc8dlz0;JVzWK_&JplVO9x#1vgg33*>h>KGiPvrUAl z`JcjFqci;i)+Sn%ZBcWNm~`5#@0d-OWXqA|Pj1DtXgQ;5tJv1I6Soy>>7(B*1Ejc~ z9R4k76U~s?>dE3{(IBnk(I5*?Z5jA(Rug`VE)<5zMR$I0QT)oF8oKs<8-fawmZ1|e zm<-SmzF`gxq8$2ab1>*aJ4C`aD4D*A69+evifp;%&IW2Vjtbq2I`sZI-7b(;BzrOC z{{+$y$1zN-;#s!W?jFy^%}nt_75c{LLzPYRR7SUv1q5RJL7cbL^HgkYn`C$C2<_&C zx%8Fd3a-qiiEn*pAN=H(&xFdwkLf7SW7^K)cMsz+)YeofpzMT8O*}Od&^~YeiBdV} zY)O~#!$DmqvaD&IlH78o%YmWqPEq~!s>|sw$fekjJ{wrO;QY>B+g%$8IsogNgX3d@ zY#}x-FX}>$Vw7f(OiFiB;yA^UJ$Z<8On0`$O@?w#+2HT&#Wl#L93KILXWoEba7*P% z_j~|}w=se|A$MP>rX=1rr$hx+vf;s^oWidxl7SdL%5Zbq>rU6b+#9#|#8YlEHOPy2 zZ1-ns-l)6uI+ZsApD~e_OAq-l#nt)&I6~9U603z z7Fc)Hx4HY<$V0xcyZv4wC6BTs6Hs|}a8kn3>_8?i&Ch(77S#0feC}4?%4FbdRCff^ zTYfx5l>cihv6s@I80li-CeGsIcj3|#`fIKuP1c31L7E8zU?fWpaF$yTkvugM%_zcf z!MPkBA;h}4ijjerjevP`To~p>aeJPtFwnX!kbA~yEpXPPOLU5ts8|+k_{`h98ELSc z+)`x*ItU3}{=O843UbFHesI#>@QfW>ZK=H@j}C<|Y<^wr^$L>neDPIHyX$cy8W7cK zh1d;1F7y+l4uABn^t5rN-=IUc-4vD>#HqeAxHZW zP88G7G3)e5=l_0U^Q#||Q4?Abw+-_);NYs|2?G(H{x;a%)(zK6NZ3i2O^da78pkIj zE#df6g)+xK)5wuGroWw_%$j6s5L&`eAMreZi33?v)#~Dhg4V0>!sz*H%X zU?7??7R?nuj(F-J4LSw9)pGfjKN+zdoX@;y#v|%s&e*bXO``P8LPDx&8Xe}8%<4+ z>=LL08-AThZ!P&eXu;W%CB#x_eYl=I)!m(QiGuj3$WuD&plzZm06sPJ;a2BV4u_4o zL>edgi~*%eg)|p)gU$ON#z_yfNRgC`dyrNnFR{`)&8S6h$n%@Ug(yDmDz9?#pZ}*p zu~^MZTtie(QTSof!r{H;4&y3lpUR`Io~2b=f0_qpfI&>*OmM0Q2GJSMdf>4Vo6~cf z^6PiYFix%~_qmB!5YGw)8Bnr7M!%|S80ty=J#ON&;l0-@d!d^b2WEce-N7=QcxxgO zYSLEvz5PBn@t~Ea3gy%XTbroBXEurN_bG0pmGRoQHX$HK8P5}$R1)mmME#xbIE!!f zNpo#BzWH9BPN>9RKcLNY{X~NTyZEerY1q$dIu6_GxsXkxf8l^N0u8AAO`M-$zxc{4aJ02JM>LuuDOiMCJcSgWfNC8*bpc)J7N@WG&X!(ymv<3*|Op0h|EhDyS!E*cP+a5U11)GZofuA za_Xck7tJ6YIgZuN<&H_)9}p9t0Bi20*U?9;x9q!(jSNhT>c6>{*;zgA`H&M(P%)7f zV*J6#Y14j{=s(xhv-ci(k0R{uY@F=3yAo->Cs8v0twmN#f@H>@3D{Cq}6+f=9Q;lE-0a8Zr60f;x!%nIwdGVBa=GyVqNSuaf ztjtK#v6&{7(&_I(eaKedTd;h#)Y||ix!gr9viAE9=y!`j8T9@gNyhWkVT~M^JQCuX zYQ#qRX@R*HOKfQMVy6?zZ}2>+qrYVF+Vg0Th0ik3$1yS8=BzT;s7`2iWIsl2ElF{G z2|f5VoE$TQ$atcGpXnt5)mecE)VeC} zidA9#1&3PzaANxy@MS#k&x1I@CC}96S!vcZDS%bB@RCQuv`wA+X}+;nh#fSb>1f`w z0nDPpRW9jiMq=vX z3ToK=s_40iROKt=$71>PvkyP?>#TeKoT;M!K(2Bs&=(D+`M8M2F)S`hspq9zt_)VxU_#;T zZ=7s%sGJ1G*ePDCHq+j5`p!1kLiDbNXmR)VZbHo!s}c<}IVghazXw+rKHy;z^6y_> zfv0DpUL|nNXpva9*FNKzgQpW>zV_=vr+-UZSvbkGdLStC>v7G1JFRQiZ)xthw%y`1 z1QnXy+M5|w8{VlZkH(>iqr7MivQJ%iLxL$rq6$tde-mG|Pka!7z1flU4gM96m2~5M zpy-(&0+_g7fwM>)|E^d*Blp{h${n~rkgX$~xp%khGpFnrzdH5lMF5#)y_+zxPrKo5 zX2@Ncy0rc|U>6ZK=KsjE7`5=9cSrr(e!o%tNEoLnUmn*D8 z&C}6gw-)z#zmC$yc2t^fQIeD;2|>O5y#4B*;Ua#|2*~~I9imHao-{;6Y;TNx?g#&8 zrPv)slTO3Of`Woh#oz9Y+}dW-qRMJ$5ChAmP;KA`?(n5)7$qmiWeVGNy%Eof*DP0W z^=4!3@W6W`;xYT5)_aZle%v_KS1)K#Q@q4L+WSn}#C}_Ys*Tsf+5ELkyPZ2WEPmIU zU$dBV9%uFBA*O9F4?rwH@1eip&xS>_2P2FhyV=!d(&;PFjm#=M@0Md*oXbi;>%~CY ztDFla*+Psj+!w1On&0TuQ@L@wy;tYcxg6ItW*IQuXs+<}7^W8y%KT%OuCvy$4KSXq z9(XG0>8r2H;x{@njZAFru6_sklYk8q>V)TCBk)ehRX}LydF?B3N5s@(txUHm)Y7Zt zD8fo24ap#J+1Sv2<;{0hYmV|bQ`AphW3aIqn zE?44MU;iC?PU3W>$RZ+CuG75A92GF9u$Y>gdu?35c>0ND)KPcu*GCo#4&+#nW`%qD z5iuAl=*VcBIrH@W_5e0;gnrT0`X@jxM5O*9Ol*R6XfjR}*xruYgqlh4r#jvCj-)|GS{Fu;s_tVesQ)z@S z+djq@C{-}qFcG=V<2u?m%rep6NQ}47+Vjf$1 zKE`ZjvMAEuXTrxWwk%Ki2Y*4vKY|q?W~idw=mH~#1jLF;qdf|toOE76f-&E2BWGqu7Oo0VZ_t{NK3H`GVZm{vu<+0^{LH2Q+(4=AYftbj5O4E)9&!YzYU& z-jre2Yn_#v?cG!h@ipq`cRh=>N)<8oo9m_$zWT|g^Ax`;`8DXJw*sFmiTD9$|Kgw* z04Z6YBzO+DXIEK6LDH<|p9fx&s!};i+w^eva6vE~IumaKn|hl~g4pL$TT}0Cez9)<97DYs4C_4-UDalo9(@hSynw|G;^#>{*3< z$A9x^@F$P_Dk||x3PiNd<(ZGf@eaq31a-mVEdLSf%RednY1%8a9akwb2?<#Z#V^X z?l!q&e^?uoU7~jRw$Hwuoo4SM_BYQa(s<-mH{2`~%Cqpo#-=i+=4*>d0n~nC*Ua^U zIViIAvu#aKIctr1QlEmYS6AKas=U~JqP|_7nopsg#T7`#ZvM<4Xa?pEm>*{$zwD~-A5xDu|HxE*#?XnoEF!m_zz3!URNN&ih>92x6 zVg#8$rDnR)5KocXFj^7#12_fM7U`|nA`aZqu&=jH+Us)Pw)<@NH(xe1$H^aD$BiNf zVi!5+hZW0_Z?m)}N8esd%F4ele4xZdgIPKk2-a5vp^q9l#l99F*d6ow1<`a?cGeJ8 zulQ!|)boeEjDTXeak`5SGO|AF7@XOwJ$Ah7JOpgJ+9^Ti97j7gRp(FY2%=1tcK;+4 z0juGsEj?bchke6A$9Qa4LUiWCWJLEG^qM+s;d)3$&;hhwm_#hfrvv4Yae3gDYa|cG z&&TszVvOjK)Ai!LjtE5bQmg~ItVbQRzY~p1S0((F&m&)3Wd#&m0lTz855jL1T^bCHaf9BH4qgMk+o$CT03+CT~Pn=KxSIy1*MVn~LK-H|+Fv_nW}f zgvd5F(Q;odkq+p*0p@`9Wi$Uwv*1bmK;a8gY=cgK$d1j; z&XjLqF&APcb|D&9cK<%L52`xrW_?Ym&03^x2e<~9WU;YMU;I*FPJ;05#O_NU)KNLJ zCp0i`{EZ4IBnGvB^zvlA>U$|QK;@;*k(7rQe@d!-!gMzeGHsp;ISZk$(`ThM=dZoL z#YQ1OZCNzELRJ!*^I}zvb2_Kxc({(wVdet58m`{XAh|`jg1McCBq2x`j+q2|; z+kJC!$&L~aomO@y@eZ^Z*oQA4*PKB>RD=$CeWEd!8{#{k8ww~|DZvXI$m}%je%y2V zYo<7s#_M&y9Ppm{hLlHIT(wLhEg=ti`0KG`L9d~fL74>E&vp>7ry$qC2JyX@t#39y z^%W@qH}rTF@KSJ%Bf@`PucnEj>35AetODf6R`_8a*v#yY{9RCm`2$z2Kmz}U!U*6Gg?h<+hn&fNxGqvoHM2d%Nw{tYASuMk~uD;9I&IN`qb;lQf-t z-@_Zy=$j6D<|*5kKZmy(Z<&U+KL>8{-wQ@VHio8(;m1Gh&X0MFAE7!o_tbrV<C1ea3m3aw{l;X3MW~G*>b74}H*;eS|EKQH@pYLjQz4;+&FVD%N*312% z-R*~k6Cq0ssh3d|9d-TfswiVx17iz@`Iguy$gZBhn?gq^lQ7M$hQeu^n4O}hk;7a0 zS!6bX$Iq*vVgGPQP-30B4hxG{np*5TllvmbP`CKVEJ-%0o%+Ioa^f?$>FBs0YCJ7A zqe~=<(wxFW7m%1wxzmCtcmLP!KmK-8gcn9rzdUo9tzNPfm)JL_yA6*Y3Oi^YShQkS zHz?(}NaYWcch^%ip?VRS7rZ{ukk3t|CrTTgp=j+ccM8JEdf)@ci#B3u97a@11D0_;#{)L0-R(*jeJh3-)$@Ytu-!0N`V|j ztE;oNmfKFBDrQT7z3k!@qK$g^gZ~E*eTu379v?2ZLZ8eU2zY!`;?H^QD5gQ;G_>=< zS$BJ^QYO* z0p|`V%D&Y?L~jVzAGn@hixDY?+Q9~{{8n;Dww_`=m%Tc`5ekvvuR4y2u70&JU-OXZ zL=Uvk5FNLNOjiLG0GDkYNw(cJ1LmMA%$ID8$PO59GA(UN@o#BY74hB~+1<4%^m&=2 zlq_`|VNtb*)bKTU7_2jBO_rV)?mzXHHGaiN+;D0(?R8iA!js3binSZ9u;K5XbH^ph zdI|x*-x#TUKMXi{Rb8@6oFY)6T^8mIdz0jPA0LFfeqgP|&bG?OGJ{PqV#6BNU$yP zTWuH@2Zx^gZ<3+hZhQ;Vowi%>$YoEXqM}1@Y40EqGSJ?eRP)B(shy%@sBK(}oN<$!=v8e3O^y(q;JWOlg^k)>KJtgW1UzM=d6 z%=xQTy~&~A4C~8d9*Oe9+p_@@zOAp{GZ4*#5gWOFcVMzlI0H+okqf2IxQyYH@+(sNKuZOk{VXA zw2y!L=3C<~`aDsvjd0gZq0)_g13(K+Lt7)>ZadD=--z1 z#$CMBM$R^#wj74L7&N31AQK)fdzNEQ6QLaHOEz-4zEBj!9Sop$U96dYQ^;(X1Sw-x z*9czS-6?l-S}$I{3YT46fFjklbM%G zldMXGd(WEg+KX--Bg{3UQh)Ot5B%nXeFzz*@2<=D&~Rp9y&CX2K962y_h*@VW)vB? z6JW$CBIbfV2^vlT<@pv&YDd^eqLkdzwz@hRc|)JDT_1Q5!}$7nhbs82I%f!?Ae`jR$M4NC(wyd`u-~Sv~?A*J*KG zX@682fHcZgc{v-n{i^qp|9#LKi)*dFub3IiMQjj6raA<2deo-s!feq2{A-h zy!jdAW6wcA@ZD3>9nE!m53x3hh;XS%5>4?qSMNFNob{K%ProvJ4ZaD~5tzn4FuwUM z{Pe$&+LM3rJI&YoBO8F zMEQqD0LS*5`orCWZaOG6zNJvU$S0KP&p9Xm3|R_D#Af`7_1l<#du+z0#vwcIb!*df zAh?NPOD(29aE$*Vcw@#snlQaT!3_ z6*c*a^15Vi1o_XoG$=r6f#1Y^1clPIoZi;hZ`_<}vv#%E0?f`b>!V-r_4lq8H~);L zTNJ`nBUWVvFd!6R`k0S{y=vqp>Nv*0q+})5&w)Q=sG2JsDDUjjP`@C%q%eB#dAb?% z^)VRqI?M9~ex$O@n~AMmO%<8f!5Q@Dz?48Ccd=g|G-0dMN!h1I>n=A~Az)|LD<9%B zpLRD&rc5EM+D{=QH{0eTR{aOoLP7EIl0xmnjugULmpk~;+@_f?{bl$!)mmYqVX5!OS(UxRsiPwTv(K%)45}(LE^qAmxaG2YTr0 z(!wB3*z=AY`un3HQU2jcw1jncXoWw7b{bw>t_0ki1~*f(97n`QJZ_IXj9zznydc!N zcP3YiibIyU$f92spQ^*H@PtN?@+Cu4W%MV#`#T)^nPjUcy*s2bFF=}NnS2kAi+Va} zd|l|Y(POLuK4!6?bT#&n+MRf{Ai|WYesx_FdSRGX+nDBV%4`u@OLTfcKM z$BPlG6fS7hFKqix#0ALh$?htSZk=4a%_7Tc{^-q!fZpXRYYBIDTVj(T^O#QcVfgHpm+FZ0?mK9 zVFGSzJG*jwNJYSRU3{am-PWtHg~pOXS}ZC4?^v7dPlN)SOV~9mm;cVPvID-Yki#+Q zPR^Pr%Rjm)Bn2Rh9?#7N+^`~n`*;9FI>P0qu7Y6f_8rL^P9;$mT}9>d5Lbu--~a8(x$-|| zfA{d;;ug>-ar0Xd#;?K|LhGkB5w|})`)>J=PcOR- zvOe@9LO634;j{}JMy%q85VTi$r4SNd$DqtT#1Dpy`E=y+q`|nSZ@;16{2Rl4a}VX9 zQ(dFNNV^(BEt0Sp6!Dc3@DVhN`DXrRewPM?bp}^6#Z^QPL{dzj)$&z?gQyKH|_QL^5b=I-DvW^ zh1s`@#faezw-YUIPkYrMeMmef#6`H6BZA@dU2JzVZjM!N3h*nAx2nKZsPa^ytU$ot5Aa(#$n zW2kqtHDs%SztMj!v(2)zHH&$(d(Tag{04(#3iz{qq>X+yn^|RkBo!NFNoD=4@P?QP z+RN)w2-OFoNN75Gm93wB|Na`^SlDqX&hLHQ8~KkwHxs(_C|<-y{-jB!xtRhTNB@(} zk&FNR|IxtzFM-I{ANKsr!{-}@VBUHkju2YBc8}hnZ&vp=7RixnD}J~F9WfP1Tg2A_ z`PVDnbRg-q|sBz&SA%b5>)AbI)}8(HdDHkjpz7R z?|_Z|o&V9aLfJd}HBrG81qZt5h5xba&X+8NlN&AJMi*&f3N~H`a}0R@v43 z)a!7p2ZN9d4qY!L*YhNPS`U7ZxWPt~gEttYl}yta_`3xA#LXx!LuVUp{4=bRMv)BP zU1%DeMgNE^_@M?_S0z-^e;X=Gd!tASbxEbeXIjBprSY=NBU=Vo%Yio&uuDLx-m~SZ zYuC9C{5WOYqjZY(iM751+tBn{p)9`*CY`-ajVI-PX`EdTI!l(P+r{egq$|AG zlDIf;z@n@qcQH7kCzHKXqAW}#6ZiA}K*|l(+uK)^+Lzm2?rz~l{;LcwKZTj7x;&}% z{QI#t*C0tr0nKBISD@2SEDoB#y!ZUov*n*OCgG{Ix_1^c#n#neCE;Z064@;e#bzP| zAc9Ud!s?{PynavUM(_s0W`qd;uLzrnc=!7W&o!KkXf(-kvwOdj)80N_uhs-IE&0|X zVxtzX*V0N4Y-=2f`*o)ygk2s*c)*9cjyn0n%{>5vYranF3B+KQfw?REfiUqUh3o;e zg#ElE`!?UC`f|Dka;Cas$D>ChKw~=*V3L40gj;E=?O*xz%Hy zEv9;<4+Gj<-cy(A0=ON-v#M`$$>XH`Y|~hM9AN(M!~VWr2fm>#^NoK%##C{DLD)_` z74SQIZ~@IPg#@=x=p#9jn0hn$SpPzsJ1IpK#b4n1NgQ2(mDx$|*RW(7ytJ}+z7*wm5yR&l45ZgBxoMsswzR6;KoI5Syo@k{Qc?8)40~4NL$6B*Oc5NEH zL*PQ;W|DDs)ktKy9eGM8qs~)V$B|AtU8?XyCqvco?Vq`Pt}d; zqu<%*9O21#+mZxRz|0Ms=Wy0Jbn*z|f^Q0bEC3!Cu|%A_8J-3ChyID>2e)-JOOS2F z>l%v=Wezy&=j@C-tjzD?1$a(r5=$iB+8X<{$VUw6NTzwW^W?UYSg_xSiK3-=T0}uz z4yOrSbR3?xXOI7q#%dg@agl|`orObOY_>_e!2xr=#B2OSYepUz+te!WhhFJ*))f05 zS=Xl=?lempEd%z4fnTfZx}RE1T8=}Zc(B(;>|ppc>x8nWtQuGH&P?;Oq}MAn9TcH1 zMjNAM8(aRRUZN&+x1Bv^OKjt)H3V@qspzm|<`U?d!y{(f%V3yLM1zYN0`%q~?W?=x zlTQBb^SRe+P3+HUHvXvlwJb{HNP3Fk39A|#FmMK|o4-q&z6=~#%xRSR)BoT; zb;hC|tXnUn(swPuDSx>w(RJekbyDVGtR`}o7f`9M;EdI8Ui%Ez*F~V+wb`+GtUN1##;>D?cdyux$aWZ>oDf(9Nhn2s&G8SJDDAJ-Pz zNi7>nh!(g62XYjEE*ib2^4rRdoI6^Gxn`W8-z`l1{)^}l-aKAv-L|dl+Gz8`yJhK5`4lnU{ zIP1VZxf-Jb2>z2V1K7fd* z`MBNsegsU&qA2Ok`yl7eexLDCp`&E!T{y4moavsJ413b7y0X$?M?a5lirtl-cQwIG z1y+NigfuqFw0tmGmkjIC^7a`g{!Idl^Zl^X+)MLMEsTnmRy9!&!@k#Ub_S~|_La(u zh8bCtq6Oq2%x(>ns%W7ScI=%lCu3c8PFw+IVJM=Bb*O4Lk-@5#5u66r*Y^@cOvN=G zu2FQ{=?joyrASA2+`91pJ+_wCR|Z~ECC3AG0j{JO)s)3-B5vXE;7;`PyqGbIXM^+{ z50UQAd%cFr)t15Vmxzz#scfhHUTVN?c-o^%Tjjc=H%U`xFv#mchQ*nvm6Q72d^%H# zL57USo2i9qoaaekoNM3Ewdc1j|2-v00oT8s#_jMsftjB&32ltH)#3C#_UFFo;w!<6 zZ}nE$iOfz$iiCOp%%AYX?(UJ+_%Iy_z~2JLwv2X9Z{bZPCevErgY=w)&)n*b$JXUw?e19{BzIiWIQdcQMN&JyO36(+@mJZcBuXflp9*2bhLwa z%d{~o-ch1~*ndy6e3PN(o$_oI?5J+IoW1RNdJATb*{m;Iy)Z|ppTd=6f++CWJ=jNAPud&{*duuml z6o&OZI?PWl)%LVzahM;(Pycjt%zjSITN>o9;?Q}TSsSu|l@y!HYtZ}Zh1J4HpibF< zqnlS{cCGI;3QTdW?D*tBQ*rFXpNzHP{l&>7$K4cldq}ejyuku95CCa9;1^jL~urL48n2CK-78j%~>om5PjPTI3iM0i^0D#eY z?E=l(s{}aCX| zIpS`JD?a-@UM3wK1rrZpRL1h3opPRzrD7#)dmWJzHV#HU7inv3zaW}wz@M3TwX-du zph0e)i^1kR{&*?FpX?M1i@D%zrlyNV;Y)yS`GJ>mtC4%^m#5mL+ZgW<1bywm;l|rfB{k=;5~!^kQabq>hA`3>G}+n3rE+})=uK3uqb(5>WHu67N)w_rE7l+CnIH$MHr z#XKLdz;OnW&oA0e|DealTN^Xja7l`^=j)2mC>O7 zdKWuXOG_z|R=A)Tv$v>^1{5vzx9_9QoMrc9zRXJdF9CVk(u&7J-vwjx=ry8yIh$MD zjk>cW*ZVZVmxzj)$wUFJ$Lxvt68RQ7sS6YfvQ$-SMvmA?ZehX6#YQDWc3qBiHgvBM z2M08;@@KTq4RuO;jk5ahM6L3Mayz@tb-cyD?NuAz4AoAF$a^2VtbhzG-9oC+9#2=y zn7v;pp{zC47mI@$+zl_jUUa^M8G2+a^%Wabx?>HtKIkXK;2(CRT=?C05?c zG(c0R?{8ez)HsL$AHg4I!X4JEtgcj%W8oi3EGl^d1~-AOf%o^NJwlH*4hu*z=)p?O zs{vxWc2U6oLYIHtsPKOJ)`wLUMDzI7R5jb@2XWyUn^J9vT}7PY0(zru)&6Afyu^CR z>rzOnsGm|s@QgX|Y8*JSoEUv)l|9@C{>gVm=f(Tr26)QdRv-OH)xRt0>-oR+l~ z%DaT#>UQUsTt2tzu_){W0zRrNMz+~Y4PyBE!fpKY`DXff1iA{+no=5r0YVA`74bJ4bO(H5ylgAySu5H-~)3ON?QN zV9%>Azj@R#|7<+TcxWF~U(R!TJalEBY5cGV!7DNr)DOYBy6vc79$yoDRIwfi%^yaW;r49)xkO&U3D;b#IG2U}g?ktAuB?)25FTLBe}ljfrJ_iFf9&s{?> zUj-j;OR@XamW>r$6WIALkzBxhD(#1P0uw2>@1t4inbrASrX9vHwC2$}b^*{dJgWMD z5AK_b0L!i;YsL=?f%{#zQ#0{7#4}kRO;78ZZ;Q8~>#Ls~=Jbh*`q91zm}CWOsy8-k z@46%;>z3m0AR>C?FN7eMIb++>MN7JSLC>!c>~V66z&(kDog4h{@h3CVMSJoR`7Y_V z*ewrD1G>*!v#_VDPT1?&84i-X2PUvOLfdj$iQt#hUg;h*wT0mqak~rer?ehl%vT)b zhikmomF`ejHXTzu-FbL}9=j$pyY5h>v{l*P1d*RD7tw? z_dzI0g-mLu_2Zap*Yij1DpHan=SB#^SQ1N-@3B<_X|1Cs3VR>ShDWdf>&c+EHUs_j z!b#!Q*B+O!A-&BD3R?P^b7WwYUa=<`lo4SU1aT>dYvEv`aS7)WW`Qo#b~vpHg)M|p z)!gsLeCHXU=sn4zO&d>x7#N0{VKlSzxj}#D|jo&*|k5R5~v2n~AG${_Pd@64&LD zu4vU%LuCjDLK&ZibLAQb{K+oN3+uxHn&`)iR7O#V}$K#Jg#Xr$ijzl1*m&u>L3T@2$w zb+5kj_-?CBRjNsC8P<>p-2k#zw78W(R;&LDp&~j9-S2+F2E=V1TkXF*xT?GYQ~EZ3 zfc#|OFNBAdhiK857}o^I0F>aL#;S=`Q3$ypV;RN4;cz;+S+(NUQt9y$IocIaQMwGF(WFq@8<~T_%I##GM_uSkrz0D^B3|>pc3tJm z&lJb|9}TdO)O?w%bx_vbl-R5AZ;coqfkzo5w)E`foUAXy&hkbbMkW7Fo`YtUY$csf zSV1NHdmwj1S0Fw%{v$X1G#6ip!6&ZrL;PwTU;ZtF?eEW5-7Y8}K6e1G+&=+@Ut0&U zGDWuYuDC=1fj)S5xcvQs)Pj0WO!M8Es>P%zlv2ke>&qH*CHL`lPxWIP`+BCPB~vzY zFZXC|mp>pnt16aBoQpw@bXry|BT(0g}e9dyb)_7uA)X1Qn#Y1ZBB^c2jNx z&#bjSE-r2R+*^_w-4IaS2CB^;vedlYFZB#hUk#@#fqT5@&Y72MNgbmKzm?Le6GxwdUUbcxE^v|HD?57$gLrPF_8Q^plFT^0Rm{SI~?@Je77TU_B$ z)oI!NyAD&bTXBDG!?-&uVb|&1o{?}8ArXS%+0Xr@@Ia0{8N0#eV~290=Sq*a8UK>% zwbxw$<^!w_ILz(rVktjat&lJy+~D58o(11f6-;q+QnB;?7?8Lf`~6t~35!~^Lr_Pa z+5LdN@xW`2lf3Hk3=?Un86v|v%0u$yy$HL_JK7ZXe-hc*JLKMD8Xs>lBf?##q$<+z zh;)hAlvp$VUWIsIZU(8F-_UE?FD5td_KtE(b^Qkav%w4U*-{f@y zu&P)w_h@ff>c`v|NI+YRW7A!n1TFf(DQe?u!5vQ{PW@cT^=nn* zkhOTReVc8IXUmT?%!bj2A9#m?lL;QZOuAdYo7(=z1%oa8<7Dz4A7ngxW)JX$+_vt( zK5QHItvG|y0lH`@c!XDz^vn=!ok0RYRdsDPXHrBc^NZ$!Ca9hr>D&gPL6CqtvHs<& z$&6+YC6oP5iB(j%{mJuXbpJFE@wb{Ib#wLdmFe(-ULV!tv#oyhsHpJVvroSZ5nr*$ zy#O~~OdE>l#a_sq`kriMo?B4FTg>*|V&K>SAn>i1DH%<{kP@O7Q=S&ImVTdpsLj&DHM zGutil_`=teyFViLFGURhd|mB<-i2SQCy^qG))6`#4TLo&fX$cV8!rl&AndwwciDh} z`1b*C9EN{t_2gm-U1z1%{{?5;2UW*h%5L-hFRNkn;UZJyk^JXwGx4lIIg29Ep>7E` z#{Y-5_l|0ETla+l1vPf1C|#u^C|y7ZC`CXzf`qz6iXZ``NeQ8-s0gSuK_T>>fJz_) zA)sg!q(n-P7K+r61Ze>R$$hid-g}%~?)lC=V|;(bVZzLOXJ&bx=U3*qw$ON$4H6sg z!x2?=Q*O{%{G!SBB)Y29Ce8#*j|;zK|8i?MtsNbyZrZU=|E=A{MuxFDle}S(7PGKY z=!kuHyF1tIVq?)rQ!Xvtf=gvcfqOm&^ZxATTwOk(B*HjqqW^Irk|z!K{j)3FeIsM8 z>l^-^*J8HEMt|k!*So|zw#7sD3tkCl&HZahq|XRli;!)bTrRsZd!*e4v{r&+iEsU? z=mXSMy%Xglz4_rHiw+Xp2g>Bnk=II)*T+Qd4(F?xP^Hbqes8b~L9#r8Y$&JcaoiW+ zg=723pMcYU#-$|wu7>&>o#LNBtN+=X{}C_}l*xShCnD<(|Mu+mN2lLUOX9zcfqhrp zY90ndg8ymU&P|T8QMhK4KM5YiXJz;QDaeZ5eVQ4sCvOrr#>VGskIH_97K^2E{q=Bv zgVp|LJ^bH4+duzhLqJ-5*7&#Ac+$-(ZKTVEM6)m`)ATKwycg(TSZ51V_Um|tGU9`> zpmy?j+L0_aD*Q5;dKGxl`zZ1!`AaTCdDi_>+0`vS$uyIFWWQEu4Za_Ct-Ja8dzKL4 z-9s81`}0D4gZi1g+DTQj9p6ve+dn)}&gd=4czGHw?w{E*ym*DzB^4{s))jX@X9WF!jC{q1CjqinwYZq7cR!Ky?L&_b zj|$+<{i;KVCpGUZrlV)7BvqDleP&Ll{{dL zue&}pfDamr6&~1Z^7KMpOMBpRetC^f`CRPIdF`ro%r*WgXjO}_5ROm;xBmnU)SM(ob2pPsn+}-`zJck!cWn~ zRn^QP^E-gGONEC>ycuaUExBUG9^2<3fBPPa3H?ly4)8zjVm9G#jOKOOi!Gn_{J)~> z|N8a+i(Tx0@>G9oR^vH9zGAImPHz*e%+fN)%sS;e)n*7VcE1q4f5QF$=+GVn@AnpU zKLArN*M_aY!3VO~-9I*`ckB|$q{QZn@S(X7894H`@`5|;@DL?bZ+b5Pr~e!=1zGHp zWuuyI%-s9=9S06jbjA7%GV8tOJZax@ejDSvDoA zb`zEL(R7otzOcL^rM;;;)8~L4MVAFfyawbd*-?Jb;1TJ(%YRtlqKBW2gMDd?sSY`S zO7_}25BBA{uG;DDil(F>b8)WD&P5)*3|P#;*gUnT>1f z??X1g-NP*FBCwF!^wH!*`m=17I~(Kv6g46ip4oC!*$+OpeYyDPKK#ae+sWoijQJ~ebl4`&GgYBRiyWnd!&S@-??Se!5S?!kp(stfUuR%?BN7DnTM3-g!4pV zLLvw)VsqUWUX2o71VZQR#@j>1AP2)@sBv$yBSOE3&ZltgY=zHu{Z32?h?z9J!-O3j z_09@D5a*)4o3+evb|HA97KAx{3x1V#i=d*1#wuH-w)K z&M~ks*4T4hcIZcR29DtUtxRG(fG~70QUqC#truLPWW-z`#qf>MKHD5~Pgx7#_#p69 zBLVhuVY)cKr!%old3h{R(E7_#s;m_|e486}n*07u+H%<4vF$} zE&6O%d(pt&t8Gobt0Fiv+dA#kyr|h!@4L%Ib9oWuXPOL}liHiI7`X5ID9c&ucdrOk zOlYXeyp5)vsIkjS-r{Sc8;VT&=PrDls}&_V-cH0@i>Ig!_Fj=YSu~tHsO8ct=7Pge z_fg*qG<0JWo7 z!U||(O>jMO{r=jPMV((J$>l60Z$5Ze`B%)#_oN%t-xy_W!pcIEBB1EgEqx~%H8C_B zR#c-feC1b`1{ASb({mxQo}9zj-8&!xM=gy-_S}H_Ja&`evW8(qZ_?29CHCrcXB|s`mqz?xDF<&RN>U@Bq{?bkQa0oIR?h$#Nko2u z=MrWFDSI+3JDcwLMGfzRMzER%6l&xc#wUspLOyN$pyX?61T$)Kla@8|C`yF-YMnSq!^IfU z3v}nC_ku=ul{mCod8@UDCsAlUF;g6mwSGO|2(%iy%s|tbk%i6x0FOGsA+nRgGMt6* zsHzFh^*-(}yb|mBULjC_qEL(n7DP5aYl@KF6>t2;y&vkhyZqVO>Q{^Nx?9{eVfxkS z0Bvm7d{$k|l4{Q`W&uCD*x*2+7}bqO&QKn7+`?JLi<{P59U;&YW)}c{TT9DTJA3o( z$uRRph(#LLrQKew$N(T(q8%Fx?|d57vXR)5u=WXwU;9L34KZfkjvVM9=aB&*GL{VGB9ac++EU27!2(!MZV|}`0T$d1qobz!MSo6`r(lQ6s zcUBf&g{6k3Md8NOr#s3#^f`0J4+^w4PT%b513p^{EA;pTXVr-|fDOp2draZDrk-S7 zV}gg}nC+-KOfFUXh|9!bY zd7>?+b?0(w{IU12K)L@1!DG96@%^Nj8^LpT+N`s&=VgCXjU*~MlC(p+40plO;I3&shET;r&UBQgWBA~j5XW> zzsuou-`2Nk*n}mFz2bBrm$864fi+6~=k7H|8{%N#j+n>52Te#>yhIS=lR{PK{65#X z%)uhqJn_n6W6H*B-!&2L1KrE1kNg9txh_+*1tz{^^xTN|$*UJ@#xbv=KSaWJb1dL2 zwP9&pf49yp5_uTR49Bpvn!b_Th99L=**Es2Zaf)RSyu>W^zM$|A@yrp6fwqVro1{E zb)poyedu)P6D~dOC2Lf*T$7YY7B$o-LZ@ep7=`j&7dA!&2i07Nbi*g~3t8r`-+7(F z$`0It-UOAdZv`?gZ)@5_zu@C{V-@yN42K#&&DkcsT1VV`E*`L?|~!m3kd)9n{wLmVms_WHg#6S?QRJBP&Yy zR#-X6N^%PJe)l#Itz(R0tCgoni{F(EYyiebLRuH*}0Zd2X5zf`r&p3h$u=5t6BD;sY` zc#VX*{V+YUW;jLkl@qrT63%-`WwgP9kgE@_?6^qJgxiQT5-ra zB6Ng%2l_*65xut6=3jF%WY?vZU9yZ+KprvZXIhC<0xZ+G?l!yb zPLQ=by24Fj555%SJ_bpQ$~!n%lDlG9aT#=dXMKB-auN}B7^djgyn{SsAf~RES>{^#n{1IjbE?ENRUFAHZ3RND8 z!!L)AG!p@v9%E!^&}d9W18Grmd#a-VRxmN1K;2lPhlIumsRpB>l3 z5q_gM6H;PS*Uz0KR*M>gUx7>u5&9bLJxF8LdP0%d8AN^AoCf1=c>tF2!q$qHt~sE^ zJNjinE-Bs#d5#*D|C+aUL2ZjO*EQUErDS(@-|6kRFz^O2axF&}SMtSwG>6d>YLv@M zt!WjmxN_l`6Zv#Q2JwmL(HPe4j4tjol=Pmtj`{K6F}f2-ka7~NXJ=LNZWHgi*4Wf_ z0bxK(^5g7{Dw;M>`=S^W%=jWg4vNdgk=8H6Pb1Azn>;LOq0JKd4D=1iAlPfiqdlmm zvl$UXepo~@LE@V&a5iTn4>e8qi@pB=A{xr3#NQO5DT=4Y1Q;&dT*)H*o=sudxBoTJ zH1zn@21Vxm*)TNC>m`OekUZR;V$2?w3dr(X?d`#{~b60N5ekr5G_F= zXHykAG3f(6bt0zs*FP2YJb1m^oSsbk$R zYVHo>+J|&v42A~x!p9ms4~W_ZF4h-Nr9jV|5x;y+@6fJ?M`Q53&*nFM8lrWZEr-QW z)zI3agEqi44$?0%v+I}3XFwgtP(%T^20J1(XM8{UiuYAzwU%zk8z1-(>FFza4@}W{ zS$K>_Xjy=agE!V(<;9b#{KLNa$s@Sw5y6Z`SB=ZKrAYHaBDMYxw<@~UI%ISX_)Yw9 z6-FdVg8hOTW11^kt9~tKjNE%~7`%=>OuqS4)Q!4%7l5J1%A?okwQUf49FD+ZMxzQ> zHWAhtgaC#2H5Z1w>VzZV&W6cSHxBtUN5<$xijBP$*73^4(73af)yzKD20y_TzUA6? zxPRSmf^4mK>~MSNz?9e8Rm{%km08E+I#CvHLGrw2Sggac+rDPF%Y$%I6i_@y>$-55 zyDeH2*}mLP`ZX_#j64$$i=;zqSD* zE44)1msBP0r49?1R#D?rmk%L9BYL-UKO4tIoZEiqyct+9xlM)@ENaI5vA_DL}dGuBI?s?D-?6KWwTrtdoWz7F6WY3tZ%y zQXY;CF5Q2UY1XM8DHeY3dm#)c55%^x?Q?V^JVQq8#(lug4dzNkyN7nck(OF-`Wp2k z#f;yNq~d>izbjpal~D4XIH^AzJcDoDZATe1)EDZ+EOcHRru|XFete!sT(aD^#!zp0 zhD-L|*@>%jl(+k++3L<#GaP#Myy>W$JJzo9V!c}o&d`7nG<#)z2vcYCj`3ZACYA(+5j@m~KbI18H?|O| zF?S2B8+VBOV~J*N$i&pUcj^#tRoFujXZ_*EE~3$|Jn~$AtoNn;-Ode12F3xTy<&tg zj9!^lUYJ+_bq@yIP@lVV8vNDac>%w`;tr!j ze3}&J$wr`%cCHK88rni#B7Q=qU z&v`M12n|*IC{tP-MIn5@tcxFJYl{1u&;AWt$tt#unzxhjj*xlU%`d99+NU8_L zRs*V!FBv>-?iFPi*W~t^CItidBD!mx=b3M1bCCv$={bD7+ur~($?^g$l!nYJqC1(mgL?tTM1B`@G~(tWESZPS?(L}3ja2ee39Xip zHw*Vy8~5tP1ynIEiLAC@r#}$;l_z~yc4evW=X}JlJ6q4W$1h;f z2 zBf^^PLU(F^rJB9?YiTv&iDGvQ9A_xBq8Zzl)-*K+dtgGvu+wTp?%y8oh}XgR}3jcvM8sXPUz76X8F?b zp@(f1!a|;zouf8C340iXlwFT!&g+UA1dWjkJ)Hjj%omT@X;kzR@ zeiw!bPCY5f4g59aTf*-eMn4{&R8} zl(E;*pKaQHQN`4@YDUPW_x}m;8uJUXi}=%!n&Urd8|Q7;=BP(Drn_rNFWCbESPuS+ z^zpxyz5Vas{CB}z+L1wG?3k;NT*lK}b!fnYU=DZMVG-eXByUPg87IdEU<{PZYsSrX z0{n$@JvdhfXu=HNhj@N_qm6UFXKehjG1oSNp(|T^ppEkMw5ITfWyOr+9N4LPrIOc@ zXfPB@VqR-DgSOGtkJoi#R-(P zH^6xAsiiN!C+n>-u7DZh=_nzNSpB=Qr^tH@=5(cg({g!754PsZ_AUdrhDIpwz9x&Wr$_&b=c(65;S}rUNcGLl$*; zy<;+Oy7SrIPT_G#X-LuS!A|mI^Qks(ZF-vT>0Y5{z|p;V%9dkEiGJp;^zUay;+FbY zu1F18cj9I4No&yBuIH|7rQ?aop$Fpkb(q*X5gjn<5c8he$pZk~;S*oX!FcLB0I17( z1O0SB<*>>&2Zd(enb!jxs)eCd4-1Z?g@^1PUX#yu9SMxY1a$%rr}z3AsJ5n>1kw1E z_~=uVwg>U}-tnM*e`5t6ZF3M%`wO%2hs%>6J9+*3`nCQ60CDA?l;9q6;5A_EQbs%z zmPZCAnnls44De!gp9Yv3i$=c&YpAA+MtgzX&MKc|ed{Hq<}mcOkt z32v=X>^1gSHAb)Q4X!(K$8)E`(LoaE&P%Q(Ay8i8ks}Z3VGhl4Ultcn8Y54mgsgQ; z14kp%4K9J!rXfdnDBHHu3V@6SFxLmw2HYJT_Zgy;@x4|!+)%}e{KmbF3^{7!PK%Fj zHj>oS_8$NmetcH8wWUC>F|CDpD=j`Dx#{?V*8Z{iIa;^G?L9m0z8OM$&Dp367Fa8c zcoECqKjhQ4h^;g(qhQt7;gJ-9O(hW8f5~n*(m&El-9B(e7TPj=!*86+KmVay?#E+WDMgW&M z@8YQZ7c#M#mc8_#!wl$^2wNSy$)hBj|7Vo_{{-^mLqQjpLpYViJ6!gnvhax`JVbV5 znEQ^g#Tz8t~U=>_79GeGa6CWuMFLiYqLP znT)j1skmC<0*X6^<(dvi{BkBOYHjkg1R0g%==$g*4oLQB|`P#ce^H>E%96PiT0~S zomg2#%^Md{bB|BNMizSZ!XyuZq#6#y-Q7vmH97?lnJQb-xT&Kd8HZoUgpepISU~M)8GJW8s0M zm;2U#($pnYhBL`f3DDXNo-qdpX@%*10EyBwsOL^u2Czcc#Mldt(qG(^L-XM(m>>e6 zk2Lr`5zs3%m;x>#0mZI1h4&1dL_JPw32R0S_b2-feP1YmSFTSWo5m#ToT%_sKa$!J8s; z_u!1iB}E8OaI#NhBzi@zY_Q~B{mL-#bA|!lA%Cv-;;7{5?H&zmt>d|R$qD!9tn4rz z;gMpAYl@3#j-mB^Bi5QuF#jffm%8-g&9EGI;K*j`0Ud11%Pt$ReZgbbSrdDiYWF%B z!}(<$<5JiFzmR+?o|Ta&ux0j>xfT3l<$k*AneBlN2qJmlV3 zHt*Ml*ZV(PJIKP_2FzXpOU(TeTdgkQBy>8M=Vk8Sc9=l>nxmm_rn+wRwI1NuczHtM z#5s=GX}Re|*-VgBIIH{{yqUlIPFG21lGj4VOU>|@wqGgGT)_{vau*cXlm@+z|1VHD zQMR>JKC40T1kWXEd_ePM-BERn#h>RXQC3`*BlZZpvH#na@HYb&U{k04!hO>anV1F^ z^>rpW`hJZj(xEdeV1slzbq%XF0dS)7UD)T4vvP0uY1DAR`Yg34du?*DLIzlD8+(9} zmCta>$dd%-1qXu98C8iDQ`%q=owbJ%0{M!@YPMERO_|U}` z)*GX-tR>|a_b~p85l|QGe5MnkNo?#0FbW#adEMQtttjCX>(03H&QvM%Syj_R&Ri3j zJ)&L1p)#8_!?Dkzfs_!-|vL$|XG6Y?szqB1c5jDMGbV)kTCE%+rc*v-E zkPB(s3AhSVltE0swX#0+H1AI65g?Lc`PB#eVE#w~o>s4leI&}{hqt{iavzzC-@&*; z^c#IATmoBu8cOe9e*MJENbt0#vW>qr#vZvqKPdqC-jB?ptpJ~fSTFY9maBtv_V(M> z%#zkA#NyCKsFpUNnxB*mTXvEH`n|ygjOJl9uR+s9|4D!AW5fnG7&GHg`@nd38usuL zGW+DObpRT=F!Xz`5^^tS1*X2)(%kIy0@E6;ft}ynljE;(mgf+#U+5SB3rHVLL1|m0 ziv^PF?)xR;*y|6 zQVmoG8WF1U<1+VeZOYU%N+EyF??;89|E&{wS~ooJd7pc#Eq?+Sn3_KcB`Flex1ZY5 zt^XuX;rDvy`H!gx%8Z}i_z&;k}7N!+z8HYtl!FOgkP(EZCV{9j97qphj3_kW3rDFN(_ zhxBKs0ZYbcCQJ7y?S{yuz}7brtIsso8Mc#ew(Xf8Zl!=jM#o!%=TdgXq_HlJ%v(R7 z?cO^7p<#?HHq-S3va6q3L@({ip7X6~W$eIF*;j(9+#u>{$~0!D&;6Rk7Y_E{H+_b8 zCM$AXn!^Eu>o>ZHqqG6~mXL=R^L>0{U9*I)A+n9b#sE#--nFeJNrx za9$p{mq4-N_!TgnomjOmJ6;^#a$)-w7*N}o?yu8j{a(6;omJaR&D}2Z6|Z42ckEAc zaeKdWNaz!bzz9Z%r@c(`;d)Aa9a$Ioz0t$mB>n_fc(q^42`-pxD7?(%5@7k@w4 z2lsFbo&=LRHoKXmE9U0KMfO|+b%+>TL>JSwY0Z;RA0sog(l~ew{RXh!?0A}e|L)lj z`+(JKf9ST&gzq#tbRT5Xz3sZL%IR^xTqoMl&@1ypcG_g$yrQYus?M*ZgYcs?v=`H~ zjb|%nxkk{m!r`RmdSHF&jRHhQz-JA_dS&SVdgw9a*_0G9!)Ps!kvb5Cb1LAM&~bZG zGC1RthdT^sq_8kj=m$^8A0=`~<&vgPYNJ~Gx_sLe$ffhx-Ss=Zl7tjpX)2mOfY&ec zNtAhH9_|^=pJ;jtMjO@jGf=RDK9wrj9=+2-S>cx$L%n_uX|iA<7K05;J~SQXXpK>N z4qT-KCVrMq@udi@Q)-MA_CRVNg3gFJHuHxiB6+AV-;C2qn)iM>{G!+F!tlf;c+oBV zk^UlnZrqImw+eC^)(xZQrvY3Rf!P}08f#Lm@O$;WMaz#RUv9TjZeWpGRZ^Bl1w&F( zM3BbhlahP2?E5QcI?lw@R^!KlRqr@v4axi-07{$d+f(vBgMRb|g3M!wW0With7seV zrBV7Q2ERTWf^)Q)%F<6eLH5y1|23~tjbC>gStpV=lARJq!q!%2ap7{f4acH(J$wOq zyXek3WY@z6=@_G-l^jP1Zbt&U;_hwnwD=t~HC)?zxs=05VQ&hTnu8fxX5Lo(T;%rw zn|d1+vTZ{FI-pa1`SC_pjYHG8rCn5|xV+XDy2kf_75&WbESh1%8Ed^)%^ET1Qs^+v61Zi z?i?u7viSqr9B~k}tK4`yJfbA>t^nv^PP)gk>j`^hcBlV@pEt| z$B0)?sJupwu@t{9@pHHLU9d=`S2{l@a|LFY;URTZ=2f0S-wZdXgRV(tS_VDIX1*E4 zKCF2qux3SrMHf+PY|fb67mQ9RpZ0J%@Z85~_>mO-=RK2z!Q%=E00C)jT%aY{vKUnI zRAhoG^k5J;8pAsEq_`W48nIxewi3O-rn_{r{zb%7;5tneh?mqnaq<&3BC9nF_S%Ie7tGL7GO+8!<{Ro|0s z4AIAw8o9u+ZT`l1jPK~cy9wJs+H50-o9#Kd_f8fH>f6^hk%y5h_>&mu4W!hypl<*X z(g!M@#^vz-W~xx^kZ)}M47!>;w`8e!)6dfd1;F2)1IhZkOD^uh(%}-Gc)|YZqmP9R zDhqDNn=~|;EWqxmeNQ0^(Xi1JZjq~mY11^g!X9vA|4I;SzR9qysp==uF5pc(?ioV7 z-8v~@qz4isec)AnSx@1(v4(yA7+FWvRFtQ{3E)*nc>?|5R@(kuBcNIVf9ESB#Jyh^ zz1QcbkDjb_p4K0%CaPiO=VxK7fzI^g$dMbz#KN};GNH0I4zD9&GyxXmoqlN59F=r1 z5^3r@nw?(QFIZUN#G77e|FbNjvc%!J2z`9>NME|{MuiB8FV^g37hdDa;Y00%@2tFQNONHf<%agb69gtQwis!`0ncx zgdVHWu+VKs#71y)9|5aR(@iD==k$#|+NFABA~#wEC|(6Q*SU`ge*XzlsLJ^^&tYQR z_JoU{*!(rOQWX`2|Mh+#u6q4@3JO$J4X1%>sY@!lV}Mm`>bd2GW;;s#!Am3lfA~J+`M!An_eqZMrE=$CdsTfa z<)SSDvF|bXrbAtFBzk)>sz!OMMg^-N*+Q5jt4zexWr#Qu*eR>ySi^<&#?V!C4~1hU z(ETl$S+Zr(EHRqAb({ijE{#m68uRXEU0w)j1tR6eKZ_1F73oU*K52?{{8e~3Ts!8P z^i(4$)NkC7Gs9Bftd4vo*1J6lgr*oqo$(tk3oOG$7T2L_B3Cdlo75rS= zel&{TxD!LYNSN87Tg8=f4H@B$(s8=}S4V6(mi7%XHzc<)oA?~ew7E&y%L8NK4IqiYc(syJp4uLe2^Gjvv+k`QLdbRF&GnNqR8Q1dqXa{ zsha=q#Ya?%ivPerB|`NAB(=hoBhfY-;*R|<3ybruPqd7%!3@L?1~1vUcz{@ zZB^BIwdh;!S-#(PDoB)amlV+wSR3xWy|DcpS_bqp9I-$l82I@Aja!Y^^EmVYFz_Ge zsxR&vIGD1&0tA9=J20RWxhEOWHRNAq^NYp)DoS1q{CDv3uM+Q)Hn^KPbYy3#|0f*m zcSQKov2nlTdIme`unb&0}QtUfvrrthTW=kj_`asC;xs~J@yi+i}QIE}SH;>WCIVk2@9#NeJ zHAap600_8CSmCbKhU3I!Jlwgj1L3d~jXv=vW~;6lxg{5%vsnKtujZZVbY`e+$QW~5 zRc(=fCNp$~zad~<(4axh(lZIw2XNwm0A`F`Pw@QRXSn*kuV-i^oH|;O4a9>(TYz!d zFbkwBjmTDoU)UMb)!lu)kb-6T0Bskq`@jkx=;<$KYxLaByt>n_m)bPv^W&Z3TXrD4 z(K4?@A1>r|CZic6KD_Pnn;V_Qup-!`^f^=L=yaq%AV+rx(>F9#nDdzI=rH9s9!uM6 z*fl}nE~icRKZ0K?#@(aEbrgGQnRNec=zv_SYg`DNsi$8WZ_b_Tfjjkn6$s}V^s9ig zwsm7w9x*a9c5kEWeb{b{`wn$0oN|g&AhznS^OmDAxAkV*`jXJVZDZcsh{y=P*SZeD zw5&UKtFe}u4w)3zl>+yKXyZSR+|LBEO*T3v>$wkNyAC(T3@87Hni@|yX_;HgGSe{K z00VV!5q1%Tx7XsbAUID?fdh1JSMO$Agu2sf1I$F7lU)>ecPiw5jp<15FRnnRPofg% z2~b01=4VNPpG{6t3W^KIbR5*y2~;Cfn>zT~E5sXBxinE*3J$9+YZ9cO(lXD?1oGMY zerA)}5MU7unX|u+AMB)x#{;esA_EZl+T9&iXaiq9-!LlvHaC%3yj7VjkYR?NQQS}L zFDF}SU??)14$G)aZUk1gF@kw2*2|eLCAohctHmyQeJ*yasUiZM>! zI(?&oto{poyb%SsTjt|{JkHJP*y7PazOmH2-7gwIw0`)OOFr46;HS*8e^z%$G5;Yj zXCQh(E~}o;{21>wznHak)k31?YRC2aHCXl@E*M_$*B+i6@K_g4r8MTW;jOh+pNl$l zCP-=9f7E98e%_7Ud)0g*SS3X}v@|}3C^l}cICNv8^7hB|Y@)kcsEQ48)1uMfD%rLd z35gDE{*C9u*d{)$=Yx%|uZE9Bj>2_jU+!bom&?CY9G)F4P&U9HxMXU?TiZlLn$$S0 z@@^)5(JWVM(?OZgcY{vn%yr~TT&Z#J7QZ+8^YIjl4F+s?#wClXQ;Th6J&rsI)=Fnf z+(K$wc$PLGb{`yOdQri|KAauHnx#y zi~a`-PJs)1{@d~rCQjHkaD&v71IUGs&;}qt{_7g2-VJO}-vK5*5JCPu*ZknH4s4g% zjo_}&y0gxk%kkOKUdmwr<1m9kdx%R6CckD?yDK`&KBU)odfCj5!B6{RNB_!)m7&|81cfWzjxb8}2MvGFn7kpNb-{wnh~qNvqG|8_c;tWK%HSyRqdz^Z?;nF8!i z8q=vMBQsNZVruI?gVD?{L-h+l;v29rWa*pW&D|f=$v6{#YU-ZVv*u5sduuyq{L8znO`JDs)!xxvfltv7A5RW1S)4))l}-Xr)LQ@3Ydkl z_ZiUZalTP}&*THc?W$@xaITcMT;V`>d>vm!MKPkgY~`;AH@HZO0a*qf)xZ}l=8)hk zaH!!bXT(+_l0(PziGE#u%pK(2w1<~W53SwQj*Ff(zB-AlWLFomjcB6k(~W;bIjs&C zDA$lcwEjs*(y!LIJ#W*n*)rB43I>G1vyzXQD?vydfW`6*@jy$9KSyC2i~^WA&Zk`> zrXY2~3gnuy`yNp%ye?A1g{2YD*MNrZd=mqD8nKbe!jxi&is@>zS)shej!y_O;RYUxV%`aank^4ZGqH}0@G@ooEHG=7>^w_UY$}EOh z1o6t#4t_PdYk;=Z`YmUOGcLv$z5dV!jeC8to3EBwgy;RLL2h{uq%%%3g)mmu3c3Dz zPK`-}T8+psbGcyILIm*PfQIc^X?k+!9#Y-+GeH^pA#t{81hkRywQ&w3@dQYTE;-EU4X{@uji#J$H%mR-35$LF-k%`HN zQy?hsdD;8N={rW#M+<=)MCH4AF+YZNP7Ug63UF!9dx=kkR)wM=&l3S9C*&?uuYUw!!Dcf#txx)~?R z!znsGw!b+M)QVO-d^;@NeTcq=9;W|v>!~0i-r+y})TlzQqB31qMY7%)HB~oGSBPeq z0}>@X>btHa2Z2b9j}e$i%A3m!n)ywnoN%Ex{_q2;5=64D*f3%pCK zXjChs_L6On`9Qh|AUGUtxemhKnIb&NQ8WPEE^JFG5;tl~6BBQ2EwPUM)pwI)pwPJI z?5{q(ai5Fhrf?S2R4hkJV%47gHBlhrXv*{!awsKH|~XaZwGlZtP6{Xg!501`#T+Y+)=TDi(-x~ zzfcHz5n3k%q_bDya^9U7PA`=m&%R@Z@C+4|L7QE$ah zhivVS@g;fZK`*C>QsNHb0p+Rc1{2; zOv){gfxd}nZI52s7cNz5)bDv-aPuj)VjlK0$@Yf&RLXJgFIu{bp+^_J6$=Q(gZrBw z*{6gCAr8Yz3r+Ze0Lg`+ENhjFtWpX?W0Se~9Bc)VKl$j)bans-|Qsjv9SjP(RwZ4MWN`R$CG5JcdsW zUdHcLEmY!GR0>RZGVPl6ns~SMt@fV2os4b$YCw<{RUQ!pTObD^4-q&9Xv)8^O$Mow zXq)+6x*@R$byd;vhM#@NP6D}%bi@JW^JAJ6UZbOB|A)%yBlsgr4>qpWby~|Gc==LI z$HAm-ydm-%P@@?VVaUl^9V_J+6+0!1V%-}(eXF0M-Ib=+%TvTnNCab%PlRXk!ZO zZpmt8uDNb|H(S3ed!V$z0o^^AEEE{Sz>32Apr1+HC-aqenX3@N>RW|;2A z8L@WO=S29%nQ+6~{$OZqP&&#{yo<-QDk;rOd@A#X!Uwl$3dECFm_chOH7e`u$L!(m zfI5a>-%>Epa<%KEWm*R!BM5Z2HmsA;j1^tb7+=oioAFtph+>eibSW}LOb^I%WPe1i zfrnizMpmrPKa=78?Kv1Rt7YW;pf+%Q+$;<^NH!pw~r7lV*q%@rs6JGr>W-e2u-MeYKqrCiGu64Om0F- zR;ZnSnHfO-TRi4p-rN(K8-K5HD9Z zFzBj34`l#}?g6no)b-RA;8qA`ES?Yr7^ep}mUil_EP^mn9Ye1zH$ z_Uvl!(I%fOqwfG|YJ)2OXK?1^t&GB_K};kUPq~>0<$`C5~mKQui!b8M-t#9kj$ZuL<%QoyIDFm^*V@CJzQD z!LydRdyU}t<-8Mq&8zA{4!7fjKW*SnHdIT2&scFVzsk!?X}?4{O2K42=g7ZhB#)Wy z-z zRpOa(3^QFIbU+^$x$rsb`sB!$Z-9IFH55DgY-{Ga%pKVU*|!}RAI3dzdMM0B8^r#S{iisX?Pl)txkbn}f7o^4gxmJK&80GUmz(UXwbV-Feu|BNcm>^Az`aS_4NU_L zNyqRbqGgn<&Jrxdff$0qGg}|JH2%lyQ{`mqCNy(cjNI^1TYCbMWH4qmB^6p^O*|E< zaw7CaP=g_Qk+~udA0L-14BhN(mn_iYdHr8v#T{j%JC1Oj&q7X5GV;IxxYPvGnZ=1B z`{1rsqu4sJXeg|ZUwbSy)4XQ@;FJ^*fqGIHzD3yQO|ym{ki{ROtxFFKSJlI27dB3E z$)?M_9t&9{Om7Jd==xWYP$MkR5cwMbmx)}R_!D=sGQf)i+5>epQfRPm!=M}E_NLW+ z?|uAWm(e92UJA3sULqS7I;c1uE*;#!_e(A|tS89ikyy3-;~Ngb@a7x=bJ0=EN%O^X z0f;$C9?)Yol3VHtUN`{f{uKi@wy+=;o?+7xzeY#qzOMz8`oF8jyM$|I7$f)^U>Sy< zz7GdWDCc4Ib&UbM^Hm>WG(+Lc-K{SF`G_zuZ~X=$(|QVs`!>3Pi07VhIKNL4m!3ny zg5}sDNI%60y&P9a9AWMXH7P&bE6tatz-}_L8t#EVba)@)ITCL{x zcAW(hUiRc={K6CCY5d8{E6eB90|P>ggan=$r|}4^`TqD_kgp-QX`!Rxc@pFnq62z7 zz>eWkYw@7y;}$_2pzIdoPduq zlcDD#-A?TVP`vSBptE42)}kun$9#IhiNo!HQi~p#X3u3UALnO&>dw8Ko3hN>KUf+E zJJeG2VJsJ-gk!V4|MBI7XpLS?AP|ECrxlMB0CZkyyQ_MMAH5<2=<7q?G_|3x$i~u} zE>d`4M(OPsWz4q}9Um1vM9kY^IVHxI>RmQ-st1?`yi5I6O5fYE7hWPaY8 z7RU(=24>@~A4!rM+B^Mc&IR!KgMj!W`JT7PJ?}G5@9nO-kmG$>eD^Of)pX~>riFKu zIFo&@CkP#@&g4J~w>K+l=;r^7o$h)s>2e2*;R|hhvQb35OzhFgIo}S%QjvK*H05Fl zjOd9kvj=hiY?+Vj5B(}xRaudm0+$){0iU@y^HfTQ!1#HWQg4^y6E02ABhR0HC>X&c z_5?_2Y?HbH?|nVi5OCR5{6&pdcATc*?A?pF>Auv#qMQgxK|)f>LJQZ9Ptt>f9|q9) zvIlxDuyj>b!MO>UQlzED|2dl$J$u-s%YV?+qbLd`|7N1 zgWxVzuRAh_oxz@nn(A~7P{xtE= z-KBbp`y;cx(*(g0Uxv*DTr=eB>z``q$F}1#E9*K4a>4M8w_4UUJ##?yH(x~ zLdddAtn&1d^o2ij8fpHy4*^`{?}C+K4>#xgv!n6&;UMV+srdI`oIeEMC2P^}%s~0p zpA>75J4n*c>C1aSzlHxE{Mz}Jy|TCpAl)2ltk>tP<+-YtlLJJ@;?WZAi_X--r#S5r zF=RJQpJdxd0k=ImH|0V`^qa&&)N+ZN@Hg$}Z}RF-cex0ov1OK)(x{P8NzVqi-<|!hp#Co z_Sw#&mjF#=y-UFvI2{>Tf|{yf0>J1?-XJa{1%WDv{~?9l@rUPEVwD-31XFr4j}cMr zIZS(7RU@{6wXBWR^p#P#3udr^oR(M7pMrXawac}CdHlciN|NipAHQ?R@6GC`07bH1 z`xhnh;1YLW|Kvb}OFaFTI>5jBh5cJEAKQ$_ydkHKO&BiWC{kDp-+vY)z6o-Y)Gg52 z`M(nqYhI49MJo zUL5j4<{><20-?>l)20`#UuUj`OusQV9lS0J;3VMW57MelSd2IHsYy9fr9i_S99;P?y zs*Y$I_)D(^@7b_0NjZExv6Th(Vnvp~XijaTc0!7B#_=ZLF2I2g+lmil(Dtyi>(q#? zEuA(yO(mWl2Q+e8J%+clu#nEXmQWw3MbSbos{V~}L-u*3ZY>+O$-M*9o=jcYy&?3t z?l!Em&I5c8Ep77wBor(6wc2}#BLLJw+e9*7AoI}vtS7cKo5dg&1cx z!kA?a%aawrV9JX}Eyl|_uG^2jFDV{8I=hxCYGv%zt}5-3eiJiwcQo#T)D>Pf&LHsS zfn+Or939OW$~8KQ5+ypQYuvQw9MI6rN8 zH1eoj$mwwQrtm=#knUk%fZ3Vi`^39^&5xN&sX(l@N?lrtWvuYWmd5Re$dSkFNSkPK zHQhi`NEE0>XnL*Py{yVqqqOt-u)hp6&MWl>73zn{d35 z5pl3I_8PcmXbfV+7tmAmOS`)Zx^T`?LK+SAL}6gCO7p&e9t)it!~SGuD;huZp}$p# z@KjIhe^Padxba+BP(G3nQiNB_bS6xphganayLG8#j^^%x3~GB)IpM-?GYvo~x!GD# z{a{E2yegsSt~9Zs?6xn}BgLTXM1@Tl!TipqM(0LxlKQ?Uj_;}l`_*`xrM)b}U?xy4IjiLk`!-XG zg$C{`d{iR}tCF|y!OXTN^}kwOIS09TEhUQfj$iFZYb_W$#BEsD!*Vzwk30NeJ4-25 z#vnDXC-!r_rW$z)!Xn!9y7Z;uWBK(|S7}A^A7h(BwB!Olbw{D%F7(?<49gRs>e9;G%`MsfNvN!v%*8uOzGT?b-PmG#lodT}e;<_IYX zR{r`_xL@j~&TPjL>UN_OOJ64?8>`SXO?2gm+O|%*XXkOc%{LC5GwL_K$?9zrD|BCJ z{ED8RT{Q*aELqfh&)KA->4gcG{(f+xdU9~Yqrib)ceXBILdj1w(&Kt}^wlw4@PY{o z50K-2xeYzGCBU z7HZ0S+b&F&_lFxc;F2QSkJyMRmEUw5zvsHVOJF`w@+!tlr+ltRpHJ4GbC z>(XC~t8ku;@;E7&7K`MkEhG*2rD8ZgJ)q}KHx{9h;_R9p?~D1ANJ*XL{aK8is#wJe z)4d>_mnLm#Am&};;9tp*y3L3{7v#Mea(p_PJX?c!$WOTOK-n%!o#3TbdC;90YwOpI zQ?baAAn2fqY0Pmx^Yhv3ag`-@hM(fZi%d$Ixe2mzisq`{`ka9rfdVf7lil^{$#9le z1dYjA?F!PLkmoti3fX=8@@r$=xXuZNPM8&#>Plv_T2Tap)hqc73(Z1&U zrF+i37xnE5W7=q29`t0H31PKb&^uIOFH2IXC-8wTR;68Gj4%Go-Y44|Gpn#VzwDSh z`N5ZFjl!~+IgM7*3P>QDV5ZMNvY;Q9iu|;PrHjseyY%=WcCYkN_yLsP`;wedsIN@X zRgskQu$59o-bWob5KA!1uDh#W$b*%1Qf6GgFU~5vDc308TyqTGescPws)1(Fh zvFUod$qfDt?uV8 zAM6#4R_5d|9wpqp9$nza67UFEz$FH2U>%70#It0-=9x%Y)|iy#*3lRJ#a$LsTDDu3WKSymRR zK76vh2oM+RO2P*}cQ?qE-u2t8Ux?JjKd4K@m_=F>VB6Rv&r8?b!>g}pl>js|ZfalY z?B|eb;x{AuuHk1jhq9Dgh8-7{rJkGN8&>oC>XT4s+!OYDf>yn~p}PNz4&j`SeQ%e) z^ysdOq5Qm30680@7)^v)$ler>$M+jaTA?=4msfcA5|ZDvEptEyVYrDqgq4%%Q7XT@ z82f(JP%dczd7iN4Byy|IY0-pdSbyKz9ziswa3QSNg^iK&j5gusn;H~QtEf^f!(jDS zJ@GKWK-ca}nY+cP;qmgC8-6u5n7ZfbO8h)sot7%@1|s z=f37?hk(^oEcKXQ8REYSwgDHJ?YW6!Rr?c&n=(Y*P&y$7@55b5Wuu=HJg229qB9ol z7d1UItAN=^evt0z!u6_<{(I5wAr6GkdhwuRu(&H!Ldvdo{%-6S#}+Q~TU^#$Bq!4| zNPQt;WU}3@)T6EyE5$RXTlog)(^fusXxs>^RTezFr(+)@DjdvnKgf*;aa*7csB;M^IZ)N*LTYZSC?hv87o*g zJlTaqg|Q&q07^In-Sw5oojtp|6$jEob;^M$am(T*cFkgJOT-*%CK{|-%>We#(-`iF z?nGj0^!7_{dhz~n2rF_Kf6@DiPqy0yPyKe1sI~@+xUhgm(#_bVwEqnM@-2Tdrc z;a?v*vlx|qisqM3H%zOdZ`xdVFB6Rf9BGwX*vXHHM-yA?Z&&s9_`lBPgjUte=Lg@R zSKV58E!%?xn+x!|&dKOk=5ei5I;vLR;4qlJ`4=cUNI*TQ z7pdNo=Bh&)u<(q$QU60~e!EH6ApiBk#(o~bo`uyE$DZyBG4W<4PLcKV(nlu6^hIwS z3yRPv+pXRAvTdvq4j=D3R_4|xgJRRUMct8F&Vzxc2_$3X_PR-*SvZAYsjuuU2GwdN z^mk~>A(7W`drp&Rxan+E#NeKsaMo+#vQ;fK$SLK{tt9QV+HJMv~(H_+P%KVKvFwYYj(A#%x zNjcf!$fYWm@!}G#@Hv)0DMGB%K{$!Qq>ahc)6II}z(o+HY+q`RTyJDB&@SDY7pTJp zLmjdZo&Ty5)(5irpc>5}n5rFfVPr=hLqW}{u#9b@#loY4d?jbl`38*C?>CWi~9 zs*wHS*heVHXo6#l-tj&>(bKax#iLxG|6ED`esKPVU(!!k-rj=o)UtLtolH%^p04m@ zkmes;)d-89M^ELQb=BOi&ZsNa~I=k=iBKV(S_ips!Vj4BkK8 zcDJQ9UY@g~`fUvDyb>=1Sx$Vl#{=EucX9a-8X{3+=OGn%Z@+M3e)py)B>=E}Lp{ZI8`pNVAii60%& zL2hNz$o^4DZkt&5mrBr;3w)CAlsSN)Ygs@||KH;a7A>>2;eYT8;A0yJC1TQqbpn`G zR3$(pFuD+SNgnj-L_&Jg&M5{)$Lq!=Q5>^K_wL^-GR%WRZu7HKg(D>Xg>#vVoc`e!O4 zFi->O*qPRSl{XnZOb5rIC~g{X|6ecx+>V}VwfqAV05X^k>}a6a!~HBFHdJCSR!8+7 zz3>r6b%5qf`eEvlNM^8{^r!kK_?>pEkJap5^F;h5(oM?g`L!=CwNi;>IbJ9=L5Th; z=#4yA7yGq>qvR-3y{d5ao-5`ZoM(6^Z`p-pd)Q5x-jI*D=g_lV$Dx>biMi5@GbA)r z?Uv#leGl}?$5M91uf4;X{H4jxn!YP}>c+&7-kyk2T*c5bOxEAZnfC|ro5WlnZ%y57 z@SXpiwUrjo)m12&wkDoagJ2{hn9m_14-cLk?T}BYr;~wiHt_!Y*EmZBwwuhEYDC{U z>e!l_G1K!})Hc$+V+KBI17Cs*X~q*B(;)$STBqQaQur;=*7g`T93*qCNC%cH-6iiy+X zzPCgOBq5N9F?vx@oew6QFJ7(Y5$0;U*8Q|F5t;CO{R))YA?B7&{de<8A`o=oWWoJ& z3@+@{F6>%ivR8~kn~NzS{+^)AGrIPTUO4l9SFfe0raR-80=()!R`w`;!GjF4;r>i{ zVDzG<+eOhz^he7#?;6*DR#0Y%D_i&Z%5_F^60BZ9j_6d>N=tH z28*7Z4onvGol+ zU~Gd!bAYc|uL@EMjgx)?;-V+Q8F5>Mt6VbpBOOIZ%xb?)%TR(?9>6z*ZX9LI4dX1V{r@_fn~U zG&AqPnVJ7?S}w5gV;CDw1cBO$AEpI%yj4vMxHD@mUua%Vd|Oer;T6BldD>xu5;3%b z-*IT{KSc#lGTsSQv;t3|8kC0-)@l4}3L1sRHg4qVM0^Fm54LFKb^P z%+N0Y(LXd2Jd*|p<4L}GN6iD$T!WhP=e^&JwEL9WGN`S7Hg$6|;QQg3g~Y2_>+j*j z^WaXtaaQIEsCSUX*%aYh?>AlI`BeSnM`#GD-LT_zuC}GbK7|P-d=C)Uz#5VuN430E zR8P%`pUu&lg31kS0kwtl=otTl(~0tkVO_%!UE$}aY?=cp>M9EZ8lfYCypk%_&U(9I!lc~EeuTb^=Y zJ5=XuF*4ZjKe6~yx1Am)rA8(JY%<6bw%N`2rTX_bcY!GDwO(n$+e?;gGFnXAGSO#O$0=AT z4Tu+&*hDNhUY@UgqkL2Ga)rBu+L-WNIZ(Igl3Fg)f(5*`P>qL+S5GQZuh@kp;AAJX^t ztIbi7;z5>!fn~hCX$HaMVAB=!&)IixG?WTCGYt8YX9dn$dSA2pu`qEYv)?)34L0)7 z2HHS#=washEkGJU56Uwblq2InG!f(Fj>WiJD)#xDTbwv_Z)=^awW-uRK6s-0NL8GGe44RO~ z$ouF+1GBkKuW7OMh;r9@Q?hpxZ5h;Kk8J%3WQc68zR^lrUxlp-muo~*0l>s2O`y6C z4O}^riWa>u56GrHDj;YLA$qNTzVHP5=G=0VfLp4k$o}eh&Ik?ceIgsyVTjqwqlNis zC&~k}xhvZ-_2}kS^NYl(Yx0oq^oFJxPp?!`!{LeUSFLE^9V@R2ev1ip5-19h#Yl^!7V zVw_C|p7VH^ir9zonIu2Seb#iJ!_Vk`d=T5$ zjx1f3b=7>XCP#%jDjW{K>hg^5OvKY2C_Fy{eG`&>G|uR9f>N8y96N$G=rHdnlIiMvnHm!~szDk`yr1N7Ki9?pa4pXei2Oj{qBZAWAA9CUo#fPLmvtwcEKS zFRCPGFPGslEyGqUJ!CJhB)gu1zcfy)6u_rg8Vwg@_#P6EG~E>EmA#=^CTX@` zQZf2Oz919*vDs1w*JMc9g~?aJfluo{J_&R-a@HE4zNp0HG(O5B>?vaZMoQ2ynX~t0 zm;E}MYLTp}&+)ts`wNtIk?e<8Xb;&bK~_|ep2@}Jcvvht07?JK?M7%|6v5f;YeJet z)XOA0PioxXLF4*)xp%T-+KIfNzceEu1Y#AhT_YKZV$cM8;?DDa+lI9`0*>G_T0kh8 zIcI7=>T0y7UBK@3Kq>iZjJWD#ZB%$@#C!<)<$YlQn`KF79{i*iyIk^3Gt~nRZE%(v zUUmck=j@(!k13+yeTX8r8yroQ&yq)9)O;1wC15hxuYl6&_N#FV+bO`!?*x2SkS;Cd zlOHCD2PN5%D6Ul28w@)MN<~KzLI<$3m0VAb8=nYc%&8`79qvC#DcQf}S8VNgzuchF r4|V$ivqN+w$$(>K+u3(n2Ut9e0B2ci?}v79A&AmF^}8iWtu!Gp)x4<0-c zLVJYzM5hne7WMMbUQt5$LFpjLChE--Qz4+xg9l|17}xqwQSZ^eNov?Xc<{RI?)PDr zO}^2C2N6gqQ6Xg)-QCpZ9;y>Jw?{Tt6=PKvT16^FC7?MBQDsqRjo7xZf~e>d=ehU6 zZM@N72PWI|{-hI%1k9$3Q_Je$D%*v6Mr>+Y^<81bd z&vkGH^#{9()j-0x1?n9Ek`reus@O=H}+o(!I$X zmb$J-Sw)CF_w9-!o9(7{N>0b*(YobxSVY*7bl1W7PONh=2*29hS|2>fR$5mvH0|Ad zqSnj{xzWK4C*ya66>HF|7Ee`yv`lgdXbDm6w+v9v;33^1M1F<@)xWX{XGv zYvcV`&KiM^!9t6nR`gkMkhB(F85;v1D=ljd7hQ?RZOd{tFrZM5gv-O@mg0%fnXbcqI=#j#nzRX-k4lVAic^c#YpAZ-`D}jC zQtlaWwg<@^j*C@NaE;Z`zerY7CDd*2r)@5#jHb#WV z&DAp&I9M8>`@BQ*d6yACz>A><0;V@w^<6!d&~v(~2c@M=RBd}yUvDO-F_M!WrE|s$ zo}Rvl`11IlrkX49rAOUFT7m+bqfR!djzUFaLk)iy^K`Gx_Ve|ZO@L{QcJsmAt6=O& ztD)Jq)w~9#i}5-gxVr{!G^_>e)F2zXJ!Ix#p-(xbEg{|v_EBqQG{*91pTXD}wb5>v z9Br61({!40=$(3!Xw-IUi%jH_=?tsOuhP20;dHlA%P%3`lbcwtL{90LRLLrt|u#i|iu&Dp!erfCb& zDVqiBy5#%Q8wxRN{o21x4w4f&W)wNQR;^_|2FfywmS)^W;&x=mQ?ILL6Oc?LX<#KN z5aB0iHc)!Xdt9cG61p2G1#1{YhoEf!<_UVGC=H%?y9tvH&P`83%{-^_jF!!*>)Vz!ZJtF%6#(O})-UlXQaKI60|Muk7T zI?D9x7L693R7*pf$461YM`3BBF6?$t+CSRf&mWYOgT6_H!WGTO*UBjuPl9Ttc>e9# zbhr6!!|I7DX&!Wsy^V2&ic^rk9+<#A;h(HvSYo(MlWUfi?e`x&uQ@F3S9Lrg?q5Ip z0o2h|rXw~4IUO$7{AqG4T{gD8XRo&i*L9pPlL+``js}JTBGUN`TUyBhC3EF$b`q-E zcF6GY_jRi9i6R}z$mohQYC>8JnSKVjfw`DuE&qF?2hvcP4u!|g5m)VA+Z`XHL~8a) z&{S=44czG_aIy;%8UYc$pM`zla)6NHWI{GH9f&%4&&^umx7E6Uu1XJwa;y2aJHjSzBog-I< zqdZ1F-rlo|mXR!VYAFg`l`K`#@1BIC-%H5S-8{Q`gyTf>BMWyVj$`m6>>O&{YUN%*Ms?GG0os+hZFzqeA0p-!l#6;?pyNatQe>M#ssmuOoiRd(|TXr z9^A#6$SnK!vkF1zyn1JxuypTB6{s$ooJ zCoWw!9SSm*VUrgi41HGrEv~p1t|jm?xc1flxg|M~`>Lm&_IP0zVzBm-(=_FFsR$98 z`pI#=b#Zty9j-&|K4yzw=q@qGdE#BuIWF*V@Z8Bs@~jz(sp`RoDa=3Li|8Q#?w8)e?jD90BrkusoZzv_&}+te*bbE(qJ<+K`LJB*RZm6 z8``{Hbe1 z5ybBSWqT4oozyp1dF&m!H`N?AVcms@!yhBJbvMf))*dH5_(MGYh4~LT*ocZqnVZjK zuv7c?kUNFXyUa3#3p1aElNPj4Ilsg$bQtjNR74S8;c-cpR%wmRIo{dp`s|zUN09By znFosqnlv?eUuyke+%Z(0U%eSBEo?116gV|*5R-UYhmyqyz%b#FrCcDQ`OX(o6< z;I?khyEZojZC8;3rA=3O!W{46;Z>8tPrd0yODt7kmGRHp8;N~;WNy=_a}Kmb{rVdp@t(i-+bx-DM*Laq6_LOs6ZjV& z?(E5Le5E*6K_d_LoaY$2F1q=P(sC9R9tf&$cha3-8#gWCTYMhKxBbn7Tn=YuYBW8M zBNbO*s&{^}t7!H!?hD?o1!?NxGz!EEiTVhnoyz*yt;5BpY0B9Gr#tX=Z3d6N&CtNv zWOav$ab_~|k;rqnp6kbAk6Yx;^P<o}Z5>3ciEJD7oKka%T#UA2yNnVY4 zt#(CmXVTxGTkrXU>D4n^t!72k4ueMaMLGjo+f&wH~L zk%071*(^EB8#;ID*y1QVK%aKKaKIv((%n#h{+jf~Om+IoX7?gxS5bIcz8G@8E@^$ht&6IM8j*|;s2ez0 zVOeQPVc<`Q&9?W*03ywEnzC77JH45EnHkc2f(%WnP%Y6VuBN1Lc7CYyqb^@&S2%!I z5^gkW#p98^wQ)e%B{%+lMO-t8WR$w(Lt>9Qd~q|UKvREA5=WqNjgapbn$HtjsBQv+ zH!>-e?F7v2-IO`DFyrN5TaOH{y+krY8ce&VCy)8IgRSp(nk_qNp56=hdM^h>Z_v#p z`K{|M^U(PWVvz54z}XE22yAP=@_-lT(1~DpbFxFrf|O^8A{Q7?gi7a}mZlD3D$&ei zRIz=HnA|_lLfqUml2z%22ly;baKk<87N+|DSPxu2;~hmm9NQr-;`}S9j=CWPgAE&}de^7d zg4Y+Bn1Wk^marWT%Soyo>Dg30$#q=<^8%TTU)tcpaFU#xWg4$yF|*V$C;s=<4)U`z zCGHK4X^7G-UfVcDdMe9{$MVeblP`3XjEc)OG#6=K3^Y_;xhfnhVH~cE<(<~6Cx4$5 zvku%|yTVelDZGHn5S&Vr)HAi^vsz zT>E<GOiilcSJuvqj^mw} zg!*x6TLg6PVDMSVaHtnYv85TQrj61%m-egW8rVxtS)+h>G9RvhAZ`H>O?eW|um!cO zhtp^+Nwolw@uWF5yVQ~1l@f-~n|5!rMu9J`pJ+I3PG_H*B6kOmG#d{l!SlD<1C7L% z)|n07En$e%g{?6A(miq0<32Vfe^=v!*Zpg9sgbJL-~lw$4mBi_Exyvsbv*iK2Z*)S$$WHy|$M zBtL?)FhkD)+%WIDh4Yj@Ob8i2XmT>u;qOlDB79BCuCVHXl1`S_EVSD6u{1bb9Oh}G zE8B0^vy@Uw{k_b(0FI$!lyX0xlL@$e45Qq_{NV*mNvAMac@?wKL)f2WnVo7Q@z+s*8@F5gw~psBV)7Xl? zUpXE+hB`8_7uz0(Oxtz{g$2@YI?Npd9K&t*Msq&B=%9Q%HBA0!H#zXsYNj~abh}Dt zThiWSF=51zy4UuxiU$FT18OJ^IMmQJ|N6FF)m@}D?{vvsg4~A$+F?^KQDV71TS~nO5Vw>5}0|bF>Xu&>P<4G}XI0TF~9E z&`Ys}Gkbe0foB8>k2jAu7Z~)AA}go)$D#eB{Kn5QNd?4vm9-SmRdGQ)u7_Qy!d8z_ zxX7=HJ|IP^w8Yjdhdm*le1fW%Zl|2DucTMIE_>vhuFqLR&z@?qoaoraS>%_rHGaNv zz$f@VQ)O7&aequDd4f%T48#zc6{6EsltBuw1@6BmJ0Kr$2aJW3=bqKq*raF_@juyW z53TrHiMvYpo`}nOl4q&TyuQ=FPd0YBvyqrf36-4OW}IAhM`d+%P?eS0K7RK4;sSE( z0*BmQhb-LQsCn0mU6^o;k|xC?m6qd)GlSeKB!e;0@Bv@kdxb+Z(I$)R3jDi%7n#Zx97u+`q#ZH z(HLK9N_{b8>L)h;2}_h()C85*qSdNw`mND{iKmP`<4o3A#b2HOR%Dz16Id2pL{%Bo zcB~!V$2s0J$>ET@Q<#huqhNwpLv*^mHcTCe6~V=OCWU~@@$J7cn`~b-|Js}lcPh!! ze&IUlNew6289?REg%~B15)q^`TDobmDGe4UTgb=HE6uMEA-As6Bt3$2)Fn7 znBE}ot&KR-`OF0YGD~F};Jk44CnmMtYqt7UElV7j%;$QV!Yx>=UgkJcwGtca)7t9U z2`MI}Ff6Rhe8L$FNKz_%l@0Xh3ktE>>8ZZ1upRZzB{K%S+#PN)yS8*j_iq1m6cA^eUMUItA4=H9NtQZD%9 zlHgXn6y!f?dzV#sYuRyDjkW!Do9vBOm;|M)xxlQ`4@_&QiT*ujz8*1@GIN z6mENyp)?>qw#9ICt8{x!pSaN>VptrpqOz>XGN`tU(AKh$Up+v|LPF*rEb$H(XR_*kdjsiUJq zOhQ5;$qJKdD%Q-}$c0^sHJg;z=>zJAnmU>e1$h)B9sxnjQ&a;g`V-0}__D28(S?=4 zQ@0_Oi;lpjyF2PGIyYIQYQAa#&)~Bk8{QiY=hCzmk^TTYeBkqhjV3zu=X1AW(XT1sGx)9(_rT*J=&qCa zVE-xf?)wk^5DZh_y*|+UA17#o0b(?i_hsR`3F=T8-23_aABqq6S?(*MH|@NgV28MX zh*6l3G~RtijkbiF0sKb&Zy1pXcL+2eI}iz@t5;;plLZSnT|fC?B!c;dUl#s2;I3Z~ z#v%+3f2*bJkj-KYOQ|L11OX)_fwHn9!k>RKTv`VRSj~?vX1c z8ToAGF0Zo^&#O&#8%X167+qhbA&tMy9;0$!dMsgwPUJ1=`NovQ~t=FRJBK~OcW>h+0*zEek z%JDb3_1h3>x0+W9b}vztgQm0eoJ77keuoj?{%Wh96Y)WasYJ?Y|Nepl`NiS8%jQ}B=&cepc5d#@|_dyESmmMJG{?`Z3?IyX3DHS=Jj_Af>u*f_Atvf7g)iiC^ z=BlWQiZUW0p^}I9u%(&GxsmAi^ECyH$ z8lynXfpb`fL?08;WP&EpelTeTt_4QfbiEC zIQoKX4Emn1kibq!w$NN4P58Lh#_hQI1YymkMcGOqA4~b_mD1&)I`0({xhug$ROEQv z9cp80Y9tI6Ci*X4evKq!%_!Y0z-0-BC11k3DiVYbk9)Q(yHohm8pX2o9PM+Lewaqx z3^yCey_e(Irc?R7yavgVz)AS_8&mECh0pu-ka@5xl`j5=)T z59CNC_63w!Ut*_jY;5dOLxt)O3kXZGKI8VH81vrxmAan4Dpi1qump{nNYPR%5K6~A zKN);;ZsxW8wmQ8W<(G=P6=zM%_}8Wzqd|-2jV9t=wd?|>LqEuG&jeq9Q2i=JJPwz? zeSVq}_)cbm@DD_k1D}M!ugOb!oL1i6=s7liFm~1qc(}WHJHA^qIF<$33thr*>8iUekpu$}^$OBs0AlC`8`p za#wzHKUFpETyMC1J`k^-$Tos%AZW4wEgqNi7SN0=b7q&GUqHz+793=Rv+QEB+&3+T2(tMw)N!d8+cIVbVUC7qV= z*-!uX=daBre*G{f!q3$9bf#Uj*j*`W~qB&}DfI6vYnG)-id@Av-4n zv6Y*84AL9?mc%&J+{%(F+4+!uqX;d>R-UPfY;>Q(pO#K>BSLz0yWzbGFpw?h;;eT z8e~uu<3i#YryG9L^{yad-I7nnr+J4J;z&`BCSZafobU9`d3Hf7nvN~ zI5+ilPK^BEKFmG$ofxJ$8od$si>EhUHOL=L5tegvtnSD&4epCOfcvI4`)*OqyObHS zn_v0aK5EZ@Jr5+K-u+P#;2sT{;XUpZ6BxH|^6WkihLqNCXRft?2MaZofv_|!sE7%XkLLp+~91a;Rh=(&f(blR_Eop+}68wl4Te0`sk@M5S$t)gvGy$D7NaU>D!)-p<8?khIXQ9^4K@GM8-I4}D!RRgZ#Gt7e5~A;V(q^2GgEOc2`v{0 zf1Ky%8tqvRAEr+@72d?p1)}J7YFCUGJY37uAC;Sq~v*D4pW4^(Uy(aP-Hj_g+j)DBlg4c_g zx)|0jUhPGi&efm6a@>Zwglj8nvQNhDnK&KodB;Q*O3-Ls$nU#d*_Ypa8tgE^Gxqp~ zY_d+N967Vq&3XgmIV9V9KVO*Toy0xj4@*64n`4Yl8(GN4NfRBZs@!`&Z%TI+Oe~oE z2|Q9)F_qI*KTFmXkA;P0M~vSkjE`W;nOc}1B?^rEW=6#k)`eD%3Lkb25^uJ0ReBEI zwp?kBuvsh&kA<)Mjx`&I@J&NeCle!+q0A+^BuXU9PTkKC~o`))Xf-gUIF)zu4WY$)mup}spxOi z`0(856z3W9Ia(I-X0nUF3#0Wq3@JhH7xb|+q9-utGVf_Mtv34w+5>phA>_u_w`*&a zl$a=q(Oh;422BC*%5~gP?0WfAImk%t>Qf~ww4)@YqdvYPD=ZUOr5WW$dWTy~u<~a2 zwO-jeBWSqvIyPqcT#5R{g6n!?Ub>gbOjUR2aVW)4K@MmSNi!TvyHZmIBcV~moU;#YU6+JCX5@co&= zVTkqIG1Qqc#E{slo2UPWbN-Qri(V1RALlra*)IxY>a7tlZe(m(>vC7bg0oEk9=$56 zxk1M36uRO*l*X^TcfX@_uEy%_F9az~=7bQ-9nMjs&bwk@*+^(#0`F0%h-JYhx!TBG zErv=7Nx0p{p}FMSwCRJSFjP5^?yGk+5**T#GM{=qf=ZMHF7R%8d4J?m`LK|&O-#?=&vAD6i*WOoPw95qvH=*oF){=O?-hz0`7}V=sdMGwkaaIro zY8=>{)@MfLCc#}zx~!75i=v~HmliXcdhr_q5bK)d>rk?U9DdKHEVi;QQdYOs&?c0l z65-&8gfHQsEN+@Xr*qFc%UavzPG4W&lDo7yGlYLaAQzYQB?XCQ9Ek{*mEZgMN``RI z#;rqr832)2kCoT!^N{i!Kbb16y!`H)P=m>rE zE?m@436`t$^VX|EZhHg&bZhb8(1*Q^WE~DoH;*~MEzKk0wY}aAB6mV=!31P9PxKrw zWY|hw^e^QKBh2Ay)1&^7V_8R)c?Zy*z4~FdiAm9x3=$bj8_n|>Fq1xx`^i0QcN<<22d@m z2F{>e*YNAN?_GtT@h|njF!1HBZ7fyb=8mZblnG)L;=$X}8ZkW%ZEWmE-Fj&CczAX< zkNU(@9M7-Vl4wSnYaurjH%S;rm;4{4p}Ka8d0sa+j_abc&icaZ-smcsVHavQQu7mT zLFe2`qfr(kb=?`7c0@nSc2uq9QN_i%hpbpP9p5lf-y&n7$TpR*N;Yphstq??N^Hl> zt*p|8RamRqB#1rOLB^S3`b)(v?aT#uRS!(6P+554TOI!k4V z8s8r*bI*_yR_$=kNrY={pWPC+6FV(U{A^^&;}A*K4^RJ#;uW-~K}Qp@l7JVgC2(

    VQuwaZT`2f5~D(0gp2W?>h$2bj0NuwaNW1!kCsE#kL?z0(oe_rx+7WLw5!(Zg}S8e3JQ&u zc$I~3%j2z;*G#BArkStHX4dpP0fg98*CS5Po!8q>y+d|KpV?^A7kUTfagfw@_3OwV4V5guvg8;9o|tFPIQEgYRob~7$`-{fZ%Xf z3K3xQnlv0wV)mHZT23PGpG#4xi%`4zb08w8++8HZwkFzUsq{vp&cIk-fpFm=g_Obp znOoxdYgA)yIMI9-4z*g{TEaF{l2lSw6vxC_c!(MxVhhs(!$4E9iLt7>3a-D(U!b=r z?-a?(N$FHr<9Po;P5Is_y9~?S@rgdcnu)*pZL!%KCu!zS_6{Zb@iWvoy9rS>s%3fi z-`oGOYdDz;vZbAI&K09F68%rpP%cPXG9py|)z!%9$>P60Vj#ahs$W<}B6@%AN+_k( zCjhUXpY9-j9rO88kJTaD`F>CQwtdvVjt2 z+xt<=NXiqzD#+o-``)8uR$vBD<=Q$bmvf%G9lH6ag$~Z+aqKcNf+Jvm-W?<&AqftT zsf;7%3jQbaqwtpSBM~AI)~wAi=kAo(WCFr)heT-5X#~j;Ue>yTNc|MAgZmlz-TC~R zC+4{Nh%rLW$bMq+1sp*unM$Tg}Z^~-();xL{ zOOZ+m{8~90FoFz<5xndOoTS+R^=cpfDhtUKT9*HS|i>|K(=% za+Dzo``0txzYfu)CZ(1n1i5W}`Zrg~4E?!TKy(a(BR3}-*_ zWXOa|gp&%|c8}*imIx=y@l5|BV^@r`R_`bae$k8BWwMJpzeXX5J{?*53H1I4MVLNk z=(T-{f5z`J_N0Pyp(A-J+mG5EQ{yhMk4n~oh3&Y)B~O|pnB_Fj~(^4`S=3450Q1iCh_(9kzt4Kb!lXlQI= znv?pTeQK3Z9o5V0X%KI={L%im+r5cKxrFPm>EKXSz>MiLzW!s%owO*Eo=ky+-#7GE zvH&94+JIeuN1{J5 zIw6SeqaIewF7vi~Aef&np`mu(?5jq&cpfT;9DEQCqkJ8x zK0s+petEb$#4m(K_OC5srmqt@>>go+!o7ZgrC3oiN^|F!Ye(yHa8LJ*irnA5ejc41 z1h1Faj}EetMjaU6pT$TTqHju@nJIZ)l;;<}>0YU?g*j~Hsr_4Nu}B>@Has?2ugSDdvc9Buk>TnY@ z?k^ppVVC~^+%Mbb`~?*KeoDLAFW|qgH$4K~$AKpYcxE{Fj}3%;{!aw=cnbfwUoFuO z|K|`)@Bgo&GBW=INZ9*4b#U-~en5o&KjsJjua6!7ze@mWgQX9T&icVBr&8&o1H>*^ zce%^w60=cwELaOEoZty6HJE0zWoLeVH;~T_R0AuU`f%SZ;a51j0?5ve8b1-|Zp=ag zXCk+__|TNsqV>Zg`@195&x~evcXF_aK~_e_ttofY-iRj01CkH}Dzok~J*Op|O#SzV ztSwpS<}t^v)Ey~x&V@CQ-6kyv-kq32HPlHnwv#9g)!yH$JCT%m1!gh3Y=7gqlVUrq zATC>ic8}vP0W^pHw95h$*f@ACMPMc^PKfLNX^7^{_N@YsV~yM7pt|mz%IuoSzJS{6 zdF>8QP)JCy3o&aRaJ%vu!-<8QQkQqLKl!+pg_@#1l0GYP}~vckqK;h{df-?~0** z^L+{Cp3^_0>QM8uy@npcfZ54Y4-nGMx@LuD$f@BVfNJ4D;2~W1#Y^`Ao4C|A3hUf%MsCaCT7ZdS>B?v7lCy3qB-Loy+-!&9_Z? z*E^oPX=T?09WKf;7#oUzIU4mlnxbi!58?)%yZ!oxCLL(0q-ila$C*wkpLl3D$-C~w zYi;U*YZ>#K&E&E@!|w4_K+|NYCcD-COqTy?_-uJNLBUJpxiO3Y{scuXg<-DBo@zFQ zM8IwmK;hb&lrvAO6kuSfN4_>*1Kli1Ad5Dgxhzi)BZCD@7IY)pCyt$0S=kh4bk4NA z&`>uQP`Uc&<+0r8YmeJOQ7lyN1y+rXi;GKuA8!@*t>H)+;95MA%ku&QgKbo4$&fMz z+j(Ujv6ds}Vus@=D;r23?X^7g*dislfu6}k%T1G&G&KSC20_^=ZbK0iWxBm4+b*Mn zcr##;4P^gO8c~VwX@jz7!yWC>^oi0@TC*utkRVV^9}0WA!CnIqtehh6H;iI*@XC); zGOLVMxcIoT;Qfmb9i-@6dXLz=^*RfH>v=32-%3z{ zAV|lA0EpgAo5#Em6$h2=c^<-P>l??W-&^06wKTxG7t4OwN_J{PYR~9XHZyf@b}c%2 zINn0FS~bmHbF?RG!7fL024$%>AmIf2<@v7wt|zPEFz^0>fi*`!6UlYec}h$%FqKC; zXJB!FfXql`yEWn1WeWySyHON-08I||KWZWsbpmMttwMYLUIADQ z07Q&cyGvIuo^sP3jA#K$^y)j!D%>2;lO2fxHWBhYw#l^QJ!VzLrUJ~+m}Yw!E=%fx z-mPuFqYo&*JkLEaSDL2rWbZqWn^qSCf22B0&B)C3be{iMC@M{`CD78{(-Un|#$|H) z@&+UT1iLvk?N;G8C&;LG`}$+L2ArY4!NFU+AqIW;d{7qE;And=sppl?;gT~mXQTt? zeDr%5OUlzlK1O2iGGX@5vTDrtQgm)5p@({#V~Q~=Sn522<31B|WW1t9NAk3V>A9ILHHqbWm7quv6m=uqBah58Bt=LiL` z_|VB$j^{S$%)p2`7PsFUM3)~i3ej~-1qZ2{!pD+IheW zSf)YUspbMxqyW7OOWA7uz^*{pbn96%TBnr8dc7LNnQ$K}4Cb@3y z_&>@gQ}Vsc6t{tS5y){ai3^P_Ut8lkuY|!fVe}(Hyv=KWNsuk!*n*fk7UA*5dG>)h zPMPVF8PI{xU@|wDhJ5O%EqbZ7b<}b3wfFYfX?)INsXXYSbBMI$w#Hy{2gTQgp|tar z$CH6}y~UeZF3)i!Ky`TowaiWzXQ?H(*>TR>E;tBPZ4z=~S~dP#qnTHh2~^bWz_%QK zONoc#ixi`AT+)}8Kv4 z5z>`J`%zU^EDOFf zdsaw5kc(GZJAz)-^pKBCx_sWrkq?4Tb-}s7l{dtbOr|PgVq%EK%S3INpxL^#2_~c$ z&ve}R8@vlbdYa4T1s!N!Ag_2R^YcckNhjBHw~N5W1sBEAoZmM1>SYe$+Ad?Oc@vjE z*RyR8zX*e$oXsB+C=iD(WRFz_DVVwz`T-6w$^C4mqq<~Bx@TGhGN80_9(D|$Mqk4g zdcft&fFusyV+{^Y5UVZ=$eCI;2CZy{u0=@U{f{N_;oL~C_KU3L^9Ggg_v`y=jh-*uGHvS_U1^=sybiBS=o#!) zuiDV6M&ri70vU`8rCF2$uR+ktD5-Gg;gMcFH9N+}g z(OOBupD?N*--{o*@b?x?JQdYHRuT-I-Yx6t7KQdKsIVxdLk1_BE{ohg;C!KSE!@5e zor=%;jbhC(fT(TEj&ccBPLJm{MK) zOxe9z_br(OIr-8Z9feXL%RyQZ!jlLCm&aE>tz(~%VK@a@jhPVWH#v%L8Pc3Zm&PfU z3cSh=X)D!=^nTNSuxn_c*0V}8a@oQ{mTb6@P3a z7T}~=g1s=fBB{9an&M$>wVqp|TB3_3&Vl&Q^Oa{f;;;VV?RoGzX3vUUF@3ZFz1Q72 zw5e_3jA_blRq0#r@rzB_k%j4gw$84MI_jq^QLl&`rS_+lCmdZ5z5ZeklAbl07l$W* znfnntS~2-0m;`$AcYv*?`O@#~YL zjz)o&Pg zVl#&A)zfs_?A~k7m*~tRiVtVe=-``@IDavHJ;Xg;uT?>>wP^DBYIz(J z*%c}Jgn?ARV#r9_r3dV`5|!kA{P0~-2}Cq{hF9A{?;$ErST?9)N)rsb48Lxe z{2QUWb$UKvmym2RhN5yb@fUZx*#`X_ZONeU*>*SviC`WTb}zg=KZEarRMkw$r1(Gp zzV(U)MW(GnO7z4m&ZLvY8K;r)IcN_~-;OZJvdWNUs%pY3iO>YKJP!Xz-Ga&vEzSIF z$3fA;7d)_{W;Q07kRWz>V}8{^cwHLI_<+lK2Ct&z*s)7{Y9}hZ71N>=X22?*;X#{S zpqZB|=v4P!GA~!>$&ifB^H_}hv?wo8dw(lwi@1Xa8mpszqs%^h$*0HP+#b=}Qx=aL zhh*tpfBh<_?)FG>F#tvm+zp5w=wgT+YCR=EV+zv+qp8`~9f^;=nh)&mMdhzVjj#Mt z%<;S}3p5Yy?5RVEzR82_JE9SZC_Dm(=3|IG&Q(oy^}QBGzhk;_d3kO)_+EJmm_Rjphj_M2-aKRA^L0PEh+Js&_4lfk?#F6J?rV zl~HOM8`h!=EpMO#xPQ`eHz($O^EdnBj-iK^=4H*_3o(AOho1x&L#R$G3kPc$-oA#M zTxx#IDhV<0@1-i2Q{usxw0Gu8sT6pM;VI?xnU6fXW4`K?x7)YxdZ5TClvYQ7eciuJ z!K^M>O?H*c;y3;6(7r@iaf26jNnXwg zJKERKcREM!#&DrQ-`Mh^OTexnOG~3U7?qlo9JaZwt*z^6W|a8u5#!3>XI@iE*6;QJ zs12;r#xY)dHU172?qmHQHa1%>h*i6bZGN8LcDxQ8EAiFUd_UC^eX9T^(={ASJqNrr zj#fUIlzrh)gdSK_#yC6k!x1B2A9yr#Qj0v%Zj72-0`x@rDq8KvGIPw*@_{ACXlEIW zZMlQz_d5**y{4c3p8iB+ud)k&S;XwlHkzs%hGy}WEWKFE`c*s&==lwkv9%cGe)g#} znmauAk$9~~I72VicKG@Ul*#?U^n-Dl?90F9wxJSV+=@@^3262%DGg&~DwbHNzn;8$ z$3N}k=W4rSs40&LNf)&gI21FiNwxWA_8u$yo*16ABM9|f~V|02X3S4EaOQ|-Y4DOa&d8X%iAVBY3yPaz1ipqV- zc{34p`&70pS~L-a40m(t92=ypKN%i=Qbk^TpIkj8X1WMEuM`ODEC3??f)orvFFH-Z zFKakK;X^FWc$OA>a3ejdx2m<3UQ>EEC6!9Nk$rS33(ECGw6C+@4UILGKdV#Eqh%~A zUEeE@eoC;svBhKBR>Lq#WNwg>by%ad9H?ZU*j&>J6R|PywthmMw_bR>;gW)d#YK?w z#oG?m!;XLiIr^a3a`R)jRON<`MY|Jfl9OH>dh*jy+h~;`cHMj5oCgKVf_>fUR&dwe z2!`dJY`f(g0*{`5b*6yQRcuZGI}HqGY#RS=+~Z@D-;kfb0kf1R@GD`y(#Sk!lya@XMsb-$PuJA9&J%sklWgxUkjMH;oO`m zT>_dcS4Q;|7uH(F^!b?L!eN**82QK2C8XUlq*i@e`@eN>bZm9`#+8)dA5~!Hnh6~@ zv%8b3TX+n`jw4UAez1@qiHgcBldM`Aj~^Cj#y|%a>R1)sAD=uTI(K2P@V|NUY;6LN zmn}FpezZClrWb}g2E%J1X+fSRt0xG%dEo7=E(K)>ieGkMKD*qsFBX|0emnL%Ex)+8 zE-mGkU^pF68jOaJ4-6S^O$rP^oCh?FLNo;;)P~30XT)oz$8yUkFMBJq^)!-TV+vP% zT$>6O((mJ9KJ=`jN~6l_^+k5PBUmoxyoZHz+DYR&{5g29X>-W$X}tXLCFC%Js<+J< z$wp0wx`mXV1u!QVL#ASIw2OdW>Prun?5#zxaZFMlGy=iPI=6{>wzj&hsz zsHxqLZD3hTO#-T>{Y-Pq80LNgTTgUcjPDIz9~t9}rHbFYbVXOt3k1>I{xlqv&_xfW zomS;w(KoKFl2fW}8_oDua?qkD1HJH1Z@Q9HN+fg036lAdl0(a|a&cWblQ=h8Q|I^Ci@M z1&RoHz3ZocCnqgP2~(@LZt*7JNKU@X3t|>!=`D6-eNR>X&hgHbJDn_{66aUshjR7X zUi50_kYSG7Im6fMS zuT=b&m(tze$_G9nz-3dc_^MB$6UyABzS|$5qIo*?Sf3$sheRTzRtg73W^0Zd^(!~W zq0pQ73aMN(myUscG3uxzf}H`LejQVy$>m2~3pFDUihB9}ue!+xji|oWz1|M=C;Zsl@(!{{0AbcCr< z@Qou4N`7cr+g!LGmf*>({|E{_O-XTA-exnnva`OyxHK5rEJf4IrXCrC-3bfgG#ePO>T&c%I^@FPqM#Y}sblMkRRHe?S>dnw}st*F46FO?IWT4{39; zq){Bw8D6ss|3A9>>ZmCHbzc+&Q9=Zz1VmscDS@F&lpc_lmd*ibkyfO8Kw{|b9=eq7 zuA#d_P#U@K;BW7J&$;`oyUx1%oORaa50~qm_xUG^?U(Q)a<=MmlMHLkyD)Jh$xzRiJAlODHRaOxrV;8n8 zaqru!mdl?N&HGY(5y?%iTCGTz@^)pzWZ_hE!i&c;b^^z$%N6j13K-(2w9-;&AGsQ< z*3aD?(sXl-Va9mui;a&uDU5BeUKhOOH{GjRHk0GOSDeG)QX}>lmAWFD9bieQ7@1^p z84xWP)+8~HVLN)0(lYubs~FM;3>byxIix@!uv-nuF^I0;EQ`Psv>e94tgQC3FPs7u z7x_DK&#S5~uUech)2EktCKivxQ7xBaB1cDKIb32va+(I|Ki~|ghfpstH+N&Q(2vw( zVpm#yNiG{yu^z8@wEuKs&3}Y&zxKCKzDd$)X8g46k2~|XhWGv)zB9b1C?!ZkIsm<* zp)C-7b8N-@1FDO918?6<7tQPT1OfS9?cXV)0i!S+;P0Ncq}5+}K19`_lV1O5@UOI> zHw*j*=qQL104baQ)eWcDm?qka02{uI`r~A6{Y7>0549 zBWn2E*!-icG~oQ!aZ=}B1$Fhq6S%E4)Napr>5=YWue4^$`c=N5FY>9%p>V0O54Ih( zMEr zhjzBOy^ukKih`MP*_bH7tITxON3jayGER+RCw#zs`>;{-O#?^A6#UjzqN~CQA}!CP zHRDOffhejnzC&NDJfIvgyd6|qGs&Dsl(SSz_+g+&<$<}+*8F{#@U+9dJ#emFi@{Xb zQp|I2+4a$g?-%@|hoNr5&mxUc1jzkm+dm}h9HiqidN{ckPv1pKAYf?9zRyi+@r-RO z@^#le<99_@Sy&slX*Hq@)G^1sd|!SE1e+@+Dm>vDjP0X;Pt5ebrdqA6{bjIG56)}^6H=r^g5?}m&@2mx)OP4M@I8VQ#%l2)NaM{Lt zwu%br&CU#&aZqltwtfWHJ%-m9Wty5n+y4Lg2 z)$rZMtDPA+puJ$agu;2878N6CWQ;wvXuI#uW4Zglygy2l8HJ<}k|8rLASoQl_!AVV zk!y&1Tx&>L3v_YPxfC4G+tVti(RqaE|+B04XV;y}&aT^*20gA*=CBKui$iZp9-5k7$--tX$E>!*` z8d^3E@J0$G75hdA@)`ru@xMcu{cEKpAkS}v?gNYeBMnn{`oBmV-^}2tPfiYRxbg>f zmZ}$Yb(?vBXYS0-e=|-`gwwL zJm(wTvG5WFJwH>+X1WASw-9^q*p99z<5LNYvFFq)&9%jGEAD)AVy{cP3m_ zs_h$C#l^9scVivvo;3zCYcz|`NJ-(^mLP-g^193sGXtgF#!0{Qy-^BK5sHLWy>qe} z(2vmZRjNEmsIZssrPN)O8JWmR$k^D(c+!{-gH_PzXrCX+}5{n6XRrne>bjU#b0k0WXDKu3KZ-stam?j1UH)?2$it%kEtrm7Y%7?$ar zRbJ{?^KK%!41TK_()_L?(1tI4Rrqc9=KA+%U&z~}X9%lPqR=ZV_d4I9tX^Y7VN$UE zH)MvOp+e3>#?fZ#bdX2Y`%Hb=)hTRCVmXrIu2|zZ6M8JU^`|ZGoZ(;PBS-1qtlm3{ zmhN&p@tT^=;{KRg7?TT8ls!xG)-V{Mu`3=(Kaa?icE?Rv+Z246h!Tm679)GX`svS- zDJXb6RMi~RY#ofYf;Bh>@IuHcr=}CC!K%z$w~qAPs(pxi7%;PN7|daUp~8V#?++h% z=i$frOL$Q9w(tcrxvXLzrb*Ih%GQ-B3w4hQ%72SqNS0?w?ShZ6gH&M53(^#r_j@H9 zTE8ts=^Tc;6u@cP3qij<^BijyGb~1ifYU5CpLn5wn*+hVFNt$* zarsu6xQWY}2|Af%(8xmkCbJO}-4BOK;CH?l&0|oBF4%{j1N!0-?K|=@GnnnZWW$kB z3SYQRfLv6gJTw?{E46Q06BbE9CNKc2T6Yx#EW41bY=|+lsib3EiRF=XqfMF3blL{1 zp%ZkuF7$K=q#AddVK|)>UmRyk&`Zn_avQ5OY=0uYK0#cA_jA*+{~e_0R4%2l1!eYv zOwRL6E_^4-cArlsj0h^ZzfV!wX~9Is+{0E=rhhAB(>`YB(yk1!ag0@VV(bamt>yG6 zw8Fn4Ixci*a3Sz+CNP8}Y61SfvCh5SzlOjU+}3+<#`92WWrk%}SoW>d^`WzUWpD`3 z{i!`u>%9b~X02_GN+h*zheKxRD^DtIhAOMnJ+?V0hidFo=WnqCk5scZTo&Llkca zLA#&uJ+}i?ZX^9{tYh?!iY!LFE#kE&?M+WA8)Id0O(j3pszS%N6QfpD$z+S(xu4>RU5po%(NG95 z>S!LG-rX8Cb5pav>>&^*g{;<)LMMf_Wcr3k#}{{{#F=*!dZxte3sOU9G+|%Y4T+B2 z9rM)e(O2DCGy0S=Q-}M(cYHlcqc%w>(C>^R>?DNC#`|l!pF1|K*wOE*j4F?ZpLY#B zPM_qhoHoST3J`L!&yvks`KoAZ?=-#usoSdP^0@9|o(Zo;zoRWVw>rI5n11SG`elja zg;D3%!Z>7`LsnRe2B(XWI6Q-C;&cQQbU1m|;x`bMDJzTkUD2iTxP{Lm58@kDJ=0T~ z7fhf%#|X>YK^jHne3pe;RYfGM2h>3jBU!T=%k)ss@k=p^%D6|-k}N^H<-M0aGf6_` z8g1qR<&U2SxVmf{&xx#*KYlo70b^yy)YN!~Gi4U_A{A1^V)V)qU6(n_+){_dN+V)I zrnHvfKE2k@46^)GjW+Vylc5w}wU7#$6OO9FWfDVK_!4`2=n*3cy1$9fSP1^^sC1hZ zLwkuy2j*ReA$*J7(yrV(Z(WIz=0ORzMkvLroi1+qa*h)D(5m|?T{IYL%PPiuffVMv z0&5K3nvM@9nCz$XUQFKs*^Hm@8ROPaQ6=w_xgI_+c>iWUD&~1Id7rK$#nH}2Vvqgt zkM`d=YVhvE@zCr~15>6+c>%eQmmg!lVOZmp>NuTr9?<5;6}(!zt47SYckgwCQ4fEh zDX@NO`rp47qqy4i^N$FS0`wV9kN#fH?BS1L5F2Bu^$|%j#>pT^m{*xcs5|7@>U$Gc z^S9Y9ThLD!fU1E=z`MVC)HU?vP}qmKes8O3&yGEAdmhH^nN)S6+vv(>X+ql|QrQ^}8Hu7Hj!&<`*FKD&Rfo`}BVgnf zBZ_dDBU`E&;d+%fI?;k@ju`1OMG+FExD1BDPsie*nI3LZ1Jt5dC8kHuj%D)Kr=*d7 zbZ&|v;78dk@KeTJPYxb2=-Ly=$6%eVcTarU>jzpV?6SnXA5QN+laB5MTc9ud5;Ajy zJ|mBowJ3(X7&9kqiKJg-&I&zvNwCK%HUS!&?47SKpPL=&P@KQ8PcRkYB?OE&3D^*5 zx1q+JBY#=9(!(nqv*>GY*M}DCb(uz*1>vPUnto(P6u$*bNwWdm)xW}(bHw4cSaEpZ zZoH^6PFV=6kc#UY{W67ZVZs6%4z-g)KPwqljCMj=Ww5qq2_}p|ic3SjhvTy?zhP}3 z->RVL;>?B)^$SyjANV0g$VopFXo{>mxy?_ifLIaH>x3j)Vr1e%S$wML#gfs&jD9sG z?N8JU_l@-hVtKy~D=^)`l{zcaSZY%<>L|1Dbf3Z|hMwC^=1`-D;KHcqeN20x+RIvS zIV=Oql2l&gEX^5APTpp+tBj7$2oW&T7EYopRvp1R+eYwqzjdkvU{1k`0Chey*p6=5 zaF^n*{`l-HZ84Oq1xkmIw)jfm%`)s^?oV6R$5|8Ei8Ia9S1`J$TE!GU1Rn^A?N&&a zl1OISMm;lrP{YpdGbTzt`h(>6;8#|c07W%AbOU{;W+2k0EbVP-*5exfvugZY0Z)(;m%Nku4-U#P}(9WoTZNGCmVUbP1B_ zDB@ycvb|(&Lori9#@Y&OfDtdl%{o$|FjSMQa*r&0M%vIw-yk4~s3YIfCkT9JLu8`| zTlU!{A7NWDn33vT+T@(Wvi|Q@%%6?ZMsyAc>Bf+iTu5k<;lrpfpC052m%rO}7g)hw zbRup7g;T@_gQI)lkI!~8GW^}n%Kak2aXTzb0ijYGLeEhU!AjMxTyzva^+);NPhigA7(M z9^5+cMyD@?%o;{t1S>#?yU%86BquoXV&8RH7;i)!YT2okzcW)_E93aw7~kKR6hJ(M z({)Nw7kxk5le_bmEBv|iJu}z}LlSZ&>s35DA5+Bmgep9?fv;)AG=?tDiW~%0ek;2|kTP=MHBEkVZ`FbC^rth2&~c~HzG<%WryPH3 zK@3I96{6x86n!!*(mqVX!g%;Fy+EcLX*jyk@MHqKes9a#QO)T|HX%d!RxpI4NSUg# zST26Q%vv)9oc2Ywv|)znJ#WsaQboF*3)+yJ<$y1&U$SU~y&X)xwVN?T20skw=}`6k zdcF~>9LbiX`Ub{yro`a)LhCT=W8x=XeP3CT^0&h5W@yLOGh%FovmLDi{!FRY6tjRg zX=vi${IT?kb@tdZdo0~Txv$Z>IVpYy`micUjw;PjlO&q!)7a}e8e=NzH;*u&kxd`o zEu;)g@@N;q1>8<&95ZCri1qM{^fp$`SQeMsaYjIG@A8H~b6#~p0cY0nMZ74J^fOo^ z&*)zG2NC)2PsVpvc@?G=KcPS~h$I}R`^3cf5qT4bsgXi%CSVJA9~L~T(%S|^Qz|5| zO^N}Nre0Fw#wvUFVB&GM61=rYCA08N_ubn}s_}0Hd;~w$KttXIw_8SeXWF5=V5E23 za`~mMay;+#9q02$FTZtL$Eu^W{e@HEZv!-@uQID9-P)7-D;fg9ZS3$e4^4rZRKD64 zZFAYZRQw|S(1$tPSOgHA{9b5&w^c_rwG9^Xhi`il$+Yj3nlSOI*`YUj`e#goi|)i_ z9wM_KM{~RL)2XiMGhN(4g!x9VW1D18V3l0{Sd7;B7-(*|g6^m>Lh;cCgL+pwhici} z>~ft6t-`%Pu*O?YSpVr^57{+@|ENXOTk2e?5KLNf!SBs`7UFGp*Ih2l+9HZ);mQ1( zp&^-gO)m_0d#0)qMSuWsA_;sA<0R7Srfq@=zx}PpF(Y^B7!7( z>wnr6iAe^H#&{9oZ~N%06UlBVZyR9ARj8Z$WtIsU;Xih>vIPX6C~5O z^WTM=%OGC?Z3qI+@$=by=GQR%#21OY|JHHtWaW)jcX(SK2uhx9^DDoP_v7#0Gk|>n zXq$U9q1&~`wu-Uh@1D2MQ~U0Ik=U#k1pd-rwyf`t&!i z9S!Zj6!87mVkG|_)uDd1bLsEYFrFU}TLPOH=j^)rSh!#1yFbd=UYaL@Nc=HNW-Y^Q zxS8>5S2!$e)%Dvq5@nZ-zEhFzc!u%J=}T>0C9L2sIhi$qUs6h~k^Z!ekPrLdCx0Oy zPkq=Cj24XZob0k>?FnRW;AY;}f_d}nV=TRWZ{R;UAWc6r*(7>W?h>LSSMH)9hL?Bi zz}zW)T$A2*^s(Pp9LksmLEo$WRyyEtU$D6-9EHIz$U6eTx&(x4IMq*||fha9ih5W2=YDwl7_s?3_u*fFIzA<1YSS|E1a;kAI zce_zGjn)bu6WnfC;f(I)zF*3UT>n8xCI|nSPb(yvR_ZX++p}~aXe+{IF1q=U0~(n` zpY%z~)rZ9Rb)jx8ZS(M$qJ|7qyyY*DA2oPVy79DrHQs!0l$r+BmKyge>+GNtw+e=n=ge&ohO)%!h`0Ma1uG;F_v8`?z;T7SL@LIp|2D{uwopIow zek^Fyl!<;FT6j_>C)JZ=O*P+0Sd=+I6vOAs=O1Z)Dq~oCbPGbc?T5LQX~4?n7Txiu2$Mf>4Je)ypNk zaa&K>{N#fYYFO?1$||J6=%x2+i#?GGl?X6{l&0Y`wuAG8=+`=18z1hqV;?d<<%Y3j zXsW+wz}F^BFSdI{-qA23UjV-6y-Wy5?>{jCfQU9Wd&n}HJkZg zT;}!QyXxK3dxfli^+H;DA-YP=3Q#-UeZ;rz*YJcsQGS8f@F>OrO-F+)wRnzbsdDBs zxku0?D3M%4iOHk8kmldj)q3qn8lgc9Lb9`zTWv#23hn4~`5P+6}qH)ct@YCBSdU&gKptUm1 zL~xfuY8swy-!mQN1bk?>x69L6^5Em)sNTIRP*;o;oKx#Ge*{z>V{L<3X=nSz@ra!* zG>unGRK)#z{cQu8O3cIb=L))Y&-d0d4ROt$K&+PtFB0Sz7d~}W0^HP&&UEvZyj#DjGc^z-wOq{JV(uZk1xo2Z zRdlG(xV~Q?Hi-MH+(rAe9FpR@PqrQ{zcH}LRTh{qif>G{CEs!r1!N1*Eg6sRqxWKF zZ?=9^BZw$^qKxFne%%sH_Z=S%N7CwdLi*M=iOrM^?;tbKp%ybFW$&4+vqqO~6R)!Q zwLuPfMfhk;M!4KCOf$l}xHm&)JH2Op+3`xZukV87iE;G0v+S#eiM(BYf8LD3rm-*l zu>xu7+h$~T0>%!W>y`pVuTq||`%FnVASi-qy7L+B1vBjUP41^-Z5Q<`TjzwX=%S0V zAC!Pv!Z6fmvLMQ@Gm*2Sk-Gb*^ zbP9}vgZqln6qS-Cw|CzjR=R0FT5gso)F34Z8)z+nwcC@;%tV+JCHP-xFg9dRY=*aI znWYD3Jej{DK^rAgw|sH=J&yzWIS7*nztPk}HYK$t{ZuNYd!~}CdzsO1>GP3}p@MKI ziKf^VTUd{;Qdseh%(NRJ7t_tsIrpxrXufPCv(nOhjXVEX0E}BQ$b9>v`VF}WGe}L z3uLFwc~b@S{ZHK`O$>KO8JGgYlk}(_v#A!@m9T;r}BEg^~I4uMs<&+`JXwD z){@kXQK*aOzcHm_+MO+=d8>stDPR|cp8L7lfUHSlNj zY-(x19IKbOOG>A%aa8PQa!K1}eYfna`Z%zvEpOQJ7K!*p$mhf zo7LSonG_ti3|nqxqiYzWVPGp^^AK`8|E$mSW#ws}=Yy}#cU|>a1ZRElX%LINRNZs( zZDx6tVq_hnWI+cBWM)r9;XssxH3@TWy#%vmNo}#&no}n zX92k`(tIq*gs7{|wC?3`Zxz{(aj*3QP9%-i}`!_zU@TXuqlT-~YG+ z&)}`Y5g#>ATiOJ9^G`=;;~Cq~8**_)gr@dM0DZ@knbF?#&AMS(F=Ejhp$0X+b@FzD z!jH%K*P}U$9A}P`#Ow?n+!TCPi2A;Ps>>7g*YGb~yws|-126fazzLd+>0Azip%-t? zQ_h9a9KX1IgAl89ENDKf37%0P@!z8|`LY6%$>jYsCo4jf?8_U7ZbF==jGxx0OcoUG zJ3@~}c7G5=VFtU8M6$BgcMn_ab#fmb7To{jBk2FamyW=#;8J#9?VMbCW&) zTZmk;Xm4>~AQGer+(hfCYTc^c3x|pbf|)Q&wE#OyNy=WQ4~~++87G$LgQq(05qIjm zNZ9)pT(!kkzTR@@;9$P1)^T!MoJodeKj$;K>!Iy!L*`EIbE{U4sM5Q+uu?_@dI;tX zVUQYfBObq>wzJr?FED6`2K$F{`PVAJW%TfbW<7t6*6`)A|^8MaIH?6g|$g<*#iLQj+;sV?h zw;%DzO?b^81w8fOFUkg*I2T^6rRZ)?^BHab#F_j4l;(#^uG1R~Hn6|{7`eJ+_fnw& zgV4x^K2xIbsG7Beu=Od|dfpZ$O3MMo@1liFW1zHbGZ1u^$Ztld2t}t@?vHGlO&&cs5Y=!@qS@NT)xpHaEW;mXc;NE6W`7m?%+aEvi-?B%(Dgl%e(G1%`kxvjH$xfB`e{sa;qk)W@(~+tUSaQBZLmeS~p=6Rnkny@Rmn3=(rLpW~86!re41&ot>9Ap~AalhuW+A_49nl!VZ!M=ebDOU!IQ1WfU3Nu9#S>Ip%@Wem z*b{f=0l&n%?k4!mtb4)wk8JqEseeM!{vG!Np3(I(Q*!@IZ4A#%tOpE`4$HX^YtP)1 zKWy8b&?{1xzj!&}B=j3;lQP_)cZ}OCng5OI*ztmYzi@;zXMDAIE6L?=3nt#vn!m(9WIJUS|bHv}DPHzYy!B+9>1w#5P zo!KM+5@u$tg$1FJg`Jb}_KmopLN`z>yetmi(DSxZ>`hqPU#M#=u_R1=#9yhOMN~pv zY4{<0OHySH5E8l6pTjl;OB8yi`CiHZh-G@|$Mr5z`=@me;~3l%ktDdI;_xbjLCfC` zk%7j&I05!X&Or@SrbV+q(kcCv65Hw_C#ADfZi&zGoyL4XVYv@kgHm@%{qv(%^Muf8 zxG&HU8Zb)2he%rDZ6;cM)jKmXP%BO4yuP}MZZCSu1>k-USZrU8L!tug+=kyn7f}B&{*%ss1Ifz2PhIo3sQ0h<+niOw`3MkS= z^}1vYdr#H4TfnWPmrJnETp&%_Y|egyzVSiI7x1ZTL#5vcKV-FpjXXWPqMsJ*yQO1_ zs=fpSC_B7dw1%l|6sdi8TA?U+F_ql61Jjm|dZ1CXNX=N2xmXfzTdF_n^VZ&x+1$>9 zSQ(rPIN+GC;T>_!i#zbL0*$2Hf)4YoI>Qra+n>YSJ2pT(N^YG66&8j3<=;&pzw5i) zj(TQUP=K~*C9A!tj_uEvT5MR*GL^1Xd-cN=igok9)Ac%$87%bkEt}xe*Z+xlL%>u`H3i5iP0$Spy$HhiEhcg;6 z<&PXFZ{XVS58VfIC( zjrE92zGD}H3S9O=hYkZJQS6@MQ9xhJw#9_9<1pIR#2BiQ(p1+ggH)#wT?~p?F~~`4 z8omKSXH=XWN}t>aDS_UvK)!JME@&RP;$^0ek2H$+^8l{MgV$%Y*7g~?DRqm(PZxS8 ze=_g{MzzH4X6h%dLBuMsVR^m9+QN6)I9XwP;njC{H2|9kVQoRPk3R^lQ-&5 z8V1LE#Nf|W?apSR1zkE^kfEqC@uK(?zzoto^$9yv;ZGJ>D7GyZ71wad*Q>Yv@#=~R z{bBPYu{L)C%?!&?c(Uk$7|StHkyGoLy>m!A?~2(X{6B{3GfgN z0v!7R9EV!el(T<_jQriw{iph~_8IDXw9xlD2e_!itXHVLMML{^=Oz;F=KueiaPW`^ zV_7$GiC)U6&1x? zB-(vA+u;aP7iH6;EZgwTJ{Hf^o<^{G=}sJPd($V*16_#$}ZNKbOV#^&7BopqS1b?F0gghsdYuEU0NTgK{~+7IuciFN|% z11TCyhpzUIP7o}tOiR$t1aKixjcYWY4?=NGs*J_QnT@kP7UG?j_RKD&xasm>R-JP9 zhe}e2Q9O`49iP>Mbd^04#CP>fpbkdP_6oEhL8MQS<*x z^_J}0z#2l5|J$p#40@qf`h4gA*Xk{3ULWrOn=_KV0~3y4{g7={kOql*c-H?$ai~$i zhDh~U=6%QHcR)RcuBx|BI9+{zgOjr$LIU$nT0!$YbkB`mw)oYzTwwSI1Rnej0Y6MR zos^oZtv&@xC5@8R5ARx+vF?)Jdb{DDAzYu`MdN%WYrSBbFD*LZlaQP8GA0Atow2kB53;v+ zxgRZT<2*F}!Br}tqKP5R9OgX!g>7+GjvvTP8gEVlO7N@|1_g<1U&pIyLC1?Vy3ez+ z>3Vo77%bIU3{-yudHF`yssaF2Q3FSjUMAm?0@AsMe)#LanUdVz4dBZL-oGz9@kQXW zaDH0rt8ei;tTLMU)0*^ORO-(Y6B8R>BiT2+um<_)gkbuN%vM zC086;Q`juc1_mt~(yZpKCtKC&@0PXtRAZ-O&Nwbl*{RCd-QHK$u4ggW9l=LLS!y7w z__u55k&{5t)m)|4_A$*z6hW$E{=LB!isB;S9Rx@s!bcqTTXzF5?_jN16oeZu&M+2m zprz=d*jD?%M&1d!R8x-7efh&7>t}_LU1;URr7z1dRnv5|IuS8jk_bc!?X_z$WCUdA zA7U9(o|l%EcB1PpSCsk6T4%t5*i$5NN5;)R@G>}>@M?aa6{*}xLDL@dc`nkjPSCBv zt#!^uka0q3lIK2j-`5I87|;ybe(kYiVYPstL`6FqUKvs*4K zXbN=Qm~`nL8O6uhae#Vn&6CGlJ=Q2Ad(LjGcm;E(e9_3!`>SS%l*WN-RRL9@ncuL4^ym~wo*{C9D~iKZk_c>^ed z5Z+kai7UK$bi4TOo40RCh|3*+T$+ypC8ioMJ%1`yb=Z8Z0}2Anc{adiypYO^Yq-p- zFJ*uNKjXR!r+h2~Kz|{qB369_|9y2AID!6B@lm`H2WF-vXG@mXkNa66(?%naY4BB4DlYcv?%bKy7(tR zUCWQ!+JIVZ-Kz265Q-u7BD$;YZn<^G%7M=?%FHZUB|hm$?YZMEy&g|Wd1Ve8==nll zw$r-Cylatr$>tvXxAxmN&D()Nu2<@3gAZ311+Ga^@=GXmq&_vx)FtLh_ zyf0^APAMk=Qr+8m-=PON7Q|Da19s~a*e$v!)XsFLm4cCU>+mE&m^dvqu!;p;W7K{b z#CVqL#*vz9KH8LD`Rds7*j?6LOYdB{#$xMq;4Pc)mH)}Coo;efG9`C~b67UgTvZRp z?XxpySFcpV#hQHu7+Q30JkgLZW-t`eOxy*ECdATBmQJZK2S`=H`|Ji(R=_^CwBs>L0^q9L~&XNtY##mnmEw zN64zb7?~~eZ|6TiW%`acvjEAcLTBTFnf7lb>%cXrQf6`yzuE88SWHXQ@wrHvDQowR z^XPqeQy2GYeeBl|`O5r*%Z!2hcIYg$>Gc$7DRU@Om^XCIh#z(+DP{3WPQ~X`fL;?- zQQ`tb8(3}gbBS~JHT7Aa0Gr4&r`2#P2>gI=`+KagZO*vws;{ia@b%T6!i;CM8tW@S z%g)_fkC!K^+Nm>Q0^+J_IU!eGots zZ9s+Vy#1e->5PGvl7w0uqHa)Fq1nXu_gQt;d3Br|KqW??P#$p~y!Ktc(L;)}mQijx zIzIi)Po(*tvB^nadxH`>2j&|99apchoLj1pJXjInexI&};v&x$36V#3X`a(E+I9f4 zE{5gY={R_Z>-Hv5pO3pk1M6UvLE1C5=ZTyr)3#h7iZ6f_y@e9GqS>@UeW!%XE-r3O zE(jG+K~PKKS%tV_$v{b3BWHz>Mzc}Lb#`!YuYX;e;oJ&s{|8;uvW zSUxznN^M8dYt3N;bMHZDUMQPRbfa0$v8mlR1)f+tXZY4p*A?$4^Zaj&`1|C9rMpa2v}_x`M^ zZD1j#g9w;L)%`>hP5+cH2SIHdz#x3zRkJ`CixB=#R8*)RpRO#PE7^Za|AS3HC{cXn z!ROrf`?|_)ev^4ys7VL0AH#fn)nt63JL7oTSxR_$02B)lMD5`Ds&i0}$N3fI*W_4& zIhLh}j5Rd1RS_^LK4re5nS-~TSL>g%3J4h9XJ##GYp{obtlB63}H zux=md@q$mp$_UT$pq%uMNV3kWvo4=m32JT=Qs8aY{c8vt?{3}q5fi@E>F@pUo-@T; zXepGa*=)s#xM@8A3vLH@xeQ1~g-I7BBze3)Ekb8|6{UBoBR1(XqbJ{kPYxS7y!hT| zdoeeq`$ML6ZeG6sK0KBfOkLcPHymbo+)#)~9Tel`P6odTg+0@ILeIamNJz_KCL83tkre(2`+DZ%l zT)*LY?P{$mJ=q*plDa8dhX3PPKwvukbbntqYg1hK(YEcBpkeu32*Yv*K<(tTa#(n3 zfIW+r+J9y^Vt+zqI4r*B@Ch0>Bjo8ki6wB&4^EdU%R}&CwP4cv;>u}9DRu>^Fy+Z7 zh_KS^l&_35$#A}SQ8*p=%!3^bt>jw*BU1wr0RP-|{K(4ouGW5OC5$*s{{F>>^=LxQ z#!$xV58~KRzXsxy`RFeN-V5EfoBG8a&*ep$olNQWMBL5nCNl3}h1u3^A&Pi+u1@E1 zAzAf}_xdr=-hbgEM9CxGQyWpZzpiDFC;vOsw_%0)iQuc1-3>k5xkuvytj{_=`0Xu} z!p^+mN>pEnzc|j8(MDU242IC@D?snLerSne$t*C^{yA4tW#}Qou$a#M9wjZl$Dv57 zU93m3OH%&r{s$0nF2k{epH) z+HnG8mw~#XqbU$Pgck>Z`xp`TMFR0$otC*jFVWkuFbX%%`x*wnRj(F|m{?V?ghTG^k6%1w)Wbk~c=asQB|gyN2vh2@cZzM$-|{0?*#>#u+6Dxml2}??O*+y0|oBx63C^~ zvT<|+k1<2Tx9i*)uX_CidF?J&yqSLc&UPMLmf(q8W?YZM9+{`L7gLyvayH+7w|eHV81aQ3!oX6jKbiU!cq#tQ!MZ7z0%0M)Qx%< zoC`7ir7hyoXDtjA3K_*%lj9x+4X3B2E$w?wsx=lz@)4qJqEWUmchZhul1qaTgco!% z=k{U0L|hEU=JlpYoH~{$mmg}>ycEg*cN1hI9^UsSy^7NYmOI}PWzFzkhg;~b&*@_cf{cRzFhL1}-VwG`QwU&(2jHhX#b zJ$gH>E8&kkEQ{f}JP(N0cV+<}HV>EJ$+qliJ0M#`E-zD8^>>MV5qbyZ7cof+7Gv&x zX9I<2S_6)rJM~OEpk%fJxSN`>*wPo!n?|4!rxw*5sJS+bH?9+Y)j!G91i5aM^>7)n*gu2(Wq; z{OzI0DjU593&Ie&K`S#%hZGtRmty?Qm!d3BBi>1fS%`fSi~r{KxyKJbma}l?0lmOT z;4fQMRmnDJHeG&tYX>~%VBy1pE-fvc9<$03-MH90jG2k&>YCN)@)fT2|rgSKv|@+l@i$hxj6o+Y-#jd_UNM zEF|jaGF^Q*;}FIbvhwX10m#7;;A&3&%*;#&666n(S^9R2K3nr)EIbuon=VRj%XQ0S z>$>Y-AqpNuS4jV;Iat|6-=xq%-KTH%_e2uaFV9Z?6v^lAG(8HErk0|`?C;*cfXulr zbLyQw`w^iV;oMNxD4PsPmh;!B1|<@09q2DRFU5-3La;^EDxCM{4j=+~p(Oj28g;5} zRrU1-&{yAw(!Y`o@veYfdwN=i%k7SLr#mF7@OKHfqz3PD_3wQzBj8-3ba!6nL^p7S zbnb}Q^Q^Yy^6dvhJfTM2LE_Fr*PH#U=mrA60zMWvucS9r{#Dx_r%OCLEUgwVm?rUq z%iE>xbftNC_}S3UnOpN@kAI!3GhVw0Ed8Ds|4Bg+7p3d45&nZtu1s)f@AuV3S70os zd0p#bULMO3qmgz+AC4cNGI05yldi{P>OC25_0<@yU_={f3>r#9-m!{8Zf9{Z@ zJZ<0A(fH(BX#>4+Jtyn0ns24}4dp*ViPbATZ|=x=kkM$jE}PGP9Qt9iC$RyP)x-_T zY$4x9p1gfwHnX-A`Qk+aAPKT~0Fn%yi}0A7w4bEIQ=xpO@XQQ;FK%&Xy2=K)+icpI b_S!R==_$*@c8N(8wM)O2e^vDI-KYNrPVZr& literal 44121 zcma(2cQl+``v8oJ7A3-?Mv0Q>y$dp061@|miyplbZGwmh!lQShGipQ~V@wFq`wYe? z5xpC|%$)JOzw^gg>#T2m*0Scl_r7+!+P>Nyr?0CRehlfX@q5jek508Kd4-bEi zgc#SdzMq(l`?=?5sHTEfH_Ebwdm(gI)=|d8YfK`)d5eR@BlT7{^TWe?`19`n9v!dd z2RuB`zQ#*s<6!GO6wrm)vD@xz47F zTgbPaz_&Y#G2j7uPedVRq8>?k!X5feW?#j;)jQs(jf*r))9NBk4(Q*=&@oFcWbo}9 znIyY10llOxjN-3+eTnSZMDWQ_iu(XMtb2CSMbb}_N#o%BQp|6;DIF9v3`=8_lXRbq zHRP5_5nnI5hli&`y&zrg3%28L<#&Q~dXg>C4VNWl3{N6na05~#UMT0yeo3@gv$bMg zfzUr@A+sCz4|djq)`37#w_QG9_rWqy`Nc>|)q-Hws(t@(91r)fcgSo43#(X9PY*X; z??#m|6{zBqw&uaB{AVZyZrEyKh95tjJ-jY6`nHKRt<3IW*x9cc`JSzWaM2*n$2BkS ze}a(X;e8-%XtbevRF^qaZp@!kCNSi*qA8|M_LT_ch%PO%!kxuu8ol&*`ZMAx9&CF#SpNR8z!q$P@ z(muR~>s&f@&8v8WT)0^Q?|jcU+*OiwlV&rbruAo4yuEpOLl5&zhL%29y=V~5Jz=RH z@Y- zfj)Q1DsxuD;OZG-v5oD)GLOhkc(Z|UmT&u`ni>tM0IKH|Q;ZU6qi`!znZcRIGvSte z#H6rOR~7F+aTkE828;qRs zf*-hha=$4m-$^!qfZI|si8SAvdTt_g=CRY?I(9x6Wz0~SE1n0ztTdrd1^)TM?dnQG zZNO{(SANF>Ti%}b42pT=Q489rfVoF9>Y}tC<3k2YADV)Rt3-fh-#xu59y)4kqPFb^ zXDH^OYX^wotJ5`Cl|u(9jz>PEutV?U)zawWm|6nVI#+NmsoJA!wl*eCA}Qw6RD9fS zI6t{2BBGbydkA^0V?t+2CED48AK*`OOGh6(u4MkbWG#~f5ThIQ*j*h$D}Ru;1X|rA zTHz_I=4K@Kf;xf6KU<^!qJckJMIxv;8IL zOHak#cY>t|hIf28j3_;6FSV6YCmZcz<|N9-(T77<@UN-1G)Wh-7HJ|B0wZ3spJBY$ zDx9xstPzPHAuylIC5TuTS2oo5vf?*wjt{$iS<;d3Dim(n9>_WCv=%sL+$A#2O;{qE zYM^qs>e~8kn#04imT(1q)*a~;zZ2w+LHuN=#x1>T!(3Np>&T@|=8HSLnB7V)`^Dnh z+74HA(|K@Yrv+j!0Ey}++By2!yAs{bp7FR2TBp-t4bwl&tEDGszgUS`_Bs{g>8Q)E zG)|-Xt8>)n>+Ouv29(f8**gVudWb8lB)5>l8W;`58~PhBBLAGb@~NM8Anw+_vJB8x zmf{QEtK~`^OlYBfN>AoCgV%w|*+;%zE_f|dRy`7cs>@0pBh-LhD|fSo#N#Um$zZ)3XPTADp}Q2v?}UV`6}Fw} z5~dgW5J4qH|23@5m3>gthR>S z%mnUyA4K(yotcKnf9~i~b5c24SroN7eThl`l$tT|J+}gyWQKs-E87`5A7{>W?CJc; zpwPbcbkjfjMY+EBx2@k5f!wEku15+xhedqmCX7|n=BD8!j1ABsYJNy47W^prpuLFY zJ{%#lt7M--fLqPM=$t8l&D`8fLIP+m*`qkxOxs2e9m*ZHDrup-o%RA%oVz<=#^i)t zDJOr|iVMKJ67b*b`iu@Fp_^G!1+lOSi5C zl{+asST0+<+3d)vBGl;qWKN>lObYwFCr(=sa-uIcYu(@t{e_a|yWr3!JNX2Dj8iEe z91N7)?=#)kfNdxn9;!<5xo~}WjR(jZWs;b-YkkBJ=H(I^GtzAp@?H2cb{krbskjp9 zs0)S#M(^cf=R}#e<<@uzDG5noE9@M<+vxGFs@{xkHDy_>QCjy$CbIK2cm*<$2OUI@ z#kA&tuP)_RgzhA#Y*2^@zQ)e?W>J&Oyh!0>o9qY8wy)&Ps;D>R$xg@i{F_$Nm#;`8 z=R~KJRlJ9_NW_`+-D#o}w1~r8`3_U@b36TEdQqjzNcyN-lgynM$if->TgA6B-g)=B z7mX^iUC+OLHzQ4nGSVb79>P#2*1Ndttuhj(Z&w@D26(=p0?rG|DGOE~J-F?td*k|; z1a8xw-I}UHQb0)^)i9LYM>Q+)V9T7)>T5H2ATZ-NHOjMqEua;++zhZ0K<@uYnAo7y z)Tcq2>O#JQ5o^#cR9NlAaZ3jZC1?+j7Ya32?94Ek7H}3=V@pGj;9cjZL=~q*r8`R8 zZbvaHEYw_Ur`HYV%B6|FxX;W(Wx(7jn8o6yj)R(P0DB>M;H^kP0xOp&GN)7aRNcoFT~g^3ys5O{p$#6)F$?Gc#gqzhbHgbdI7 z6S16oyLlkV>*5GeXsy9^h774M*q^RTSrl6I0T%$=r|UtfHlxobzQ+sr{n-6(x|SB= z_%0|yM3NtPB8KgI|S zny?@F0k)PAxmrSOit${%0qvxk6e7qITWHSTSY8H})Qq%DRMt!&C*3bS-G1zcID*de zLWZulYfI8M0<|Ck2!Y&}Y*WCa%=l1NydoJ|mJF{9os|$+f}-qW!uI}z2_@9XGap56 zk`~k3Ku!Ezpw*2#D$Ambor8B?0~M+J+-EXDQPN2~R-(_k?3p%6wJ9HK-bbaAE^Phb zS;5xH{Usu5%=Fk5M_b%}eZ-QpxVmGyYJXX%_6d~jYnSiDf=h#kBb#1G_=*Dou$j=MQ|aA^b#_}=_&}N#tc!$|`T9~!0)3qDe)nIW zRK|hXBZ4z?LQN9lnwaiZkPwki$Uk^(douG*@m+*4%om&w@P$XahOL#|v3* zX+*`6$&fi6rE*E2x7|gJBKP&F1gg_*MF|$)v~aPza~*n`dV0B|5Eqf%>QpywR7bNS zUvu51)$txuq)xQ{z zvU215JeA1Q-4@XHzVIp1 zwKji;s3OnV+}7TES~oea79fRA;a2tT)ZsM~;&>lWE5ytUUi3PRZ+^7OczVpvJ6s39 z3GK3(oewWeDQ@VqsSs}#!dsDiZs|d%uLUb=eRvTfH{SLdbAz93=NV%- z&suN(t^j20A3+z=Se54%JNo?@+#g)S1}*qP1VO#&GIcf7LRvo(MludsOa?c`(3wkH zZgCdQCD$lpFBB#Wb#{pkkiTj>sqV!4AU7SeX);%niSSS<;(U7>d+KUv3!d4Puzt{) z&HgbCHm>hsD4JFcQQRE(Fx6Cwr{s4UwaIB;h^GY9Pu}E4Y8FWx^719$rakKABBbUf zx;ii?Uw9rWZ|MY`WzbNz94UU`-H0mMtyf)3Q;zW3fwU+qT7!=Y-aQWUyjP@02*Wyw zQ*q;8*X|^Xu;O z{a=&%on!mqD`a|v;XUSC|GX=p;^51bd#0t?-Tw+-gQ%NcJ~qA-L81a zmX@7&mcIJ){~JI(7hV}$VrybzGOX(OG>>3fCXGql-rk+<` z!Cupgbu!S`5OXi^G0;XL9Z4r~g>LM)_U5^+Gu`nxQ_xbZZKV_GYPF;9dLxyt$(1*i zW6bZ!&GyV`6u@j#XIJh)Q^s3JL8gr8FH* zb|RMcWHjo^7LQ?m;q<4A#_1~V-8BcQN{j822FxG@U(&SAL{vbNtY9Ix)OKZ##_1TM zC3OE{@453{$Q^f&T#T7t3!ZHI<&bqHXnGYse9}ym+Od>%@~`c>_o*07Z{gYw3@Q?B zMyZ{9BGCk!tkob=UYZA0=p0QEr4BsEonA@1^~u!KU({^3`|>LwRaVSV73*ETcG?17 zdZ}y$DHyROz=``vtVWjFAO0EILz2A=1h#p5ga+zXr5J+rEZ z3xrsgY@AGmScEHnvdNM_>*;(vpO-j=6`KLwlA=Fq3+V%H!*tYfCuwKen`0i?Z(&A!gdKKeeNx zvV^>!V8J>b5&#SzuBVNtmbviwHMonb4JuPX-_k?79IS89?^3r#<1`-ovjr5zg@@IY zPQ5dF7=dRovAtoOB$P=%yw&P#ew8=>ad{?{JHQQ=K=|HNPMu7e2A|ZkLM@t2W6hyV z*68Zoc5eGA1s}(ot5f^(R>_+q4^q2&G;v- z5MBBHTzJs#3{lDI+pB-YB*J)~3D;!~Pc}#8!#xR?ykMP1F#9X`TRFVCowgHCoHbq&Vq*oOt3KcmO{rdoOv0q3n zp>W+9mE^05?;47a7OG0Zer5g4ok8+7ISjH9lEy-;fQIC-@ez>I-+gva8(rFKqhwz9 z$vy8btM#kz1K3dXsjKfFR*;OwLYR&{^ifl4FJRH-i>owrhOc_=#)O+^Ukqqy3tFxz zCz5aTAP5G~F9f8DT)pw%o(Z|t__GckKx~I_(GiyB?Cxa^;E>0K8?bG>ASV^T@0pMJ z+Y6x2=U%dwEXhugJ!;D1OBCwr?->)DDq6>M^E#kca>PcFHP_%nZU z%}=ZBap^x@>DLx0oD$M}SRJR_H1=*ybup09HG`_Ao-y_IAmG}@Dg~~XEwk?QY@J>8 zaz1BI{6{v`#ekA=7K_W=O-y@{_9+6XH@)Y$2a-b8FHP)~31|g=8AW^#(UrKCP8ajar2wtVClD z1e~6boDIFDxUEw2bNYJ-Z^0e>rox0;wK?vdC`-%BXO`7~YC5J#N_^^9ikP+BwdE}SU%G3)veM7S z8|~Z}f|lDE3Yt=BAd0*>;kvC;;_2muQ^!1hfe(}c5i0Cg&?Cpgf&{{YwF+fBeYF+n zy3TqXd+_V`7Nl=_*2L%D8eJ4&LasG1JDmVwiKp2`yRZbD+c=sP>UTb`(JHfXf5^oQ zP?2o{2Sv>PVt#dvGjly+mwf-k=N_#80?@zq%5J;#v|g~!cL{=2=eGzEu7tj|cwmRW z8i+s&pRORDl?8I+#^Yq}F?r#}$OYhOAhzy4l%{`QBQ}X}Y0gVzZeYURTy@BG0oJZ( z+N1UXb`ITT7-1#;4MH3THWVv3#JDlazviD&SXetw<_k-eY8o5OIr;Wuz-BD>QjZ>I zU=1Xc3OMbVQwi<9JY0o-LnOX5!-OtsVAF90(MpeI*iXhQ)}&m{ zH>yJ&O~g`@?vNN}qFl=)jQg~%aQ6Nyx5(L?Frv2v#ku#|;g07ZY$)9VywjQxljxpT zC>?~^F}6r8m>TZ0fQ2kkWOzyL*+TZ-Tzz-(Ri>`Ft!^Y7T1t~ijXe2Qn;|yA?(mxS zof*KH&jxVKB>LNOS|4dhb$Ps$SatJaBBJ|?%;fst&4he1gqpjGzF=aOB4#^n;PF6? z?_r4q8dfu~PJ7}$D^Wn}_0HS=Cd48qnRgY+BE`eXD0S&Y#%(ihOje;nHSM02y;S(% zYpwTNn}xD_2c? z*nq>5;I-NH(rXK}uhTm&^%E#%O7`z7X`cMR6Ezt2(Zt818(>RB-rkL`=&xD{9E&f9 zsap$pq|K2g5$GUixcksPNl8u<>OAoeY8IY0XVZ>SM*C)XRp! ziVzx?nP~}{^=a~E296;o)#0BO6(he_YPnZ+pPw^}+#`8;aL~K??+;mYZ=3A-^vfO% zoWk*Js^wZ_h~>Qyp_g#FOiYsDK_!j4&GR#ud9iR2YEs|y7IBy^W_e_KG5I}#dh(!5 zRF=ocpEP(6jMBxw3cVW5*ADRn8xJXBez)bDzoTvA)UjII?Ci=-nwIJjPJa|POSsA!k73M#w3lY7Xb{Oeuid(Py41^B0Mjd=CG}Uvi zp2{5s<}4|ca|G*sxV01Db6JUPXYhwTz4fk`1fBWEUQHT3IUGG0&8||b-iU!7W@?q| z!{1M!lKv(GctTXih~_2txQL}Wo-IK>Ds6KS>|@v`H;fBq!_Rv4Nb*)i08Uu74GL_f z@&`%kn`P-ZD=U>Ec%%spfmN0^ft{=gj>eq49?MrNRPlwDr%*Jx zk9pKJ#XHam5+36`+Xx>8b&?j>Z=a&rVhs=TCcvSgTspfpnh%_8a<)TMmUmlwyTf%) z=iCH19>LAzwr%oUE-*euUH>e`J$k6Hh*R|ucB1~R2p#?>XtYo0Tk+KSh(uDW++{;g zfyP4`{1Ls45MaQnav8cyfcKQZD99!$ARb=9SycX=zs-Y&zzdnb2@eU>5;13=|2O1V z!oDkbxU_FF@O!INz1I4ooc+>jcBb<%o6ThjBd`GyzZall%5M!ZsA2VE4PZO&r!Re~ zQC(270WT4t5ea`S&QM1?pL4!FKtZGF-X|AVw9cNTT@_ z+D9FojE z@spJv<(9qhj3{IdBE9YtKWRyV>S>o;Z+Q!u}s_wJI;+)EvgLW#>h86Ex)AqBLRuWbKB`h@y?|7JYz05q5W zHE5UoU^r`zax`c9+iNctShAJsP{AYlx2lu!9!``kbc^^oRjdN?pk{+7%PIHb7QF`H zs_Cw-4aLrX4lAsW6f5Sya2c9=J_Abr)+=D!IW}izpe{~;R${qzF42cwJULXf5zTb$ zE||Uz9F|V>{J5`sOZluQ3+lUnf>zM|R2RG9L_7y0F@ACt=nHTpbWay^igy*WH%hbn z6lr&eU>Bv}MygN^@2s2EZwKsbZR{(A+_rGrkk*~Wx}Jd>^g@~!BT5jZr6RRoazvlC zwgyG^y#)jU;ltQ~+77R$1ImfZVnTi#ZvwCWHAr<6{iHSU(!kmD%Vj~}YB%RqTfr)^ z3<3DvSSr5k>0iE74WfJfrm)z?lokf{>QdqCV;E5?pxTE}S=?LnBC?Z?lhB4D*ZoRN z;`YM$bU@yAOq03_K)6lzHGMnVJ#eWXnk(vDUy~D7B`r2fzVF9Br(IUoyX@L%J8JF8 z;!sftu;+JLD2V#8c!AGF_(IK%CfZ5WMwWr|aleP1z8DOh#zJ^4nnU#xOid^3e;`LB z=UBmff!r_MI4em^qzE0H-2J!a&ZG?~GbM-uYs7u&>zV6Dk$NH{VUIb*?#xHSB%7K* zI{uJ@7v4C__f3D)0b&ZO=#imdRUKXn-pqFfEqRcg&9IjpApfbqPWE&w==;Zok&Aev z;E8uX#@BW=Hc?(jV%5rbOC)nRuaD9Jfz$Y380C!f>+gLn%jGlTbr`OqF**}`mH+0( zVSB4G!W$OH?y2gFhvjw2i&nR-E$Atc#pXa@#kndrF0rOBv5Yf z;ruMCP}xE<`_Y#3f|d6^_Fy18Q6y7l<64OHlyC29$W<+mcH+#%)_ zw*ZRS?pp?XArI#QSv8P*UfJUE2OR-DlS4~+Wvktb~-_F42yzLjk zLSB0I+dw_Hn-3l26LKFQrDHZWTttTanZx}8Z1>sLrHpR6LRvWT9bI-S`bX?36N1Ja zUC1@=%{L-6BHMb4P*Y1%T4aHP;kqKX9uqa#hS%kx2ZK4gEAEFqt#pKiEV-f;1ujQ+ zFUq3$Y}#%4ZG^KEcT7R`GWlXXN!mFlFO2$d8UM9&-P}{X^^wC8qn7kJwlJ4sP^b~skXNDwHwgJ?UMG}w)C{7fbxRe?S^z{ zXMuIC3?CfR(!$slWK<7F3d?-z_TtcYe97{QzQc1+eyl(9vc1)G_$LF%BZ=-^%c3q_ z)WOZ=7~1J*C~6=R?xE##cG&RP`1$F0CBR}r*TFgqWQ}0|L`@LDjDMzS!%YN!do;!6 zCrCo9PB#8!QiqEOnJcV)TS7bO20L+C8>`tp$X6o5szcnj#skf}KQ6SMyQz%^2Y*#H#=Pvk$ zXUr9%eHTsp!2kanlap`gINN*NM{@@=5U{Mv-bsObVvl_2?w))X;KS4C%lcnj@Be~$ z$Zdt`0ozsN3Xms+4cD&}^m6q~xc5leu;Cw0BCC#KpSDS|{{na8G<*!LK~Ezx*#qk} z$fBSgppV%9MFfi~{-i|Z_a52VzgOg&wY+@j&P@y>6G;EUwX-#aZSP>|A4zK@C(tQEc3 z;34`Yj{1y){NVY!bP9>fDfJ!-^BrDu?!B3{OQuYX>Stw=+F2W!xQkTc$%*FaW+&Cx z%$2e;a1xm;aS>71OzV+-;k>KHQ8INX)=Mbo)q zKIql;J1RmZr!t~`3fs(GTmZ5UGsK3LXnQQcLn1Gp)`j^v?#Cis@Vwmcz>Hs>{E zwl^?b%%TH$_AT~ciL6iY`a6?t|43>Gxmsw53TyzvH2Cy+1oqx->QQBRZDE!zO zwH&f%aSfe$KRJL#npI5aisXCVadPtR?*=n-4e#@Bfu~QpJp=MFzPQ$I_D2a~M9M`d z%?8xA?__*{+`jCd!Wb?QhwD_5519|=T~a>(*3U%P%N8qjS}VA^^Gh!Lv|vYZ%%*%X ztYYr$Zfcfx)44+%ulWT@e=!XO=cL z6}GKa0o^*dHzk{`w_&KJ(jsciecbDKyLBG|!0Zxs6Pd^NU|Go?*H*;lnDhWwxADm3 zF6LcyKLlYYIzJcipA5TC1dwGQT>guqj}ttQykkUSC6U#g0xqH|;Q+NeIUPq{bnw`d z9mhm5vN2O^;9BrDKb56Rr49uGwUzZ!qkihh{d31csANFiwwYn~f2*>u{6B{1|F3gr z$S9@Yy`x-b^V$i>@4rkj`+I6X&B^$K(YcSyjs1E#?J^s~KY>D7bEeLF;UkFEyY)Lj zUMcuQH!(Y=9^!{5sXW?p`O>Mlq~Q0U|G{wHokJ<;RL8LBgH0{ICUIEI4$-w@I4>mo zPImA%3%bQ--2v-7di(F`)|j=&-i~x_9t$Q!*OL zKhl*}Nk36iX?Rw~l=dnu1yJ@X2@SxXM>qnFSoA~i|i5SsLBf(d50=QQ#(ude{ zQe2qh5zu9Zwu|{;=H0d$jKWiCYr-1o7sbmhg^|nHMrXbGYu8u$S-J>V342#H9!*3>D@^G-{i#qGRZNjF?&(VZDn)n9jMq_7pMtM85J^l0?p3l>>F&0} zH5P%d#QD5$dO!Tfpqq(Zx@0foKJ-x~Q{4@LOq~CxwLdIA`Tv`y`G3P8@(o8lefhY2 z!!XQSH})8z$!){?@%(Ofe$~@{hJ_^#UsZ zdzxs}|3r58TehjQ8#VsM;&oC?Ye>?6*{azWO}LaK$fmAO7wp)O8ik~@SFn*>-;?OG z9Ez2=qs9+=@6;&GWU9`P!BUK*n_+yW_BN$aU)T>S1rl6$(d+1JT3(J|fI3N64Mfs^ z8zoD9cY_t_+?S4+ZA;ZGOOSmux}}dXA8?q2U4@kCsw{(ULgusjd3r)|a7tL-46^mf zwO@zUp&2-v#&3f`dw)~?S%qIZdlzeG=`y@StiC|H%8Mz9gZ&OIN{Vuqpiy0!oZV6- zAwrq>K9+%$JFd62ttzvvu)aZU5%Lhd&E)U{%tqE1NUiU)#N8c(I3*=&A-rS-0*9Po zAsNg2FW#yw_fZ)~q}Ay>ur3r^SA~^EkYq^Yv^*7?1@gBFI9Um)-8bU)dqy*gyW2K_ z!hFAhuYn2fEQv4FoeZgP-e*p4Hz_p%y01nfoMFkg0TCCuc(ayXc4%E|U(&Aw2MW3H z0zGDiyKeIMB1}C(hSq$Y)=!CWY4Q1M+=gxwN{b!`P~-P=6CYTAm-?04HJUpO)rkpe zK@RoW9vyeeqWiXRb4`g9O3;wH4CwDgtX#crV&YVbQCUp$$`}c0clktFrW3+xFP>d9 zz%r0Calellj?u$9E&P4j|EsrzXL!qW{XZn%g4j}{FrB)}sUK}q3#opi65YO>AIlNP zG?>W8`4?F|NGY!3Q5!jtpv=8&wU*E-v=j%~5Dvg(-Zyo$*d2&;hQjmSpT3f~?1ikK zkkbTMn4IKQh9y(sw3V&%l?b1U7>D|;zVx~|C)M*u&jH9b=22@d;#F+$PwnSNKQtb1 z8zQRj8MGD17-7Q}h9N$3zrSd$EO2`==kgBUU`j_yOFjWRA#`tpOCyG&;NLiVbfLK< z8@SoKx9UraX6W%ZY9(eG3BQ^@v<6IN#wqVt^bc=kt`GmM*NgExgW}v7zpKlmkuI!H z8fV%3Zin>cw0|&2b4>Bb;nveW=B8RlT+)hy8;AAj?ZVO`)JOJY{=bQ4W_61Orl~uy z+ZR3IxsTMhm-U0)fKzWGo9c1V0}I$Slg|yz2Uk-d@3eAUZFcj+gXUJE_$6J}FFkEx_J-qWQs-c=j?+xtoT(-mb8+GVN+v zs!-j~@7;P%bWBr5@a+6pBO5d#87!N>g7BKIs4fcHw9_sk#V>Oe=h?gdbx(!;+0!?( z34Qmyytz0u^v>qN&R!d(Ser>!$vF4O?}45JJcd(K`@(!DN=FN8N2j(lm&|c1j?RDA zfH1Kon_xJ24=&lo)I*2*^+h{RCZfzRVG}iVL<6dvKUs7uMmA^LWG_MQvX*6Owm~9LSa1$m*P6fV1eYv5J*|K4yJi9&{R|u7KcCxN*xvGh1 zcNZqyX=mch@foU?`pMQ`G*wiMt24o~m8txbVw9q41!h{D{g&m>*Yc?JN%;8zWz@+x zcC*j_UKO%?56eUt@uvq!TpyQ0;2(6;8EM>zVejV(%>AzBVn-$`YJ;@QJA4P8pa1n? zR%ala!BylCZ-w2+k&pchJ&H>m-ADiNVwFHEtE7z~xCx5`wrUjRP#e=m{q94b^bi!| z(j}?ZB`vrRh?s?NZD^BaYs+96yMkt%&U75R0WP`qnVKR|>`mu!tq#d22&d{m(%?U) zi*{9ygy}lV-QG7{{nB(-Vb|<%EnuFzGfFj@&NW~!l44{6d8rA#zHl>NE@M=a1$!HW z$V>WrLXSovvi2E@Ns3+(dF?XO6%hjZ9xoZt=1@8tX#>%^A{(h?0|}9Qm*7CQ!l=up zdPG5cg`qRJg@|L;3DRwDEX>9HzTT2-VYO}`8C-vaNi@X&Mjw?HB=p5M*}plo{0VLg zlC8KcOjw?3_Mpz-X7*hqQLj&dSl^kf^NpYPpG*gAQZ{{2>0vyAV@yK%wE|*g(d)08 z4kunqps(b)Gnpyastl8%XRmfNK02tX4j(o8fcKvJy!s`=Oy#rAX9?_`_HX)I zGQzLUn~?CbDPPy&NQqOVnFJQ&%pC;uxD4N>FFSSG|Ke4i1FWC-(9*1KOwyPZ&%Q$Z z%iXgh zvYj%x>mgmTDZyoD_N`H}3n8|j4e*ab$E$mgj=pC&h0jeLp-|$3*M6OZG!IN9*Pkoa z{59{pwF~gEC$MZ6jxZ#lE_x*ad^@839OHknN#E>W>6PbRxnuG&!1Be0M&tuFCTW@^ z-B0I#_}-6;=NQJirasx@KhMhj+Q0j>sPF={n!-I$AI|g41aH?E$VoIA-P>I~<@lSM z5G#$8I%`l6?kPq&Q@Cs??zVIH8zV>9wz4X3l|Ay^)J*? zOafZyE|-5jw&$$=-%2N@hU|Ns#AC!m?dbU(Y$_7m;*Kl-Tz0`b+Gfx?lPn@XC~T}a z$peC}mE9I%IyD2#+59_ThAI zmjycTiuIKFF%M=ZF_#`^ETUds3wahkB-@MkJfNAln!nZFLf2`8ycRB$H(8J_IlF?) zw4lV0m3inw)AMxh*0I|SRj6O!4tl?ZO=d6iAosQyn}Yw2OKg1WmD*D)Agl36NSF*A zDEgyPGY0qFfJCa^-{HTj=Q&eQ`FDDHa#*;V6D}LPTcr*bs)L6=HC(MDe1#x-cBBs1 z2E1Pw?v#ADZd`}1&yHssp7S9=Nz(#QZbjb>JR&MvOlEVXZanq6R!%-=2cPt=)0PG3 z-0mlx8J9g`v2Ranzqqy>kv!F(|4W|ULO^&sp59fTrC9K&aYr^V2yKMir^6NJuvP40 zBUbQPkCu{l)dxop98+c}xmnc_ou0s)M|-1hc&255Wti;KtHdtnlkh1KOO?{GYT&{{ zwrb+}iI?w=;*ZyZ4z|>q&cH3-8&BJl%r87fhZPzj$GES1E^|LDZjF^Hf7#vqo4S4?fDQ~fTHAB}%p{j4ovN4r^)X2ztQb!)QzyH5=axn^D3zSM zoVBJU<5bJr=PWe^buhsOM494CU@w;mJ(TMC8ul49D`~a+!vjyVSxY|(j7DH}9=*KH zrB!e0UH%!CJRcheJ7wqiZ21Z?K^HH-C4O?W_C8chuyFKB;&R96>_;h@O)$6pT#=k@ ztKc+Cg0D2TwPT|)Mu|Ziy_KLm1V@C;8vWqvn$is|~iFS6$~62Fgd*?I9pKo7D{847!> zH*s!;Uf7wj=WoJ*5&8$SM_aOz9udAp(Ewza4L28uV#P_R%+WjHT zF2g2h@z^^@n|)%U<;lS#M!@=M4hulB<7?ad5NpUeyjD*N<6~J|v;nq%^P@h%0y*gs zmoYXG5p+-y3Ya*sN1X>;H?f@Oj=M8=94MqF4o++WR5~%bWTnb>$>z9Z{gN&d`e&)e z?T+#8JGFGGtcU$nHAKj`oSTt^y~$!G_k4Vb{C!V}A9Y2YEPnaXyQuSdtSjVAVw#qf zhm&=Ft22dMAl4@pkkTZzhx%b{En^B@SmYXj>h`=mEbstNp6s#5y+<3n3-owS5+SN9 zvVK|f-iI1Q97x8a>{iHf~pYWg`c@8lD{vZFR0ATbH#qTN?B zMNWoGnO%>?6U&;%TJ%YIA+A>fPo9?7-S6M8Bc{8mzZU+D6flhrue!CWA4+%K-VXTY zqc~hW;CDR~AbY%Z--kV$1h)n{716uN2dyv!-C{ReU(s0O4lM}7MGBA~=~XtQZuq~!d` zKHy8lQi%zchiJ0&7yIi9Xow6oK3_H66FW}d#oG{5;zjQDpVl3}%_QGg2Orcx@Ei4% zq2S+H!bf|xnX=FA#NU2@lKoVf{ak%G09RWm zRslpe@b&JFS!+;uuwj$2zCxWbs8TlN@PCs&MK*=qylxH*--gxVQc+Yw2*IMjdu=5m zVYkU`cyF))z%9_WbI~J0|3CL(WX8qKn^zqELz~d+6%PkK8`P)J$NSi_=6oQgLs_v+ zzU=!>|GZxBf(OIRv$~V86!^wWIK!_ouZOaDeli4b@R^7qnmT&fp8$j05IiF4>Q#h-?Q@hJ#)w0|3*6=0S z{nN`dch%@k$e%@?$1!TpM%q_v(;uTZ7F*F$Zqf>*4~$H)|i=znqgsqW=JC`}U1^mzIWcqVpxl3Z+VTkS#uLt zqzB>6xCJ~y4NAL_ND1!f=J?Yx>6Rc+HA>WS$jlou!@yz-!rZ> zf-2gl##E|&vn?-tEK^~V)qpCb7a7a_rANP8wCSh(-r}1{ipO?m`O3ewA{5U1iq5+` zjn2teE{k1VvjKMfCowD(KP}@wU>)m4j$FJCx_S{^ZZ`!Eoow3YFQ_O~_bH+%7>YXB zTrKEDlH)PFAX)k9Im&w1P&&>Fe;Y-mXiXt$GI;SxhjIKCh++0KoQ5K-xiey#?$K$^ zS6Ne|O}&T@A{}1QH_OjnH>^|3_Y(zt4W%GUD4~_yY21v611X=?cPtL#NcBg7@~c3m zf>A^_d^32wD`@GS=J3fv#C2X9r%auR*+HZ=`slaV9uNM+YN+f*#BbI*;_r37Doczx z2rt!7JJ6NEMof!w~DRTC3 z=b~5-`CSS_*5BTdN5mW?g5GeB?$?_yYGb6RvF@}KGF>?CiJe;Sr7>E82=OoN0zWiNLXJybao@1Q^ zh@Rfj)E3TCiI57TMHMkIF@#mQMZP2uVp#5-`K!6$T+Mp^0_5Zj1k`PTf7Jc8pUqHH z6vjy3+B)%^gb|UFx!-tzl`0HmK3d1`)PpU4jJ-l8k&{S5Q!^5*z2mH!eCWG8yFQtG zU5!{yaUin0(vBP497OWIHxNj*7!9cZ!aW_TvqX3GaLW1F)$Q^k0ru2&GL(BCU_8E^ z;!M;*rVm0_OU=k(N|Zr*sHvQZ>+u??Z_EpB+kcxD2EC&Eufiur4~ScsYjDN|CoxKw z#Nm&rkq-h7@FImJ4;CEa>rVT2*&%R^+B8{r^;#xw=lz~3+u?uhT z;s8&Dwy-JlBRB8k<3YozNN5Cw2}}CU^pGE}MDO}rAZ>EtCE9NH)vWnit5OZnMpCO# zcpm<#a=Xi#oE1tnS|xXM@sUy6 z_%gL@z*E=PB{?URCIlIGi2RdjVEKWiY*qhW;q~yfy)@1s1D;&g1_@q-&)g0Wwa@if ztbU;#--b**=OU@Df_E@O3SD2hz@v&!-SWXz%!O-CP||$&5`%@wf%7oK2iAt{0o2jf zoP@>8XS=y<{qPWhO2qpU=cUeR!$XVDoJ3E99QT%&aUroLXUQ*yZryXO3eq%U%||pz zdf7PtV|Mwu=2&jHJxu%lKrciQHHUddm!{<`^5v@$6@{R}^_g>{Gt=?AFxYOPaE?R> zh4LhAka7!evjXm8nYX%7-_Zi)Dw=Hex7p#V#RH2p*j4+nC#PdmPB#++-VZ~R6(j28 z6UmjVQoVmbySm!wDqD!aqfA^o(hKCj3`7iXT7${6mI>JNrnk_9o z>hYxj^x;dn6s)K%p9MYI!*~JESCRhk(VIHp_pa!delnZa$_FKEdEhb4A7E`sSl~dU zLTDY=%LA{|w$BGS8-D3eP8FW+UnIbPoEyq04*5VyC%2`GmvlTI&-b4$K0R;uEtGJV z$~Qv(@IGvAgRmsN0Ordq+o50 zS1v8BJUJF(j-Fk(bQOpioo(`#^%9QopQ*E{kb_(dyvDhr0T$$u2M)=CmK}zY=mQ`< zC&R()#x`wLNCEk5`m+n9zfn^LF{C_IPZx=(TwX|bxuSj|q5C zh%mr@htNe5sJ_0J=vS>bLBdY6Yg^ZfXFH?_Gcn&k(G;}Vg>MD4{iYZFpaj+kM(GNC z?fBy&kDbm=URhywCcL0nQA^mMf^W;5sCWrfBkCpxCdjF<)7fDD7l?8J%}UZ z55<%0W4`4Xw4ObDcQ z`Vb^-g*-}hhkAa9Xx|r5WZ%LItAU#>&;tN)D!Ia-K&&OFNxy0ZP*$z zhsBVK22R#0DT-ck9A4Y+bh-J$DK$@gZX2qdf-C+IKe|3yE$LQL)D3;*IPPYQ^*Ha4 zYR4>`Qa?F=zW4N;WoEP)4E+%i5Ido;=>U*lW3!mhP>zWTNZ0BAL{9H-xgCxMXYd7^ zL0{K4PM0byO~3{f9`~5{3Dx_$C{81nbemS&3M;kcFjlfsTW!aRP*)+p1IQ-Y+D{u* zGfD&XEwbs|3kuKV^_f0ev5s}cl=Mft8KB+DQEwtm_yPVkn|{S(xR0s0AIBytfFZ?u zcMijU*XmW+_BBGNWOW=^|7Woz;+Ew!m4I2%eLpXK8Ru}qb5rlsc_{CADR!0i z&iZO`Eq3RGe3kiMpJA?!+1XUKmE<$pw8Ry^$C6EEz}jLmvxx<_6yuxp%xQ&Ud~wN12}0M^GS*HuTbs8@2<0Vk-Fy@ z>mhT$i|<^dZeED-8Jg+c^Bn_#3cdLo+yV&kL-a3{87nDSO-Q9BYn4s4y+Vw}Z2^|8 zXY^Bi2KZCbT!VgI{g|Uv#q@-S16eP_=s)et{Q0Ul`g6|EGRo2-V-5;Ig6t^(bQ0&> z@fViL0(tV!0;m5s$l1S^M*YioqW|vN(pz7}kIaY4!Ql5)7u_Jdf@VM*1FCGb*n38* zzu=L8py~IDnEDQK_|p}5(?9jw%Rv8mg{&?Bg#)hFyY*7=;a`|?8`RKDzaXom&7TkW z{m2u+dm2B}Oj!TEx&MWD>tD9;-;`bdzh4}0G-*!`nD2E*B8Tz-&yLSBT0li(gc=6a zqgXH=u8o5CU~g5WuvbO3QYQ0`W*_`IJ!R$E!EJq#7}@@lXsM8;I_Gw|{MwGMOoj<3 z$+yiP**OTg@k2YmZeI-d0Z4h@b?S1|fZv(iNlsAjDb zO9q0@Y0bjDP5_u$RVF2J;W*#DWpbUAka?l4(vz;@SE=@0K$pesSyw*zk`?rk|dM&N_uCdUB|mJfk2`gr&IP>-;whggL%hC4;lA|PD$R)nMsmvv{o`N&Xb5Ft){ zXdB~kKfmkEBN#mVO0cKmEk%8C4*dfhL_=nM`C81eP{m_GCP`nVD(u<=?f{?8vc>Hw z^~}0;C^GP=m$-qV+6nzRU8UhO@;Lj0q34D?qbdI_wS@ed4OW2Mc7FUoSenvvJ=OWF z`0?rO#EdVlMkd$kFIt)^BNaa$fRoFG*JVMXo7ERUp2`7vXKk6xtV8CzHDh0Hus{Bi zH)E@|efxXI_xEFCdylXWQjWdekq*cX>T?LLwI4B6&U{)Sb`1ECTD-s%56JiDl#_CLek%%SS!pOt5{FDdE#fS8|FN=EB9O}?U3}pCd{X)zEq#@pUDV7R zUiAQ2``L)lGjGS6OiK;S4*K>*=s#d|vI*@J=76E&CUq;~tii%%HM3Tf1vCC zm+tBxh`z=PlXmz0&DSDy+)cBLR|KjK`X1KWwwaaB41Q>=HGT%;~%nv@TOzbn3Qh;N_x z8CX$t7_j^|pHdRu#Dw^VjLW{e45ZDWW6viwd?<{WE(IcAN^W_6)R?)>6_Fp6&-|@u zQ~nENn4TT7)vn zOEW1K;8w`8Qxo~~Jsrg3_t%OIGcYRn&>hP~?JihW|QytTcU4|W~AF6(YBOby`@eqilzVP21HLu#)b9@%$hz*-mxB}OsbQpH8y>l$z? z$I`8b(w^z=xNg$*Z63w%qZ7Io<_&0B!1B9jtiHl|p}DsU{!Ga?Q-Dq8NKjf5_NYa4 z3jM;A*^bIaLyv-0os>Dq=_itv=AUgv*>J(aQm%KGx7{$YZ#1OE6yB`uw7qD`0nl># z+&3>a=L;qqGMGP+MYFzJ+FD+j1w3)muDV7)O8{-PA=Gx#s(7WA6kO#Tk20n`ErZjEp;=1<)iR3jYLTLBC({Pulq^6>MG%hsP)(7H2ItG z<^-?#iQM^~@3NL-Zg<)rCIk!j8|PP_U=u#?wX+j3-`jC|=+L!xjL(Jy*370}EA3s( zoR#N;)#CYgQ5(;%Fer}dZ_D=red=PY<`6yiqY%)ju!{?~uGmT%JEsel+?d!>-lKi# z?TmN1NlrfYX<}ug5XiouU!>vtGYBV)+bH}pY_tlj1AK-Tj zAxzcZ(44v{J3u+As)bu$#3=8FP3n|=ki_hd%!L;tmBtKyXKVQ9ZzKCuo-~kh7|cUM z5-`LvA-d1b->(zi=(2O`$t`t;Eo*^}`(DgK1fTcj-cD!pHp6)n&4}Hmpc+c;FVUQ| ztpHvc{-c!wtOYN#66HTtRf9-=!!Y0J8zRB+@UO5u+^i^>JC$+t79Qhqe&A_b0SgP7cKMFSML+(22m{Xf<9UvdvRV5F^6-g5b`q z&t$QD#f(WFncS7Ay_jFylgsDM{uc!cHKG;j%*!6)o?u>J(QFf}(Hi@OK?Uv75SYI0xoXQx~1@f7)ee5a&{-6sSL4B*g&< zA{qZ-nlI0kZu$;7?0<*3`o;R@?^Y+OYy1sy+BIT;R&(z{c0F`it&fRb?3`QDa3GV7 z>L;UT$q&2kVyzOSO_A5eakRv_MS$Pd+Ir2_-h%!s++qoAnZb6M*{>NL0Ax!PenLd| zvzXScC#{K_pW&UGpD6$XWA^kE_+!cZ&XzG%-wMglt4lV{h?{!Cb(@VRV@@nYP?)u{E@U*au7%bruv8&u&pEYNa zN4Twtc)M=^xV8*ZE)f9^vy|y=}ij817$_jna@G`H3v7(HxYm0-03w- zb-$!saUM*fS$9)k`d|!F1`!)QwM)4Qb8e=$qJ++IK2#!w>bMe}fj(LE`kg4siui ze}cd|!ft49jn&I%^ zW4}Nm+f}lb@buTLKDz|3cMVc4*u870kI^t@jwNhgeN0xz&$WAJiZrIX7lGc_#C)G} z9ebQwZQske6Wa2OT8hA9FLDVZK8)+5lr8O}l%OOXv%s+uNvz{xG?dKB!V_{Wz?yS`*6`vV%;_$^{3>M!47cX*rf#EJdRFG^dCM z^){_?Stjav{&`T+^rd08n}#!Z9|dV^fszY{ z^mMH+hB#e>Rd3#@#`_t^zvHoA8v32=V@%YkvsNCljtUzG?fU=JTtaQ`wEH2Chca(g zox`o~s6%vmBf1x&R+g=zmEcFO5ANNRCI?t$usvvTVNR2@x_To_;&{?ULHyt+G4FVW zOY_zZE3a~!?^5YY$4JroGychD zmV?~3RxS6+a3M2t@wRQtsebup*PXM4EqW_BCX}k(mB-S@j<(=ax`d74VL=nn%EqZB z8Tw3DA*678g^F6&UJm&V+H$#@p5T=&&oik2GB-x@<^q+_w9PPT=!ndRW{Vf;BM}szyD19A6`8toxeV zv?yO+!>tc)yiZLmmO7Q+P(H80cu*10%y?;YQ;>FLNKyScnf+PI&N=!knVC|y% z4r`uEgwuK{bB4L2ghYA$X3>o+&Nj~WQ zy{ul)DRO4teAmJx0C+oci;|D)>e=2b{jlBXve|^`Rms0jN%m#!k0~ZzSO2OU6vFr_ zK?;h`!%k7J!bIR^X&84aN?6MoeFn-7Jgj?v*S#YM+1-*4B|R#hGJ$utSYmJe5q$(h z9F(g2$&ELZPffTjK~a`Yg9aEb-d@kft<9zG+jsok(G=9=wMJ#@*~cVkN!ZSmw*s8q5&lIRZ^a#Y>f)NNE&V)$kT=l~4=t2B#H^@@ za_U4tGl%->B}^l!pNsn*=5976Zzb8Y6^=#2u7I|qq4mQ(6wM-&%~)pOV&^%;urulD zo}N*qxq`0>yD?;is{I?wG4v2qFfmX6)jV6jZ)eohqhfAE+t zwV9W6`qQK^_?bJ>+$n;gbmHy-@Jz2-C3Wz zlTt6aFIbqea3ws>Vbzth1?K!PViM8`^+M@5vskz;Sr*%*)6-a6%Elxm63M&MtX_Go z3@QV^L~&`9E9?(Q;`xb-iJ`hs)MYreOn%cXT87o1*rcyq04;Y}I=4w0r#XKN4I0I_LQT_8*VSNq)(+y$}#H%59W$S)en942k{(*EjPqz7mD4^dc zP`(V!=Es9L7cPalu481XV)_es*QcyFJ}?dl{r$+lckXV}{~vemo0Xra29Z2@Zn`T+ z7)p2kdoi!y!6jBJKr#lR6rQu2h6Q z>~msw*B2TpKjNU$Nk1&KGv6~{n=7FJ?LBc*C-r`#R9c;tr^PRZ>9~F)+eE2K_Z(1A zb57gx`{}LwHu|dAPH?QO#4dh<-5c;@^$==&jvK8@&;q&`LAK1Mz|6u_0@ zlF>E0hxtya0{&lwFTt-+@)!1!5mp(+^NLLaB|H8tL4Aw!ht5OfJoXtLgMQduX!6r7 zV$Y+c_d(vJ_h@e%Cv{H{=tZ3m>XR*sA~H(1yob;5=!37&(@MG2E#HK zR(%6>Ct(qbC4o7%#*n`GWeDEF9JRt7NEIi0(!|5YgY-jn6*wtyw7*?6K>@i1#LO9& z#%Auy@t0mx=XQOmL3gOBR&cA%^htIYtYZ8n&%0c*yD?<|aAfF4D_h}y7v-ZN3s~hA zf7d$Z^SpmN9TVkN^sv4 zx+*Una#r%&h{vlvmk+d%cFlS}C6b`&Z0~wgnE76?uLL(Yb^A*ee14M$^k*t*ss()5 z#SOsnpt^y&Cc#QqIzKpm&lO9W_BXsQHU0$E5jCvDN5Or92&Zfs6NSrO16iEOZ^+8eSEXa(xm3M}}Q#*BWIy6w)g z&=2|6Qb5VCfU?l3t^E3?UU6IJT4G>+!k*Xkac3ia!%QEljFb+Z@7wQ4ezbgnwO&PM zed?^QBkFZkRv6cl;lj>h(o;o8-9YC$aH)Ml^n|bd%>`Lc9IdUKHq_D>ojMsH6VKG6 z_-@_~RUd-ht)!`oPLP1s26ozNBNWpYwtohd5qswaSU|1t6=G-)V<~mR#isjV^>Wm<+hY4uH;aI`fUXB7}%@VR=ZSpG% z^_CPLQ%s?C+vHKacA4EC=_jL%W{t$Rgg2(m$n{fcFWI`hc-LI4RhOjFirjx9D^IjQ z_o>Y$8{=0bofYGnId@3bY|;oZXAC0}yD$tjI*@_tO@%;^L=JZ2Jx{kA)$`)c688p3yr3A<3=U_w|e!CHb{#{5Q6hv zA@Xn$M9A-#S7Yhj#sy}hyIcZo0{O<_rX*h795sTwpqzrHogEYUiYgoAp%*hE`M-oA zlT-Z`|8dW4dN;`xKIub#Z6HGg<8eNV+zp%BOKWv`cr`^io9V(8vDAjeAHQcdF#Ju3 zYenk{e_jrWQoK>wnCc%g8$qxTm*J{1vDX_ni{>k8uhxR!tB0YB*O!i5O?_8QYj#~6 zv3Y~ibzU!Zx9of;^}6|@sv$;Hy_oh*ci0dvKUOw5mA6dP4-7t6r?iuns(Piw$2HCn z+Hr@Alynt|kmwXBEMmwDgU20hF$Tn~;83!xw}%wpA6eSXd{j*cVWMy3Z|#1iZP)9> zUvH1jBD2iTI*;!Pdo%*dNl^u$47*Gij17OrL|%H%Lh=(+8qxCoOv6(0aPtDrb?KhsD)8xt`+shr)t zr7OJ{I<_~D)_c3K_G?8LA#6Su_!V$!ED+{+U+Pu>^wfgj!CHssxFA2h{5S0OPb$1K z;_lqFl;7ANy1n`A*q!O0*%KY5{ZaVz_JesSSc(0l4Innt{wl~4(*rp? zZgQ0<7ijwe5jSbUJ)&-U^LcgsGGMsxl7?0GGww@MOvF0%UN-=qZ;rHl zTWb-RYI&RuGyzUy^U3#FwKGG4ckZjRq<9g0{`9)8#MxkX>ZfTL{?c1X{|Qy#P5o!n z*_IVajl;dGg}+uOe~g43ijM$dqIGh+Wk$kaVP>A~_*9qX%qx*Asvng81W=WQLnf?S zLLeLz#t0vk-VIleL>en`;MO?FfvEkI=3`CNYD{|bfgX2L0JxGjtZA{H)Nkp?!j0z! z5O3(XAfDzr$Xj_wI<}+-^1weNtER4qq^M#4mezg$n0t((Y(>ttv zACru1(*(pDC1s8stn0(Va?dh<~O4f+n|BG)L3?rZQYhkgbSIO6^)y$0T2!e~`!hwvHMdA2LS)*$F8zH-HA2OTU zP7LdMA;Q%Fi}Yor?<)lCcfz~h&(_$QuapmYm};0F9JmqC$*nW)Kk9O8^vS^I`@e6{ z=$E(H+<}C%1+aZ^OKajQ%#XaEcHi#>*@}BrsK;2hK1a%V*dpkAWkQg)aVE>)aizo+ z#XC3Snl1P{6yGNmA1as>PQmWwcnb>v>*)CrU??Fg%CK3l>8iTri=p1;G}oHnOr8n zS1$J|X=tX?8ZVP;-Vw^g?RtGG`dv8A6%STWs{|PkU=zP3Luf>>+U_hh7WjVj!S~C_ zrELu$NevgSaX$H^MXp0_>8~R62!0{5N_;^{54(gcZf9Pt=z})Ozri&)MVz)SK&mdZ zHfwr|=&s_43du2+TJSSKtM*?Ax=neNpCt^%0!a%9;2ffLciJ)jz5wN>$OR5NO-&cb zQXE?^VC=OmRG?LTePpcHI?WcsDull9o*dR0x|&@w^1Cg@NzDtG4o8#^<|B6wF=6== z3hsa2|L2FQU#Vx0aYLQS5uxkZVet+5wrKEfUj2#dqkf?HM#t>EakrNEgU=lc7I+|A zWgT4lTbdqOd=CKAH+2s_?b7WOuD8sK`{=fofgC@)^H(diiAt04MbqQtKYrUNK8%@2 z&05gMp8`hM!Q92w#H3VoCkt@q9aW1S&bJ>OV~h`x#JAPgl^34^tHky0q3SG$D=6ix zx-2{}ENg9m=OVlunQ)fiD~^Y?;vV&izE@)9Bw~8%FHVn~mC+BjMuOT9x+AGwqf5Ty zyh}x;XTCHJ9O3~Q$O$x%XRGHb{M|FP0x%TxJE(l@K?m=7M1-N!5M41YVEEAul6Ays zrSS?-Tf-k}H^jFR#N3uCn7p&MfzH6K!rIz z$EQeLS{WJp_WI(Be+4$2IaYNG(q$_(Ea@fqfJp+#B2VD1Gzssgf?qV52S9s0!9LZ z6$m|9U2xOBgDD%wdByVyxH5q`iZvMrC(eUaSA4UB&$!w{^_#>lnV#72|fz zuql{j@rqgan;TaqE>W*GDm#aE!}|zn{y>ISAokb9tJuP9Rm|!Q&KhTckBQ1~D6ETo<^#dq$AXsI@+%7JAut(Kc&MV`l~HLF{j@i??Y(Z%a?jk z?BW|gT85_``1lEGGs~j4mF$*EUzm zf^DhNVS_^7^8MNDq>-2BWuHv>s@?7b5ygK@tJn5ypdB5t*r~}$_zfpFKv)pE%i7x@c8vWoD@&W?U*U5s94{f; z#fJ`a)Q@yZPB0VP)&JIVc$g4(U&CvJ7wRAR_%!ek|GpNyhaQ7zNV@2|JRPR$>^{{UX;vi;(9}AkmtnB|cCdWVMDF2*K zPUr#Fa1IF|@d&%SsXQG?l2R)=c%ZWbkDfi-r-^fQ`?Nce$fdS;_PHK0&z?%%x7_oCjqBM$A-nCwt*tz*h~@pu zIC9teeE0q3Z1-O+WEaNyfLFsye9t6WWc_|zb<`&hLfv3O;jW{`~MJGiu(|=yQx6 zANJ$juf_v&X;v%COD(?m?zzpK*hpk+pNrJRjr7~185fHq95|m{+Q?Y8>hW~YAw{0+8incl0{oHYUqSq(drO{EmwkVI~D`j9t7Zk@vF|7gHDbXZuy=;J~j5LMLF`q=&pv<|Zs3=}@b?_U$3>*uDsYYW ztp94KbZ7vZcj=-^-@_1aaoZg@r|FTi(Dzwuc}(o1kuexbprVYq8Pn^#MH?$sdDcL6 zUwS#lLO?yPm@OGUu!Zj^KK|=~!Bl@&I)lwY%oVBC|B1nKe|_=$stai%y7TMT2X_m` z?l^3S3u(AI8?`FMicR|V?q((Mt}~}yokL4pA_^*>d{BpTGizcMTX)P+`c!Kc3O zkD*R}u|O!MENIiDs%g+h1Em|$tpaB7ZroLv*xr`JevpL^*KzzK6E&>0S*F0Bv{-!3 z&{M}@3tSk3G%#pdBmuFU@Ku_W8$NfOma_>UA+T{o)_MA569kB_V*t}Bo=q43MK;xk zEJh^*n+0|-5-jSJKYzg4*_V(xQdD5Z>L_bF?z-3h`c1h{B5^n6nS|EOG_c^V{Uc~8 z!b+5{5MdzdSSxly_s&EtWp~9nXHeZ7;1r?ug=`g~Z2u_l9Qrw6LX(0Uccu;(QkgDM2X;no3agW(te_-_qL%Jmx0IiU-8P7`3IP0HW-*>K;*56O^ZVW|)uxd0-} zfe-EG+y=cAfJ@j(6MZf?DPZuOhY0t^ZQim&dz~zixFGw_E_*hu%14UK=KeO@v-#U)U-u;?I z9)U$%&n6k4G_)vtAQruJ-g~!RXyuUTY5Nn7fFB5tfm+kpIGVLHm8Vus{`|9sa~(Ku zBbjI)YgwRXJD+QO=R z)b*d40o|w#PRnZz z7fAA6Uoo^`_~RlEqtZh$xtWu)4xg9Nt!s#Gyi5NDL2ZQE4qkON!%RsE|D@GX@FOM% zVnO{XzumpfWgw2ajAqu%Mx@7i$I#C$K|Lr|HZsU1!26gYK zXTmuS`*8Jtz{TCNyc+dsFM^P4n=C?}`-NT+qc&7a>#S@RTQA)zL0qEJCsp>~_Y#-v z`v_R!O>h<(eNo=9QvJG3qnw-_{Dakotr=2UYo%rA!i*0IBcoZSKmK&0&%%ZZflNw4Zci`PJlwvyz|XfEXV*0+~qL`{TYUs!H%<_+`- zP~MvxMfrtj^3rCV4%ySvmZjuzR1vrjxQRMaDbLq?>f>raDBgK#Qx!8C-Hb1wD6%}QZfQs zqd%mh@hy72aK+hfI1lo*oM9@s8+1sgCA*3c&gzL#GKcra-H}j%vQ4K-WSNaWJA2sl zzM3vQT6B$*^sK=eY3~Z5*qz-EGiogD(4facIGk1`XX!MCC+U{R%vPyRqkrpGlSF~| z(R1MhtlCs%_Cw4C-6Cc=-Zmf*C`5QI|M&7(a}aMW!6g}}Qib_W8nR|t>6_J)3_?Zn zUpbsFL~v8(^sHHm+6KZN8g$Rem)2{?t^%r^-YdjnZ%{ z*QzlHXhYOo+%F|CO?@WdqW=yWzldfI`Zo!+E%oTH+zz7L5mzEMf4-i*F?9`;!|f&} zA!fZtujlnMW382PV~l4n5ND)(XHqp}@=VW$P7%TdA1bzm?*?Pq#vqqMT{~Nf@$ieZ ziu+SpO3mh*bwWzlLR}TCtv?h-fwACYo0`e?OYA=WoQ& z3PHzk0jZ63mMKyB=fBhWtBB@~VgE!bCx3}ZsrU#GUs-OPK$XbJdu2Y<_-o&Q(l_V6 zECYPRUmjVEw_ndx#8?-9&-+7Y&GsT3q1t;EZv{+2xBh;}VZ9>YFJR*lDg^{JDsIW>-(t%H$zjBKstO^y@$$&~oW1dx{A+%b5e`#{&H2zYxf{_-nxK1@OT8 zZyBB2)Q-uPZ1{Qa@*jJQJ0a6;@vAPr^#ozp$O|9w+J8}K;d!_XE$2>`k?#lYS7XLN z_WwnOJtpjH)f1^D=rp`7a&e$^^qZ$`Y*wjAV@+-mX$xOoY27H-Sfkj8hE(IFo8eIkj-h!gt&Tv*UjA!em7ISrr#wG; zY_c_E-mJU71o$e^8L2S^CJe!ogC#+R!4 zGL=u^bg14i43jckO6zFhlzn&g&;4xw%w-r*M9})HyjYMIc?Nnl9?T;6n;u`ww(+3h zQc_^McVopC^zR7RQ1~4*-SAlZ#_b})Gq6&!nevAS)E3z3=c#Cf&k~>t%q;QRU$~%q z#oP9*cG(y#EaF!B4ETO5j;ZwK^qbY;SDzy4fm&T{?!nicgEo7mruhw_wW?6|Zj8}= zlE0#!V!boyJ2!%9vSBBtqLA&=?aYs;w8rQA2aa2>BBz~|cyz*Sf;VA z!VZKdfV}9S@altC{}Kctsu~INCTE9*JP{1M{ z1QC2=S5T<2*|RVuEc|UReYN`PSQ^x!NRAwU_xl!hI@mcE82_--2US(+L8%(WW+`n( zN&t{hi*+>X;qwgYtf$A7^A>L?odlL>p8-2%KgAqrxfjE`3ncIB$dI|&H>)mTVpJch z`ig5LMOsvh+KYA$8_eC+p#$qq;=>XaF9RamMCBDR zi_j1tPe=r+Bfy`3KfUUo*Gc~Zgw0LmY%)ym=VCpxFDU*pj`*1{uL+PDT*Nv^f`P!c z^na}BOz5S`UuIA|dl$1UpU`}iV66|3dSaflDvER4iGbIX9gpydo&hUuiOK5dwMW9e z0E7RoRETnHV7s}Fwg^U>_PUGd_iH@RAM%eq=IUhlsCn1N4V7YxY%wW|TwR?vJQO=^ zTE1`D&50%atG$;Og!h%8`!^;oSu$;g&3B6$rp6X&>-WjI+pMkswjB+l1L~{Z#f_*K zE&n(7ktzuBAZR)>X=l01Qz^x8Ev?ju5}`H0K+>Sdub(%siG+_I?6R5rqx+1WJ>-)M z2lwx8-mZ)}SRPAQob|D6Epi|_aNy{6pY?Q!w5n-*rlidu$4U$C9t_IK@C{0DE}*&~ z2M6_~^a*Uw6`#&3 z!9(~|Y=NW!1$DK09AGVtVS3uSag?J>#ES;aWgR!6H&r=J-wLk@AS$gSJ)nDobTsB=9nC`jvErO>I=aYTCBqHvize*9TeT9rPE=ka)9 z+{fL|_HmM>9nxS&Y`uNMcLQ-5j_8^^J)Mo>!d3gB8CSCg^Wq5J+_j0?7I+l-<{Ny# zqll$IxM465lt)Ym=9zNMCyKm$UkY4@?VyJx;h$Z_n~2SkT}5P?2D*3FV69jIby2!yCXw(dEbkF z=y^5DL5iODZK`5~MHAtQEgqvARE|ycg66qLNH}-y-??E^chI-$l>~9E`(`^~j%R!E zCBV@GNBv;iHzUha0s9LL4C@Y|L#@eP3^n5=qA_`GgWv~ZnEsv!aZ3M%eZuX-GbQLV zTpfiY8Y|iRzX76jrB0vLE5SjZR_r^kZ1u*Ek`W%yZ;ftV)ke(P&MmwalVJgWrRbD< z6e-;U-~Yw*iBQNsSN+x>AjrH5n!RT8UVxVU4hDk`9@x0jk z!6EOO7qoY8hKU1@dZDKkIIh^Z(Fbp)QNuhe3Vgb}0FDb%Odcw)^qt*Z<_ zo9gaxKVKkj!8bx5%d=|O7t)Ph-zJ48As9}J>Oeh#6qe6N?u(viKs{%Jz)x$IUF*K= zpJ#geZKY?qPZwZ%9_|lVq!ZNEzFoHv{sW|noBm?WUp)Pt?}gL!PdUAH?{jfJxMI&^ z>)z4Z{zQE>?g*z{N7ZPpfygocsy3ROP-X==pNTj$|4#Z;e6p-4J_ z4D)vmKPxQ2EURK#!BWs-}$qyp$J9p*HCLzAG~qupw&_5rqr~d zvsKWUrPP)M)s@S`mygKi65iQ*q&~3faAJdBWTNYsayT5x>s80o2Kb@tv$i`^SN1Kp zzr8|V*YS5<0Q`6hE;3Z*zqyWc-w*@Yrt&DvBml#>xy=mKffK!*Uma%W_WP``^bYDB zwc?T!igM9PUDB98B3x28>4t{43_rCu0?vio+YfT$(Jvl8ge&mMGZ+f9NY6r6!&w0i z%a5Ca8kX%ai2vI}t>ZSQmsC&i#u^fAH(S-T>}LH#I-jz+OGr_hIjI-3`@L@YK6JUJ z*x8Kkd#q!FI|CpC%LvFD!HTcLLnkp{f>HdlYWbAmWk6)n%)e+`4CSrq3*!ueAekom zX#$UpY;zG~fgo&(&u7P%S^|e=znFeTTzPbB^xkKdsW2O#(EIr)N|iesSUxvD)9YhG zR}p?z_Ck&tax~6eMoYA~piV|z>~#%In=ZKo!L`yb>-CCb@Ny>SHHc{Mbw(OJW_5<>9ukWSlk-T{CJyWK%y}rk$_TWc!>n0U#|JW;TDMBQe;9S(1 z4wm2CV-%6B@u#wDs?-%V_u8og0Z$Yi)E3t$7`&uJb?uuYPuw}f4H&1!W-GD|nS9TA zSA7OdacsEX0G38K8I=_7ab`qGYhez_g@~;r@U8>Sp?F|>M z_m<%H7acOHM(OJpNM$A^_=9jW^zlv$@~t+cvgQoZ7_zOdiGek;y!!n(3kHr{DAT3iAm&II9!!Gl}U57DIW0fnTTieXsppH z+dc7zgi6(HM7JDz_~QZt=|)g04z7qvDR#GIMRm=*!i5*@)g)!$`wOBfEvujK1fBmG;ZSM<+5{KcTRkNY3YE>?D;>Ec7BCkIWc*0PIfeZM5hCwS_dD% zAu#Q!6RjwZpm8ja$Zg*UK|)?@nE6sUJ5nbzE_uG|Rd-%ld}7oycpAkZ{@%ZHVOHvs zR{Vpr9+NxSI3TMF8o#`e`&Og{qsc!IwW5nRFFZLVyHba5+arw!&rqk@z-6eO!KoR=v8L#+Tc-H|4n% zuDG=nCVn}v?QIlrjw|(v&9ApBcY*US3h*awYP$t985s#Npe^oAagf?d5a9#}wzsi+ z#(=acwNY-#Rt)6Gb^5`fqEc{<8Di6)jHx6?d%zA_js>WF zFx&F;gX!Ukwf>Zc1+FdIpOVW~Er`DXbM7`eMmxchRsckaoWSb|F+#iesb z*pLB}{bxL6DnyivTSj*G;q1 z$vi3d(o6OQkVAyChm326_tjb)8KhPaz%X(e)$v!J1dt~d`O5`mG~+6KpErvnHGe~o z7lFfIJ6YHV0YW&=6xY{a-_4}JJ52lX85?g2t&$tAX~T=UNIQS$ zF+QC}9qZ)0731!*`K1dHSR4u1abw(FkE;Ec%ur9xSAI;RXZVoq#&tGq8C>y#rdhrI zn$(50-4vhvhM|CAG7Pj#{heB}lzM8_nO@}OC|BgppLx?OH;2-E1?5OWLR4erKGv}V z1snfx_GjVyw-nQRT2+0s*Dx7Pyo!UyLV^@iY}{@zfi#7F4%ymiu!k zErl0@V|YbVIfmh2tlfKePQVdx*6oUXR`tG^pUOt@DaI6%;E-Oh#R#EnCl}FoQ=B`3f@IUeVue*sR{Fz zt}8y|eo#!>@Cg&?bWP*vRgl(U7=?XI7NgDZl}U(Izw(XpAVn1gYZQH04D)8rbWJ>s zk)XVV$-X6K;lwfqo{pz>m50e6TkHO{Js#+c$*i~xHr^ZCT03_T6qdV73XXICcH%A5 z-O)EMAH=(=FX8GA?-a$O%k1flh}xlK8zi> zZqmNlae9r&B?(>lQw*)4S)9W2wb&$)Ct7`R`)0owZ*2LyyboNDRGKA09e?F;omp}s z)-#o&o0m@;FQsV&&1&k{$IR8-_x$;j)W7$%^{C_5OW@JXrhd%_)z?;a{r8O;kF}^A zN#I~{3m^lH&G(fE%dzqf?Yf!7F_W_!7lSrYjIYRQL!EuDcEzGb5H?b~p9`85?JQ{B zNBE}KxKuYB-qvpwTM!2lFn2vb$FuA zY16w-A`|yICF?~BtgtuzvR*?V!v{x#BpwU{?(n6dlN1@=qxQmLd5h&Xqc1bzcLJ`D z|Gdl^9x(>fq1~yvkFpV(aS7R%74! zAt9r9#8g(f^CLHr4SPHtp>o!t_!5+#iMaPe_Ggf{yOJjx$m# zYv(;|Zx#nWI^zP=8Tuczt<8<5BkH9lo;6QjXW)F_k>({WPRyX~IkfxcBSdb&TS*^? zHj0lD9=L{TFKPZxw;LKX?$pinug~Xi3O3Amx4?YR5bmg8T#w1{DhS(rZjf@7mOFnb zLyQ?P-vs2;u;uC!J^j~W=2a}E`907VQ)>X4Vcq*tAZ5X@Gt`w8T5tFXG`TcJv@s|^ z=$ML%ri26n79bva$S((+qbeJj(>{g5oko+_ho$r>A~jbX1>5@MI_^^K>zP{{h~!uY90TY-Zr}Ml5J{ zHE}x{SuEMO`-w4BrwNFeF&)6!Fh^43f%A2kg+jKKkL!n|&!-L_b4KPCwOdZ82C0{F zHw!KMtTQGUHZ6*WG>USf!f?Q;zv`r)|4)1885LEwrr|Z=1VJPt6gg)_M6%?pB84D1$Ew+dJ$HKM-kx>)*Zi5aSc^qbwa=-2 z_TFco?|Z-Zd2p#ep`@Yh2s*|mh2Bvm8tqm7*Lmui(LY*IO?W`eK^F1PaXAfwn(3cmIqw=YgdpYl>%K3UnFq9xV1xVI zamdsA{~4Dn_Pdm3VD@L3i2d^1FjKNOSog7N$RTkc>iA1hc73ZBNdyH2gS$jCE+mtv zRc*~12p9_i&qNN8X7bY60cazWxK)17?9%|(GaQKWlh!uPkngiaX`-&sFn36{lq2hq zH|0+u^R_rX?oY`{s1*=-5-@@&#orTo{;xZ?e+m0wy!GPA1x?2i))V^(px^(oPyE*o zLV%#s0+KBtvz~i{i)a{|WC5zJ7jVc=RZZY|>J@<@EbHShqLlG}6~Zis&6Uyb9_I)` z0qDb6Is@o{fEF0Crj^XX>a(Aua_%smOUsWKWzLU1wr33hWoAd%f6J&6nNw23`JIqg z5PshA*pxp#=!Jt6apDkpE8vvlb@A8C)v2EN`L)z%+VnpEa9lbL?pF!LP(}BL` zR?FKrjr^G*2WhRl?iV_zZO*R3<$qG*m*BM(fUi!Vml@Vx5#7<00^bzfJpKNoS>=4@ zzK>l~i#i$Bkrf1(C^pB$&v)(!RYVf^y6XHp2onv|V~&7vuaPzevEvWF3vPcWc0Wlz z1{txn(javbQ2S@OC9FaudQ2QLJ6E6Y!w(pYoyO~IpAv?-Ypmx3a^?m#S#=C{+2Nk(ln&B$N6nXicnAzQ6!`H&zG z8DqP>>*;^G*DLpY0v^qo--oD^t|cBHC4~vQZwA_ea1a#dfzx8@r3~}Ihk4KW5avpG9l<=J#b&z^mZ~V3z^Px|8i&ypz^G! zi~o?jq1&t@W!Spm9V0=A(HwW^rAaEFN>Z!Y_tz=wjB7S(b>nKTv)K`YRm%n3oZ<-W znt4^(dhqFyhLghK0Re=JR#Sx}yUpxxa7&IfC79U=9H7VaBoQgn#sVO_nl@I$G8J_% z_3cVE1JhM8PMC;GH`Tj_qc0hy3WqC6xz?2N>A>nwqy%PC8Mwt$7aGQXv;lVURU%)z zuhUbe%xiYEY5EqsEqU6${M-=lxEx8Dkh&eMGPBO%SF9yvhaRk1dWLnqTuR%Byp zE93=fuGe<4(5y7UU{tx3D<8XO^3a?_*LLID>UsVixrDuJcl!sgB1z*U`(5D zUmqc{j zg8(Xh)rV|=i(Fz9NMqS;#{NH{PGwd+4S%|gtc z*DM_tnIw&;H}JG_`J-DL>we`bdN0kP)B9-ELMdB+s>$8y1MxaeX6I&;l^hjXpU;3Z+%J8gsa zn`lL{r=ixOj(n1$2cK1Dvdjbbx|zitII`xX%^$Xm8k4tP+Hqvb603rdP{)179KGi3 zRI0m`Z8$++p#5RyUgw~lFa?V@=693cvfpvIP3{*xFyYH=;dFHl=9%cyB9XgPZI9xA zgNW|VqF|oOc|ozCl}zqA_oOi1>ANJ?(=YOGZNCl!eWN5hrLm&ks_J^@ zaL2H%m3GggIA0brWA|=#oBFP4`xGi+1|=#boC?P;`qpMQIka6zncEoliwq5O3jJ_e zJ|;@(&JZqu1Nm4JMvT0z_1C=5#cOEVnXLymfPa?JMEBAN?Vk4Jk2GLrgCf`+; znBqLneYHh?Y|q_)LqUCM?8M^i@qoJYGoi$U1t(3+My{09%9#mp3dW>W72H^_tv5c5 zQ;ut*zG4O(yKe$t(r@6w`%^ALuVJ9gmM=)auA9|kMtjc#8S+uF=J?gL@k8kNR+H3m z#K=u>g)gV;C5?;hH_1%vC0~MgfvsG-rQ-{F`#0_T%GpJ`dlOBzE}YofKdJo!KJk2a z^yUkXsw*{S$&r4}Hg!_c-_RB8rLCxo=r;*j|%wp^e#A(o7pc_RXwx zrPO7yI)2v%?sT5wUM#|pY-}`=zz_@BXcjC>IRCd98=jkRQ%ygg690H(B99K?tO0uA z^ClyA6mUvLzqRo<{^ZKjox~$lDe`jhX!4$qQ}3tc7!fR#!@F%hIixPSp*)4p zjh6fc-MoYoQg%&mXp`@DKIu~hW-&s&gS*zPaR$9K@)OKaUTTe78&0C-2R0N5sp_e3 zlu>{UBT4O^8P0Fex3VDVOd@z%WvDAZ(=7v#JETw?SvOE%Hp!d@I6dDD?y?k(9!wvQ z00gD~+Z7C)_Y_%*a#Pnh-bq&2oz?5^LrfH`PsQ4ri#rhVD;4SAolt-J zU7_I~PBVctU0Lb0`>9jlF7!RwP#l+GMppt~YEgk=KSHc{>Cn)3rCpgQ5j?BUaCMT>1 zS@wsU0|P65-~|VMyO8UxG4NUq5L8^ga9o`TI>v1;JGSr0ou9idaN3BViW)$@9to&b z6FEJcm$7|+J)qBPB@m!EU>WqdUacS%_xulUkx=dqE5DC~mhAX*CoRCVOS}W#I1OZH7_Me0t@u_!c~e(d5cP)z z5;M#NZ~(dRZjcL_klKVJaRjd1Hcgnri5;J z-nh)hTLm>0p7O8F;?Q3+%0>H5$I6H^fCA<7XkfW}fK1?H+(l=ooNIMqEz)KBJfv8+ ziWV9)FB{+b7CLiP^m897er(j%TNO8I_gKXL%WeEhS2DSq+=kmH`X-?-RmrE?O`_E$ zzBW>>c$BP~Kbo-MPR%iceKe1hMFtjlbkw*Blp<5qm&X0d2Odf&TKV`)=7!?sCjWHZ z4pT2BU)pI@Aq1Z0tKU2!vQp=hfl*+2MAPE=C>Gpk!K6A&cN2PwsDdZw^@kuCuvWWQ zE=YNelNCghaKL<C!4NYca^Ou~!5M?!dx83)LosQqT1H4up%U_+{)grPFE(q{lq* zg@MtsKq^-Hkzk_&gVOt6L7tBw?H3f)QSA0^FRxU6PO_I8q>O$) z0LOw@(*6AX(J_PWSYs*Lx!@zp)6&& zWcf{b!VVcnDxF{^LZCvTb_AGr9yFA45U5IyHj_anFWv_+JNuqvbn5>jP-oX-Sp%ia z(QF6YL&qN_*lKJm?v6wi>%THZ_1%S(XMxR`EVB-zELi5_=EiFbfTIc>^a>_w7OXcb zj=CtE8lNJ&vq(YdtM@sP=k>%p&=NLIab z0!q>z-TLLRHHmQ15ACK~s7L?Uk?X@x^YQgH7!}l8g3A&tbwCCiV@z^(^=uO#%vgR>;F#bQ<2YHXSVT?HoR!0u;(%}h#y~eb(bAcHO z-kJ+svqoduB>FE1<-u~xWqLzpSZZ^94i-XO&U{42@6-*vIHc4_u$B#fHT3-LQDa8# zo9EqD1#?*KI@aqODC+uvCtjz&3D~YN&aX=SJoSYBHYvkI`hZ#>7Ow$XV({Kz>Fjrw z-#$cX5Z(5+dE3wwdeIl(FRNwoZus40`Ij?b_M-SVSC`A0BEnrfsmfWg)Fr%`3aYPacKWZxF(-qrU+_QCrAq@^0Dz-f}tU$bMJ_{Xy&WC+x#P- zqOF|;1V@8$gwG!KBzeB3RVAsY*twHYoJs7UXLTQ1@r5z7Z z8`>bbyML%w35K=^<#Zprzs;p2MFt!y^gne?AFB_WGEQUGC5)B&#p|M zs1$n#p+T5n=uG-HK>7$tgI~wFLGco^n8ZaWLzKg((!t#~#vE(ZaDBGE<)Q8h>*=Iu z$8N!<7D7k{+)sne{Wcc(r!dwlo%hEf503Ua@I5Jz8$wgQ|7NI)>Jr;Q z)nH5nxb_c-pNI6A)`(ij1@&A_3ixVY9!x;#^F)j%e@6j0lbZ>U!m8vErOxGk?6^gi z+j=rrMeTreHM_t|f|Ux)5PE^$i4tr4jH$>^r~%9XV$4tx0IQ88kh-_hE1aie!_6Xh z@}3}$s~bUXA(4oWmTP{yOnAO7_0qWTLEK#XHkm6Q|*JYYA(N0{6rbG^b%x3 zS_vjiNKU%KVI|$uom*Mb)&UHUmm`)|yFxHF_+`6}_tVmMqdP0_}E^fnT%7w7T za6(ZSaUKqjNXAJUSs_&F z>xNzvv!=9l?nfI3&EW~c%&e94Y)?{dim1GuoZ}J-@+ip~>ZD_LU-MQ&O_n&JDkcmy zL?0xDf!$Wbf>pWS5-|N(7QGCw0m&G94mom(@d$~{ z_?dQK6uibH)yU-;@bRfkTAww8%LX$7z*`1fd$iR)+(am(G+7G9(z zAeK|-XT2Ce;tGW)7zxpG%C=e0)#1-gutZm_=2qLFol_h4wLBX4H8C|*P45gLSB%M0 z-{MW%CskxPvKEh{L-I2xRf$M!zjkDRX6tzJ-FS{dwg?!7@`2fcItS5Oe+R4kPDnLF zi~r=Kh>|Y>+ow+uO}YY8%msb#0vRNr>nDwfHr+Qt-8>J8@@GFhMUV`#edE&=b+iA# z8(8C7d6Nq)0hU?i#Bx+;$l~6i2LrcIhIg}F?-}kYxSxes&cCuWFUN|c$Wr|+9tei- zL=@G#%9cH`@SaPKUuTGhGjtrDMwOZK%3Tt;5-@=ztm@6%YS7%e`TK?iz`8GDuPw8% zDv|Jz&(~Kv5?XhFFAIb$8?;p!a?UYvHq&uVaIYoIvTBS)ok&=#v@ht8b>M=$KvwTX4d3anG&;#Sc=G<@R@M#y_V?@8 zuV@f8^T`8yBY>hU6QV52V;Pm1i=36cli)IqZSVj`qF$`{Eq#Cx>rta+Jf>NcwQyiY zl_;l_z-va1tgM^j4H7w%+fM6NM~%ym^Ed>CHlDijzRYF!5g(CGhq$D40v`8E=_aRm2jbnT2sNq&rXLcoa48U&VCU@AtS~ zRV9HhUweR&Rwgl(^UJ&v))Oq+e5ODAjg%&_O$RJ;Pv#ij%4p6oi6${l^Qt*3Vz;Se zR3^WaJ@_qkoad^j@`M7X=dU5pss#_{lW)HUrSy~MZ);TUW**HFU^=Q9-;H*|04Mu{ zWDO%;$z%o{8^vNrbJ~7*h3~P!)U~5p?dHTg*OJ&CWZOlD+ z%&aAmfuS~hW=(Nap|;`1utnCA!;^Ul0A_f-#{~lPm1-z;IL15SN5Lv z6n3i{&%t7QV0z`h5-(DcrLS|Xr~QYrIW cH2oM#QX0V&FLq*9bz-njqG>vgI2e-FRJHv+U&J_2r!ZwLYYK?1Wr(-x3FIBKJ z_xaM9YJ0KfrN7G=8(r+i2eB?mE%|b1Jfv9C{DV^|=Kj@pg09!8hp6AtQs2k_i6>3S ziPQE)bVmp(U(}h$A)1`W5thEXu+8Y<5Zx9+kf1@WGtTm41nzsp<4cp=xOsd|n2k1> z@t9|koFQB^hv@TSY^oTz!|gdnmme5%3T-D3KkkH`?bN+I z-#sAQb7?p%(xN0!qJ5{cQF2AiRG6&L+Xf2zZ#P+-Zp}!!El6VBZd=L&A$OC15e3hB zj~fdf_%J@mNfQp8`-t?6qIfVqz?8 z`*^&I-SN*pqon}COs&mYFehiAxDWXUiHvnGU=Maa@X%j(jL&?gsDdi`+)e_H@~pT3fMQ;{7`3zAc70$8 zE3r*lMlfa|Z0Y7p{}sLOKU5vJeFrSPJ1r8IdE8Noo@ULBxm&$uVaUe6!sf=NkgjEO z59M1WzJ7YPwFv1RdghAh)*IRSK47eq>)HGgOkZb%9nh&pj9u1>NQgE`9}FKl?H#B= z`j)5DL9M&lhspj(sVoodwmOG){aKrMxUx;#LB7Tt?a(-K&B=f zJsjFHJR)nZsVr4wb492a%8PC#eY9&%nCl%cABndU@v{a1UOWUp5!=2pK-=P4c-wD_ zYSOO_yscRveH^h?@JoX2E7fvz>6F_}bWn8W%NFMynJQwm)k<5Id4a*XBfseboQ(Yb z!tRIZ-n*`+8RJ9S6r@jd@s09nM_>Fn&9BoKoz+RPhzaMipLTQ58>(#G)@{0rj4?(!%vnAXRa^`~S7{!{!F8h7+# z8VszkYJu2h*~1eZJ!2pAxSt6!JOE^%S*abFF3b>8vO#?n?BUug?jE^ziKRhmKS^^f zf3}~L%6yJ2-1>r!l3mTgnpMvnkli~XOC`63I4Ao2_^cXs{yg!y=WLr>z)-#cjmAaC zTao2Y2{UQUz&?(^)@k3kNFGA*Qr{}VQ1sq=Q-!*PFALPD9+>6H`KVD;-vK)+L)yu_ z&@;F|;wWmAdOK=yVE@Qe*LOpsB%z{LYWuFv&N@^XC5>*G+#y??LNZ3hbe=TA)N*q0 zJY*l}Vt+hDD5Pu@h|d3u9Hmx-8KxH5Q4V%YDc_LmAx~q&k-VSx=ivRS)wV77;1{PC zi2JJz8_|uKVJsu(e$UfNGLBWfd5e9JZ057RADeZJOLjcOdVYJr$JOef44F)czos_{ zI$?j7CE34JXCAKU9UjbzaI>M=xD)-}o_1xL0s!FRPFgQ<*J<9IZaLY?3auC(8lBIu z-uOGL#Eu%)mebYoVAG{d^y|q|&sj5q{%(pU1QmLE($X9@d-izC4f43^WeGv9gk}2i z+>uW00IP^jqlxfno0_$tYObeGEvjmkdK6Mf8M}64=Z_ z;!G!7?#ypH5t&-($dP457jw4g-10MSu;nM){7<_JLyDOiHWk5|q5SS#10WRoK!3bM zt>PD{eHdO+JWOJ7VIbk>hC?*asOud}Q}lQA2ewuGMpEGr9PM-ThGf`rfhUZp?2F3J z5K9%pUacPpIR*ZrNV$np5IsgrO3qjYx6KMO8VURkV8Yt?DHVCVz2_9ApGfw)j{)@q zp@%T?PkQK?Fy^Bhzv{T_4yQm8O2Qb8COY;-I(s3F#EUiQ zqmb{}Jo|o9ho1O^Kw-9DEPP$POkGv%Ttdv2D8;>xu3z2bI_SUd znPUn@+{+eoW+GUuBB`}>z;1K`8%v$e)%~BQttqzmJ^2_kR~T|&e+!-lg@x}ja3xOh zOTML=A~B4On`U8X<4Iz{{nt3X229-`6I3SnyLBC$hdg16A?!O+FcdNEauR z2r02J+WB0oHuZS*+88Y&p=_qPe?Mt9ezb=a(QHLtR}s?h{I50%piar4DM&cL$upt5 zI5Tqso1dB@RMNGGHGx|?TsXuVydL+1&>iR(@nX?R1=4Y|{i1CFNooyB6PzU;6a%B$ zl%;m93o3b!@|ftdYcTbGh5BO5qu-m2e8psJ`4@L`x<7vFU$Fuj8$rqq9g=ol@G^gq zhRc3^5irY*({MHAtHeZd4JuMY0&vv2<8y>qGdsMzI+KQ6z}WT!NjV3g+Z zt+=U#I!moqSHt;5l;rtivV&vpmnN1eRnY}H8@6lpfb=~o6T@5I=WbqKE{dwOvKqA1 zR-fj6EoCc^=jtE%xnPp|i57vu&(t-tokFU@^KI-3Ph+p@^xPuTeEiPaQu|H3Q`}wO zv|xWzwKzXY#8)hIR;Ws_|vRk^@!!W8^g` zVX7H}+4ezg5AHYEc7vQaf_^UFD}NONgBg_vUfhm#()zSuz2)^)d}6kGde)@m5xrzJQ=k(rN3*$OVW4@r8R_D)+bSB|A$>{} zg*7Pd%`$br&P3#n;_-W3*S{!U5+UdqF zpLwing^7V>Z!U9rm5w+P!as*#nD!sxW$EnIM(P;@|3{)7-V#mMu{2A?|P zLIW!ACj=vy5n58gYbb7g7JMQy(3-@i^8MJ|Xp}zqive7l~ zyheQox#K*42PeYKGJ(ZD3rCWzk{kCg7<3O+u1_ET?vcN95dsU+n>nm~cVEDz&aHHD zr$e(N=?an|h`ou=k?B)QzwzshqjJ7dLW1%qDwm{D^|3#n#i0LAURG`4Z(TbTw(Io5 zNh2YzlS@8Rc|7SdI2Ihrx0t&S2bygbUm?!v^QK%7`fr8G;SDFvcQa#nY0S5xOBYLZgfMTQ9 zbC5@=0#y7n9{^D_3b^icE5t2fD^jNeGy^{}{N>GuX^>m12AI2tTH14H+4_kMAGVJQ zu=18<)Zr7Fsjx&`EdWbaWK``m!4+dL@hDO)Ww>KKAx|WI3-`6)W=;(2q|%$C;X*SfRflgcv5gz z<`8ok12Tl=tj=NpdTK*>uoNZyp1pyn8ftXLmArin_b&8f{cl_7yOHWrdYL2sN^gToo6eXJN!*)ir8b6uE0JK`J{Wa=O&2s$PV~(rGhzDkJk` zT@-!G?qyMdVnwH|9iHmuk{IM2y!OF?yo_$q7&TScpg2b>=kgklASkrTbsI@(?C79W zKrXj$XI8E7tZ7v~Oq!^p4-TNGxG5fP?jwWAh8gr{^@5J;_Vv1Pke5*_-!LG1jq5ED z*V!Iy$Q$O`+BDY>H)+#VUDIAG$=x@65Re3mx{(EwzyU?W+M$0CHNX-$my=hR#$fw_ zjHTc1RJF{5VY8PU*e^<1=V00Un8%O?+nzKW*rIlp>E39?(O(}xW-+IN>wSe$*lflD z5WlpB9Hq#I6B33!rpW1ie!;|k(eA6BNP%#Y3+Ea97bxqo|h5SZ|7&A}#5PSQU6n z*ifZLt;QC4sdo8@Ge|_EmDIV??n%*)K!Xpk+;#fXGrspG`rncm?AQ$BZx2hotij0h zTW)-6eZz><7yvmb^2CxgK=sSV$YwP3C&K+U?5}}zoD<7ZNC!v#X`7p9S!O`@lR~ob z&-Cn64kuE0WMmrGDaNH(Bg*pPbmW|tKi1982J!9L-WrKqGluNF%*nX)d|IQr#;Seb z^Xrj;tgzx0RR}EnhK*KAaJKtOxDms4)cg$Geb0s8z*94AHwi-dSgF!Aw|9A!hqc|O zM<9D%`BN+A?-+-yOCbG{NNzNT%lfkn=b{kVsc3Z2G=*_uafSwh3FQ>g$)X^S?LZ7!{ID~6q zuK=3cBS~pUxAdlB$33)aoKa|yul}R_J-N{HOCPiU$#7P-^~peTlKby0$17idI_Kn; zI&gz^{lW|0ANz>+l@>4c7NRaa^w|wG?Xa!K2T;EWU6~DSbp`++u>-RI-mj8(tyS#* z+Ta$}5aHoxqxDscXVu*s=LY!HJ@~nZPol4=Zh%b7J-{0!K|vrUvnXxi_b>P?eLo>tEJlP6V6S-H27JuNuN3XV#>*?PJz-9$fibNEZGY*=C1OMj z6oDddncpOD3IQi~Ua;S-IEz2s+@nVfCKl$WM>7xV^I-hS;;WuE1ovXN1sKij<8R1>#wpoJ7I|X@;8ZN7)%nm?=5qFi z&iwRY;=Z=UT>u~mkwwZ+6*^J8Pqc)VP>t~rUWNF&V0_pfE;~jw-waD!Ud*bwY3Z~k ztz$I#a4s@As`z(sPgK9F1y-TRD!f4Z8HCyP8^t_HWXd!VGjZo~Cn>D=zP{c8u zp71o@=!o1(4Hld7yY=K;uld5@^-8TxtJjlA40kWHmDr%T#J1mg)YK!vHG7YUB5Q*{`S=MbS*_)Q!F1@^Q_)XTmuNJ2@b?1U)uI0U z()QhbFIq(6@H(`hB9t?I(XRS+Zu{m}H2G*h+0j2h3%*Wwj8cR&`Ba!aKLB)AmH-tA!^W2A3lH7|+G-jv_m}wNsN~R8WCO3Nh z78&MVH54EohS2Z7Zz6Z3gSZ5NFW2{=^9Lw87!BY}vubGglasG{K>j`Q;lsMkzq>Rl z{}hYcvR45B&4{&sS~veQ6#my<&;LEcLFL6xT~{aRDyJprD#1_4vex&EWoxbJ?A{wq z<(|a4?wwhGi3`F7o=5HMw4|BN(05Tx~atJmmo@@KnN= ztQ}73ud{`|?sum6*!lqm_{bxHHNiNxVIMmvNY76O61RzQ-t2U*pPOnUAOVUCi|B(po>PcWo3ZVT+hyzjz~H(%X*lm8f1XX9wO8k?;B|f`dx8zP4#T29oUBH&#~zA^`^P!PVSdziPye- z@Z0^iF&nMx;v|hfic0NRVKH@`@cyxmNr=l~6842EOfQHFF`qu0_uYFnJ_)&qTO3@L zNy*N_fEExgjg1du8`IY>HnoiG-ISBY&9_~A!)~`Xoi%UPXmhyQ6ifq^3dSlstgU!6 z2~l^6@}v>VT6|j16=|DVJloPW#^+>-7bbUU4x6-i48}fvoAC+t(lM*iIXlRt_Kk^~ zG>}})aX+tjUKu&(goLWwLe86KkDYeV3+I+yQLZopX11^3{WEzv^4V6t#ir3Yw!1zd z&Ow3o^A+8Dr_aKOi|i*0*yP@W+UWDpR+i^C={}+JLUaq0ETWUWhlv}9eXaS4YEesvp0E2(UZi>Pp}0XvxS;c8}bY zdmVNK5RpJE!%d8io;7qv6@@vHD)4LMMFmk0^)>P_r6z%T#UNQ&mW)O?rY1w$GeAg^ z)O@R&CCM?r?D4{kksPH2ULnjYO7qj|jntZImZ7pQ`Y?2ADYqM*|Kel^CbupL%p^)A z!2ygVbT$oU(7J95Z9;rM_xb3S`6Ez^u`)T*2u3x0p6>abI1X*~9voL!GM1v;L&7YCTJ)t5Nfl z)-2yF-NGJoFCiYwusl1K24g@kh5cnKJpKp`dARn`LfSJ#k3+DJiay#JQa`i1<-Cn# z!1-QY(nf2s#ZligvI6Q0sXkRxPpvScbPstNKE8$K<$H?=@kK`UGKE|K=2lCetyyR z;)20veDQ^it(vkZk8&Mp2BYrH(h~|>&%Wxik~Ehg+mt&w-2qy`kk-7*x|u~8MQr=v zOvU@}JD!_uj*4z?=~y%=H${5Kru=!2I?J!!$OaNg3jR}qIarMH-K;jBo)j=<*^pOK z?iv~5Qphn3v>&Q3>K`(1hNf z|BRKoFsd*A;Ghk>XhBM;_LnSBTp)eh=K&Ne;*(AX|6-mKEt&uqfkk6$Lwmbs)(fAm z0LPXUBt4ttIUB2@PP-j%c-M!-Xm?mf+y2rj>nGc`<)Y7N<-#Vj>lR`Hs7Od#N6oVA za?6+JI(Ki~jWwn?kg_+m3i$rWL^^L}Zy;k~)^ID&Pd0F9#Qqv4E<+l~)gd-=`2g|Q z+GN#t!&)fmJgBKOt;m$~$hys3;829SB3&VL95|)fl7=o`{xPe|M|M~pg+MQqaik{8 zSMrI?8zpsxD&U0VDLx}`u%?X<1zoL2KfDYn+LOUzaTE0e!gm^k$z zg@Buve#~gQ#@ulytyix+FOY@^X=uN^ni5zV!qiY z`yD1%jJE_iHd)MFACET_&XY{o;9ZI)SS`e{HGRPrGVprLYd+ar#myJQ|4JrbK60>4 zcA7zVs1&xi9&TJ6&D+htbPk(CNIKPvfU>f=1n0Qb3faM)zEyR^9v!*WdO| zL#KzN!RXv;df64g%cEL>O);fuetoR{eA}-a+g4kw`6b{Ij!oGd5&Qh=MevVX1Mbn(`(Bm?zSa}9&p;kU>7E8k)L@*uDanAk` zCe9IW=t;T8b5n)a&}e(tAsHPMGcEub>M`1EhL6kHvS`KhLnK_z1a4`YXBHe*p|GC^ zq*2aa{}xwpayOq#py{6oUgkLYF$Uxm?SAv&w?w?YZcV4B!{0xk(}O!L1>wa{$Vlh$ zV}&*@U7xC2^?D5r5cvWg zlxQ6je254C$>$H(yVQ@6qo8bgli;(7>WjL+P50@mD5|Qh{XxcmvNeDr=LCBK9EODk zY?bWEj>#$f`1OK}WazX!;XR9-w}9-ib+`Dk^%3e{EU9D26I__0Lfw^rYLwvwd2)>s z^#7?*{>K@m4z^2u$LiN#a_~vpDbq+?y6LZD&DVZ+rJz}asi2Bm>{Hv%FJ0s|;vUmULC*yM!0Y(+M*87cU=9GV2r0@) zzVtLcNXPUc*|_>)DIg$^{N9ibb3I0`AacxqmFSrQ0F`j$3C380Mh@<+c0_6QJsAht zyp+C7?65qojVz(idK?DETQq{ZFtmX#iYNdby3jdXoTuu?{yxYf!Oq>IvgK-kWik2P z($>4BLttHt*deegB4^Z3;c}Mv43{!g^Vy690OjvUp(7xpoEaH$Ert2hpIt=@yF+s) zDO$1qqqq%|7+*|9Yw9+2VhkXuW(|@8E^xKJu_|dQ^W0Aa#`j6w2ZUq<0x+vb{JEX(#rtx3_CG<`0f*C{3*OnI^f(nQDG zP^A=hQFdt(u5(yB(laHxh)w6T0NDf_iFC!D17h@ZGUw)U;<<_h<88 zjJK_w&8jWaT?csPl2YZN8BD0eFI_Y+ZgR^tCsnVyAln@^ z>bm27&ibZcC`|Y6aZM2?t5&`vNtgKTD33JAXZ5YtsN&u-)^Mt`oxnG9@%!Mb=i)z4 z^{;QwGuc1vJm_Flp{{~%>4G@e*y!%6ML0nHXRu_7hvyqm*~YwEd!SDp3P|7f9+7B z8wGp|wp^2rjs-t|2s2|58@^Z{zaSf5-U8q8`_*~xvA|%|JNaug&EOTwpTSMqIAA!B z=3zA4a_$S4-7`pzG`i>0gwZ>31G47x5C*v{9>%jLs&2{n@5sqg)lT7JdBdByAMmh! z<+<+F$3mt(%K6C?>iGNb$Gssv(PzCC*!huc1ocGSM8Qrm{#E7$SB}X{3O^`9-wVFbk7->`vO6~@%P(i0dbf?2u3 zg=>6&>JzE=`Adwc=Z4%6gRg@}BnqeZWPnCw8Ce~Y6npj_`WUh-90~h#><`S&&kwqS zR6OnC;!lIyn!c1z#Z~a@S5oskQik))-Jd_PB%9>k+}*gvUh~0`s+GIfCNE1#myden z`EI#(O(*bGg0dPBL3XBjQp#J+=M(bT1&7ZL1r*73oKf zsT!OH-Up`ZB=EP|hXE}AMhyLUKra<_EyY7NN!A+s0pdOe;hb34@LEDe2BnX%Se(Tz?jkA(*xn)_3nsHIH4909tlRREy^=9n+RKlB;8fkwXS^)Atqg2U1 zUOuUW<`Bw3CtKjG%^R=INs&n9C z7;b)C;Uy!KcIZzy1z>ol_}9ZHG`vfXp@W50ek{LP-igVDo8O&rSi_+c-FlmMom)IK z??91FF_bK>1FDO~>SG_xW%RiF=h8??Qm&3?0Pwd9|L} z7K_gs9nJX!>d7(^-pt&Wj+8FG8Y3c*yUM!-5RVGzlO!H6BwEU(jV8rx@vL%EsHcb} z>Kd7H-a4P4_jddKRAL}FwlgbEc(VHFUsr8ivSD(Udr!8Bu&B4jBKB~`Fn2gly7~0J z6OZP_bH9s`oJXq}x2_I6XS@#Csy|fKWLX@0cU?@obPaZ@I6)hEp9dn+mZ9VW2Dnsi z*B;!B5Om|q+4m8LOY`}YiHqL}D0rCXyu3be_$M!dm%WHv20F_mnd~Tvt>5N>W-Nz=z4; z&3M5qQSY7Xk-B|+V)tXmxRg3`csZx9FkQ57B&px!6s_4fHpF0vWzYvK4eNy~f9SnB z-zElm-&8y#Cn7lefXn+0+ixuCoE|i~U?!U|loFHAbIbIc6b$+fAHEqLgbvo%y?smR z=>Io>wict5nTRab%Zq!pbAFnCLawDosm6wic%h(-pmWq}67CM2xrn}r3Atjs7Clzi zgj;%WxsEXCZ=RZ7_f74-wc9P5yx53ZWCrKwYd50n96t5|8!rJj2FCsLliaPk8k%ra@vNSyjV^qr3G0Ig=cS^cv&+5F*1D`+1fjczKz9PJtNmVmw z|2MZIV%r>1K-q-{wkMP2B5Qad55yt?4^*1OXF2*pQu-Q`P z7<3T*>qiLgBrs9_mxhzjAN&@R{Nvx$F5w>lZdd&`v>`~#eo;h{m;6ToxW>Hri_HKS zb#j2~UOwZmX#X*@&9d;|zo)EFA~oJ4D8#IMcY6Yq6S-`^3DXSVvIhKKr1~9lKmgLH zre<_bl+~#ysXM{7;(14t?|5ikUFT5xAvT5tpXT|OaJ*k4@NdM}cD)9A6e%eWi3x28 zy|Y+qx66X)V~pGk*7`JyosDK)xa};I86{m*NuvG30$e6DE9=-@d-C&_Fc#IpqkJ&W zhh$Y)R1dvh~HV2zzm-LCRCu3uR2N zCeguVTpIYR!=4N}x)F6_8eGQTf`ZFRmRr-f&8J-?~_`l z_jO&j;hxP<&7Ji!`--UwRE_Uu4|wc-8g~M>HOw79a-r9+)G)D zbaYdl^Q6^_xY5}K%NjWE{bV(gGFB9a;-=DzwQwPuo~NSr4uYG9QcYcC5to4pg+5)R z)o&|H)GH+mJ1xA&^dKBdD3h#~k#ntXT6eB{DZomG*mCnDo_8-L6ka*4_XMKA4MBO6 zuiaU7O?zr=+P&s1M9g6AkFh{#9`?QIJiRB>j=ok7HhlrOuZa_tr-ijS^;}5yv?6A- zMC<}7qw1Ht1EYEwY-5t`i_SE{f5a8!nq`CIF|efN7_d2OH5WNeJtypAgOuT1I6O)SCn(GMxSXN&{cmUv$FSYSD>o*CFx7nyjbTu zG)k(2*>4W#?5As;30kHpO^VzOvHXSXCO@&IF%=7mfL1m{khAVI1}gVgrQ+(tYt3=v zE(+es%^B3a`P5WV1Mj5Q%+p~n2PvW;30^q`G7DV%bRXI?i}%OqiNj!u32M1z13z6D z1ZzgAUk0zSeq}AH&tk%5VCr^=-d`jAK`&%ETi5==3y-xxfQLtq&dNh0w z2=Y1IShdsriaI}%B6;i<_WNN4K`vat^cpJ^EUUY#S@`pL(O(|5^KeT@6 zu+5&CF(otZB6~+K>20Eh2ir5E$L;4@w6Py>i>DNs>6D3d46f<%lLw_x2~$(%quIkC z_}@{HX-D27@6#KeK95Oghz&_tjy)rSx2Hf3HixXDbto1xyud|c0> zRUt`l#>}rwz)8>FsZXEn<-u z;3TyVE|PJz>J3h9eVrJR2(moM4(GUV3hb){FC3?0zgos#T5UP(($Al*n|eA#;*#aj zWR}0yk-^JhSew(SR(5O~qC({X!uAUU^=YA&>s#S9iYmU4@`}O#kxf`zoxAR-G3Z&p zBb(3ajGb=WpDm>QdReJcn&C5>K*D*boPWiJ+15}4Wi!G)%w_!3OIxpH5!EGjmr+y{Pv2G4TAV0R*AW6@u{GUQ+fT}+VXquxZ(4k z^xE7JUnH&68G`93)F)scO#=r<1oLg$4^6EEV-q6N=N)YY5g6waE|Qw)6$IRVSlhFS zXU{n*eRF}ML@{>Otk%{R!08c6b~#{vlJf*-h%cUfyMnK6+*Bt_XVeI`|8~>Co_05J z-e*2&M86`3<-pY{jZz^RRha+~P@^VMI<@rO$hUFjXyh|oyZ@+xysWkfn4IpBccz}< z>6Y9aR$^Iv z;X-46I}&D`31>`?kJf)ITIV>D*|tgz3=Rpsw2Dx`{td)3BZ;i+v?eDPMcr>_zI4cc z8|9okB!k87huw63e!$J`%it}GhKkzzzmUYLI;B{*JVV?h00I<2MHRyK(Mbl-t|b7TF~kazB0_F*e{ZZ`Q@ zFyW5gd*j>V3Fyb<7FQdb-wnPaRpb%%W+Bd)%C)ocgyCs%VF_Oo%RHl`9Gz##NCHGw zR=f+%Uj+3ZiuiU97|;cXGEPWpQ{Jr}awURmz2{(h4g)A;j6{d5?@fZj&=E9Ew6Q8-4++d>vd`X1u1U)tcqureRp_i@Ye*68r3<$nV_1)y25%$Tp zylX{({|}52)q=@AKFS9z)6-Sj1p+#o;qJnUi4*#wz8YwmhPxHVlC%iDT@ZiGhbVlI zsorB=+B$SIfK{edYYJ_gFX)B1o5|GXLW80fPK&2EuB5xy6T=&HlSMbnXE#4rI{pk& z_!N_mIilLrmnS#Ll|ij|<7k{BLD5)mn&-6TVxwU_VRJ59jsyezQ^0)UK=Qt3b%zfj zVB(xQ7fsKA@vvW+9^agFIQ7!l*Aa|xNPWaE>jzqqBI8^@Ff>SBdU@)GoPOmEMDVxsmw`|dJ{UV)BEMo1{OB*u3P(1Xftb#R+ z$-vo0sa>G^No%0XM7x?Hf5L2O4`!nDR0c?2u~!3hfqZA;m#Zm8I^=t~OEqchK0sL! zbZ4Mx_moDQZOno%HxG5twFo1u4di#3j}yz z)@4Ev5&j2h_RM#Z)9dn?Lml$ehuS&4XKBN9m8@*527NnL<&XRdiY-kOcYsOV>t zBqp2G@md^>ji(jgUiqfCRZt}^a4OEd8Thf*87F=I(7TiowEdKhrlIU5nv-%SiOSVk zdz^829&Ah(F2tl7{rxJ(kcQWpJwV%j| zhjaSRZsOl%vu27mOeL%3iJrY_%M*1^6rJt&aXimPB+vVO= zpvRs6uw~wSuZ;xRawjw)=9p4^+qvoS25z6W;IZAWqhepIuAF0~h<;cs&e@^biaj+|gIno6;BeTe z!C`Xipptv}>P^2C5QI4;uBjQZif?W5*;b9+elsfPLA@gO@>V=SOKxuY3duu?s!7%z zgW1V1fn$j<_pf$5C@H+ckx{;1%jzSiV#b*&t*yo=aJ)jSr|Jg@B;*mn>^8!m{hHMe zo;e*`x3SKPWGT&Bwk%=rwjx|HfpmMq$t3U9>)9Ia(pLh*eL_*T?w=}e1qZ3hQekZO zU5@j8_7vAs)KdLFtZRqDP3~Py*|XjsaQnZ;uTSQii;VTcQJv(bV2`NN6X^%NG-c{v zb6KwNeN=uGm5Qy|+=Vvl8R*{x98p^+JcaY`eVgPRm!F1tQ7@USgjY!7Ad;*O!%84n z*hH)Ih}dRdCP`I}F&>Moso#&nU{~5~%(CY@j%|WL{ z{`!=;`9X#C^UXslOFzL7qXLKWco>dBqzAho2;!Ta%b1gCWl?LbEy$t3#u;&s2}~6> zT`PIu*sR+t&)-B@N?ywc4UA5A=*5~tCM??C{}4$iGo$j z8g*}(J4#Hu@#_^Xk^>XMZ1;hfj~ocozXyBl5|KO_(BH*HDi9Z92;D-%>fMCL z(widaSNuVX4CTsFaqdR<)r_M4h0bS+$A*R0uI{UygAXpzFP=wyB=-4Il|X)+K(wS` z%EeiW(ez$9)O&6yP|$wz*kT}NUDLaJ4zwo~+AIRfUYPlDICJ(BvBDx&ir3F2ldqTi zw%uAUuKQ~9?TrV-DFm9|lOxrc7^E6$ta%XUh*$c$4lE>%Y^M7$F z+PMPCYt*4?H*PEt;}9orH;z1E=vJ5{L~^(jTnvyyJ-ajuviGo|p`4032b_OPMhlWG z#_7Dlb}~T}|2;_(d$(ZhrfJ&Pce?FWZpI8-Hxx>8E>`y$aY&Iy9eY7RA8nE%R0fn9 zirblh_ThB#ZJW<&gnd(ADobUS4ijkD!fI{i$w@-Ha34Ca>bu#yX}>@`&pjut;8MnK zN2|e9c5={mclU(w3*;ynOiTF7&730rvCmlYqb@4B0@u#hUCJ+WJWuX$(xu2KM-I`) z=?r{N0_58UxuUejfCaP}hLj4)RHq)9YWa$f=LAZO!rl)V*?S19H|6L?kC#o3nUHQC znv3l#(4gF=OYBWRZqtjxuGOzutMgX3+k9E^r$TC{gG0WSyLF=>XE2WB;FUB{x!$%= zGkovr##0iG_ZzczZ8BD0>(%h{?NLy_D+m}*GyUD@;Uq%z!U&VNl25O95KwJ&(NW$V z9|sHTEO-CY2NQx3n-n%SKJqd*?LD^#EGmNE>>J`7sJ5Nazj58YXhuy1^Dn70Ujn8~3}(=7Aw0{w@rd{kQYllZb$a zK0ol15jFWQ3Is+8L(F*8F|hr)_xJbtwYJCpC!xPH|9_c(WcB}AHvZX_d2PVYgrxtr zfm`u0czKI#b}4uFs3!GGl}dA^gW6~>z|!Kqz9^r?|0wX1J|GlrvK08Ow#eo|5OVu` zn42BV94F%wUf!G+VP7*d0VV@8@oAY5!z@&TKiLw1WQoG&sI9wDfQ5y#Kb31{elfIq zAnoQAq?13ri|aLqyKiYJ=5r?ui!F~PIC=1=Wn52Cr=#cAbfT81M!lBpCF6=Qx{G5| zs+LQ4#dw1W93?=Q)<%X*2EqY;jgtp3}GzfA%RPHD~-dQT5IH#LN!ppUXS&&`YAZ|C!icW%@E*=sdc!2F~e>9m7< zaIN}B=#tpe8TB~gXrk*vZ3k9C)PL9v;8)4atAUSAroPTjqW(cj+%&E;AtuK4xu*qVcyU zAx<@5V)-9PA;bG49Yr|J&_T;_@bSD)l@Zz$c|RYdcXrniii*+W1RlC zg`g+Auvld?B(r}}3J^I`wMdz?_N9%Rp~`U24a4@q>Y1v3>5|K#)3xVfO7r3#v)Eml z6x~@@Dq4`k-lqES^0uJwlpW>Q1aE>!VetLXA)F$!N z#ZCa>`Pa;PUtCId*7u#0U;S2@6FT4RSLAy6wO7%O6>h_@=g;Gv%epPk7UEyLwg& zzEJQSuJ~9qbFA@X4xj0P^c@{DW5xL#RQ&c}f@WDCwAc2A*@;EW`aqIIcl6x25Go)b zB#iY}XA-hh`b26C#^o#dyV#Wf6I59+9-h6ZmBc#R*j!^3 z790AIU$wWVRJ%A?3@#}a;ha)WL$5SHdjZ;f&FuW-g*s|&+82BVomf#s zUIblT*UsuVB5(eL6#zzcFyJNy<-lIf#LH zGWCgs=r=zllf)5+7;?n+e-Cm*B>jz3TDPeve1quU&>z6s8ppG~o|xBFWi(9m@DtjB z@Ll8W3QjtepEQ$Ml!#EwpA2<9M%2yRWABmv$c%Qy7&&5yLLEF7>wewpornMCn302# zE9=#~N=oI=yaNRh#U%~Dn2%VYe{2Gg{v>Eir}>P97OOnhQcsI}3bADUX2V5dnPbOf zw^>-@On)cI-)^po3=^U4u)@){-I*2EXH?^3nJZya*S4jQjYK--!(uNYA+AWlI`dbpmsm)pI<{&d)p)Edh-dPU@)J_Wpc|}O zcx$aAUH9rj(boSe0I@xtV*ZCu_u3AyXtQXZ=P|eQ(BrEG&3Pf93Ks64Gcd$<#AGrn z6ic0C&Mar2l3N88RoVN|%Oq^le}L#T)+q5JK96oRYG_ ziz?$U4S&@`>vV`>vqu>xo}jbP@SysC4n)NnoL04R-_B>mf~Ra<$^Tm)n%)Y%%fF{l ZD0#KYywD0l{Id?AD61w@CS@ADh&1T}(xsQs0wTRj@9>HAE?ugWfC8b{5E4O<5_$iAwA@;N`ljro8mEvObzM;LR;7DHW+}*DB)(&rNRw@9%$5(09Fd z?cvX>|LYx2-^{OF`y#IRMoQbucr)v68rkRt9+$IdRm_&&*7j|%?b*>CMh|`uSu>eR z2F9S|@%EshTaQ084(Y#U8!BLGuD9UeoI0z@aUy`-^;i3u1C*49o+ zOKb4nUk1$_ukJP7nLXbaGCVEY>vR{la^K{IV)M0{hs>x1MAv9D(vvaSh5OUzsL&V^tVz_ThzXmDS6RtC+=j&2cT!;fwR%M)GY=lEYqh zGbJb;wNq@yaJ+d0gj$egG1dZq;HyPmHnBgmqey`{?R%ic)9@XqS%1D8iO-_{a-K6b zCUJ@uiBrF6D;J~ozT^4guNh?pktPYj{Z>b(>;TnNEj7`VTo#ja>&3Q8Es9`nBcwTa zd@{>916Q;eE&)G#H&wPxPqEekHV%%?U^m+dM8ih>PB45mY5rSM z!uUZ#cw631aO=hH?R!BC_kwDW!L;2|%BuWxUz9NGf$c+fq09TxB^oa({u)DFDN(E&G5*RM0dEzkFImVSG6f#2u&F z^t*6OO|*%RZ7i|BS#YCTk<^Miz21JmyZ3Vjj(Ib(Z;~Q|nmo0fMrKwobw>zh8HMPD^6Cs~Pu(nY`l7^F^ksV2Aohh;!;i*&Pm-!_^S?F2+=x z-2DCe+|{^05Zd&{^m8IkCYXf|j|c?5T8`+gdG+QehH{?f$bb82CQntd|7n4{`9emi z=uFbeF!#2uw9XONX|i2TX5c2NtEi;dQjQQFS5qx=v0mfqBYt@r&YM`&XIy2ygm$0G z_Y7v)7EPn2OH~e27XB9@|7x_QhH3W;q|ydbxyJmolI?cbP~`kjY#W5Ez3?&PpJrndqZH5;@$mOc${+Az<4jeefWtVf$puCql;txi+zc}S z8L*Nfe)s3Y0(q828inp6GYCy{VaPfA)BI<~%FYT#22z^n&jqFLuhK_q(vyTQjz&QY z?myeY^W6U;4tv)vz+5hs&UISaz;!cmzuebW>MC#a*2W5alB$Jaf>loD-J7ck{wRJ zLcm`2FH~NmGKpP@B9c_a{DuETB$uII!|A6?UEE>MzF3QnjalvvD+HhXPEy{!IEQmz z1njS%0uP(2P5cfw*@mrn^bsCYWjkpN+9I6#-Vm;0nJ_|>j0=I%eiR3Ra!F)&@n8At z$er@no%x*Bu*jB6*oPgutlAn3JNUOSC&}lVfKZ&p#@r&PwjiH%VOBtss#2VT+<{k3Lj+v#9t1cBy1+ zlOQTmx%;bGg6E>Oa+A80v#dgZhQ6tyth2X!*C5qjIytX;L8K-aGrUz|g5 zvCZ(aH}&yoBYchxNbFVfpgJG4vUUN2i(%2p3rzm?SYv7YGnJ872g}Oraor9VF?#{K z?N_&hP74eYzJb`K!0^tOXPv%S@;R*awCclKE~Ov(;^dhN&4;ev54tyaEDK3~db@o| zzMEZ{!?v5Ft zIMQhj^#26`z&a`^M^cMeZLMz$1t0s%PANzB$(REZ58SNAP{FPbxmg`J!yCF5YxwQDK>n|f>&J0ZlE|Gc=Twgz zg~rwF-5RAo+FDcW=GJXRF)gu9kC8Y$LzI>eSsP3qs_86_qpXrk}%n=7*_`Jv>IG}p92bF{Gfd0I6pJD~j z%Jdx`2%N!BwBuYBD#MEZ3&?A$SEj$oA{dbUp}~~Tm*+T^K;+tmq{-wyD6nA%RAA(U zz#UGXUKX>Z@1OXN1<(m!PU4k(|FB$D zch$p0Q}=UvwlFrMJrHrwwcqsMqyw7Mutb!KJ9AB~@88%%e*q!alDVBU_-y@1L=E`P z&kaMfJugJ9j1G2q)Gk-b18}KhGk#86@Y~daju8@%GTdLK#=ds#DYD7!)%omh69=A&jR_r4y{N_71s<>XOI~7T z16(I3oZuJu=@UXh$4L^`7lLOWxHkh_Yl^yZxpeuk#owXjPOoM@Y`h_rMnjTrG1%B` zQK+G^jT1{pBGvig3uG=G@%uE%eTSzY4Q zR{W0#2W}IRJI+)I9H~#wWr|JWmS3s4N>eYPbqqmj*pArCf#3lLP5s00=^^n!C-+Sp zS`Yy<-HCpXV!*a$w;kx?5UIJE?zj0otL$-h!9Y(FY@0$BQ+rKK!r~}?A9CM|cJUpJ zP)>gXGs{^pJIml%<|)oV7BHpX2R8B6vO02>g8F0h_`}~O<;}gCh+AHqs%svAbDt`g6Z29F}E!=mgZVhUDjhJ zvt3f__nOi}gT@NO5tGXY(%1^EyM}~n@eg*kaQ$6Ef`cOsoB6zy4#V$#j=E6b^n}&= zrXye9Ce3g1;#AAL{6f$=8xNY;&^oYd=#*83igFRdr0M(E^7t~o!oE4RL+jUq((f$G z-cD7m^OL3*;L9%{Aq@9OY5+#&Rk8DN_|DB+6kTk_R>R=s>iV2k|yvez9*Whq&>fl^0EGMQdsYXoP*z9UKGXr`mc{lyb!=&BhA6l@gsSGwW5I zMX1&bX{Y%4RIM`a2&vL%DLF)~v#G~L>~p+{hWkHnesxpWb?JptNm;p$zl8lm8`scV ztE*4%1sxN^Fd&^#bE_5msk#NBz_q<1luwR(FSV7)*~18w@YqAK6__q%dRmHS|FZYW zMp;sQKVrETfX8E5hbP;)OA9HwePnWuZ@oM_Swp@$#HooLZbVb^rSh0m+KpwmwJin( z<#l)4Zk}jr>98;eJ64vFN@gC<1*(J>>Ti`iR%t9{j*&+S52~LFekU7>@m_vD^KZ)G z6qf+DRXA*Iy@$1)+1*~u2tkZ+)aKr8>|zF` ztBJLq19qi)Gcv}OSbk`&;k!dRt-~xtCYLOd&zkdF(QD!7dE$oXlEn!amyqyKrv9<% zL0W`GlN^}|kOueV0GR}9Wh7?Qdzy?dWjP5S_Jad1%fs+)Yt?~>s>?5+WnuTVGq{-l=S}N{hc&Yzlt;(vuVR22;Xkg)Bzv=QQ(-A4M(4B)n&CEI9@GLq% zuOGvFz_Kt&T%2N^&}A1A_JLkXwg!Wr=Zn|V@4PH4^ilo#9sq|W0H|p%1)jQ9Yv?Y; zyL8nCggMrnX06@D()Mv~)CyvtO2~c1{M`(G6AS-CYH!%Y*ICi281}|58Yscs+BtAK zRoL2^sNF2LNrfuni$)!{E^SZ6XXuIOPM6vu_+(@#xD5_2VD7%SO=X3*J-sN7u>k#w*x-_` zP||U|Qso>?Ee7novg(yIA{IqOE%7T@KSXBjkt8_mZT}Ft5YZM(w-8Zw;}^V4?WuTA z?t0+Ku&+%Hb_n%qB-(L>W(H*Ui_mjb&AEr2)=c;U`^BEhfDc=tA~nS$s79&seq1+r zs_V>J6)|DG5OqH-@sCnuP4N?^^7X0ZRo*|lLg6Rs$15KyN0iDhF-MW1V(i<3%_=Le zQ%0ZzLFQcqS;@b7QwnbK*qUzCDt!Cpg=uSp^8(^{K8hDgls-CMX=dZI&=FVU z9dNRgn)qBLPq;sg*9>Ur%m$oo?k%B&9H$%pwo^(=OXug`?`4FB-uc;JaQk{ScN~8^ zjQ`{XEJNs>bkp5^7mucw+opBw4~mZLbr6>k(i76rhWU+fnKRBhh(0jUv$tAV+b>Ce zvPvJ;T4q~Divb3>4&uwZVKj-)K-jo zTO%mvy$^J~uBikW1#g`(Gc!|CQfg>uOw~CUR$KOZ&idC|59WmsQY5t12wLm%*E1`p zaDrh;%ZjnJE=x*#vM;&P#kzFgzJ05yN#ecunMt0Voqc_MUBTHP&WZPi8TeYwlSxDO z>m*HRsn_;I*RG}C#q4%nv$eJD?(TMRb=A_;d`K(un3k57n3%Y%8Y$3H_{Nnv_g zbwx$Rw{PDX8qzFPAIdbT8yZdx4E)G;s-?@(_)*ObK=bvJH12|wMKzv)M${vk|KES2 zr$fHk_*X>mT4&!QRNc2yt203U`T@IY!(9uyUP^fN%JAg>!-4v;EaLlr3RMOL zWtL#kCs%j4X00gAZbx-xp#euv9&_~2%tA$+OGm@@PniT93a{X1rMT(!4r#tIxuqwOhFzUQ`=S-LUc<~@Y^SVWVZ9rhWQ<$`t7^}no+CiDn*+UN+mv% zmn+!DO6Q1k(2dt6!K#n4o-eiCW`C*{v&*4`dtPu-J~LU97G&d8h@50wtCUn9x}1W% zaC-;Vg%9;GLBjHwBm*2aX+fNbRnMgD?e)jv=UICNuK-S04c~@*k!NINL}Len3?n?# zC4+b-fc9gyxUcoc?cCt$9;ROUkM$nXHf!WFllLJOq(gzHN3&v=$$R;WPXLpgyp^;Z z_uEPLP2tRC`(6%?^0L~hBWJIt!Q?P&=XV3yEWP#OO3iFdZ(x8;)l24%Kix3-M<%V% zk~~;SN=@D=`CG8eMQ4Z^jHqc7GBFld14DK8X0d+Kb@w(!Kfpa~j@dGP&@swAbK|mM1M?Ypsd`!}gS|Lft zR@~E`m)<4ic&5g&h)_AX9Sb$KNzCN;fy!y#MLBPgn%}zfS(dTCQQ1RV!Pt$-T9ok; zs!uTRR-|F|*O=e_rJcd69UUF&W)M-x2~)+fi>flaofCcSVmEH3SM64k$aFb>xLHBim-DRP|=Iz~e=A~{bH_y3m!(Z&bPn2|hhwY_@AaCNF` zzHhg5y)7iT)p0IZbL+`O{In8$xQCbuGmL5SOymk#8@K`OuJr?nd)5KaG}M}6?n8{a z>Kvv#RtJJK+s}jqgK(AaB_$SgI|QiebE=l(ehjS&a}|F(8Jo(*1tQqpl=s57^X~Rc zo}7ulb`z4XaD2v-=mL=l{J6s< zylDKr-$Y@ajBigIlAkGuOA6Tcxu#Z>_PnxL9@I)v=n)9cOx#^z^cEGz&*s=yPH{D*wZovy-aJXnk=r zt-T-KrY5DaU1FNMKQHm}xwj1<(f}s7z)GVlR5qjBBYxeRcM5hN9T^cE5g51}u2&!- zV)3N+mv1`+20hP9Ff+|8C94%f7_NPCZY7oe<$BKn_FU38 zMT)}C9|@Y$?NTKTlQZQqc1s$ene7Xs9C=Y7mU@trgTY%M??C2JA#4*_xWVwRplaKAbYO*yMHPHC>{76V$ogh1V zkZHvUq>{L zpJ#~Q-8O3v@bimaP}AR+f47^xg1h^YoA$W3l#4B=JlsF9MPk{|88$2!G*|NRCPFpbc zENte5Y5QYHlVJ*{VfL3Sl+!jtxVEk?ov=%=xYwh_m6g<_qycP%(9nOFIj$9%nRpO3 zr4J*O8WZF)DoYwQS?7<|bzYkPlyxkhIae%CQE~Me0J@DKDb>c8{(~DtNn1%fIFp&n z93({S%yUjJR&mW0KeM&c9_^>L#y#I$#OM~LtMo>!Sa0=+o|II^F=_J#(Au>vbbGw} zWXylTBs?i^BWHO%YIK-s6+wEKD7E2@~SR3Mnu9%E4|XozWq#Z zkf_he56>xfQQ}qjkdE_zgjd#w_L$~&RB?L-H;MY4?+yeZ& zW>;m;_s)TK6#l|_BI02G1H*!Pz2~;K@5ISAS5smCcxuv?{O z7~cm?xbIJKV#14CERux-Hkr{=sztf^{s7;Fh1e4nwQ&t|wVPvN^M9JLU zjY{Ah8loLhaRqp*aWfqeOi!ZV4tM#?0Z23=uD^+mf-t$@=puC}tLiA01DFL?cfUq4 zpG5ExiMzM_3UkziMR{%8ysk11q>oo58Fr@BQ0+~MWsGH7TwL71G^LJwtOfE73Wbt2 zCmmN6nRCsPYA7YsRBHH|V>OExy`q1cP0LjT*1ff1nCAu9DJ%J^yJUnZR?>n_(&w>> z+!aT2jI&>wZsy*%n@8%ouVNa{(wr)93+^SwgoSd)4pGyHtssY!wjS5nn3O8>%RLIz zveEbxlcW1M#xW1S)uHK2Z_f1 zGCbaao5C^(ldB9V{>#I3mPRVq!aEr+ zFTJMvlwJgZ$uoM)ZZ33_fHF<5&;=rDv9@GYaD;rewk!Fv>HUPu!rBIk$y&*Lx^2F)69b`lJ<)n!U^Jf#@>5;2tM;tk`;w8Ux+bprpGuU9 zhA<$)-YVCXk#@w^E37&m46bv>#cY7}4P_;-Ju`G;$!Nse9qsR+qlt3P*V%pa6Wt#e z&Yo;Z5piHJH?Sg&Z_^zj$GC_B<4p?KDOyUEg`JhsEGJT_AApaOu%(7+?ra#@@lhkT z$GM<*w80^kdKc@^6|?nQBd=?oVLe~z7|`G zRN!D-qJq7OOzxjdIA1U}Vg0|QfS?yHx?EHw-3>V@aSQ4ofQ6kq_mFH^fO6vb$ zWLj}BYrAOz5%zLMIZ2x@))SYv=GP=t#iJ0(P-&v*6yky zFu)fJjPt@>+UGJ#p5#q@-l1MjQp-9<6S`tYptp7j@O6>2*^Dmb_C0Fuw&EQ zvyO9_U;1<%r&^jw0+WL{pqM8mLUz>a6GSpb9`ne%Gq_XDO*7-iwgXPf4@f~OTCk?u z=us-Y3VZng4K|a?7AVSNYh$j;!tm%G`1ri~e=?Q0eCAg&HZf2X;X_#1tS=~g!7nbH zqRvfjP?*r;31h>seWpi}172A3G?OPOicxZwBsU?3Xy)4=R_S|ASLmfW+=~3f=bZu| z_7a$3;8I$5n;#e!O4r%O;j$CH#@l?xvgXKu(kmO1tG&jmylVdBV}Y#vj)d+(9^-Ja z;VIz}4078b*~G==3b(l_C*;||aR0^>MM`>ti0xugy8GIKkjNFwOfqZNz9>=`IVg}w z9_|%2y_u_tQ3QJ0z-$B56nmlLZ(+KB`t`|M_vV$UVrhk-*yH>2VJQkqjt0PdLRtBJ z_^w^Qzn}C9U~<*wb@UAnf$6Bf7p^U~N`=VfQ`A#+E(1JHMHw1+VoPm}Azi=>!d2xy zSY`MvC4Dex2pkOVO_nC!T|d+cK<9KL9F-fSzs%nlBbe> zYYTHKUZVCA(!Ibf3%B;}VlDz%LV$DzoZeb&+*Lggh4}(UZ93a4j(r#RJ&G5p5UhC( ztS#zp0!d5qICO_BbSPTZeuQ_XmNV7?a5KDjXL2We=ln~HL1LN`%a2bW$|a6Y0wVaN z%2uonJ(~R`R^H%iIbB`UqI}wbR^?y|wwu=I1l#U4!GZIi)TP5~$eS;12cMW!#zmcrv6X%P~z#K@HyNN@Tb2U-Y zOWG(XN*C2yzFg-*e6;TG(yB5uf4Bk6>#>ZtwTwAvOueUN`<|V$qm)ci!llX`krx{y z0Tj%V{&o2-mFkKk1479N#u;BKN=n7Z1twr=y-!-F_z&;UE*-J7m6esg?$#f5Whs2A z#ETx2Jf6E!wO){Y2;(2@tn*|0r;;o=x%dGdRqjo}?3pU0tIFU?;$qx9fGv!5#)@>8DxclA&gG|( zJi5~M)4gS>64*bO54*~)Jl=EIs96)=zOdOG`4YguEO*_T?@{9o1o zJ3Axwf68|bMy(L9K?{xV7N%n=mSCmidrj#aAueqtxZTQnuc)!KZG`se9!*I<<*r`K z&T#u(c(Bc&^wwQuDrgkpqsl+By@Bhjo9c@VTy7naxKs$(wr zh_?I!ci7#nqycFU18NNMqQj2ZS&{d<&>YSSd)a@$q%$Uuj?Qa<$}0`QYcrk@?)Wox z`m)^x@SJXhO+GIG$MdMbh8J3r4Z!sybds?`zrlZPb9?sk{DAr{ca!D#X`jrPJKZrx zz`qFNwQ`rJY`R|8X4*QX+&Cix)akVSRY#g7Ts0A()sv^jj;XTjEK7TJ+(#hyWNF{= z5*%I)zsY5+#3KwTVFB3Uv3ophhY*diA-~8F_>E)h&&&{CysnXVkdVlKRb&>nT|DPX@@)} z_kbjqy^8t$SQ*%U^g&}PO|k9rJpij5NtJ#Cwb~~B=jCE+aWT7y=X;$fBB03kQtc>> zIrh%kjf*uDHFrKvI^0b}xBJ7bFMpbiofmHhe>e2IFnPG^nBU-2;YpTkc||MQ6|{R& zsd6BCYJTzYiYl1;^!ymKO?R;4PcJzc*cw<=o{pahx6+>o6r9t;p{Gyhw0GvMN^$VH-y}t zsZr!Vm0%M1t&$b~0`WCUs$^!#BVAH@D#(BPril$nFMZ3++&80Wr&#rX2G)(HT`!^g z+fE~i3xYw&XUoYCjT)+lzcwP*gm!Bv5bJxpa3b<;B_8&bQHkHj*Lm0%N3ZcGFSOK` zU90lJoWjrFBW@TlpWK#T<=-U(x^iD{4%b2LdQW3+hg6j5ssxzwW<5t-?HY7@H(BTI zfI;waOElJ$R^?TZ+k~)jl)qJYI|+AZku(KPd40Fg!4M?pI9G=`L;E334^Iyju>WK+ zh^U+gUk5&?O{;SN1FzSvIot+%m%!ia7yr6neRA#A&HsJiH@cQb#QCyiac6ww-k;{+ zqk`KcbQvV%iI4X_Z7O5`YY+a*QczX+5khd)J_P#sA76|yVvEPne>Yi3#iv9%f=AQc zb;juSIdlXJz6Ht({B0$Mh2v+w7QT+85TL@q*1KTq*53=a(zZXJ3MGNie>QOixdmIJ zbx=7vY#xhQK-ZB>r?y60E3mW<-w^lxyQnc(9_=1oP+pTq_vgC{n1Xx4&cisvjT9=G zw&T5YMn^uokH)(X`hY*F4f>$%(7$GkIfV`WbSZ)EW9y9h2%X7VT*+hkJq2h*S^DH1 zgK`{~dwP{KmYw~(NK(?Lt9~YMrb|IVx;{nYBg)V73Us+gFn1l@v60a+dQo7pJDBIY z)2m#Lsomm9vk03LzLd>BoB3|7-BVQPWx9MyI7AQn9=rHiq^fM)psK8R5-1HNJ*JD) zl{NYIL`j;DlZ?`(1_wp{wqK8EU9x2qg-6{_wYV>wlYy^$Iy?k)3=>MD&~Z7(EvYo3 zc$rV=lQ#|*&X(X1dF(^;6ktseh_hxae)9#E@p3TR#fBRqk|0mTk1f70Y@nep-{%o@ zb)}^0yn9}*6e*7-*c&3iO9}aN9mA%8xo8heA-yxGrbDMg2fzZTt44t_0wWxT#Q|~F zESws~^uSz{?ed0{|MrO|?K(Zu+&^E&->&S?LAXX6jtxfoRB=P!Tu{fv3OmmSPF7bf zm^(OfS_^YEjz!O(c`|;<$5FnQc{BzBxGE_2iDgGg&62 zsD}|y-+9>*|K*AAgNcXL+}APzvAtWeTcELcSECVwGWhZ-Z2T9@8zt?ZH7Kgt;pjD<*ej)T+{yp+EAo)-7tG8 z_Ji|Mb{qVf)x|p*&pSNY#WzwgH|-J34T0%s%Q@d)`*k=EJ8%#$$De0p0PgfK2ywTd z|2|HZLp|;%8jtO3zv;=Q^RWxoLQ(zT5$GShE?3~5s|F*a-3nOh2HNH&|4gWsRFswG zMP@k*2Uw1kr1E~`U6YU<2^h{w6&Ic~dU(Iley3i-ouU@heA;a0S*^Zqv3S-(A$b~u z*m(KiqcFoCFgAtFMWL;*mjtMKdXWtibb!5t?aRjX1nSR(oLs#Lyv^(O)%zCgg)oj}^yF8`8vl@_DofWC zY~yW_@&2WMe`ftZ+m$YZhEp|nNPYJX!>lO5mXtR}T;EhT#d)Qb?;OdsRrD>C(zNBo zg9WW)M+pDiB=*sto3MF9sPp*zVk*8U-|a;!)d3};A#yJy+2E7fKO8VC#_gA9P!9dB z+fEL4s-Al+-^C4=918Zbb5@zVU!@4AHUFXX+M}maHeBdh3HF~I|M-SaD0gB=4-&{e zalgZ+J|q~W>VaiILl0Nat)= zEuhV;;;zgn`(FXF1R|)_8|%KXVG;jCzc}Q+;#K=s+6#nj1kmmc=CXQJ|C5+kqz?Yc zjKV?wj|kNeU?cmvjS)f*{;G0w=+&6Ua(kFixPm|1UH@p+)oH!2s_fMW{;#{;T$7#M zRQ+@1Et_&+5M*ewEQ1C&&;R>0;7hxE{*xjtgZAwg0Zoohga7R@jK5M*fLwz%e>W}z z5?8_fcX;n^q5ov$J(B1ju)o&_0n2xPLwIomEB)u#eYtnw|3u|p=^v^+diLa_``Yw6mYm-G^$Y|_ zbbNbK)s_GA4_f~ZLs4NkHg}#UbD!<8K|G4B;%eFR+P}~9^eD8-YFMIOwlk;U_%NPt7yp1a_#J{*6vW zUJvAs*_{kss6FghXMNza9yfTk5Awf2^*j4vR1f}p6Y>APcB-#!;r?JPi6=MZzd#FL zlP@_L0INLN#?N`LnkNeoJyDPQFEIKzceG^x%($_ zI&%%Lu)!b2Mvr)|-rssu#i~+dPoL@ePpv%?y;NYt`S$~Udc9OBAD^{q@yD|yAHA;J z*w-&VU^PWXAsWP!(mqsee-?bXf-A~?p2&ugXwt~&Y>vSWgve1_jg=oRjUCA5uYNJ| zZ;F&2$VRr8i6`**UCwnSpxZzB-CZ$fsVW>an{9!c(GJ*8ZmoaAV9ccy5D>8OG5omU zrXMYErM3J$Y;l>Wu~wiFG0)W+iftU);_MjCW-KE6`3#kP9yk3j1kxT=V}>44OMVl& zy*#>^+T0{4`2p(<#vfj?iZ_`AtiF3(4&3Y7oYy~2Q0x}gEyd>PfHw3&`W#N zQCAVf=k!kv3{Etv*!&pEn-}n%wCWLC?8y*_1=Zi)+uv8rMV!w6^fdM^m`%jcHQ^Fw z;ynC4U&rz0zqIsc^d!V0B-rO$H({JBmq|`ryN7H~IbU+EbPpfJ?$PB9)n97W?+`>ZjIT7hMg9LqvEBE zJ$KoZp2}912@lIh6_-(5m~VF9hD*Ocnb(K6gh(#S0#U!F&Slb1CF*Y16!R7n;4wf1 z`#0bV!p9EELkVx^*0^AmR3nktQ%MwQA$Pe^PhoUu1F$yDIYN1&sLByG z52|TDv?H%J4l<=bAkFwXJ#$E;uTKf@`$fStOOmq-2r_WTBw_e&>&;SIY@yCYHvA+M z6~HanviAcTNE)NKtY;ReAmR3cE0yPNyv&&(i72Di2`px$lhz>0KkOJ5GTqab7A`JY z?=VqXJJH}gybPW4+>BG~aZ6{TSG22JdH0Z~Ceign|8w-)^yG;#!WBgTJZlnj4SeCI zK4_Qa(__Uw)!oNY?ivJ3E1D-KOP)p?#cv{0N<>;ad)}tf@4T{{GddJkYKNUlx}&(V z0yt7D;uT`34+Xc)9#JBu&OGmT<-E^p^}+@Pl_QSTZFZD$niM9J%3a>&awQ1wW{VKb zp71n&?D)ieot9LyY}$yMpi6Og?;fX`_;|!0fT=UNSN=88u~jVA01id$D_^QJOVB&p&w1p;hvX3O35HgjH2ugdCq{ z)*-Ax;^x}jIV~EcC{aTp=sd;^=6O~!^dlQ!+!B+vUDZz3}f2{=4#SWV! zAg3zWXCv-S*<3Pr{MMsj`nomx2HP!B;}oR}x4~|89!Jv*m%H#SFnKzSF4^t(eS54A zKUT;P)PRZwJdC(KSFbK1*S}cq>7Qeh_a{}qoHf~zTyjxJ zZ7}FUwi~R)th03c9;%iIbNu`VVLEW7VKo@ut6y%WVT z3G15cH=CVov`)mTeL5dsJ1Ps*tM@ULK5yA3@AI0+bG#9@Xc;5*zDp~Qg`I`+nQR;NA~Vph4A0r$migc#GU}Z4Nhzqs{pTx0%f)5Nl-`Cf`4bQvZO-f+e9Brf zNST6V;-?pc#syUUzM!{gsgv0!$xHU4YDN|#%p~GFh|y$}2;Z5F-Nz>xYzl{ZPf>gA z)j$%wfJPBB;A|7zA#$4|aNFTNg(%(ods>W#cc|+_SiU?sR`5Mq-DcPl{#^k6!rP=r z3S};hs&-31eBS$yJ=JA|^&#$EpefFNjV>SK!s+>Z^WShVIxf`tlMu9I^pRJ+^`@1P zD3j@@Mc2iDN~5fAqIGn@O&>62(@aau@+C`;Q$ZBTI%G*Y%cnH|d`%TC zGHSS6J$I`NDf(%_qa=|+^^Cw%};XCJVho+>o$>JMV!WNY>(TT4##gmWrU;ZV%P7n4)b(|6PHDRjrRLM$#z3#6T9E z4AMjELZfyx;6_json~3gY;{YsaAubK>N{GOLfnO;anu5xzm;a`ULtCqb-n zCq)%$x@qxpNNcP#ZJT_~1KI|A())qu5*mfP+rZ2@vn!m+z~)zi?xQh?ZmaDr1H;^G zoFpbKM;)Oh8p;Fo=TG8lpS@3|YEJU42ynLAHthnr);--cF}9;jL^2l?G4pK2%!rkG zFq@^Nh>bdYDzrK3${$Vd&=TRCIV+3nDM`nd<%mvtfSpQC@k;xHEZ@}(Ge&FlTphdF zQgk6F%3-S1!uBMAygO#xNI@|Z_g<-u@`cz8t6W_DXZXj90z2kkjqk!b1syydrKJ0s zi+j58tm)}@LwRnl{jOLb|4o0(-|sA~Tf^l364X zrtsFRlWLYuaMJd*{W|XXcH_$wYCpbxLiXtjj|d}$t{w%m&D#aKO4P#rV$&f4b~@>Bru@l(&>>y0f*Nl2fT{;av$nzAmtZ))`z^lDUGGvjX(@|R{N3FNja{6H0 zrRgR2>V~70wqjiOamdUQDWp(Mu-_`bEtu{>0lR}xJ5+mC#muDVCo?U1oWGTP&v;%f z`)g~%`mV6xIt>XS@0Zh%WARas*yEQ?ilV(aYay?cy1&%I1#d)Fi4NU5j)=#F_e+_i zY_v>Ep}J}}f)E>iel)6;{OOfrbuza8Aq|L!8Ig$lXK8z=pT0_^<$lxmPU7qC(e}aa zIqk9=G-uXxu(D?JfxinZAYDFNLQSf@`VRV8VrUO02Ci>ETzyItG+*u>LvL zXNTYu91dUYZ01Pq%SDjN5z(9sD*Mwl8E*k+HRBA_8n4$DwSuR{P$5a-6A<%dQtU&77>9;iI83p8S|0E%Kf5yuXKg>8?l-FN*Ps?LP+gDg#jDS{UtJoJ4=OWBz3U+kxL!qMRo;ND~Gcz4>^kw$YW z_rt4--d`4PU3HBmBbHG^ew0tFnG`z2ez>V)8K>JyK5TQ(1jY8PFDXIE1Cuy-c(xlm zoF0|^CJuz!9fw^k-I>=18QC8=fK^jVrUCY_(a+J_`PqTue7RFlCfKp8qjn~XZ^d_VDie^)Gf*;FY0cI#tj8UQD|D-A z+?~tH*N!Ds5>qMpv`@auhYH@`eqW|W|;L5VpCDv)+8tB#18yS$mJ7{ zWMEt}a{BCHBYaE-q(&*}1(@T(&%QD&aY-fTwPirvl}O$5fELv)Pvon@ja&|*k1+YB zZJmK$YI5Q|uPb})SEl^QZmcZrt^X(^xPqJXtU1y&C8M7HtoJAUke%A4v8$FpW~PUe zz(Oj!=;D{X8?UDpjH79*2^I6A0uZE`=ML6kvat4b>oaTN?d4bR$7q&$Vk^AY-8af( zek>dqB=^O3&=LPa=n;%k6!E9K0bHSV6aBr#A}y@Twcq-IayT;?R{e6BDApsM%h%NV z;%@ds2XOE{X*p1F`W`se4g@YS-Z^NN55Hl7-?$IY^Uf*k@9usyE7wwGJ0YZ6sw&oj)-@>-L4l>E1Lsb3D!Ixb(Y;Z}0d6f3u8 zj4?<>BHDLmVd@^fN}y#v_-2@!rZjXdUyYwUx{JWy-rggi4pfP z_rPwHfV=tcKrZ_6JTbQpNv5Bk`?jAf4N_fRY?`FZvCyF*C%V$QW^vh>yR)!1ocm^^ z^To}S+qWkweGgf{4`;`i<=zwh1dQ4h3z0r$FdKlG#Fx)Or$-R;uQ2ci7=}XDu)3(x; z&besAxa5GZ$LF>Fm6`J1J91W|w>afBr6ssE89e_JnAE`J`vHYS2hj#5Yb zi*V|vuD3U8^hc#T=g(|;jFvC4FDf7-i$#1K9V)&)r39WLV9l-Q6?p1+qIAIWSqrogdJZ!9hKwh|^ z_J48r-a%0{TfZ;{Kv6(MK(dHr7$ipl16e>oGD9A6kTB$^1j(5pgG7NL=OHN)2TZ@Dd{s(H$-n+Y3cduT(*82UrNmQ}qw0627JWWWP zYoW`VH}87>YCui0bQm0;ackoedFU9IoW^gAj!@i# z5hV;DZk>F_JJl@RD&UtV4aX$Qemidk0kBm}M}k&CBN_UUHcime2TIXPqE3x7vrg}H zdyk;QS#pZ>`|Lpdr20LwPDJV!ARisruG>R&y?`?xsp+BJc%tIPhv!6$JR4J0 zL6@`SvHf>$Yg4SOX!qa8i8{Ty%S8z9>ricWL06rlY1%&Co#(m~j*bJgrh4nO@W+|D zEyw+KIWhYy8!&qE5~rTA<=6BBh^MWYJTg|_oCa_uv7V6bt)|y(6q$wEuw7Q=CBP@* z0C=b1;q3t{7f7KZ&k)W?=uC}oiW<`k+2~q^`wPU#EM4_oz>I3nD8GdvNO0guwFJL% zHR(^J>rw zl5%r)3e)N3G33i^KSQ6XB}aOIGlt7hToF`w3*-3{)fW2V@LA5Dd1TX3LA5jk8W1%s z%jx!u!U#2q6J@Rx_Q|Z4MxF6g^j?7qjf{HYohP;#hjKULL_Z0w>1$mhI1dtrV(urmd8hmT2bcz53#CM?P0Z zivs@ivt2c{mxs7VHL3UfVrute0sn4OUAbYk$z^+EyyeX*p48iCqkhiWY|_D72KAmp z3n%JUucrvgx6{_)IA`R5uk0r-yf2_V!E9seI>ch{ASxjDkGuWR8^B?Xk97p%)UZ~7 zzEB=s?o~l2+tTQOJ2(T^P`Csr&aCm4X+sFwq_K9-fgaG#fc4u-nU(R!jSsv_upAtv z;jJkD_NMO^)$kN?ssFBoR6FpQ zzoH0_V*c-Vye}~@G9)Q)8}g?S^uMf4ZlKUFtWK9gjk*0`2JPb?6xQeRiu9^@PjqqE zW~!O2)~I3=o=rBtU}W%FOWoIQjjNUzB<+b%juqtU7A3@YLSeYZS+=3vRn_F7DK=iO zXgig$QHihqC831cFuvQ=xmmQNC>z^-d5@W~$EbXco}85zt=5(?`j0I`Z{PfeNH+fp zpw+TJ#PQgfXmcZcyv!CpWi&h9`6Il(+ZWF%#GbLB9kqVuvxwQm#@DVeFFj)7vIJkN zm#6H+;@n&~jlj&MQwW9KJ3#2CenU>DPVlhL;c+cKnA4O|Qin#&%^5jWvA(q5KBG1# z@pLp(bSP7Um`6uh&yeA>ldB{YUqXmba-;okP++U5Dn7stxP-PeV&? z4AedZX#7YW3cu{mtd`YOxe^3h@ec&2?3agwp4$74oIeo9zN(F`?mB!Jv;N%{k;nn; zKzbMSM+VAPzq+=bj5zg8^z?cW+&ElObiQ6a2-iA7S5TpM9H0 zLNhO4^QBbrgO#CCP_Ak;PmMgUq=a8Ml+86?nqHmFtr{c{oF;l#@%H|6pol?|pV%&B zVkI=B9@84)6j{t&rn|co4;rw|>sGA_?8PfEZk7Ce8ox;pr_qySMD$rl(WVmQ)&C*; zW32FXa*T-r(k(>tKHpNJRZ?0bRtAQ$WC+;v2r zagq|lUxR*^UXOGqfLm=)fkW%h1#4CY9|{>{Q9-x`yGkqRuKHHY6*`{KOMmO}slLWl|gs(wnkgL@|kk z6x=#3wj$HKLxO^o-voj;Ek)X<^f6zcranVcn=D2Q$QXLJcxDOjri zq?L)UGXjS!%rkeV-V<>2vL`8}>jhUoDVFq@s5zEHJu=c}3Z=$5x*IO9t-B^@Bz}`O z^DYmuI{bx=6&2oBK?cbe&hHYE>OqCthq?fmypEj&_Hx8FgVA#O#UF;$+5xX<2xN=%a@dR=C+-~*&h5R;F*Aqc=5%bmS^_0p!Y)N zvGkX>!F$t)TSKs^<83n{?8pzsj(n}A03E=T{z7clJMt4Rc=0w4&KJLi)CqrREwvGN zpxs-JnaMx;6nNf+=AXBvNw`^obTj{gum9I+&%eO5|E4OJIjj6DdX2jK_Zsj|6t2WL zc6r3PC-Sbd3e^L`n#;NQXXfIzJH{>r&~^hZbkpFf_hq^7AEo1&GNu91>FbomnS zd?_~Fox1sFiU8%+JnNB+n&(&i5p3^(*|@gs!nvDs!Zok;xTn>ji*v>}sXod!%-z*7Q+Hz2T~AB3u0XfC zFyhR%WAN(-d}4Z1giF)1uJokinGn~NYgflmZnsiO>1}OSlC6dQL^*a$!p$qva zClNSdNk-8_C~ALbl-awsa>l|c$>6)(!^hFz(n#PiXBUc5Q35voXYoik70Dhg5q#5A zIXht_=yNsU-9OU18)e3=_i)V5R=b=h;o`!APXB>NpjIQvJAQ=52f^h;K9d?u!_f5G&M)ZhDKMYI7;CySKODZVw)^dD-@m z$7SVX<;Xa*0@sJErD%NnJ3vgNH08W^VzsZX!@|aTz*7M#HfeB3zdI6@*cO6j;#~pbMRe`g%zfp@G-3B=YMTe(Y39* zSn&GHspA-335OAW(mAJ<835lUweCl}tyXP8nt)SH*)ls2B|oyf>p=M_V+hVu%LQR~ z=Rb2=`a!wj!#SJNPvDRfgz`x%8A%H>{ZzMB#&##-ZQuRJW-F25{5r-y7gZp!xHl)G zpLxU+I-TYT&r20%<^?!8B280LyFm@Zx|_}X#C7yjf!CQul;~ggcYA)kf$WtyWbrz) zgYC}1-!FYwwQ+kg0CwGux0?C@O0p>I^ls$zos3Gb!@m<(t)SrUmGuT*(qQ|WbAYvV zvP0|W2W^{sy*W7cPDG(0osNX5UOi>+RNFeZFo2{_he0nRmQw)5iL^8yDyr!8dL^=T zpY#mQdcr9fQ9JX1Ays~MufV%*W3jXOqC4$4`4GEgbtb~lgcw7!( zE7Gpu$SK|a@taLVyO{RC9+h!((e!(6ZVa!`GxTChyo1io?TU4+&q< zTfMN2I+SSrk|2Es`(`hDni1;!h^Z5f!i*^=HC6K`>3==lCVP(>(C7=R**Jc%O4KV` zp&Z#|fu3rk;YmQf%}hfDmsX3FONf4(X{NQZR22K|R5$e6+0rh2IS+ke+37tis!`n- z4Dsv8J5W=6sVFx6;NjZWs@Jj@%LmEb$ZK^v&RGXL`zYIy<}`1A_fPtH2e2s{jqkrz zzj0cW%hoqm7OnP_)0v8`9R~bJFe^|>dfmtMLpgjld9^#YybIoUx!=d}x}xC*W$}}8 zDo-6U`^%v8iDG4%Mv_ke)Z;K2tY0y=N zJ*)S_uQ0qagSpKf7L}kyM$Jf~l@h4*YEZ%NUR1sv$M)6}1hC%9bk~)ATOBdq^wYcw zpl=E%OAIa#rK*v+O86Da*t3Yc9v$st22F zXI)TN(}dD^3J^5ip{#%EGtfY3#j!9~FyFsKRsG3;X;viTjP=dSY8lER6uJ#iRKuA9tM8CZEtY)u(1z!#EK zX%}o%GVIDZjqmID#A}n2duL6IL!!A-WtbfZBy~>e6{vo-JoG4+$0PKiXbvQi=bTa3YgfIeJts#VR5{{1`7{Vpem znz>j`jU>H9bd=mjg)9fl(ZQMGnw&^Dk?jLHXi|}mCa3ctc|KK9{#;KZ^1bN$fYL_H zpl(o&Vp3F%$!IdQnov=+#b)%hHm`zM<0oEP8+9uQ_$OK`FYmXQk0ys}G_N@Ya#|os zROWm|kx{MEjbEfnVg!q#zud{==?{2L$~vGYBB>wCl?40E(tUE^gC`oPt@V62l`?Di z^mn*v=|Fm}aD1ILK}z}c$Rm%;*|GBq(92_&ue(*C%^;cUoMynv=>kB8=d?MaXCB&lcg5eA z@CNuurHYy?Rr!LGhcL9^sl#SNRcZu7y^5i=K zt=|>k+e#e{gTzzqn&+45PO(+TA}qsq-5b_o)^oNJDF+4xYeNWJdKkMtyIv9rJl zDH@crT^^wf>qYwX4%BXl*RiNnoW3!d+T{JP|MEMTQiu(eXOOD(Y_n)wtG!kEBCn8M z<*52pl#lpNmdWbEFdKMmk>jssl%zf!6JALwOE^yMBI8rd_R@ZlDyvk{PvuRtz1*%d zC#JB0X5Oxb|LKS|5P$ymx#JT7rQNwLhlfn zDvIMRTASnoOet#yP$k(Bh5+Gy9R^_sb|&1+&6aZ z#D81bcM4a`Bh#a(W<4B5;$w!Hf}5f)Zz}qwnmypU~=7l z1Ocr7wwJ5<`6dultuq6QGMxmGG?~uRQy=cSt*&j2A6tVpe-FpZ6!6Siy-hi<0~K0P zf4Di1NO$<4TeNr)$= zZ|w!E*QpsI3nL)U9n6XBtXK%y3alQjeU4Y87ph?vRTG1;RTV57d=!z}_-|xT`TNls zja@m}CAkYXT*ao(EIZc5W9KJRn#F%Jd^T0ZdL7PTZxe6uZxDsq^#VpL|_zHW8b z*=X>|Kf+@1dCdOgpwovMRY{W)bc)4V`+uHTzqNwBK8M`u3Vup?8MNf^=Zg z3RIP#*~$miLx@`zRpOZY)NvIJ3C~I4eePL9yj1Eu9+&#x*LTNX1D5Q{ASz!~H!jm4 z`=Tr-iBY-$nrKdmUOfS|^>eOw;?5e~&HWX;Xe}Pb&z4NYM0p>x)CLu?&9_i7xc2~a zzeFw3>1B1qqii)rQs_q%EHsiA}!Q;^cE;+ z?IBcy_wh6Qs)Rm<#7Z$jS--5<$!LI1?5+^+!f}6*JPI;d7FcyhS*0zN7}zn=&LQ58 zx;<=p$MfVGWyHHDBj&HTnV*O8TWNP77gR*mYBk3mU>@i7+B~Bz7U*yZY9>3C|>5&Sv8@rH(`@bay7vBC(v-M8o>kB#^I4->68Z29ZVd~*{a z_mTdmh=7?l?69!X>EC+yYjx@E5-&L%+J|4$2fT!wn(ucZwFAWksuk=kY~ONDsbq-K zV|sX}q&)L$a0N~6aOy8AXjCQYP|DWji3*YXbIS-3`ojzZnaJkngwDB1TG9C_H9qgE zDs{DdW`Z5Mfc@)|#iE5>PYkfP^{y?G`jQC^V8%L_;fevz7DN{=w4P5h%pl%=yCXaW z<`AyuL@VD-Roqqv_k9XW;&4Bxx%L3FCVaa9c5^`D-zRQ8cOM<&*Ih@I zN`8JSi_&tOzWc;(2vH-V$bDlR{H3Ij>pJFoDJ8IxUq?x2R$I>6n}cmBQDbv4bGbEx z3n~cRLsaR!32uWGUUHo!SU>wF-ClP|;XrJSPrO5B)s(E>{zu!GqlCc-~`+2-M$xfda>e2n!}$T3Z zpK!n*$H+DjBj7v0k^18e`L}-f54uwRBaRvun)|_bXHbzANBbX|6RJg;r~7ZV&YXUl z4D+F+CGAw?U?=L@cbsYZ`Ne{)RaftqtXGeDOIXY@oI;_H@tv%M^{Ra(8RK&?D!?Ig zHeFSbJ3djiS{`Dg)GMj^qo&p6Mu1=edK9zc!_lQ!^JAFPVEArL@6E-y`)yuho9?Zz z-OKTa|MKa$+%rR)@N8+HYtCxI6*WQRj)qn(C?OA_;ur>Mfj>qQ(Rf69TEYL z|D6h%(b0>AvOUG{vUI^Y{DE)IBHpvUd_Em>NtK-Pv!)tYtpg9M_R%akKH9MB@H;5n zFTMU=i4BkWBnP!7Hw-(9xlu2Ib);cV%%o~J?CEr`mpu@jL3I2i_u(n+i{YE*U%C(| z$-7}v7A7W2kNSn@umU%*S!JT7Turv5Y|)db3xIZX!NZf>R1A^J-|9Iwu1oKa5gBFW z-(GmiUhjPJRN=!2@4O=ym&*tlh>6^+fBbhHgJLA!6k7$IMQO)`PTy_bG%J7+zTbN9 zctZB6XRjA~VpA)SJ@dK{(!?M@YzL&&t*OQ-$5?XG@?TU4H!IH^DN?-=eKlof&Ma3> ziiS|K25RMpIOw+^jSjlDT@>vq{_^EXbxR>k*xlGp4ts65U`FJQJc;EM<`c=Nv-(W( zhAmHUH?4VD=LAH(vtK(iW#?KaGv^s(nj++4tR3$cz5?}EC-p)-@S9Ra4jzl|<`BV( zy76e@Hqt%QPT~w-?+CBbnFy`bfr+0e3*AVD*M$%aZjt(3Hoo>Fxh2l zYCR>oCE4cf-DiN&$bs<_0)I)L7W{r%H5-!}QU~O^CDFQM#2wtLe92NQeyF$!@eo=4 zpoh<2NBzbKTn4!Cg;OfRvnf{zEL)nkH461$Lu!p4azcU!r=Zy%*YUIBK05Nnz{9uh zXyMmc_oI^IhP1c7>mmCdxZa!i#8=;5c^7nGg5T{lvo8D1Q-$E+LWH)-TxhM89QD{T z=a1)G-3MWroTK_BYVF-U0#kFnT3E3R^tD>Et`F0fAOi%+1D7Nrt3 zPxPF*Yum($NVZ1~>P-a3Tx90jjV2e0T7;9z(bBpFv^~rl$rFfYl8Jak%(3{!o`$rv91_0Zj(5+BA}_h{ z%dZGauzRTYlhVRr)3y#EYb+-}R$#_ZP^kd=Y)0)*&<9sa_LY9dWa8VlM+z{x3yIQK zt?ddzf(AKbq6azJo9_c;n@%y*!`v%^qzhif8>##nH~ONgTU{7O-8zot;&-gL&IpI= zxN-w$b&oqD1}Zh6Cf6i|%Ot-3c4$cpV>EiLw^l|A^6)gdR~lIjV*P-@pK;~0XI{v+ z39WHMy<}IBAJt_sZ?!+D&Mn;?$=fXYJgi*fGKYJPn;pz-B+0!QQn@O}l4`{5?vZ;g zD@7>zV0WlGQ{m{sq=!YC#;^2^=-DCTplx$$U!|b?U*XYg#xLb{!-S!*3QU3T^9L}w z#bM6b-iV|_$2?u%BZBpyvEX{lg!RdV)U?1E&>8OqCT3-?U@}IvJ~B4=vYU`Ehv3vu z^sSz5C3rEZGgY0A@Z5BboxFwm4CiFAIDS!+EB~lzKJkL@*;~Bv=t7ry!kcS>0Sr8q)Hd{p*70}oXzFln^>ELeCQdzO z3J7qJ)*s|*GM{EGAETzO7O?g(HB}k-#CmGk)!MWkX~Dx zxF$#RH`0l;vZ!yG9b5rh1s;-v4msq%ftZ+v=qVSH^8xp%{Xui{bt<`kEOn0N9TF&3;#5({Fixl zTB2ttJKTE?7*VVHU4LRp{!t$s`;22jAJ2J`C4acAC zAF&)9oc}~*=|5r)VXe9UU1e4pP>FchhkoABr}YL}6ba-xc3a>1i%&xQI>yO=>+_Gl z;kj1)6(IcMs8b-&_6JohbK~FqdCHy0f~AYuoUSgh-bL4?iP9>R4Q*{~+N&4_d1GiN zQY6J8sncEPW8ttu8XZLUmSDEp)u>SUvc^GX!CV}*8XD?od+@V^MN*f29FH9%xi(q^ zk&#i>tqX!uKdgJscK4l{dGs8Li(k_)idN#?^tN3yyZvMt5JytozhA1LM@!pl*ekJA zIoLWUzjF=p+RF$`v`u?JsjW4wEU#c6I z9Tu<&q@E~O!)!!NfqNXP@9UT{Y6nOi58v$*0r1Q@xF`q!a87TZ|2(|8BD$``LB0_i z5uk6Nok>~V(wi>{8QS)&?uXvn=p~em#jCzk6k5ksor|$l*f*dFFFLMktJ_fE$>gHk z8=n@YC#WPV(oe&Yef?VW!FNICt*Fa}KK`eM(b35a#(qY@+AqKF?C93Mi3W*Y|Hagg zFduBY+xaEQx4%yyGrba)Sban=KGK#RfEfUt?g<*qtu9hd@utNA;e7FeT1IDPDM`wiD27<56%Oh|-!je&BFIxpk^qBXoHRBDFRFLw!D|32_O& zwaoh_7NIMf`*o$_S577Gk1l}Vop2A82Y=W!(}^G|WXd;3W5PvNd)ZR-fs`xuin5>G z4H?y9HNF7Jr`hboi0SGw++}dO-gTkdBRICP_@iDsAkRjI$EP%b?!9135w=LrUUgni z`P`z)j~@>Rg^w-{Cdvd5^{S;31#{ssM7ZeoM>ec({!wtF}C8uMM& zRZ=49!%xT7d*t`2#!UCMv$$5P+Q}5ELGO=-xnv(k6v(#MXe*9n-C8Vt4Ni>MSo`3- z#|Q7R2G^|bz!i(*e)onf=nd6>hARM}GeOD&t9Wy*^{;VxN(iS_c9{~yXP&0v%om}p z{YeoT&NPbq1C(f8x9afy#xf~M43%?3L-D2M>8GPtp`D0bJ|bxuIwUJ=kCMba$46`- z6yFeUjlj>N?Qeu#Td9ASHXI*7Ae!Tqjw}y)vW9$6U*|tP?NIK5AI0$CbcE znWQt>r86@zm!7s-p%R2Vt-RUysGu*altUw}W6$NIc|G`&3=k)`9c|B#lQ(KV|Hf5) zVZCtt38bX66rvqBDF;Hog)}6PtGC0Q%!}0Wy1lhKlK^5xkT!k!*!0KQSi*>$*Lr&B zy#Q$K?1~H%or0BSN0wF!Dqnnrx2eacH}W)!ynrc^QI>k7LWpas2M8e<25C`j%JqL{ zKk@a?g~qz&cgno#WTA=pNb(&QQ*{GF;F;jnJjiy|V(3I6{b0YTDLz{cOvNFT(5?w7 z{&0^f7YTj?j}>DF*Nk=5mAtaCnu_M-80wn?a~K1wUB!yyY#HQbfndr;DIX7F`_sNT zIm^qLm%65&p{B>AjIit4PvAT^W)n9B-0LxjewC?g_K_u=$4tpx3T(~t?YUHwth6JHZG zRcx*}+Swbwewmk8Qvr<>(br6BdpDXSKiy~3nHB+1#kokok^#EHV(0pGRQ`1gfzzm4 zDrfyWOp6Wzqc^t}_oP3EiXWcVAe=z0U{P}agV^g{5o9&1RiXIdxM`C@-Vmz--$u{M zVhMGe>15Js6=$p6_&UVCr+YEiE@K-l=QVO z4KpY)9plv2I*ZgE%8r*{`4x%=y}H%%)a#8i6i zn$~^}_qQC4Lz+;mqD+L!L!LW~xuP*+@vjog#UQg~ql#%bHd_)2knrYw^gV{87>|aD zV0L-LS2+}#)2z7Fl8XsbwLfeY&K5hY=&+gv4gFgCDe&+sLR2mp9jLpZpbZ-f;MC~a z-F`DCbyN(t_9D^v$v;6Gnlm9sh<3uXS?yatbefDmA!NZjB zYt++*zc-M;cCIObJba)>Bk3#Gr5Wv4pC->lR-wf2b$4W_`*wz+D<;C&jXw&QQ5Phz z4h8jo7RY?Ub8WaJaHdBTqQNmx!te6Q7{v5inUvNTT1Cgx5|3{?gIFqroXY6%X=}-b zUiOFHluM$PFWnC@ZclVlJBv#94f^h|^msB_tYL6s61C%ivn$GRr1a!F;4 z@!kdKJCDQg+A}@MSCRZ5HJBTWEm>y;NR0E)y_(NsW%xQf$$eynizo}w{8hjtsIB4Y zOC)(sX~KhFv);5Rwfy?H7%$Scl7lblB-v}p5t*>aXorhLQ|>7*CK><-5tp6GFC=rHT`o1`y>$%1`|GEh)^#z$77^ zErGW|StSQ~sVcPnM1~%#p}MuAcF8T%f*AiabT$Kxe zdf;IBN35P~q978)d|Eq8w^t_^%6Ez6HF8-^r~bw8u?pJpMnSx3wp0(`iq@clp}Q7up8d8J_SW6Y2yU} zZUwHRun*8m$&0UdGT@3E=oy)lGX{{Ka^9+6m6Biblk_fh$l%Al=&YPKuDQdetC&$4 z8>88p%PT!&Y8ooBAMy3|iE)n=Ci&_*yE$Ib)*DQ5W-K~w0w^^ST^B`cBc-+qG1y2htT(X zh2B(tISE&M-6g>R^RR9jDb6wl*x8aR4Q~fES!(g^T`{14Kp$?@*0bdmo}n~s+}KV# z;|a;A*uZkNn^QffN&yxw6Yqv5TssRatDQ)B^-A4L>%Snx0qj*`z47HbS<2Mz*Mn*c zY6nidE<|2?R~FQ&4@6wj&%VLc!`v2c8GddVPOWTG9PV`~pdV$M899l{ThVK5M#(I@5x8p>$fuDIH%yxCg zBuk}#RYZPu2hy>7!)h|!<P%{-h+0=GowtdVLs#Fc49%excV5%4e zEOVeb^_Y;DRmrl$tBpasE|V7zF4gT?M72krV5+X96eOqDgi%@E-5v-#fW<1WR;KkK z@-IsTCCyE8XNt*jeBJKQNwLPJp))Jb#tDd*N$`;P+&u7$I2btbN=$-dO19V9X+tSB znC6M!)qr-(Y9>B@J`Vgq!qeVp1a<`~S-V{gQiT6N*tV6(4ar!37mM(HhBxB(B;DX* zm-rLc0=rSP4tmF#Nkhl4*kdWn*iI*reU(K&rO?C{JKLF-$NCq97IN00Jp7yjyGB0?BUyaCuBH)jy(iQzf=^*&)%;OSgN_CxOq7pS$*GQpyfOednJNsVZ8o+86Y zlmg!Oy%zw%Df*TvhHcQw^qocPdY|#PjEE(2`f9^Ma@{ZA3Kz%GopcW$$iCg&6i(RZ zTj&3HzTYRPGM?oOaF}V*F52BZxeowd;%8QVO}(<)FQL~%2i0|bbw{D0Y$(CsyH`tP zBq)L9cRD(k?W%grcHHG;4!p%E>0vSwN=g#4tj;^Pv|&j3I?(T$W@sgdT*XO{y|YUn z-EV;z_6?k&(-Anldi-6|H|&K7RpRh?Wn=@ARg0c+xSw{p$gq*7E*zjIEdEv&@<}t4 zWc=mX*l_dPUG%R{%>kPlO*G|Sbl<8BUlBL=q99qx1`EFUvA|fmi#cU)Mj$@(i+yma z(QodxtOYrhZLf6DT+$od!c+|zmxhz+dY==E zq{d=KU+8h4MVFZAA|ypF+A>5ux;>`q01~ZXy!JA%X5$dZ?cCbD5 zC*`P+nXUBI)r7e=Od?g3Gs3YX2vI^X!xE!pl(0`+ z%TGGjDduo7YO7yRo%0qoQ}@quJZ{wUq-3QCw+gJ@yEI*X;FhNPEt8$n@r=!6{5m5t z`Fz+YbZ5k-5v0xNTMS#7cRx}_MZ&P|8#nB?uE7%C$>N-4glm4c?g`XguO~B{}m|nQ|Eu84E=vl ze*M>ts$6fLKkCCl3Mh26EBs^a%m$n&_cnT1@oknmoF6T#nsy~}TK8?BD7 z=(Hp4>hU-(FD={2Ccbl=ze&5;D%>9K5fJe4R`XTYn5kB=g|JON4iWhL3>%gdR!@$1 zHtT)Apn^xXG4(whsJvVZRO78Ca7t+}H!CMAXU+q)F!u)v3JSXfec1A-b#(H%_u1Qi z@g_0yG4D75Z{V4MHO6W+1ZtNIG{yuHtQ83Jlhhd16t9LQYlD~)0k5e)S&7s0W+3OC z1Yq?{MNFLrBTh{Z2z9AgyIH&0x?lAqN6|Z2T4o<&pAC$6s+0mAmcj#&Q_LV#hLnQQZLE-lkuz z)+gUto337;OG7%esvRfY>L`)!{qZCE**y|^H~;b*IJ!*OLbE0$BpkwE%BoA3RV-JG zLPl0rJC8S#1rF4iVt+MxK+hmsWdp=Bo(3?#3rU3^n=pFOhn*ZiSKkFn|3a@1?D2pi z2zK{8s1a4`GX?xcR;oLx&o=nX>714asJct0ub-Tp z1G~?eB=k;s%*XJ^O@NOE=^U+h@et?UE9{7%-_`^@gQ!SqKcwxQj(5*5xM|q@v3F4- zjx6s$Z#*fI!(nxw+T;6UvzT$PcbJ--D%=L(iOMMkxC(TdoUWC}Xt%nPJG}c9?LmU` zXa$RiiTw4!sq%peoytIX61OpZnIzkSz(vWg7tdKsXAp7m3tNcGAG?8U+()gZJLg6C zrtLau6CYv?e>`Lqs_--L?F%L|m2DMp>_0R1s@r|c0UTBy9%<-s8Y{dZrgvkEi)6gUG+{cG8H+rj~>Y#=Ex%zN( zUmXgi?4w+;^t=t|m;@k*yGe^3XNipA%WQE=w37f;oB{6Ysx51d<>FCJzMM|Ia!{{) zb5LaS%nU$w);58eA2-}p|3#RfCw6r>d+pib`b@{P{6uMZjn#^m4}J5-xefQJBzxoP zuHm8Q%39<+H<}jygsCg?Y(FD&mYYS4Mxb}nNv(7ui-q$0VeFbe1IqrpcyN459>s*2JJc* zouBWDm62&YmhRJ_H8wLZ=p%NgseV^>N|$c}1~AWPfUzb~QClvrE7CLVhzCI8Zd^14 zE~)US8aG3qf7LSd{><;5{{#HQ4yh$lF-YEjwroC#En*@(j zm_c^PHSt=;6jg6}^?Xi{{E({+bE~u0?QB|g**et94|vu>zk$@Fc;GGQ;;%MsS!ZW3 za9Z$$r6+oXRZkFZq|r)BQa5s`7zLE0%Y`kB;(yN`H6mKaAhv5-INfw<4A45<-obCv z6J88GE5CI|sgelORMuhItH70YJD)kUxI-9gWGNbrmM&?BK3wH^cb!P~w=_ zxk@J!V5mxag}EDa9-DNeIoXwmlqJ<4Ut&~xY9AaX-UBF2;_j3;9VamRnP+jnp#%Iq zKQpPX9$W8-Mc|}kb(4SB&j0tENkA`75n#Jgg`eF3@@$iBrY%}`xD7Jf#8#Vh4A+n9 z=%&3#^xOlJAL1SqRSzX8KWa0yf9kXF)Zo|m^GVVr5Yo-xLyuy|q};EMur=ibm&{(f z=@lr?%sj91@VXjDeq=g8=GdMJfJH4iu==uffy+R;1h(gji`(g3z)@>{t_2!~1H^bg zQZ7&ODn9`HYCi!T003AO) zcCwo(J}-cyBap+r!w^GtY3$b+;Ep1rp!U&&jiA}f>rMAPCeNrVjI9_^F^nP4&pY0dMYY3d%kTfO>7##qLtw`BCn`~0GK;D z?CcxXe*=10)ZHixSR8+(Jj};bzee+t1!r>h#KG860V3I{=&7SCRUd^Z@lx< z?l%YFjFZjp`M5G*BX+PSi2#2`^LV#bW(@$zkU!(vm&`$c_s>6ldP^6HNYKM9WMOLHIgE+dD zi`{P~8bpm#>8rUq6kX$dU95K6SdP}0^O&<^9~c|DeeVHAjjl6P-)rcq6x`?!RTaM1 zVtB%=u@#eF8I^|ORxf_FvQjDd>c#o<6LlK}KvnqH-@vJPitR6)HytG@$j*s6kJ{aP zEAv`ef&h_}hldBC^5gp0+7W=j9CBiOqF0)A7O@1es&XFNb$jSS{r3Q4Y=TOwx?+LC zp@oAzs@D9Z8K5K@dW&vnp>J^d@m&etLJcsro^KBnVx``gn+}i}F4p?aQuLqj^6_Or zcZLuj0S-uU*DWT6v?d2(=h2^9j}OxfPp;uus$wQSSSESkDD2eG#fvPDz^i?J35S^bF zynbiXN&v8MY*ra}9PwT44BN~*&x4#`0LSX5p#0>oW;4T%4Fcual-wi)!w0F{zSxxvK-4S?nj{Pwan1 z0NknbjFtG0|8W=Cd)>r>J%Q`LIgsMNHk1F>6WKQ^7+kg|nCRw7=_}3FjXn$#How83 z{r9AHZw=oA>JB70;?%e$-}3;DBhZqmwbuoqmUIgpp4)!0xrHMo`)9NEBRM)-zf{rT zv3wk}lJfT@kowfEq+hiKbV>L)E7{oA+fj|BnBkisr4ui;V|=7&VI~&+Y(N`t17`JL zohr1a*BwB*zzTeywe0o{0!MHB0kcM$LTS3YUrUI@OGE|teE?Gq$P*2NPCn^#Tg7I8G-IVQB@s-~IH|D* z@9Um>1N0*!wq_eR%nG0EJ(pIM>J;*&sGC&(JWutf1mdR{M`w<$LJdzt)zaG9m3Ym; zkIIv$K)r8Z$3c_76)apAaQgcALgdndd4mnmMsEuudNY`ejB#-O=OaV@&wA)T(aZn; z|Hh;6T_K=PuvZ&Hcrm=JsH}94Y4kpJG6GrH4|;O=Gm4)r{|gm6w)27OpC?35lw#ib z4t)xIKmZ&gi1jW2mlUZgJe+MDAPJYN45#?pwG!HcVoJb#mAJv`y7Lc$brNH6BW`E! zs?LkXKzCIJ4J@MvaHR&F!xdFQaSY=*=GY^`HD3afa~5}?8Y0ozWQ?(S0RF3kpDs?|F05IjX=WwZr^z@ zC&Az8;x)o%s;SD862e;#t#AMBAj4X$z~%o>{+M*>G4Yz&^hX zG&hHv-o`Pu%&h=~ML?xkfe2X83~Z zAEfpHoXGi`T?pktoJ(~bjkJU$6+UdV3GgG%%fId`|6GhFT4EWf1%Vu}pTwcPZU5r( zZ{nP7YT*BS{%#L%xB6gz^FJi2r@y)#@mJ|MSXO`k_}-MX=*zZRbYYpp&bjBylON-W zS8W1lZo1+k8{zLl#5g$5vFcwq<=h;y6Wu1(zRUQ`MBwL1?{H3&YtjxOkefD$ZI3c@ zA=h_Fh_P?a`blR#7|sut8jk#!bSBm`i1igX0s|h$&|FSk)V?V zdL>CXnVM;mybgnU_0{}%W1)AN8}fQ#{|_%~Ew*`f9GrCQ00FAG_4{{lgyI$0@^G(7 zk%i^0Z-$z{=9|ttO^QD*1cl5zQ9ph!1-|~ieh!}dxw2b-1Z$~kS{nZ}$-r0jvcSS^ z{>{Fl*@=Hk{?)AB=~V0RZ?`1Fq+}g! zV9rG9b(}5f+_m&@$Oi}iIwiGMlCmwCRUyOTLWak!NUh{WR?2FRpFK4-%>U z|6QNQ8VD|(niBF_fWQy2k7%40&>A$V1y_?I~gNZ(yIPDx_r`?9L~Ey-ldF}c+tFYaAZmv63-63qoGr_tA!2z6}5X@E=*ZU|j%!_Q0wC-TUM>smzvSV)JW4p58uiMHX9~ zzNawc<-Mgf{BvLb7#=fzdp=t(sXlfnzq+>J1Y0G#&q#V>aR%Q2001-z5-g@!&9^R6 ztg5Oi`qyGzv_j$q002Sb+>atcp51Z9h?vm5g#{J-Jw(R%t$AzX_yet{XC#JPy=+Bv zFtiH9>Wc+u%aO> zqarH1a(Q&|6EhOuT9Cqr1^|F&BgCs|)gSulUDr)(=jT1KIgmnM@M}4=2JhpM*yktHu000CCAzuDk z7gMgKYxkCxSCC~<39JhMa5CxqVOUx9G3HN|wa4qEk7o%YGb)nutEpL7+R^kP{v=E= zS+}m!`)`}J`7j?80006CQ!c-(i|i^tzu>#?_m!4cGUXy*T>yZS$)jIHb9<7gt~-8I zQn5ev+xDZ!H~f9Tj*#0|_L~~V$^|pGc+l*45R)x&QztlfU%c^4Ax(4VW1}YfH}Rh{DwoMN`&iUo&v;qn}69!jui!FHMX4 zMb8btern?{pWN_&J=R_D>Wq*F$ImqwYkG5hf`G4IVy8h zqSc(7y!BfnNW5TO0DzOpMK5pv<>Tu^?p&$m{?#GfSBKoO;*^KJ|LKEkLvC9ha@(?> z+_(B{GPAy$&wg(6-}-O;!&4hVZeLDqLhjUa%d+t+()d^a0C2LYsi{$vD>pBH;i_Fn zE423+VO;=#lgWiIY(1y-JUG)HXCUPy<*O0N`ZO`M=xGd1m8<{kQm)fArlTU3!-lEn;BNH?mngMO7PKPE+lLG(%000O+&!u;4p>yx+a z%giq}&#pCBjKl09wXNE-$oSrsx-eJmzvoqhGk}_aI;)`PrJ^$&!Uc;h#4hnzt z{jf&{?n4j+K@bE9PRKoaeiYt&cr@9_%VXnSo0#}zWYVFInWcQ-gqeqXDR59gJR*9P0+C348By6PRyyDJh-2AmZLv*Y_P6_5RG%x2GmOH!|wMw|CtB;`-ZO zKoA5$5CmzZx#Oh`J>K8_(iaB@&PaK4a$@(_x8Bxo)rhIP3JQx!kZNmdnH|;C)I=Oe zsnOOPR*8zrYSJu%mZ^{lQh9m#kt0X;A4vHBi{Px*#keV~00000NkvXXu0mjf!>0)W literal 34863 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 N>g?gfJay^%{{g+dZSepA literal 50694 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 vs%6N6#kS-qP_$5mL>{h<L`C-9 zFdMQPGm~XzV$95Myg#3RKEKEJ4_>d=y=TrnuXE2m_nh;*uf)eDy4e?99U zHa4D~qrYPpZWz2|WAk~Zul>Lx+<}1g^RRU<#;dsl2hEt!zX&( zXvLy|S|S~f^G`!6j*CF!tAhAjw=cGmDGz+1D!~P^!Am@l5H9miJr@D~Ic^6dRqnzi*o;G?Hqqz@kVu184> zD!o{87_agE4x1|e9wi~E1Lv~s2(bscic(W(k8ZB|84wdL+{6wKj4ixO)=;?G=wb9* zcj;WxPw^M>!QwA=g3C;=9w5GCloRf`t|DzlZf0puK$BLtZ+-;c>@V@Fn~yw`B(XI# z)%e9aQRB|mqa%Sh^GA)srOzj2jIOz?puXO+8_ZqMc>d3G`hvrdd-)&p-q#O4u;&-Q zQlvZ{z?e+rPr&hBVt%$m$`^L=8H05ORUfm)D@Q*rXxwNlm4M_Q3WI;SxC^0%O|MI z7BaiF>`F%5`Wh&?erJhw<%UjIUpcU(^qkm4#-`Y|L@22Pr4yE6 zaPlT@I1`K_t+*^#-O(>Fni~^M=>?{N%SQ2@ni%(1tX<_ep}xDWyJnF1QTV25e{O*i z_eR2uf~u{Qvt)k!062(pl_f%lLH{z8`{toVCWMp7<>)F%3_!lTcl)jl&&TWODQfnR zD8VZsEfV~7^)f&%bVpsvi>L2?ezLYMAUg2*myW;Qd-TB)Ih{)IO51U^8^|4th6$r| ziv)7`s>-y}B#fS?<}|_1GP8RK(}5nE zwmgIYew6c_X0dZh=rwW^G~Z9sC#dq<;97!j-hx9wDPw_$jqPRKXL$WdKL5#$l`p~YUaU5@V+ScYWo4FkF2UXMK^hX@E}_7%#I{=F5s*DAyR1XR@L z2%0Q(Jj86Vef(30x`0uEeQmiXk(1t25a=PMQer>o{8`sI<2HaR{h7rJ-67@nLP{vL ziQ{DGX&&s*MbS*ZOGhSRqUF>0?EN&}GnY2`Ra=axVvgsa`t+V~;cg#Z)ga6%FRJCD zPW|$=FQ*B~hqg8@bp8F=iS7QT(kW2Wp?Myn)*14}M&50NQuh zuVfH50moO+H>sfsKr6!`U^bDze9yd99zv}YFDapy1ST3Szs1#2TER&4@dQS;^t}d} z2eqa@DYw^+D*{yB&MMk)&MWeZ$ z0@Yo0#%hJ&qV|!eqcEGp-%b0rg=;5})9=jmwZJ-oVNZwSV~y_Bs}qi&OVYjW^bkDt zhVpUG^ZEQzXXFj)2TGf+ntjP}*0{3-CUFzrD8Wtq*LAAPW5M7tSxb)!;qbCBqc`Fh$UZ{gfla2SW zDpmGI4O8%!b{_Gg9B(90wC~9_CIrvw)_ThE=Hs}_S7It-w!ZsNuX-p7rs$N8d)Uw4 zlDm=rr|JR3!JJ|-_$1GRfoDgqXo`i}1E;fj9a;x3?wTE_LS-P*1r@u&xea9H$r`gK zr`qp(kmgSjC>+`UaYrVoZ8012hyTKc9mD@&W4rJ7r{~kf)Ms7Ab}cvgc9PU6AX%CA zEt}zr!S$y6?{Nt=-rj|C5nm<_2Ym{tN-Nn)5)N3kGa=i%5olqR`at-wa*#SVK{L1S z$|Y1<@AdTCCG;<;s`cY6L!Ylk%yR15?qq=@D;-$E!kZx%}Sgw?F@EUozKtUZg!ZjdtEu2 z8lka`su_w29$y{y!Uy&`{&^EOH6d8Ey$0VX@-^nItCr=%gygH7QZe>0%^ws*NxFPt zzSdrnfUxZPS;Q}00LX~C?2Ppl!T^VPx<%O7it%%TRG6w4l*7N~y{70REpt;p9BEl#WA%s^%HL$!ve6wfZ7%;HN(+qI%_>p%9dzz=5=+w_CgjG$ zWQ5QQjAnieS&S%phV{bQUrDptbUP$o{v)F-Mh$9tFB zA}yzNy5AgTya}Cqug{0#h%8Yr;V40k;ap!~O~Dv?HS&XzL%PkLaL(UTb?f6e-CdvGwGBq&ZSyU=(WD}X9VELcY+I7++jDoz}cKgNoc?oI$ndq zCxNFO5LU6ee;Nb70%0&m1`V1|RceE$;E2Ay&Puhu;KwSM932bvh)yfQig=AJ_&7IF zm7C~YEg#|Z;Ds(e>s{uC+)JHQ?J|--;k_6nAm%$|hd*W@!n`BQ{=!h|OVQi5QeGYi zPv6qfHx$0AOiscRzJtLM^{)V4;7Cuwb6%5{Zu_*n>6<{*Ld+#au^#U%u^zSBv)%Y< zb3*H8ZDqQv*W3n~YS4_vZZ4sD0PO@Us@Ds(-$o!ud0Mm(d|YVY6^(zs6)HGQu~T2P z_eJg0o=p6>;2Sf|=PEdB{42}MyKheu`Xng&thhGp6@n1Ru zwtypo3LAJAL1II-(f%q;4w}#!CTKeQiPP>^<7%h|G&!a#zw)cGpCmK%4W}(41ay00ZN=x*rTLlMl?j{J}gr}O;w_ts3u~mGnCTw?q`N%bM z602FN+dlZjNu;;-UBW&1f*OpL^F9u)vUtzvGne0n1?USayuzjm^HCqdIJdBNlcL1{ zAN#Wy@8RmoIdX?*w>iRQ_tQeB4zf}Z?jSkUQP2?KgoX;CZAi*qK<_`DU!jq(X`8SX zV0CDL*C5T(R`(hbnB#@7YXwT(H8stOX>Y(E`}UyXSY0^u#vIyOKm*_zyZ-X6D5gDk zh2s1cYKcR8K898v95*?c4vyeM1+{u^46Z9U%O5Tmi>FHbU za~JGZDKmb+OFv}`HN@hzN~^bI$GBrzEsGd1+RaJKt>9t(=y z3K6&59v*fO>@TX{Z-%7h<238%{Oi;=Z4iZ~Xvh09IEVBXxO*4fa0~V9E(a-|szIP< z=eA$hxCSO^D4k=-e-PST{Db|Eb?x1HRR;CBzD?eBqOow*cF>i(xOlh`uI)?Vr>U0e;^p1E_rmxxHv7a6dh` z?+NdBon4>PQ3D5$d@jec^=IGuM!MHs(K+ejqoD{S!iV^5D z-gT60GXk814s)VIq4o^(J{e>`(9#Jl)LJXmCezKDwn&&#QxwCKv0@9CbHdkzv=@A> zMQhrR()KIy`wNlNRfLl-3oBOSsqf5gT=elkUUvN3{+Nf@`r4&vdu3|)3@M)4)itny zs+X-tV3dro7dp3 zl%%M$nD3x<;eWn`!gs=_Q6|%aOtcrZ7FkqJ_*=B07LNVrKA+M3`O{kt&*uGH<)gb7 z>g>XK3+MePkNi2<*zW#`RNvx|XajJFe?Nyg#)@!6i@T#nV_tHyHjn#JC&E~lVvaNa z({umm7i=K5qkWQX{n-C@3fmaZM=lf`b&ZwtsNe3~W!oZIizV|&LkQ+5uH>jAemj9DVg0?Y6FYi<<~g9fd##nbil z6a_VJQw3x?HXKTy5WZZ_{bJzmE#AS4x(%V<3AN-N8Y%i z)kkx6@z*}58-~NT@9n#8Xe!;P>RW&CC@PoKoYB=KQ97!zW;~}Jg+Qzqcn|kVuEB!{ z(~ZcDg5=Du!knIz3ul9bp5D9J$T*u=D4Jt-&$4i)Y@!z8A}6Oul#@0)Xzax4$=^(r zd~-b{^x<;)%nUkt&vB+RXz?IMoyE~)6$UvUEj7E_nD8P4)Hz>RuMB@uVB^;;&n(EE zpl9qcy&5*1X9t{-Rpc3(X0@-4-?fpb4hb$KvfM%{!d#FqQQPHk>ZKj%N+e9J1y^9R zFDo5{ly3?wJ#=^?|EeETmi)64>M9g65J(I?Ni6YKE+ex&<~#2E zx7kxfA&Itp_hnIzu;!CHl&mC)e{UJ?q;n^V%IFuFC@K>Z&y#e-!Ih>uqGDP7?h*v9 zDoaDh@NW9uZV|GppR22J9BmHH$^qq)2mV$Xawq(8tNYMppZT!y@^^&KR?Aow((^~B zz=~#`yr#P_3qrNs4v!({7@J7@WZCipAFspMGkb9WMj zQ)YReTgsztrLx6yr1f3|KRjT%wl0#DX>B*T9j0TmxLj*b)K7a$2mW5>1T$7s^5yqj z_P=+b_H;sCz=t(_586ER%w=6TT6Shbyx<1)R(Lfm1gFCkYqVN*Va%N+nFUE`IA-^7 ze880(6xh^HZtWU}UG8Og%-G)O_m{d^v!Fd&aDv_d-toy@LK+8iC0Gb zh(3jmLO&ZesY{9)y2lIqyjA`caj)#vM-5k)l>7FkvYw-Ko_z42H zH6vPogdSjU6@VFkD;z4PTbvqoXqTu{YNjY=mg2D&@^$y=E|)xcJXovVTnHtXtiOzl z{W0A2Wa_bkS{qfSXPK)=7*K z+RJ7+y4z$jqTHLSiDKZ4w;aCbJM6#cjqq9xFl2^E+g1Nsd|U9;xHQeaat2-FHiOTe zo&+Ji-QXzV5@YsIB4hLFC7K>Ngs%twsa@vVT zR22n6XKp3Qro#sg^j9b3A~Y?=-MUOHAYEME7mStAhG}u7SKIKma}J7xZUr%N;P19K zY?DJAU*`}?!*lQR=XHk?hynska+wRM!j(9{lsYT^Mi%s6~|(94TE;wns12a{$eqcD-AQL6btj z2jmKsiBAm?jEY6`;}$q~7=hQ~+f`{eq%FU{^IK-GcP1^5z2g9XaJS@NF^$U7vN@iKPMu~(-!4pk?A;e(Ud{|1KFQ`Ka!{j)nCK_&3_7xfud-GyHJ z#*5Vv=`aWG$hW_1Au?%mrwNR2qRS`4?UjQfMtsc459<}AHX3JXgW@p3xbOmiXfBxM^&bncUPP{$z zsW)_mSjOBNX7+01IZ?~EP7x-2VW^Q(wBsmVxlLR(uoUoNh$=wqH2T5kh8{jKc}|xv@M=hpvN}Q) zd#iMCGi1}#1#YAA3HG6RSJ2*1;c))`-+1G&$)44dmbMZ;9r+iP{Ur13>nS^^!cbC- z6Bwt}IxUThJXDj4WRwKIJEZTTj>+O)QC}r$4_P5BWtLc z>2^E-Ve^k~r6QXB*uj@xApKmoj` z^m=fvZ|7WEws_QFjDUG$qZqF| zilkFsBiQ)IG#LxdV8KqzX?n2(qb}OCL6(nF(q&Ezu^|Hel4Wg4Asy+~GGcE9uUQtm?MJIxYN} zxtoCfObWZXA)M?+av|{eGv#Q&AV6oqdWco4u3em2nuoi`Ovqf{G&90=1P?KJy=$Ya z@hOudMs40=59%iE8&6htUePfzbJMjHv#JF;(o5O|W=nNjyPV8G3tvN5 z*PB2ESw;~SGR2b^Nw8}gc!3+FVza&WDeCMpQQNg92GzPnXyYcdN7~^I2@(1th6dx2 zw~b;nuJvcKf8YjWJR%l~p5gDpy%FTeT#VVu8K0zQ>|bHI{MJrnlSH`BuRU+))%F#c zEq)57YEoJ2AVH!m!OpiWB6z*IkvDr~j3hVX!!mH#&Hq{byGm3wC9&oMck@;7Zg&Xq zdGp3ft>;Z^YX!iPX0Ax;w*%#Tp8daEK}X6>Vus<5PnpQ&U2HX(G*I2uC|T3$P3+Hu zrtGBzPVVMUPF(M|8`U4bC)P7#JYF6G_VIVp2Z# zjEgsh(kaBNrKa7%ZL@Ga6?&|2KCR{p7cqTd5n=5Tc5UH96xIrF+pF3>pM zn3~5;>hk+XMGO3^>B7;oilk2=f?&aNcsJ))+S68-hcpZ3d@c;eZ`-RtSgtctCZ@j4 zI<}M~q~CmeKIWE_7HzEbiS1II{QhU)6VkKe>Mb1U>@(20OaSl=vqLe@yHH&&YaC|; zEC(N#->E(;K<|5!8yTo0uVN;@^H)`X;ktiP!TBLrJTE;QL%WOwY-_GG-!GLY6ieT& zw_v(+T0ZaQY{i-qgjSiGxh&Hj)NVJz zQ!r~ViB~oR4Au&?)+?wbS?^IWtd`zxS6RDqmryrHv@q>rUY-aI zNTWLJL8J*Qp$3krb2FSvqp4Q+LPOpCtzI(`@2ErIp85eT{mrqAT}Ss;N}XjnV{2HwIk=m2HT7$csBNB0)8SN@ECa_z^D;e;0jksA+TlqMBH z9Jwzm_*3YeSM?Y9alq#!aqKIP;-5 z#1gcLHE%ICQYt|>6YmdOgifO_c~4TQx`s3V^)wxED|bm>B0j`cX9A@Oz7`$%7rMo>?=1n8=2XG-Dc;~~L6XwDgS!$C zKl18cuF9Xzb`$2c0{TylEk{9|yF-x&*dvT$8y;3~9z{^PfO1wlct{p|mRKO1{ab|e z@cvL|C%wde|2ug8T31H#%OCY`2x-##F0@OBYN0eUFX=;?7R)5ALX9c?6>iY?b7o~Yg#7=(4b3F+6CTt!^(uU16+p3L!m{0yS=cip)l>Y1alrq?%vZWux(M*ZC zNAHDn?$6}QA8H3_UTWn#Ncw^g3tUHrm_pPb4f?F8=Iv{qFh z$MOF-v9>n1V1I3Sm7#<$5og8I_{;rc9#v?{B!m&1J~Fm|`WiNM-g1+?zu&sVyzQUm zTWMf}{BCz=2b@C{n7pP270Dri1q(3+%7Um5yg6liL1n9WMG)xWDdZ4GW&}K8J0Y|$ zJ}jaQ^vy&=<;q-5dtvk$4vpjwiG)S_xj~7$r{RbNW6x{c#oUT2Jx`zp8ZREc^Ywn8 z>$cXCuD&pBrRig6i+a{OW#YSb{mW6T>;)fgTDjwR*t>O>=3uzmY2s}-mmEQN?;8B| zW0x;f@miE@0Ta1Ly<$$Clh@cHR6*GXa%USYiG1YH{sKo_hP66c;X?yAe7 zdtDSrmUa!Y#iD;+-dCS9K;Z`|#PMTER#hU7)IH3-aPacy;b z&WQ~-@m}{vn271?Z}kV^vpT`e2B53(^=Z$5~K9Uf);T+>J62ayG^*c)YxE6DHfY3~onG?W^j04=`!Iuul%UPL6luC7o0 z_0t=l(QoyJ3SV%jl*+xKbROro+7!5LK)5U%<@D4*-X|fZ<|(PJ1WpQf4X>|c)*8C? zJ^%HFn(-0u`BEj#={AI8(5)#4&6-S}oOPayz}Afr*m!U68xdLgh+Cfdg-FkWiK;j~ zw0@Yx-rrk7bs|AHQKODHkrb0!sC9ZJ|Dfv~)p=(3C#0vEU*8Z7Kjm%Sv_m#niNZb- zLp+Z5o4jA=xV26LVyvV}*Fy4UTJZ9MI5~C0wq7Ctvc20I*8%Uj^~e55 z%Pu47MRbUs&p`;K`zT*o)0Ny>R{%5~PB)$2Cm-)2Q0d^g9J-{gz+rv>`p0`LEwR ze>K0vzI{RT(<;I)g>lJzaaSO*K>pRj$NrN=Ip7(fM_NAh)o0Zx#p^;UPgN>u;N|N6 zXl2O_s+)NFdh>PpTs&_5&Kv2p@rH$>RbGlyUKGaXvS%zi6%<^cc92{|nS$YG@*RyU zXR2)?y7rZ9L?`sV0L!P!aG;O^%I;Ld;sG*_8#_{13r%Duh`#;$0GmB@i5R(DBsM$f zv6+3QMv4SN|1C#%)oo0pBw%HEJ0qD94+vH#{w)V&t^c+Rd- zJQtv9J>mjR@->3R#!OZ)X#z znWdXPKJLseCX}I2`6leKXmk8Rs@qnGzm;sK3SjRUd;up#RkJ_9H=U2hp(^-zC9g*) zdTM-XjoqAGc>5`)qFcY zp^M-Kkk_`7*+E{lnyey=p5H)JsC*9r9C@rjB?6-`lyLjs(z%B*R=<~WdZ7D1(`H;2 z4?vTBvQxGs6W3ud;}9xf-IbnY)b$(@U@V$4cl?QD;TE)X403gQz%BwqJtK%~(PsZr zE*(eneZ~MiVjtpA?iNY;H9x)3C3}r~?*3T91d-IsuQF0f_uX;zU6^7}re%^Uc9 z&jZ5)c=S?N=AgWSF$9(^%2~9(cZo&ujr1*hz+w(C{<*Z1d77a~sxa z49dVO?jv0EzMSfq(*N9CX=A~LZ0awMpkubZmsl2v#$j{pMIN z`~OtcLZ|-k4{FVF3xtb7^MH`poTKtwocPCD^!pZL|M}b9aAU-$&02`|QCaTWv5Nt7 z9U=m@xsj}j{P285R;PK=e}leer#@|JZHhpPVN|SevBQ6SpFWey5)Xr}8y}6$Q}|>2 zi}qDpOPSg?p)D6MG0NT8nqWz3bKm&(NQb8r)&Oo6)!nym4nAZg_u1BYaY|w3PR4?z z;l!?{OWdS6bc8iLJ*#mtZY7aL`0ZHJUvl2*0>y56dbq2HUrW!UY8$Co8jpeNE&CGH zZ4RnkdWHatP*^z8BN*)Or#lkbjdhHfl&@b?Uph%uFr^rlv{}=S)U^d}^w6$zFhsLZ z-frw>$3oqZ0liyY_kZ3u<6m~Fva1g_@i0(|MLag#`DY%tfJ;?BI!yCi(<4aP*RLu$ zy?sSGs~rX_mp`7?+Zl8fuX(q^!`LM-k7Ey6Tf9ZHCxh+h#O|uc! z9d%=c3zn;XiqHjo+)eP`^#(esV0c+{kY0AGAFsbZFZ+u=F`u|sPzN?&s#+YL3uatC z*dEa`BW3}NV$rRO7Mv!ER0queF`+)Z&4xVnBgM6EO#d6#D)r;xlo{R>@Hme zj9OQ0`G8kxHn9YDpf-T4Wm6m`zI4ah8t|=Let1*+U*F&Y#tMtc%g~J!!7#ozLYzNR zWGmGgP5SIB=kTfkxCX0}Qk0rK;1c>+DyTxo1HMTPS7}Oil$_bHB6KkD`#Dw0*s3rv zi*8-EiYI#@Sh;Q9Q@xFprBE5!eW2ETWHKp+BBi}iR%cMGg)mn8?|%!7cYQMe6P8bD zf*qZhQml;=Xmjp{FBhwoVQUlG^&z<18rx&bn)WgPMY;_{cO0*P? zw-ixc#J&buDIYZpi`!2wX@q~B2Uz9HR;rV7x84C+&EFo3DRryQqU*?n#%p(SqrFju z$ch)^A8%D!El*hO29jacJx3*fp4YNp1LTlR093U@n^i*yscu7F7Q(C9E;}dYjGH*( z#F$a)jv|0i07 z9ISli-jaoQ-$zzBVKs;2LkYm5NKmisk<1N>W#+B}uwc;Hm-}V%b5a#=izyj0d$~cyH9;P_lhN-6H)Kik zt^0$4#PyJSM0-@bS=ChTLgCvyGHXmW@Z}soINv^|+PtYPcp5gRa5JpKf36kMyDB;5Q-wNok^B;}Op;RckZ45NYwLuHrm0ZHEwgvhB z=U|Wj?~1$p-wwrn<6=?1x<@pvqEo=cw2=mdhIq2B@j z4bRc@!|+1};zQ1Sag zo8kI!dGMs)5mwcJ*mLtojxka>2`W+u#@k4F-SDGLwrdKkM6`SebKIbQxN4dP&SBB| zzxPOi%~V6LK3l@QGnsCqI`|{3&a~gYo-XEvgz({5lfqNcIIpZc<*c-_P`75&54nyW zjcka6Y5WrwbhR(z^%2NsQLav`RikcZauWd|{&BE3l(3N`j56~z7ylzs{j*10&J1vK z%+)}dqv-r{c|geRI2b?5-Wa^WKR)n>F#`EjP@^5KJeb%@_?JX8-H6sdb-+Ee_?88W zcUG|muf2Wfpy8b&%$-_|U4+W7UT4aJd)h{Tz~r@j5L@+xy%Ki^}d(>Onp8ZQ%h%N(wnl=BgyYd z=}{GkS$%B;mp3B|or0S@?%jg0)Vk%4<;Mt}CZrc7U4{PRL}+LSHHG%~JH%5LnMzXE zM(;_cUjzPC{+!_A=kD@5OiP|h%$%bQgU#`6a>_%d2xT|w$G8`~KvGKD&uZ!zUM*Pn zTdS4se@Z7`NP6_ay-6uwwppk{x=jT&NsPR0TL%n-a4>p&Sc%<~^Kp6d!KY*r%QB4_;*o z-roDsVC4As*~Pk=!5yTkHKXouSu5(f-rK6ULo86+=-6DW|!glJreg zwm-49)IXDE)Sp!Mq1^ZWz7-ptBAMS+$^o%pu9B$y7Y~+YMDTFhciMy7R2*cP_%yrM zW3-K(kju)|{_Z{ddE+)HdU=CW{~l)c*KM_PqdyEMEwQKit(3E6tUb;FpB8!8CfmeTfFg4&DL!L5HS(RJSI(bbqFa1#vnE0spx+0@+zki-Lw=W8OXd-IbzZbs)mBgz& zU1_o&HEve8)LKK?q~SM1{xzT6*-}Cq3E69Uh0&Tko3{jPJv@K61#FX^%k&BNjh@C z=|sz(Gll-h`tMGK5n{Ko%#4ovB+vbO1E0bXmG!pI)x&?b4luN$`IO>|J~$AQ=4BJP zt8^ns%%KH7{h@x?$2Ny2@r%-*kso4iE{tYB@sOrK8Xa;%51Ai+_YhyWZ#sD0K&oDS z{tCc6QJWkvBa{^>ex1vaJ}kOmlO)=vMxMEje$gGUYy2l{*DgQ2igLiRk&Xvp$x^#} z;pp$+<-QtiTyDlMlFs#=8P&wshp37-lnKOe_MnH?n1f4t$~!Sr!N?awGhyDtfB$@N zmS^-(4)z~*H5U4F53e*7q~}tHMqa9lM0-u;!yaitvtQkv^XYvP#neccDX%o)nZtS2 znj?W+18Y)HLtR(SYRfQm%U{cxt+HE#hbxfed-P8#VM)=>#VsygT7#MY41`bsyhN!` zafxfDDd3zQ&u>Uq$fJLjzHVx*thOtk-?_B7u$^NoqR6q|1&v)h^%6cI(rq7dxzpBi zz}d%xiOlUNvH$s*)B10{QN+-;w<o|CP=Cs6~b7`;W3 zi`brA6tqHS{G*Z3WUP%CFm{|7frrfg%_OkQd4OYl_idqQ4 zNfF}Z*Gf5j`Y&g5%jS3dxS*d*KIhkq9U+A+e;2;}m`lsU7^;!dc&Q;9=@ z^R3*Mq7p&Q#ubi2^=Mi88YSJ2HG680b~D`CSM#Bk>XtndQ7Fddd1*!duF)0YP&NO3I!o4WfJG-UWVEAxXMKE9w z^wk`_QaKvI1hNxWm@{x$dMzrnqt758C&>&UlZi2-bG1nDEQMy`$!o1WCBXjKxhR! z7+8-`x9xWPy~Ll?>$+SuK76qZpBGLx1{jG;8Q&Ag`iV5V0K9!6eFgusLh}bX1rE8A zkKcF-LIeYrcpnWVSaQG=^Opbd*;$`)UKiCZ=$emL=eHLMFJs(p@F>ur&d6hTZNBJ2 zTM7U{fO1llpWKS;vc*c!T_Daew%#7=i;aeE{ov!|8%Uzi_2fp?9p~mMMx&q@-+yr& zKs94%1S0t2R{W4mv-4q2urpzFC7aO|1Te%3U@YN(>RRy7+R#iEa`eCl#hVc0@+608y(+XTjf4dyBS;%%frq&}Y zZ*QAA$s0(I*$b4rGv+H83VVg#7#A6R-sbREYoIGMZa$AJ2zSKJjE{RaX|B31G-jTr zHyMCCG3=e$An}{I-`>U$rr_Q7(_EySwMTZtR3IPfIAUgFU9OZ^c5ihvD}olM5v`Ut z_?I+_zQUSg$E^0zuI*Kb>6PVmx`$8o`A1+BS-0pgSo~wZmAeb&d$m0C=U0()P1tu= z&{=Q&;2YfBso`s_HIXp8J6CzsbP=DWF}t$i801vlK0#feOxJejhXr zlDSlW@ALy6uokC%EZMu%GCTO@=$%Dn%Fs&R~Fa-ww%jsN^6t7svAexwW zd0LUlBr`Flz1W7i1Yd2%GGjvL&Dz!yvia8oL7POaYk+%3)KCl7ZaY=))i{c@e0>U8Iqz;*{C}S zmHQj%u^jT)aO>?prprnI6Nf%Sc{XFK6Y?GZWfI~zmDTk(CcJujq>!&WYkfrOtB&?)Fl4gqU|J*H&X% z3H-oezHlOaw**dx^>=;S`cp{D>3V<{YAN;WI(V=o=RQ_U#Jz5@dZuZVH4=2pLNnQJ zBY}46ndV^#-BeEV1b~SS#5QB|K!XwKL6Xvdkmg*+IzeiOG4okd!O0G8gL&#+ zdl|ZX)CmacLg6u{MQJD+fguONCOHDhBb)TGwK&AqBW4a@fBpgyc+zxwofa><)T%`S z`wK+zo&t-UoF{>85_+g6!7=_;At2l}%gsvkS(K#-c=!14R{{Oi^nW&#udw3Yl8WcW z_J8+2)62~@xmSq^8GE{!vAZk&KN!z4=5_( zW~O73kgOFGWnAIFNO92;9W_bZ%MByE97=(N`7*~o~p&h=|D>c+7B)mh6 z-g?4|YP+-|1T^}0qQ^RYhXb?NH>mz<#DvjDC>EPxIH({GoxY1nVRtP^)sBA}$7sdf zmv1e!vn|$3&)~ft2aW3Xv8F3zLybQAAPTd$J<05I_(BGaty#%;wa`0i5AxpiNjaLQ z!eS1DwH)D%m>@57 z+TO|aU48HqbU(9Gb2ofHYKZlTpXnI&sqTDGHJoR2oO(9O2+}#`xkrDP6M$Y6je#c9 z?)d{!2jHm~=D!8wLM-PfozLlEeB-13Od0HrO^vF<=f`L+7mvIr zoN7K?am@{Hb#$AT@yii?UrpY7@SUmH1-vwnh;#!M^A5N*%kTFzuoCeXhEdt|LxVe3 zT$KALLpQKc$-J_U`HIHR-?n0#BbXQyG|gF;{U8vBLyU!lwl_4C`F%wx{KmZ}r)XSS z&f=P=%lRruEvd32Wif{xJkzqcP7uFaKz}l?EIFnb{OvmH?-g}-vm;haqeG-a9c~A! zqTZZcs!Yq`whn_5b8w?xp$D4295JH>i2X3-Oxem~;+FtIhsdz_l=Bi9L&OKYjPXw5`yPL@_Rx%u|YHQ z0mUXCMK19N#*O;XDZ_Bh^+;-A335Yunh|CIonvZLV!*!e5pKeju%eT7?S&!KNRL(e zLr1=7V&hcE`r4~g(V}fU7wp*!#sREQ@DdI!fSOM1Yh~(vAgD*LBpY?H@+HmAOM+^_ z9y;7#1PuzzejTg)>JRmZYhou&`$2PldHB)(a;?D)QHEzexCDZ4Og~rOKJ?p~UF+z2 zPHM|z`u7frHFvj&s$UA*H;91sWT&yx#&rcgR-W7urNC@IFNh1_(9(sC1Elm z4$*qAr_+cRg-lR?HHnJQ=JG>zJQ=d9(MI)RI+q(4*?zVCCjo5|^~tWj0zLEmrsezS z>c#Aka&0GoDp-GBIyfJ*L|kLcGpJ{P2f|hdpO945C|S>!Q_S2h{&lsGJa#+Q#B@(o zT_~gn!^xl(^aIidFfsn5zh(WJqb3K&Jr+E20z8A>j$WL31s}I%trkuafrsF=4CQk| zI9oUs$2`_4tP|FC&}wG4kckh7UCQ?M9AtfpomljS5>!9@^zdEPgbgKch}=73q9MIS*e{lSJQ&QSd4(&iI-f=Ea z-jxHJ59k!-L!29Cnh(}oNp^k{ytk-IZqInLHJ54m_;}CE=o@cpb@P`%hmiI&j&dGT zrBp-BmxruR8JG^DWnbZDzJ1q|8Jc@>jk)({2U73D7<~oH1}+u~O0X7CSzItj^I4~~ ztX7@lSl@|-l~z;c=)t9@fLRN$QA+|&T`X4Xd?=rlycwarxZW=eK_5Q(MCQtbpMzo< zOyt83Bm;O*_$0}paz-VzjygxyAzh4Nqe9(6L&Dfjyc4wW%_5E-0aPY)L8mg zYAo#QIUL|DDvNzAiR8#lP@h?-T}mG9L`*%tKg=ErK3ptQFAm;JF$^usyG*b|{Oz_B z;M|xNjQ~BAa4c#$rlwb~vP+CL%KH}cyKzP|ZPyJJY?1dI+c^>UL@s*Ic>Q1bXd9Bo zF7ETtX4GwfvXiFNg);cx@2080rfhSze%%G6-v(SzAjul+j1$yJ1F1ZFFnxh&FHHUf z%r2@P!7&*1t-W4JgnobG_6E}iBFg_bjujmQSDy^xe$b)yM0$2+DO5YwksxJ{i2h4l zdGNI^M{eu;6Hj=huk*9ZQyYx9jZD1y>1bnnV*sF9ovn`1v!u4V!(7$#GSOH2w^!pse0rIFxD47 zn&jvXzq>x@C8F zytrhS+!Y@HPh+fg;K#)XyfK|wxK<6>x~+%%VNx9_8VRv*{6SuIYtZk9^-S9vQ4R-j z0V)9^Jkf#&nBDIuP0Cqt9alWDy*4cYHV^trwX}s72Ew}-qvZB8r+*S#VCea0>tIj+ z%GNCEi9R5L83h}sa$$L($%UIC7;w}qUN2`mMzmM~q|#Ph*{7{xmpLKSe6{FS$Snv! z(4~bVf>oaoP`+Y+JmgRDP{BkKpFM(ke+m>V^#8T@oncLN+q&UHHTib}q<8AhG3 z8+|F}RX_$!OUJVR1w{we$>YarQw> zq>3a{H@k*6-%P0F6Jx-Eik2r_OC3QybMN;B=t7(|jHYx5QmSxa12b!q(I%A{*3)Ey ziXC@Zm@*@;Al9Gu5Z#CRh`miEgD#ZQ{!&}iZ257-=GKD07lSTioz>tjr=P)sEbIII z(m~0+E*5QS#{L1_YYD07Q(sQ`H{5_n zInh)ay6Dt#wujkNt{r8Mw)uRkCc@fDKfVRHzPnMuVGhow662UsTvJ+Zi`Wqv^ovh!d#NIZpAeNtW)Z~@)SUTZX5DIq#<9^EVmx3?F96Q0`gk8F6!Mj zT85+uJZ9P(ZJ{!x3Iz&I0yw~FB zjwh!{5I9>jb| z%S#+wO|_M86wL!THnl|6!TH({#cOR`)@uQ;hah6swdPn^*+zW#UAn!P1k{1Kw78To!od1{pX40q zk!9IfbIg{tN9i`BcOY0$2+fJ8%f2wCc;IRDUL;DYI7A@)Be~aWXXvWZ*(A?OV-8xy zu?d1lCb@6p=T6$IK4z5aPrj{>YGVUI&L@Y~oC7bbn#;~ReW+XCzlbtVJD6KTaC0H# z^l_!d4{mw)t?!I#WpGy{71Zq5Du#=*Hj52=P+(z1`GXD5-HpnLeF7YHPYmxr>B3tp z=LT`L|JuX9p)i5$!wDnMvwH==d4*^TPv*<(vxHp4y0R|6(wI5alVcAgTqdnaZB+-Qf!F95ZD^5w8=fGB`~sP3nbiZk`8ng_UD2W2 z;mM|Yd&7f~n$e+f*3S*W5V;Rd?A0ppS!XlT;v{plW9EH5)5OJ%VDd6cDtu^V%H-9X zRq1Tv83cYVJhEiaxmO)Si398pDYu}&bLAcbZC=a0L0^Vtq?5>o@s(~ai|IkT|w-HpT{U`9UTHFT-|>Hws@7; ze908t_i{L<)oR0n2Z|=tjZYwy{BmiRa62x6eVm*#tp=DpsQS+L@81V86|0zs(%#vz zO{vt1&WXzhsvlQ|s&-QghTtIp$u*BWly>%j0RtGi;*MB3%a~d=PjrQi9j%pSMSK`h zlUU(UqaQ7v&kQtG;Y@yJV|zI?gH&0pa0@jaoZTzinAqT>G8e!Dkn@bm-zq#cle`$r zO2|$fbh(*F52ElHMCK1#bN6xSBt$gvm??oe-x)%SCFfh_nNU%ylcSJRST=v06mrpIwQS__hu&Z{dUpFYmO#=^hQZ8|wk>wS4G$*VPGcQpegI}EAiLW3LFME? zAkh{5e$++oX4{Q;)f}=~7Ek2F-cS+aH8~CE?QqpAxNd(@)Yd_lFND~~YdO{GaRMHCfdyvL!Y!F9Aw)9eeD-bXygmz1!b$Qh|o%aTU* z9r9QOQ{AA8oNk*cW^;G|PIh~3Au>hP^k(weQO82&@3WtAd6D?Fn%GVB$h}rE4^}d^ zEpl1wREBwB~xsgKgVrHd|S{6UUn!vZ!(CXKnq^p#n}M2$(m^2152_7pZ3g)4A?K$o6Ff|l-pv*@3FU)3rI#mroM zwb%BdIf;d&4-^>Pm`XQgF$C+IyAiFh>Nme>P4())$5kI+Ai|c}KsUG>`07bm!d*71 z+)03S1dzRk#d!v)Hky%NG)O54z1f%HTGu{9K;JWkfJ^>XzTvf3FS|q30e)2GVM_p9 zn`s~ac8$XyIOgU3<@BFPz0&XP8gBV+gFf%>8)IRy53Y;X;1uDZDSTmujWE+_L3R619x8N?*}wr zuLA|?{`34f_!x2rF-izyc1NsehKcQ{7%F{gH(X=i>ocwt`Zv}VVyKLHzMN{{nRNMv{2 zM8Xn^WjooCmxfVRMFc06_kHEKTYxVmHVl^#{>08|x|fTHu6{jCV8mmZ1og zF2kEYGH*RvS5o6H?>h$i05HV6%~?YcmS7L@lY?xj1){jMpn<>Bo0!PFT9S+@TjSB~ zc*w;XKT@hilmDkj0Xr3+x;ftts}oUE)+;|%*0F5k9Ho>24!9U-F%X#Rv_1zz+*-pE z-tD)Q&=m2|ZLr8U$&8ewDoqds0%qK0Qeem+t^r=_=T#a5(2DqnG{xvmT)SE zxuqnmyX?4ky;D-C_i4qkxisPg20{N}dCKU|?K?ck$7XrbeiAIEgSOk`cM^e?rE_S~ z706@Ov%YpW?NqCsyq}9$`QDqoPS*-ORMXoDeVM-NH*gZhMtwud{kCBG{^%ji=^nq{ga0wh z=|+%b$g7u;b;HIiY?yAX6HLsR_+m-DX*xIc=Gy<3?KG=0uYQV@T{old@DRG~u4Y1j zCT?IxF8rBOZzd~74{ik0h&q;i{B}U|Jt8j!-KfTP{i;NgYRx5bAoP>mq>}#Ix*?H& zraP@Wo2pdzecFiEo&qa_UG?;zH%k2UnmsV9QE^&a%z;{Y>n84d-gOPAa?V1VqFWrg0%(#EbhS=^kWCJ$XDdc~(?POrr4 z!!8A)$^xwKOQmj%$wGo3wKg7Ifuf6Kp^mypearMWqjSbzhp10mBg% z;N;fsVo#`2${V(dYb%RE^w4_4ru#$06Y}^dWa=qfQR}m zAQBcB{lQJzj~IWu8u=!cD0ZKA}KEMNlSi&mfvoy4b;cN1VUg-DxayyhW71HFUaM z5v~=K*s|9aE}{v)S-lPu598?XjT+em)Lw0=0R6NnR(AvC(JK2AU82CheqWG3DXZZT zZs|(Wf!PSog-i}CR0er|@6T-a_Zgs>7}m*`yFitM-w)P9P6fV=+3u=~>2GPJZ1!=U zhr)kME|<8?sY)hY%CDvQg)Qn|INpI=L-uu6j=ifQVH{9UrpMv< zB{9pz>JS=J>x1-e{-4XSC!CqGpr|e`!rQnNdn54vI&(78tDTKi@t}cNwv1MUoUp-# zY*@jMAd9_3Z#LZ)P)Un_Rjv-E?^L%hApEx~B?7M7lYbD4q_6eo-5tH;J(Yx_Q$~*O za|#g5WTgNyn``BH=+Kt}_~;`+22ckeFdOFE_>3DYo?v^S#@AFk3b$So#!N_$JmR8s zZOt{JA|Y94-81boN;I_F>^fCo{0IJ`wu&9S*!9d?Fkexj$Cc6?My9Z$xxlUUxB7TF zII%{dGHS2STUczW%OHebnFaJA;xJX~|8MhY8aA_U8pu}OfBjyCvXgBXpv2ieT_6MA zoxGoX@OXfYdBpW=G({KKJf+X_oLlJxXxoUI#~SAVCLG{ni^V*XDzR1x%>v&vt+gjm8rQh@MKGuSCb6SsG=@6JrB zFg!f?mD>K7`~_8m9M%56PGDFvtS|)6pXi1$`kmPQmqu=N=OTv%^j3)up17OyTZ;{x z@7gkIT^dVZKO7!#lGs9Y&*`-`FGN3`FDYs1ZzIG!X`ULn98*Wx*h=Pgq@DvU!hxg; zm2EYme*=e^4(0f<>twLkIeF{xIg7yZ!?{>-7YwaI#0P+j*sYu^H%1& zXFOh^2(7i#=P-CxgiWUO9EHvT6$PzVtMjVDl}m;AUWD^>zy5XlOn`5J?hGWcaBkb6 zK5RJKJD4izzG3?`EJ3-T`qcf-v5afhZKm;|1EtHBQN`pROs3)iCmny(Fz~)e&Bd?g z_XmYL=|p&U&;2`mj;iDSlzn%5t8btirZtehv2dVb;dQB5YrgWQbd?z2lKW&Mx23p1 z?ZiwI7WSjb2s{I6z906bKkYeko$E0@N-`)|lbvSx3;j*m)p7;SxP=caW4`7V%*52U zqwY55585v5j^^J3Qxi0G_$Ek`Jz|vhtR~#~N-kKPL7PVR3Fz3w-UPl5+YjY0so+!UFW#t;YQcpXVd9XuV|7U3f)XXn^pdA4LErvSiPxqh9;sXU8p0gL#b2F-< zHu>c}F9I@0z~T=DdR9nHfvLy&-n-96aM>>A=kOtnnxI3Yo}e34;Cx(v{XNsG*?_|9 zome)$d?x(Q(!^XNGU4-a(C}dcy}!tWW<> z3SpeXHrdvE%dY`vOx%g^O5U9svjaMoSnv1wnnNu&q!>U*KA?(%cojOoSXAhpFAtTc z4`KB8AN5woptTphcv-1fkIao|P!K&BP*vd`uC!_D9C%ML>DbnF-TGnn87B00TdK9_eL`mc?8Hefp0@HFPN+QMiVfahHKud;H{`&&Im0E#sZ_Eg=)K(AFq)6 zWP1Ije(jY>=yCMSRVB{nv~ETajqA{6LA2*wRDgMo!@6?;xUO?eTYU=yswTY`@BZoy zpv~Mt97Nub%F ze}Dq2W~9_obVm%5UruVnWb12b7xV}`T#o-ZuoC{TunkF_C076$AbPjQvZ?4t9m)&4 z{}})RK3)GW(V_o;@!w_l|5q$@Bi}f-7a#i<%>U&_xv1UXz{&ZGbg``@Zb zA||CCk~GG=1kBA1_TQiVJIW`UX(pjdLkt3~$%w$R2d?w+^s{_@u1`>fr>0L(mJNQ5 z=(HS$xSU+-I%@U88(6~t&>9jsQ}+*Q$zQNornN!qBX}#Dt?SH14$5~>;^BxuJ=7$z zSOS%lQts}ec_yiN^y*03%21xTIu0f*#zO7z;c8uPN_F=JP+k7byv29Lae()Lg8Xe4 ztE@>igImFTS_v&Y1dNe_Bp-#>(vSc_Zrf84$<62pc~nm z1$zAT?=f;?+^onLOTc{qK)pnkv(q^ZA^z(XXbD=MeT(|aOu~E?$GW3|p!pv^{%EsW z#eZ_tuiTXS=YRgL>sPmE;9J9{>r8Jgyp{$o!_Rr+`*rgqH?cC2zswSL%$uSDA0!^k zQMzFUE{UN}ew!h#ygcgw2Ef2s8@B>+!ZU)MWml)NiA zRbu!i{^N_aTgGQdY5C2)zbl-QZ|klIi5jrIs6@&Vr0d|%YnbPWZ-GWBOf$>3e?|3& zuvA}Xi(^1TQ0OSYP{snP)n5AQLgn&O2x2C2LH73x;kTn^#Xj#Uv>kTtt_;~!`IGY7 zVvK5ys6Df>P}-M99k`SA-lV_uO&kzBfihFQ*|t;7Liduxoz1FotzQe{e-)W8GXjY3 zZv(A2#an#ZVAMzEC+J(o8nrx8X9@^<^$#=a;5Lz;{^t@+)N1Xkiem4f0BqQqBd*}o z%7@|baS^^>D;6}W7Yt!S1NGkj=xFgb*ZT03DM%{1+9cL5-|xn~s&2JoB5{IAk!#!x zAXEfU3D4A9_aE`kej1@H?7kt8O}YrGw*p?}M$$|Fn56gVmy;2OT}R$lITFWE6;jz9 z&_O>+C;7FfO2eiXesS=gz360(jmDXP+YU@Yu4+JRmg3kQJFLaYJCYV#+R1 zaALMAw|!>Uu5PH!>h^kR^J?EyT%=LY5r62I^HkJ2$0$RljuggzsXySrg$YP&#Lr-uM@8O6B?s}H^VbUY6LbB%Yd9M`Rj1HX zz2~p9vo9nh9gr}gyd~#!CiNP>41{6!d8mJ%hyXb*3aFGl1tiMuS^iZ(LX^pJgvBx) z)qaFb;A$zHnHj@z`|cjtUVNV*DN-7RZpHuL`Lb5WXs#WVdKB|^T-3WtIG3!Md~ive zC9oolV4+ivWL@Ma-`a+Kvq|g*%rQdgE(XF$_fZpglJihnvS{||_X(r2eG@>=n}O-m z9eIC3BpW=R&|xN%Ag>}$Krp;@?5 z9HXa!R0(@S{{0+t#F`tQDhBnv7L2(uA{TzgbJ`2WK}@-*)^bBPa0Bt88-2eXJOkyziuJO z6Vo=d3SJJB0UsniuF)RTR^QI$iUqIFo80Zt%{%X|B3dv3PpA*)kGj>Oa3_4Qoa{xH zTfqiU-ess*F10X$WVN*;dY0=glMT- zKmG(#+tEk+*}l9axi9R>iXtASCJ5zoImb30f4WpKR1Q{t8|%RviT><#jjPdF!a(jhzk`x3K9*?n0evMjhY4tv;^G#?S z1H`qmtnnl3UXoGV`mbi)St%A^51F{Qtb2B&95NjeKnt57DYqX9axG^Ra;9~y9+=ix zc@jQ2X{TI0)s8|u2)uYdIhtfoBCy!GU!_8auEO_{_G@4w86v>Y3Lj68ZhY^L5#6Q8 zb}ak~NupNfpC(apyH1`=)DD@h^x?%2CXgo=>ko_L*6bQZe^Ts5Bivi`rkk<2>cK@#i*Q@bqG`RmB9pNBxJ$vhtgItMcw?1{#8{j?q!`2 z<4b=%ajW93v78*|>V;nG8WYo%uX;o^TPjYoVK3{29Xo91pd^XZ5Pq6-Zma?Zc`7T| zW0vvG=gYg4h0|Ge4P&*ZM?FL`MccBQjE`&s5PM%};5e+V49Cj4G^-SLTs8Uol6+2I z!#K+#vaw)dMmSDVXV#$Q2rbtC%42p-3gaNx0&y&{8-MtxOqm@|!pdgv_Z`n=<;~d$ zTlOs6@G+kL(#Wx(%AfEo?o;b|*hO_>kn1S61+PvROsCb$Qv4MPhTqwJrk5t0e7Y{J z%0)dr(>+mE!}KcKPOtqBJ{BrA=^_80MMLJbi3tgwI)a3kw|bTT@YmMAr6BLg?H_~* zhHhSKpJBx>t0JK|pr{V&=HU6bE1Q_2TsQ~4>4P`q8*K(V@h$mHqnol7m zWo5M{(HepxPfrcYg_C>ALY^;ued41B#%{R@zT)i3KaFdnnW~b>U5g+c>fAG?JnWMJ0_PA?} zfUDn4wN6<}_I2x@S(}^9>gzU6X)OBa0@0moH@QIpJ!1#Vy5z7NCeZl82eY0o7j(2e zqpz*4{r2rsFnSg$jop8w?|Fu5xG&HMwUh6M`x~H)u2(f;33;>6q7#LEJHA?}CgC|u zK2GF~2<%{D=Lv_zMtqMNtfmA?JhNyIPY`ok9nMxeI5_C(?yhn|s^&W3kG3l-D9l z`4VFWj+k$LdVKS}QRk&6m2e6@M`BT)`^cx>l@!pn+h+Cv$ZMbmQI$sZV}v+_TCB_^Z*1r4cy{om}{%SH6DDk7Du&W!Uc=xKz-PUnlQ*A+sLa!|h`v78?xU81iuz(h% zsZ4tKgDDNWU?|#fJiuu+dy44|eoJDf7?D(FLE>r-C;gCC?9AY*m6RJv7@O)iUCq`R4{4+_rz8-}$ywe&5I% zQgHJVyd!XBQhNr3`?Ji$nCQCa?~wlFsg449-XmcVanp||xV7=#eC!!c-YhSa_Nu4D zA4XKt!49MEnTbVzqxV7xjpW|vrGA#fw!NZ_Kt_R_xR_syyiI4^-_Bx;?X2sP&8a zin|1mKS1wd^^GGg>^(Hp)~RH1UP=zEb;dC41(7jH!U`?F94WXmj~+pnhdS}<`E}ir&FnX9;@bcBRVGC`nQ>q-DZOICJ=c10Tba& zfaupt0rA-RtkF2-yD+Gk_8R9tRL^ezqnN+P1Yzl6&Yr@vv?a{T_6{YwWzbPB$%pt| zQ0ix7j`alCc~$0}@+}c3Ba>3^reR^{VD$kLBK`ghIaS2+Ln0TQwBn#qf~x}6w~0M{azuB>`TPC;%Xowt+Jo4l zaSQ?P-mu8+{Rw9i@GLz;^^Y`zMz?ki0k z5tM#`4p2(n5H(v@x}V!;SnANW*?jt~m_4aVIE6OO2^mvmjymd#lc?5#R#jSw0s{2u zF(0%0yZ{%>w5(tODZ_MDb=YEkRzXa2en|CTRrDN)V%Gnxlb+vYBpopnr4Xjo&WkQM zCt+^iQ=hF+8oJFNe|4VNA4YntYKY!G9XTX<1IHCF4L}y)(h^HE^U`Qgl$4O!;4W#b z)dybFGH%3|H)`Grj1^mZ9SPz_8gIUv64u+Z8!KG77fg zBi#0$dOMR1{u7N1Y1>NY!ji@Q1&ucDSM`W!BXs$+VDvgIG-glznZv z2TrWh_5EuaC3Q9%{g>%=f)tOv_Zyi#MR8`*r!2IH98ZmRV@D=4p6GmJ19UBw`*)NJ*|y8D;R4CNaqIB!@#0p zi3dYBazr9mnf;d*+I(89Di|NLr*7jTW^KK$kz3{+wbuu4Yo6O(uD+vd23$^^c?u+ z|A?>eJY)D)N9056b44Qc^tdtCm=O8!^tb(-2dgTe&<`0%-1g%nH5wO-rA>#i@zzz6 zs~x$F2ZSX?-+k;~R;7WTV%7@%o8QQjHgwo}18oE(z&mO)Wd{`|@Z+5+u+7d{%m0vs z&K#Kpw$Xi!e2DK6+QBYm!&2O_N$1P@cUbi7qqoLi$$yRPC|ueR@I_@6`lNZPOLuoc zcjS^T)GSmaB2vbCskO)Fw6U)T@q$od0rBe=oF}e8Q@391f2OeRR|O?h+~|`Y!A?e!gJYRa??@{8`oXK&YzdZGzeCz(5WDIKF}#*hNQIXXpqoaZ=YdYwfV>caZ=K%$I}yNfBdkgzv4a5kHjX{8+RBSUqL2t0l~>1 z(VrE4FBCOV(tUou%nhtE)o#udPMop@rw-=y>bf5>FMdQZe|9Fo2;IbLW_I+Z3JHKcOtGuQ?$>EEUy+k- zI|*#i7@bZ-cmJfb-k@M|eAQVNeor_Hq^R;z``LCPJeQg_(6e<>&OV{(e&}Q6Z-Hoh zCEPRKY4XMCXBTP7!y{m>`=pL_*H^=#_5Rbkk`UL`&mF1Ljr{;RuT2uOGZW`4H)L-d zqQ;|$>lDP3)nh0g$wYs=EF=()``DX|@h%)+cATz{yMqus8(A1+JSHVfLl*|qTa+l6 zu=SUj3C~m)qlY&p>QL5T4S{EN$hQ^2?}VsH(CBBsMyHBE^Il3~ue^Vzxb5Cvd5m3UfJZu;voP zb)T;Tbh7A7#Lbr``)d;sRScfCc+L1Z(aqtb%+DIm`uW}QI$8X-eK5B6T`C_d3$V%(z%De#Vj{JJ@;O3Bu=3l=tP`Y2)H3881c}X zAqw$pWRE7ti+>%HL}rTX!wQ^kCUZi4HdE%YSWx3xaoXwr1k|q*k79~o5S6xQnyy4u zITUA+NPpb@__;4PM$E5u2=+PX4ucpDJ2U{;u3W$(g1jK7ijBzr%umfuE$kVx_wO4U z!^zKE6^_t`93<3P`(muc$Q@+}H@`@ltJo{L|${=7Yr^!HQK`-yJtXu79mfAp16 zO*>K1D8J{w9x_V_iRKhLUhn(D(M3E&{01V#J*K*yow*9I1vaN_NgCVaEI?eD(m2J{ zuR;CK$np~po(vE-XV)Sn@F8g_L#dJLN%PWw?dMM*g>L*?$m5i~`y9N+H8x1xr_gS0 zal5MZ(YM>Sev$MZ7}Q|8oKh5I54#2udF;*_GD*dJ{7jXlW%(bfjwc#BTU7iHWvgej zeEv9FVIKbqrAZwW)5omj(|dvA1L#uJr{ZsIl=P~NnokwK6Tm3;Gpr{WHMDpNvLT=7 za4yj&KGU$=k9fU1$0cLkGV5WMq{y-UD7PskH!4-NO6h>>>43^EPb-6W(_J5zcDL1b zTOAQOP@$jH`#agJb*&p)Kppd(4NwUi7R~dsTnU z^K{Hx^9)P8Dxu(bcO zPf*vb6frnHjsnvq`fRRju+(9PGnh~(Vd*mPVbEI$V8hmAoOaVKr1hY;nbfs*F_)RJ zj(XJ;$H}GZN(mLgFC!?0hK^7=UFtx(_vI@Zk3V9XEU#p--zXRAuRHk($YhK3-0sK- znlP2dc#2J9!g?1%iS=WdDi0EeS(go@B@UX>QeB7|12sFjx%2o~?VYoskZOA0X5o3f zZjv)`S%ZjA0r_v!%@c8=2=Lss`1)zWVGOJEPr;=T%N~8I`0wKmGmYT+vz9DVa_Uqs zg%Q|*G;tBAi5*_8msmIyFdu8#qZsOz_KikqaK-&R4icHXMWORo;)a%y@0>y#Pa{oN zg}oN0uDywy?#-u$n>l`n|H@(Jb81HT5195jWZ$0(^DXfj_0vVECD5*LR!p2FD?E8n zEPjGkBS1>fldAkjMuY6^^?)ck`s4aXNn0|VuYVI(rBL)-faER89TPs^pwQLTU0YuE z^v&)dLQqN|;ZG<)xA!`%Q zw_*NEH$ViOAc&CWOx%j^0Qq30P0ySsnmz}GGfA7HXT57{3q_oG=gTrZiDx8Ak@SwG z+pU6ikTR^_)IWpd?N37NPskz6lD~Y%qTMsAlIMGy3wmWC)%;))1yJ!L1cMfdSkdrn z5i@gDxY z0{I<68{>Mhf1{v#Jxh?D{la<1*8pq0!dHQX&2Pry2n+ zZ?2eL@1L^xBI)#W&U@)eQo4}l5s%*CiQJ`2HjJGlM_W@Bwj()PTU(EWtiox9?f(38 z*&k@8AmPU|&IqIs_Lt$|=2%$HM6L!?;+n)x{RjdIO*~j=`m7ZGaBoP7Nj>qoZGWz<_{&zL`eVNmLP^h)mw`>AWGX{h#;9uoiF(PCuF!~ZH=?Hs1S&nHLqb( z$N7s>dI4*{C&sE$6U;pC(A54zLL|q zy1G7l_AEyu?QE}uDT+?iX=}3VgHYG?zR*<>^X4xh_c@1Os#N8?PLN$x?pBE9M7^uD z(=|6|CS9p=oblY5^WR;NaZOpK6p-=5kp08)xgm^(vqkOBVut^vOLsZf$2GW1fwokN z1lS2#S6Nfz1$3Z*PTADd6wiyESW-duM7jhP^>4530UW)(y|Gwqma(O!@x( z9&Iu2iMuWlZV({H7YGgUE7IyySh5$v4Lt5xsxRn*nh<>XiaOZeRF+avKWBscEROZgcT zd9g=LJ~TTd16p%78_}2i&ai9CR{?iqW_nD`8p3?U$@KpHl|)XN`yBHb2_vU%@AUWa zw=w6JUwWMW3UU5@>E5mX_a~GI@4h!Mp4T0Buc{afXN6xrAK{-b(N)$&^NU>eE}Nja zvlMy?8qBzzO|Kl`psFVH{`sp!$@cs5g0$zQurgUhA&6_)lxns|o8PPZe5_XT37Eeu zB63SDX0Rdo%*4n*+@ZDeGRX~Q6*`|!>$a|G&n^ZxCWv=3Y7RAx-h{_9y?kahdlDE{ zzQ2F#;2_a}#u$unBZ}?uwWP4Q`e&_nl+xzbFhxR2wk!PKjCeYCL(%n$om zzNMr{hRIPht7eRxP`>X1TAcB`hO!jPl-zlJEW;<1A5f3Of0)M=TWW8%f)Ezoj`T5F+=udS}Pif2S+0q-1Fg6A<7AJ=*nc z|9(a8yn)3avq_x~f*&*dQYu=1dw+G|uN*95+grU_jfoL*)-%!%adhHQ&CR!#e!lgo z5N@hkUDl%1$8T#*C43!y`#1mIYk;)B?@|j zy=K;tfwQi16a?OgRLQ1DQ8WY(sHnjtA=4np>w8Dozv7C)E6QA3RSY^04HzGO%er+( z@+MEn8&)OY^u|ZMj}HV)w_u?wW^~e5*ozFC6@#Vpv*a;L_bq^FrvO;WzxRFv-V*z0 z7)1*8F~=;iJ|I^WcqoPVxqr5G7)1{9de=cw0zuseYB(1;Ez9rnS*8(`Y>z*fy+#~8 zBZz-o?+lPrN_ygcjMGPOqP>q{$PwbK<+zGK|4HA$2vo(}w%yt0V2@&;VKq*Th$Pz9 z1wCS5-EUeKWM`*a@n>XX$6Os6`S8+ZFBGM#SQ{grR16b;Zr5*@`BoiMSncamSVcI) zE&rimF>P2jT}de^K)V!`@(YDEf{=vCKG>}Mbt`vwIkfOjWDkw;S>f;v4Zg->umbq> zbx|5Ma?fp=*L(N(wRnc=-7{3zpYTY#&6iq~b=Gw3R4xLX;roB`3aIq%r6@+eU5l}@ zvic^%w=_sHtz*BEuE^-Hq;!|mp0(~iU{`o}cp$xxnNHW4N5ozKlGZ4V9b2pi$5w99 z9&7L@HhFw&j@V)S)f7KIntl*k2TjILmMSpJrD>$!KuUKph`@dp*jxAxBT;c;)-~1qqSc3zD6DykQXd^YswDm><>jCC zhcTK=k$hZ%5O%M&wuSb8v2Qy089Kf@$wfbW`9p4m& z5FgBhTR_jn>kI)-Et|44ym4<+BUdp{35xCfqt|d$KcuOiqQosL>X6y0E+0p$8+Y!0 zos=0--(LrQ;gXQ>6$@e<%<-}5HKd=F6^>wPQa2zO(l^t|Pfr+}BRxl^pFUGn9aDQx zTIwt3wf`Zr*?=q7IGb{tUch8TX2v&2I*zqF!VxF?YPTeRsdHy>+kM=gi4Birc|TFM z9zXL?hL&C*akL}-@npdqhdAX>Xdz?%E6tYXT5AmwOgbM|590Xoiro2%WH9w+Qra%LIxC=2q??uG0r7=#wb8yccE$K^v9BHUBy%Zj7kpCGV>9zS~ z1X2U%HM<(K&g#*E9&eP53FeLgqRR5}ax}Ta${+Kn z&zLsbKM`#$d|+0I=kKqInpb9IhH0wBz#TC383S=Adm(}W(v}fSGHgDnX(e+X0e}12 z#{;oLFrh7JZ>>-FjxBGilKteS3wbzH{qn4xBP_ zuz323%Y99DS;kVkG45|!>dbGcg@0KoDv46EF0ZYHjpfwW*U!!xXJ#fEL;}3CC8MDM zIMvE53c0G9lKcJMu+2NH(yWQWEncB&m>}k zt`9Ihg)d|a@^J9;P)lns_9^ZCyp_L6n7T%BI}v*9n?{S|`agVALL6<)KzHvtGD+=w zYcB&~ui@qP7ANQF-zq6+ZSjtw#_JQlhD0XpE=7F9N5`|AE4U_u26M-xwX?HcPR^Ia zF0pN2$#V)SEpdEzn&dslx3{~qHpj8LaA$M>SORYBu?FSB{G)nCX#S@Gf2UiK{ya)Q zORf2HbADes@}|k1rR;IZ4=J^+P^HB@T7It2sNv{>YIUlqyqXb zJ^2YkL+T4Rjj9~Fy1Q9|?mDhtc4U0<@z1s;+YeTDe-~+COPzcd@Mcs2NHH!knDRXU z=h;BoBl21KUS^!}5Jlu3cZBkShGA83PE#5rXRFg=dvl$8OHW_;nbz8jMn6a|^1!Wwlz>&0`aYbR>uY2VtaEm$=ekD++*Z=j3BDlL% z2%@#WkRMo0FtGX2Sx**4JufLkG1?bJ#0XvBZPMT)>>Dc}vcJC{j%LwOs9Ns6pC4kQ zK{4ve4GfshO}q(Y#B6tanZ4-typVMsP6Dh$N}Gy)j$brwT9NtEi4d$EQa);d>lbWX zz4fM!!lDANY5ioL)_pO7^nw$M+-$V3pen(yN=C zU7ZcHmZcs>c1%pET-`yve5XF}IYn^jq{nMqHWSsS=Z~|D3n2cGWt-S9PHF-g5_o{^ z+hV2hkb9kV>pw(3j4SVb-oq@!qy3HtFgOmvrU4uI9Q?^-PJt z+0KvWnDW1W)GPed2hiDQoj56XTHX9~*&&68KkIDW!T0^Mntk7Yp`}AA-1c@&3XH?w zpZvzA;>dc>;K@DzES7?rhq`uo37U(Fah&Jj=4Q#CN4j<_iob4#JiiqoAATO2!$QlQ z_tmMuLQer@wfhTfyF1ryJV*xt<%Z6^o^z2n#Yr{NFMm_ud{`y6M9W42h$<_ znMOzV++dTA43Lw>RojpBgy}v^SXC4wA%n}+H|i)QC)M8?fp|H2ERDajotqZ)t($!D z#!^f8p1bsY*iO8ZWaAR&n)~`e-jF2kAk1p5fwK2c^K2O4%`aWfZlVBJ2Plck1}TC? z7t5Wf>L_8Rd#e^HXb;DDBfy!#(b=*!vzX^PjSyfdNA#nG!1_JVwRv4!?t; zL%z_x$qO;n-635fi!22^Js6al(L*40NJvP?uc9R7r3#VK3MD#9WCqaPqsh!_40$Ls zCh#v-S7^_%0&+l1==9hDN=YPV1c4?wZnI+B&F$rzEj3?asGj#ANIN@#HGI=SIu9?< zdU+Po#XeB%quJ#f>OVop5G_sp$RFW4zbDHhzEQ! zHWJ|1x`INt$Hzrt$OIpd!5p&Za-4(bx0| zfeHrkL>B`cLPm#q`a3&Cig2`3t0nS@`%Khv{1ZO;;r(BI!oKVEtzmR+)X_)s$S<7Sy}w^{_+DI-e9OC$WP#s8t5%0xc9 z+K*_tU=hqeBKdC}aDWSc;J%`7d{t415}X?Vz(?x93Z4oU>%0>o6}s+L2{Eynj|O}+W4AMgRi8*mOc1h;i;riL^83jK0g@9P#tZ)SA`K1-iMJW05R)dCwDl3d z69wc6Mkixc&akOgPsglAsC(ynRB#)9&3NjyhzF>8Vxq-#W2orPJUA?AekD_XceM_8jW5Z z2W=&b&YMatgkL4gemR;4%xc;IK5BR}{Rh2$SPI0{v41)W;r3)^Y#L6WrLrM?Huy*; z8NWoyazJbtT8baYAM@C9QQC?i(IKTe*A-RQl!xi^w=lpf-GvL2Ir1K~a)0o{InxK&c2;q5h=PZ9BQCGZi#XJcf^_5iEVUt8gv zM5E-sa^2>LyoWP3*KzJ0I}m=k(m8`uIhI1g^f_R>F67}QQHsUEHUHcqJS&(DJ}*ex z{SW8HQHwStDD0kuA}E11sLCBtxfy4HqzI_(R-mYAJdyJl+3GpK{*?=3tl?T3UK&Tb zX{q4nX^>bl3#6Lw7K&eMEk;BN;vLF=oC_q@@5Qu+Y0lEQj`F!ORmnrbG&9Z-DvBT; zSSyl9 z9}@l>DA*%@I~l0dKCe=FCPgDx<4A$#K}g~wh8C6*Mp;BS_f^{uFA3uExHhR#^QvIy zcK)AUQ)CmK58cf>H2ODy5LqHLuz9j4c1%&f8%hI9D|i1oRMY=DQN+Stp|XD9bJmyC z$3BSwxguT2dAD%NE6b)sIQFyeFwONSuR~M(=6nWu?|OEQ=R0BsJZffcZIZx5e0B1G zV01P~5w?Tv%i*7>Wmgms4s4kxoD4|!)Z;|G!Gs}QexIj%7^cD`MFG(=dM;b_l!qpx zZ~1Ct!e(9+&8D?Sy$abA^N{nr7cgWH;h;$aT&ANiEe|9W1`c1-kF?};Bk0p3-KYLR8D>Mw*_^cqjRPjigx{+Aje^hh_bMR=leBfo;1MmhyKK{LhfvEfdJT zR3-##($|kQvn+2-F6 z1-;x0Pm8wI9Co&=03Wm`muQ5j`#eq(2^I$e?DcZnyHou%{-icSb+Z~vO3Hk#6N;S? z*N09hSw13d($3oMw^Pt4_;sXi<=iFo`Pnrq<_TP*u4L%ow;Qt^1v9N5e-4_H#3M36 z^oW`wtN5bGfIk!gn(0N?e+|*A*F)L@)opDtJHHbuxVfvt?nNi-=s9NQhA;-_-ac;x z<`;uTto!l{z5+#k+}O;9ZN`m30pR?r=xLlVv?=4%L!naQcx%q>l1lT|Y^Alo%->mT z*zEsqrmNDk{=lDdwy|YfVa43_=)d0I`OsNakN~PH8jpZ~A1j*^p0V(}8a8_=LuGj0 zf&A^DrTcF)Q;P~{r2>DiWMgoZ&#TR_i5b-1>{Ay{Av{*rwo)+NE7uLQ1)VhBVfwd? zXh8vbjL&c4Ld;|)M!Md9fcc_f8U27d2Xte3GcH|aXo?eKe>_Km zu^|Fm@OKy@1o0G%NN_X;b#n@|jh6e@L_Y4US8TFba%>7;ITV6!JM5f&&H~|85H|RQ zzdxIO7~kVK=DcV3reyx_;rGs1jRqIV48HOzEdNso!c)-aY|E9cJa!Y!2MJ3YmGI5} zH?NFx#}27<5Sv1lB5>`OX*a@jg)^~9E+~>-(r@{|z;%6hZ5A1cmi(CY>$mGJXV|~f zf2T7ZuM>SU=FZ+VUhN+&uF)9#`OCwwhW|FZEpAn^>9Y>8E*a_9$638S_@80-zNJ+L z8XYk#qfGrS_e5t0N4vTZrW=CJ^H0c`0iHUp{gbuFxt^Z!+6qGnCLA^qNj`cP(_phu_WdS{5OJQb$oj?7pD;GHm)dU; zQBcEvAeiP=Yb+66`3PTMapl;L1NAM~@S;Kft)6*X4lvyL-M`(GMtxQ?mwPWO;85IciSU=V~i8dyXLLy9;Lc^L}(&=83EpgrXxv~UyDo|A^Q=|$#Li8=4t;-C0 zm`-FUe|7I=f1WjwSLE~RKNmX^VK;3xwAS?v$NIesdr(Oe^tF302rCo@W4nbbM+`75 zEr{S`0f+8}|IYiJ^z{Y>^~?S%8v8lj=9K4l*xLS!N%3Stqn*XpqrKm(uf#c}Q<`Wo za1*Eb7rh(LdIi&G;G%WD$8;-S9d=q7M7)x@QkD~^Hc}LyG+a2Et>(Xjl;owPz?sKu z-nqTY{aeJgls?i5wDA&~Y3n!FhvxBJ{4Hr`u}{SIHp1K8Ib*b@!_=n~xex?h)A!+- zeNCvqi~022vehVGpD0Qu7tEObA?v46V7U6$bKD>{@7TQaK8 zib3XoSl5n>h*6V_YnsmMb9&gW7Vh$l(LGBYP4n+sC1ef3iYtZmor3uuQPhNKh;vFM zG|_rhefa2G{lcBbWsLh$Igev9-PdcLF>tx_31tNa{^sPu6x!Hthi{b|j3^0a(V1>O z_Sn>5kTS0{Np9ndyPuW}nn!b{uJXBLBcG0<&}?Q(szTLA-BRTrc4NE$=|}&I%sISw z2-8{;{tAZoKCH)SMLF%f*Snzbr&i`HNtJX^ppjiJzkvN&4VlFRg>d1;eKLyx!#)hb zxO&u*BvWAVM;;1H6}K*wf{kB=mM~p!v0turL8QAVx#?IcTqWcnQbkSeVo_y^D9$-C zQKvq`X&LuFWjd#9C0(`pJFS0Z^;`u2zuOmaz<*E?{GXcxZuQPY@4&_C|8c6DFF*CC zVfg>#1GsVAdCt7|_JvWc-E3{nQjq6Dg{u{Wf3=B^jZGSuU2V4Re_C||cd@`XzYV@Z z{5#2ewCgk%KdUTDLikrdRBV2M{=J@*97Fc+gwq2c{{qJLd{E$G&e314|NnZhu8jXc z;N$Kq0_mP71(*14|KHg`0OVrllI?%#!vDu7dJYSHdVVeGlq6**d<=fciJ3g1IDu)xEI=U08Zs&>fJ*&uIbc79}I$~y)tFQ4{x z7HsVyzkQL1^#yz2bWKfDV*41s$2I>szbyL8WH#tjvLgkGDE0AvF!LqgeBj5}Qf0*V z0bkqep2TelSfkAZh`1aYPxsIuR?E;Zp<3M6$1e ztbm)xlI~fl!XrhJ7!Kjmza;Z_Z)I3vO6SVOsq>18*y4STx8qX@$LbWbQ>){J8jfH$ z)EXl^d#z9-l5x%&Ijvis(l05RTFmI$(cu(F4GjM(jPvl2=Tw5j)6^rtf%S=iC~b|c zIEnA}N{}uYr3y9R>fR%RmnBOY*I!ti+4YO<@f^>&qI0#SzxmVii!T}3RV0`P2L^H#!bE?@SOkWsdkn7k0vw16H-ze@i3^kqDRd4K^V0fjj8XR z^Qf&-hnMfrI)1@~rsr1RY5nX`b+S_Jj)=+kbC3&FED52W0;wrr5GVz%RmDld!}X>< zfO6*$V(1aGJOT4|%Q2qagl{Gzqg7ME-4hYAq3Iyj>kS)vl~P!Hp`7p->RYkx6tU!Q za0R^Qc)q*DRR|KSiSIl*#=SjARJq^ExtG-T=XwJ^6vgtLZ333j?4h4Z6!K{Pt~6~T zb=Gn`QS^>^db!w8%=II%aKx6w11k;m;q(Z>r?J$b%g-?DU>eFq>7NcdADt>cA0!B; zQCOd-qWp}U5Bz@J^Y0_x#v^rev;1t3hNNGE_{=ybv=|C|Q~pNDKd7t`F=OyfYjSm9 zJ_i2Jxo6p^WTirMou}@>eKn1Nrp;WnrUUYwuBK*6+@qR%RsQRj#&h_&xw%zC$@Eru zjp7l2GxU`|557srh{Sr=#&tW}D87myn}GG1)c&rqk=!=;@53MC2pz=>(ZQ_7VD=PAe38`Lrn)yeeHv-FKPk|L1&nhY{BAA!+k9O_*QWdu?(J_+^$k7ji^w7q z@gRema(O5G6T{l*N`pE*Cwm8^K`FOyS4OzEn_-fe+wfXHsMHHv@F_w@D2}zvN^RUB zCJ<6pWcZCgk*i`Kr%3ry1%Qo|^AKZ?FHE^@6xx4uIT4~+Fcw$P-E9(|hSICePx#;y zVz$)&%%h9*sfAL4Gl&*<2yh)VyXk8ea`Tby4&y+l)EyrE4~oR=EFq%>$(H3Fx?^x> z#E0i6U_4LPT)6Y6yXlhOWV=$6>0l?B(~sY8^aS>k)=rEU4?hgOHIdI6JnP}lqbcG3 ziXyX{De<$7G1E^@;03Mvm;Lv~%?Jg&1E9vY?`TF!ZofY>=6d6{%5VHb->OKO`xfVzT*bQ(GPuBxQKClh6%=$O*=Q$iiX$Nvt-U#hv z=^tc!idDI*i|e=5-!HUzAe-)7}&p!`Q=Rj z_6g-im>`_`IxKF?yKE;oiCOk`Ldr=v-y%xt7S@P%`05@b;^Y%&XpeWfk?t6UkC=3-2ESIgpt*_EO?4CCv>%BOc`?X>{JUf76#{N~>HV*+=VVe3^M z{~^^rm@#*l{{D5hXL?jV!DqTg*6I=BG))Ix>?J{i{-n@(L24xqRWdPqic|FNf$H^;#0rZ1>>ufkU*g{jLHtm}E{&7pOUS{{sDMl+d(mYayL56~n z#uo1zhq)p(#>H5R9}qsD+RLF?Oe?07sWFA-r93d_>@RdG-}nw%Z>Sd=KkxViVLue& zPfPhTQG6W}_77yERSgmRkepWsamsw0c#!|_Wny1a_e4n-7vG*#sxz;)B=Kas{FBA{ z1P~uTT(bt8eCe}cEa&Zbk2{vxZM8h{1qe_+1jc1KyMFxPTE`$Pgo*qcb@I2xW-<+; zbY;NFZKByKY1eOpsL*ok?7UfyjzvQub1$4{xK^@gThj>GHk|3fxth#!%r*4uGuRm^Q(G3ps zO5EoLt(nMA@KP()j^Lzf&X_msYBeh|+iZE7jy_swtG zL6791zV?wuS$TdhNX)~Jv;g5J*y&c%D8d5rh-i|W`$KY^8tBPX{GI$%L!8GYmCPm7 zZ{z`|c?MV>=aze<)gPxpmKqMcChQpgj!zJ-{}{Ee4}T`(jr&XY;Tq>VL@*~~y`JOKJdmg% zWq(i$zQ81W=U&*jz#$nFE^Czp3m?31g;oE^RO9EwAi{yp2-s z50KV--YoHIyKC%Dfb<B|~r&l2568?_4%va+Bc^1z*D=^WgCaO$`9!ccyJRs>A#&iEWZc{(1pQuMy zKfS?h`1h@*W(@q9eRnJ6X!TAK1IQQq_ozA*=9v$JoU_@E#7-kHjHXwMjBBdrLC6t* zK$?YHY%h*IFZWBEcu^rJTWpKaBu1t;?tLg6r$Sl#inw^Vp*Ar*+JfP^H*nYJ=GNvT z55$DCbUGZ} z_Cc=`@?j=R0oUBqlASkSsS9#t6AHjKt8Uf>UtMk5Rf1oRMZA&-z)>dnE(=j<4;N0} zUykG9?0!kQY17`rx_+&wFJf0wNF&mFf9Y~s>Hd|sEMP~eq;`t@pA-T*QO(D+!N5C& zAo;ui69~U;n1lTHICS0m>k9I~S^Fx#o}xD*anAIkuo)m5nbi&YGpdik)$b)wFJ$MU zzfqs!>*^X#UM);0<^e!Gn%`mn;=J^A7|7$)`O>7Yazk^Lr|Xv)nBcndjw%fED8hcP zt%X8G)|h}yud~v)5#l{4$n|^IM!~v%G<44n`-20+Lk~fU@;6Z(UVkj;oN?K!`Ux@6 z0MYbh$xGk!AaxnBCY%^er}0O!r9QXd;jupW>onK?9c{7DK?{n>6mVJ?&1$jarQ^e2 z%AW_AuVk@(I6LJn6O0q0Kb^kmb&EFe$oOvPtE==eu2!RwXZhW%aWMM%gPuK~z?6^B zS~peyT$Y7ak;G`h215k`n~#9nj^)B1#kc+5$z?K#;HM;o{qJ~v_J%(mFyd1*U_8$Kp4xmW-8PR%x=V4`pqHY54J(orv$3X)4dxdlq-;R zhde$3F%-W1Q|v5G7;LVGuKTkiCA=3B8N#jJ?YV_psTu|RuVX$Db6WUBq6PoT@F%3L zbmD=0N_>AEtXO8k=EhEmRrnH;W=dhcw#<9TnZ%_o7m;A3oOa|;KnlB5WI9!mv7{oUV^jp^zMoGnQbw4Ra4lcD_C5X4ZSH|e z?=5sd&{=1xtEJvEhbyL_8!K%O1Wvm4qBa^{WMAK$z+?t$Jd=XIxp(h*S8H zDdM$OyrzI<-R9TtnVH*-zw9qQppljcxZ%1lEMNC<3Nz<+CrS~F*DJm6@G(G;#Td9 zu&~G6*z@?|w`&^+ISG^c79FR7^bST>rEmd<9UNi!h6G=C!;h9oP2af&msvTop9tTt z4Y{dHP{-D^UlRrUTk`ajf9b>YY#Lw04SipWUt%zuB&C3|gu9JB7YILROTvx9ML@)3 zix>ira8c4n>ok=0=M|2Gb7MDe5yF=;3P}V{Jbc1*XNQM}_IL=tzfX>iHw=DFSSI0y z6&0PL(jr~RjM7dk{Z@=>Xb*<)-xg(;k~HJ_Vn7OTZtH}-zQSXqXVcg6f8aj!hhbVe zHE;BuM~fd8HZHQ~At1tMqD*Z$tDyQlATTOWV|X|w+o~hgtQR6;sc~qzMzS*3Hc?Ni z?8l8WA5M4CEa_M0zhLA>rfqcR%zbj%PbUd$dK=UN^?3W6MVFH(r0-U_n=-`1@fGj<79Sg2AH4#r;>$THgB52QC zj|0u6lvcZZmD+j<=xDB_XsFDlDKQjc!h+A(8k4Tq(73c%BJ?B7kHSgI zKbg*{(G=)@g^;h07#6cf@bDa(Mz*h^RVr?g?dK-zEdiOPr6 zuL*}eggIDSp)AqBN*8#b4yZz@cN;)x<@esyixiXMHLMRcUVr{}$`Kx068b<2lRUt+J2@ zGdg_PNxCcZJMHGSZdMBYoaC+n?PpPP^23k?>pzlD4ua)DOZ9C;@8_lJh+uK@@Y;!9 zA2^M zZoys>tre5V-Vm+eNk(AwB&7A1s1n7FoUE-MW^PcRg~1u$u~FXqw+YU#M`sM~+H)5< zkG^&`0*Tg^mi~@hZxOVtrk}2_)5O)z`+%rwrXOI7kGqv4p~b>mWH@TjGM|j1?$sr! zR@nZT)z-6OhyAb`H;H33kSZ|LiD^bPOS2!gPbm{vvetK>08OqLxI`nZ=ftu`p(~zB z<0^b8)M9I=Up=98FP!H<|IK#|#LdH^c6@3dg?2(#5QpU4)NbQ(kIZY0w4Zz3n4|Z} zSJm}yc8qyZZD{t4p{Ki4zU>gS?f^My01wh?55lOZZC?$=62oggHDBTUx-QA(mjdV&3Da{ZA1HV0r&+~mg=e&RXKIeVU z@h@PUz3+SNb+5SATGvJ*h+}$nu5!iBd?dU9TnB;oNVpgZEADeSNZSf(=MXM_FPNNh zDY;gV{6K}0j5aTN+pvA8q$4mk^*O@iqF)M5Jy=AEqrsuyI@f!V`0@t*?W+XA(98ZV z&IsRIz=(-o1}hU9!J)^41PT#&AT}S@j=}W9wLDTFYp(aW>Xbg$9pG)230x{RLT;si z=fn>(-#n-ro>O}&3Q%0jYI_{YR9== zlXcGr9i1zAS#O!HEcD`_@?ZE|lv-@~)T{Oewk|7;mFvwOb~Fm98n|p0Z*dA4Z0D{5 zN8#WUeIkf_f1o4SBpn=tkmyT%dIn&E{L^}lZG*1wE}f3;cPU>O`UEimrq!$#%FWgr zs9^%qj^b8ynVkJV9vEX>!iIf;=h+(W_Hbwon0PUJJOsLb>xjMB>Y?x}01oPFDt=tD zzrzSXk9yG+RtFy!zXVare$9lMH8m3z4kjLV=L&sMc*JQB&EfdOp(_CDPZE6HCuTvF z5le<(Y{rYGQg(9`wJwI#NLB`gJDwGgg5vny5B!a!;5qoxy=F{Hnzty><;`IMeepj! zg0J@6DI$;Q*f;yL4;}}iO4UPZTE&o;j&}IxKVBpXbZ^HzPyLNe(~y@!T6CCx*UxFp zy`WPvHKfA12-wxQEATBeKGGr3Oq{6s5x+IGs6Muf@s0bgUoUjwa{Q2T{|sOoLPPt0 zV?EY7h+?|;K8Rju>NNNv@V8VU;7T1px{pG(@Vj-BITBHTVye(@*bWWtzXcGFVi+rV zf?9zmk(5R7y~4j(`}Gfew^c0NfT^f$Ow|98w#ytpy}tYJPp-$35^m-3i=sds;Gewr zD8<9yl0frhdJbIj8pe;Lsp`P`Grg256Q;9_jzEzop$#!e7wz9bqBe$RM({s#`C*kK zOJq_NVF1hsbsNuHz*3}ohf1c)PY@igE6e57_9AI3CdAFpO58GL1L()VtH955^7|3; z<=$n@zmOXyAMA~K3!N2T8QGMTTY{GD3rqt2%JST(D5ai}0GFiU57$}F069cSU;C}!0*Z*kLqF%R1OvlKN4gEt0yg5np3QC`+GCr) z*V)8il%CGqbBfa5g2muy(mA#FX55Ce@95k{3FtmnDn$76a0zwvn1o3p4+)6}5B+ZP zJ&p1#P`Cj*g!+r1h0T7DNn$`xe$9B#@xE7yw9x)7@yS5~gr?d?PdbRc?%?~p7FBFR zyQ?d=Wndw`{>>);S;hjljL8zWLuGd#o)iT_AE~p2<^h`qLn3c&!39IDj@x(h%9i#r#H$8IRTGzICJSGj`4D%sbOxjEY&Dr zn2!{7b;PRCb^y8131xFuw&Fl8|GwV2VL-Jb&u4o11#NO$CRRb=6oX5&3Vpt50c6FDN23gy<2(>G7qNn!Ud39s7!?m$y~*Q&w> zslwp5fw54i+H#@J84%AX*>clA`cBrJ$Rn^~OJ#`ofErQ-k6UbfTXR}hG%}#E4g`t#k7$32)MecHk{{6elaQ3NHIsEsv3Cam~U$f5F;C7(C1`uS#SQM+nz zp}po~zLSVJ;Uxs#i(!xxNXMrG-)AS6`KA8KvRMMGFER}F8XyV_mhrW}d*LSD0%!*V zEueZ@m&4~#66>*a7QkQ7r1^iFB}V2y_8kTY6de(r^xO7%Mxm_c|9cbne_%mF8OBh3 zUubB$|4Uu9?F~vKXlVbV_Fb!MAh|(M;}-|pf@*2o<w%;}?JBIzxlcI$fL7 zXz0-&@?yqm`k`>2eDt}@*Y`Wq^olp6@BZ}}rNP0(uH8+zQe~pXuPCd3MdzR~U;z*F z_j8(*R6a`~Dc{NRyBmL3FXd(!)o-_BACFKe;Ii>}CM96;NN9KA!5aPzv{s(?{fP-J zsTwwXLEd<-Y9Q8b#7fhI!3S8C*K#@AnEkmp7N_EKzA9o$d)^#*vf16>2f(zpbH>8Y z+dp_51l2~j3fJWNe(`9EV!r-!8H<}jK=c^pn21<^ogzaub7AMG`_5NUX=c`>v zv^{>nl@vdjO)DAOvKHXJsFL*&IfK4$(X)uE=nV8R0)%60~>%Hccg8a??lzt!i++xD} zyusvh1O8ve&?uk-1gNfFOMY-p{O{RPhofA2od1Q zgE$6+8!36mX7?Bp_pemmAV#Wma!YZmDN%pTb1~1KVbO>Ud`qg4HQ%=6c9@C(RANYA zQ!-KKJMBk;t8eBsd>=&d1kw;mUeXlYal8+aM4djSA~2alKq}v2npdub1Wj+qO_aP~ z#OXY8*)9@`zKIbf{-5cl& z8}n~eQr2PL;2dcXJrgR+ycaE#I#JC89b9@nB^p#kwn~)aVhj8bQ_6DDRJ*+=Ca!hF z%)r4ZRcxsqq-aRrPOS!&Wfy_9>i`lWt#JI!qaoCz72Sw8FpJxYnJsLHj{J!*K3=?Ar5s52u|4ZJr3TRl*A z?|8$5)Dh~?z8Bb4z7L*m3>W--8NI8*L0%d_8qhCz5c46pPNCbhUNh^BE36zm>@gP+ zG8O68ze5dKeE)?nPT=sRYt^hYHG(m#=L2DcT+q9MPWB_kmdo9DIlK%M&K&4ma4@4v zi+E#z(iof8Fm{!z90I1$@vI>1g9ZBsJ8{4SogWoc+Lo9+UA2wXDg09GxkULy2DnFuzI(2?Jk4Rj6g7D9*d?H0v4jH z8Y)P?H3GVF(NfDamx;Acl9`JNg=ZD2e>kbn|DG8jlUNcz@7plp@k4^w(Ks6-t8Qla z0~9))^ts7Zu`f*(TvfI~s`+r06FvrF5~Q^R8xT{{u273*^^`ygUp~|`U)CMJlftag zLXizg?8UsR4Fz32->%Xk8Y_-V`C%@6b!)NOTEawK!m>v+KH*$?5C(Fqm#9?ARc(>O zHzYF|Aj>B=Hz|htRx8=*@){S3$V0Y-@oSjjDO>Ydm6WBmAK3T}UKlV^`kip6`WXb5 zryVbbHX%#PqWyPlCMEZ1OK;4Yew>iMOFb&%FZix=&y*SSZGD^wy!!jfk$euRw zOLynI!YoG>lbHbS?oVTp99inNcts`Rg?EBcix+#!NjmOfLu{9m1xwpW-G}vBcc;X* znLA?>t-#b@si`t?tHyXc-UJpnz1rDsG41HkFSoM-3O6%?{gl!ewgH15$MB0G#ZPV% z+LIJ~&(`WUY=-fxjs=ANbW|oNHYAdmZfts)-Hd<{ugbgB0B3rcq%_n`Vw1GZO6GBH z*)8HMh_d}Mhe(;?EHGq4rN@#=ZoMcwLv34vOUb8LA)f?fRNsI;InnKJFzfT82ZQ6e z1wB(ajqi(+!oPW>#I|r59o`)dsBp9RNg3|Ap&8~*zDcyMtkcr^yidHpUJn;Jl7mm! zp|8=TZmvH4RIb61z{aG{N!Vh2TYc&keImLDhHSC`zx9hmbl2Qb7LE@YKiTjcZec+V zhtjlt?WJ|3rr%mLQpY!}EPv=E6o?5JRB(UKpKeGi&ky+H9LM-V53R?$k8 zI}MF{Y0F^b_D2OF#%371M4dBb(+yoTLPjf4e!OqyA|gvA7JB>1ZHFd*%iu@v=&4zD z5Lt;2ujFNR^}!BQ$fy0S9|XKy@lnxT2BgC^q(Nh#+x`3b4TJq2s`l1N%5Y25ZamTr z{xluJLWqueD%3p7aVvJy;JFXxElxH97uZ5uzf*DfG+b=qynEZhzo&H z6FKuMO~5XzNciC!D?Afi_b+bwg|;uFh4MV>K6MZ%FYm$@XW|<`MPF3zsDw>#7|jM& zCyxEtx~PKFh#zfj8z5a8zdm^D;uhBY+?p^U4j$MLRU6Bz&ZAK=s_25zgr6sy7y;CS z>}i-@=$T|r-6~?MbKd1b?B!2l<0BXgZXSUhAFJbyttYJa|4^!_rK{@j=SQfI6s(n} z;LMF}=!;DH-_lCsE1K3Xh8BHE{&Ae#h+*HG^%{{irIbp6(GxB3NoO5*k)I0_Z&u2R ztVRs3ku^70=^D4&oHzUHWzmbhJoUMP@qxJD5s5^SMMqvsw+!ry{#!R- zJCi+^3B1%E)AmY)ec<+;e&iZkH4ZJgf@+Y>R6fg0H@sIoi<} z-fEsd`cdxNv-Y1*Syt)iJ^qb30kP7@VS3v7An~K#G|Q73EcyPR{w9{P&Di4`pn%=} zm*k7D4O`d8K%njd$Y!}lCKN-MkeTyglO~+q?7rjEK0!s%SL=P0J^*YnzOD)Xh~K+I zUC!wch?tU-Xn8EcR#3rvXs}-OD?GG!w1!@2#PVH(%54?qj7MF;l{`630-vV83VP4H zh`F^*CmD2}A7<&nXfgdx7Q&>Y>-#KNZFYbdN5?26U7_F`72F0X`;Vy zICPM)malX+*;o0^FPTJdl^y;cA;C%=yd5Jy`y11$-uHy<@KMhSZxW4keuuzzxYB!) zh(PxpxLrT+UmDzLPR2MWk=Jqy8jEYXxf|X_JUX{kXnjkelT~SR@`clEs;HrEV&yE+To8rP%g``G zk2=l!rK(w3Ga)@=fN_^}FrFYU5zav}}*2sLL?^M`h0j(9!3&=*&Y?h}WUpdk;U0t2JYMKf+bj5)cJ zlw%9BL&0UPM}f)>8HI%bNI&}CY6`^`i{9je@}5%2mv95ZG)Mv-s~OV@A~Hb4Y!40h zP1q1ge;#BfTg7B{qY_^)SIu(C`u-;NMVa7DO8Id!baoi7<1G#1$2zS;n`93f)0}X3 zLfX+3NEe`uWs}(x3)G$g(JEE(0;FY>j^j6sZab?E51Qo&tYl#IML)=U+Si76%A&yW z@VhmIPWwYw^~U5RKg6UtGi5o4lhwnz`=tPuSc zJ)1Ff)fShK6o{jl>sSOn9wK5)3l6Sc8E>B`(~AC~T%;mJ*aK^_WEK2Cv=9&o{ow3z z818=CvgvA-{;D*JP{L<(6y&G%#-3nB2G^Q&HBS5n+|2e7X0tnMhw%&FK2==G*_t#I zOcD!?kFyn(BnX7s@wMHlq>)dnypc@7rbfAu!6Nc1IoU5=`Nw*!!;8q7iwCSWw!hL4 z)~`03`ZpN%EM}>d(RZQw*3ymm-<>pt@J93URRe`@nQ*ZgQ5y2?cb%I)vL@*8benl@ zog2m8j<|%S%<7E$TaS2*>6`VRViT|}H!KDRmti|v7(`DEOy!*qU5&;cDxcp4v) zL45D~Cg~?hKouI`;72ZFyA2Uu3i>sxr)|f^v$M~Qq-RwpaDR^7Oy@o-fH8z4Fbq*@ z(*VceOJQp8Kg`0lHE#ZVZvLc9re)9K2K*KRBjOJ{OOue@=wDIx^sQhpufPVWmnKf` zJqehr#rrr5L-+NtjaC>dTDR9<^tQU}_0~L)Xyb{Li6#~t+fLRi{wr+;0IFA%B2L?^ zvt77_zJ*@HuOnQCX?JtmH#O~PuVG$K-!L!h$?}?9H^ny0^B4YgueU^NH3_IfIE{9txSbtIO2<%02n)@F@#5Vte+F}H>Ptb4C4dP2v|HUJu={~;k z6k8FxnTK*Mzp*2kk9)ZHKmBu2BoVya74n_9Pvd>YyQY~;-D5+@^;dg>5p+-JO#|x7 zUg+`^irHYPhBIXh|m492~4@Pf;*3-Q{b1#HR4~eUa;SZW|9?m63PbkK3KoVzvOOw7RSCm1nh0V`yzbCOWQ@-<8d^s2P zI%(T@rQyD<$WbpE0s{aqJ+pH-fj;7RAEtnlxD^gyxvCojqIFo}jj-Uw>u z#PU3TYI@a^kC=7$ee?YzySmr=cAWNG_44)dQI@lA=xJcISH%yBP)x z4Rf1DB_3y8T*?rahkc6zt2IRnK6;I)GF5k#4~%B+vhJJd5f3% zqPQM=Ak1wLv;UR2u$^cw4s4auR)jH2`PL(1s|s;Jys8Mxt(gqAmr%Np#SY>MxpBDhD;2?o2DIj zG8W_u;Uc07vGj6{J=1LM4W9H>PmzQ8FW^lWLQ@eW%J!?0ix3Sxik=+I=qP zUru_943Y?ayjdPI7@)TCd5`TbB$+@tA)beHUFGf#Sjbvg^YjCG)u5Lt z8TI#Z6igd)XnvBv);Io~2botT|EXnzz81agnjRfaE}shNu9`LZdu|>v>@npOzKBD# z&jg9l?V9W`St%icx zP3R&oRw(MGN-1XIpTZG_Z`Hb`tq>;1DioziVc#9g>^eAmses+zvy79M1I=^NlLV}+ z+e3Lz=oto>IJ;{M zG4dr4FR_+)DD*oFO&ku^UL3M5*vzRNg-0kMN1pW*jT|AeYQt|j@T4ha|0q2UxVOJE z=a+}0ym>(8Q&K#Z1@R*3+Kc9;#o?=d>3$4$-I`hubC3B32Nx{Gl~9q|w!Ykm-M68i zcN_f;8Q#RM?KZC_daLWW8{P=&_BW#{hI}n(Y^Zg$6~GK_fcmoGI5F9%&DvAlSklRs z34Np-({RLHS6rw66%KBUU;mt%sdaCzuBpN5Bb578UY}_th1wQ5 zGAb(-{a{{BuJ3#vgta54^Lfqq(G+iV)5~?zZ+84774fRY%|#o(^eYu-PoTG9BmBMb zX`3$!pQyE9UrvW9f6;(5W*&K8+m`=P3;W+^_FvsQP{Da5A=>|MpK?qCs%lkPPhtOJ z9!B?9$y~!?bzZSXM@IwiLpkWi%=5f9|D{+T@-Sk`P5UW$xXz4y)Woi3J?YapdK0W& z|866OLw6+-Pvyq7pZRk`3`Dg3e_nd1Bs4>riMnH45O5DK~5nn4Z?DyFqaGs22zs(9lSf zdCP&8l#u2ivwHB;ZEj|LQH|HU8(dkEHtpekNdna9CuA4^F^?BC9)+;C($zxA%he+m z(u{t@4aGu8%1X4u_P za~zDy3QFbNpckj$#YL(}X_$Ux+1|lT{}5d-<>HWv6-i@A&`pP zsmU(9@nRwhb~_j3s@GA1=y!yonQ?lxgoWxnq}+ra~IV#XQY z8k_JL?6Ad-1LE}-YmrNZd%-w>7@(%+xfmk*Ecolx|9ejv<&jx?aEg=Qq%W8#5}4~eb&H}92& zl>f{)FqJGNDfC~r>EktX4iSF&Qxr{_95-!v9=^Os0MTnuaqJ{#&IiKGERmRe$WAf; zseSAueg$VCAk!fb;kxFn0eS7&urXbsmQaxsbL($SoxSG`IX6Z51eK=u?Q=q_(;U+} zO-x3?$q_%e#+xiC@l``7OYUxcv-rTcn-#hi{2aFF$4fDzWLix9sX8qUt|DMKpVffh zd=E_peZeJSk4(SIJ6KA}naq}aj8Ox5Py#I@Sg@j|o8S2e&7%9ghQ}Axg|h*3u64U4 zMYFIoBc~S*H>fMVPK_ITF7opgoEE=~F4MeXxx1-$+x9J;)h7Nq|4)7!)%iioPPV4~ z(My|P=k*=gMCvs4d^6&Czlmq7`iSG(VgdLxeBzmz4Y&ASy@!ojJTA~s);AmmK`3p- zTH@^*n{RI4|NAJ3L+mQvB)ZM8Fh}WD+npTG9aDeZIk*8ExO7u@dn-yf{&E-g#hAuI z%E(PrcqU}B1R!1*>?t~OIywIN^iJ!7a{9LPL%GV66Seo>*?q7uY2bSW1Z_C_CX4Jc z#j`9oGfV9Aa1_$?4M#xS<@1cEf)DF-%Gj!L+`kT}P#v)|{?-O@?x>C?A4(W*Nmt__ z7T@ZryV!lD9ip=Wt=kWiwi!J=_k9w2Ojl0_M(K|&zt%f*z>U_v)h?gmbHMR$CSY!B zCZ?4yD$v-+;+A;5Pese5@j}4Jf*J-^u<-(`PrpCy{`^MbrM`Y;2d)tYm?iZSt>UHv zHOG%>Ra#s65S+i~;&rJ=xl4)DF07uGD@deSWn{GUO%Ush_kGzDwe}r$NDssa)of?xQk`+xRFd32Q41S5*NMR zgNi$u-=(N01gh@nNDG5h2-8r>{UFL}m%s^|VYe4Wb`qXkyNElRG}C0ocOJLGjfSc zfL%+4^y8pTH*t_l15@7&&q9oIyD7WTeL|D_$dJKku~+X-EP5=ooE!qYCy(>++Iqj` zJSc;ZHU)Ci6sX-Bq2$V)B$qUokXR)nuohjEBB}-#(Y?h&L&Nce@`F(7j_NGh^7`-j zB{Cs_!bRdHni!6hfrVF=v55)5YShb2$&j?UX^}_GO%J4B8mOYK=O|hMurUpkxIJ`bdfeinL7X?^Nhi~UYI!0FG?9#8eQx;mizVST}~k<#C{8j z_X0B%D_@iQt6VPMoOPr#GT=if5Z;S{(fgxmRcwYOU!xSTT0FZR= zNxh3y$@f8m-RXH1$adLy0AzZax#@zzpe1Rr;B3K~57mFALormcih(d8h=gu;Q6OC= zoN`F1O?@|Wnm2)A(?Ugwtyqm-!Jx%VFQJdFdVQy&N)m5rEgvA4ytAa-ZHG^TZyZ`n z-2lS=p^-mY7)f?i;Ow$6P!cjAOoQ_oT{{D^J?rFR_Z8mz>!D~${_9{nuFEObFB1G2 zP>CWaYiW}R!Ri(&GpywMb3ho%3Lt$&6lsu-kr)PhvH7eJeLup3L?6R&);xHxSMYKo z=0EQj2lOfrzG)GUEoeNzM&8+^5=aHFSm^Mr3d*y5j1N;up+XSXDq$gSrtaTzk2Uz_ zu|gi)V8(Fky?Wu{k1RXdy_#xD^gmDFdp@LXRJX<3`V*<_=Q|TwuYMS2rMtgkjs-;^$*PFQ95|6ufA|mvcwFN2N{<8o&gzu*>D$3EkD$kl^qeXT4 z{&jGDuez=Mi<@$aV}ox1Gq{TrAPvKdmavBIzNcd}0x zo*3oWNEvK(-Ps~5h8TdLdiBTM`|Ur|5U^u=HJQ10m@BIGl0VUfF;{I#o-l69jiaw? z9s+UN=TTH+N!#Oyv`+m2e6Z|SGO~aju9~4n`L8|Nq|I(H{#PO@nxEBt?CPb1 zP^zy5<`#V>X_B9|nW2+V5--?XuIi-;+g3|Wx>eDWq;Bh)~N4hg_^a{JlCU+H>!9uRes9F zyX>=NjplIFFzi?b&bSaJ=1;)@4eq3 zxe@CzQJ5Ky$m;WY`+m{s(aF$?IrmMZEH}yt{ry@uaxtVZ)NN=y)3adLJY-Id~03Ox+AA0)d>xDLaYKlO@^y3eeub#)3eze z2f0%mumI=SURD8YEqmc+@n-Pp{i2>(&BFiEo20_NCVPT|NYxE1F*9*CyKYnzw{S@d|f z4jAP_7BW%nW=h?*>Uxx`uQHDJ>;}tR>1_TNIHie zP|8e~=!(SoHXC%<;^H@c&(Y?qDcqs2gb*#=>gRR7g@#s2etnXjx2!`*$2vZG$?I_l z8htH+d{iczlq8EaQaAKDi`vmvgKEZd%D(WT;&%Q?Hv9~!;}6B~5Ey^U+M;7u36u!6 z(A_88;yIX~UUz>0qCEcV1ND&vqf@P!HdP~h;1?V0lw|}}tQ94T8_hRnL-0;O&2m|B z@|jRyXX3Pc_0n{FixYqcIyuNggZ6N=#Q@;K_!~O_6e**Is(D0>Y@NeL9kb1M+%HXW z4Lq)v?h-|gV|zDaD=(>+;fv4TP|LqSw96i~MGG{W6#e{Q2)q;FAATtC5>8*pZh&Zy zk|8=@k!jodRjq;qPXfGy*0EOfR;TxC+v0lFlo7;?g7f8s=M35(q1|o1XYs=%#g%jW z$33Ob5BX+*00(((@azkr{8}wht7^UMaQwdg^p1Ppy}?)R!o~dA#4=a`4bTl+(fpPh zG=gJxM<;yfYqw7Tr}p^TsR?PcL>V4)y$o$+Q%s+vpZ`$?(l0&r`=W(pf0xE$rrw<; zv*5_F;vEw$FlE$obk2>yU zm+XI0hXmTsRIcw$uF(?o^{s?Mk<8rB{@puAHLrdwWnEIoaaG*b{T?t58lEW8@B{m5 zC5#KIwS52H=kx%hrw@I#dw~*f60k#Be

    !P0cXeeV(yIEy1erRrSV^0{Eu0?_jgx zA?PyOpf+PP4N~r9Ve2OL@4^)Oii7#)3i{f{3}BQduS0e|A87n7Yyw)MKH9FqS!n%_ zI>*=X(2zc#t4nV`c|9dZl z=E;EZCoZD<{eq0r8-Mg3b-d9^AN>FNB`+^8O_Kp2ntQvFB@n(>vhI-XE{J!&lUUz8 z-C@t;aIwHTM^;{5-qYI)i^L;PaCEF14T(cFbrzr^VG6(9nNT?Bwaq?)_=5Q<1-b?h z@D~07F=*QMc8vwD4n88B9;HHtK)u)C22I(=S_v8R`oqhNArNfP)~q=DN&>GYpeWZd zPNipJ%(=3~igtX)S#pKa%EH)5J~H(h?-j@40Bgj2qB_D4E-zD8EC(!Fa< z0}8yCnahjm8@unV!@S1!1s}qn9p!#Y#DKqf?9r-xbr>4_{H#ToV~HU3@?j#u_7#8d z)eF3a=}nQ5%a)-A`@GwYJL{yDv0)!5TyLN;5M)2*UXQhZsvH%FR4RD3AsLPMv5oij zc%35A;Wa+TnbBBHkbc8QMVX(s30tV@)ZH`;q=0ES{L!-lL{=Wz;uaaxPaWs`%_ z^)7$3a~e7(i9Ne^B|gyM7S8| z6g1U3sV^o~6R$Y{gdjtpg%ALO0)o)Yv;v4XkWk#(!iU^Yo%dN`h=%Te@o2a5u975J zQvc|p&Qq-P;2%afXwjqj2AaIznN5O^rp-khmg{Zi2MA&sUFZ?3ub%GXj-9W<2-9|E zdN7@43&pKJF*AcN6oZ606l#Yx0^(DSeE==Pu1or$zUr&;JnvwOlzkXWbNaM6v+Xbl z>5YSCcIT!C=7+Q+Tz&1R<6mp~j`)|noc=r|Y$*$5q>S){)kw-}&|JW+jwrW-mF>CQ z5fK+s#swLr63qbU8OR5JV)E^^rePw}J&@R20kP0BSVnX=0&j{nrH2|65^eE z+3%CN^`si|bFVZdpZ%JhIaT*YHg?+c-(SEpt$x>m`wsLqj=&!hV%!**(hSMSuy;4g zonYB6-$5Ce;A(81YV;Pd1|rw?D=t8ׇSi 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 literal 43045 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 z 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 Date: Sun, 11 Jun 2017 10:56:16 +0000 Subject: [PATCH 183/188] docs: new simple welcome page --- docs/_data/navigation.yml | 3 --- docs/index.md | 28 ++++------------------------ 2 files changed, 4 insertions(+), 27 deletions(-) diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml index 3e148d7a0..9ee82a13b 100644 --- a/docs/_data/navigation.yml +++ b/docs/_data/navigation.yml @@ -1,6 +1,3 @@ -- title: Welcome - file: index - - title: Guides items: - file: guide-install diff --git a/docs/index.md b/docs/index.md index 3631a5bfa..550a8c516 100644 --- a/docs/index.md +++ b/docs/index.md @@ -2,30 +2,10 @@ title: Welcome --- +abapGit is a git client for ABAP developed in ABAP. It requires SAP BASIS version 702 or higher. -# Guides -* [Installing abapGit](guide-install.html) -* [Updating abapGit](guide-upgrade.html) -* [Uninstalling abapGit](guide-uninstall.html) +Latest build: [zabapgit.abap](https://raw.githubusercontent.com/larshp/abapGit/build/zabapgit.abap) -### Online Projects ### -Requires SSL setup and access to the internet from the SAP system. This is the easiest way to keep the code up to date or contribute to existing projects. +For questions/comments/bugs/feature requests/wishes please create an [issue](https://github.com/larshp/abapGit/issues) -* [Installing a repository](guide-online-install.html) -* [Keeping code up to date](guide-online-update.html) -* [Uninstalling a repository](guide-online-uninstall.html) - -  - -* [Your first abapGit project](guide-first-project.html) -* [Moving existing package contents into git](guide-moving-package.html) -* [Contributing to a project](guide-contributing.html) - -### Offline Projects ### -No SSL or internet access required, will work if the SAP system is behind a firewall. - -* [Installing a repository offline](guide-import-zip.html) -* [Exporting offline project to repository](guide-export-zip.html) - -# FAQ -For questions/comments/bugs/feature requests/wishes please create an [issue](https://github.com/larshp/abapGit/issues) \ No newline at end of file +![](img/abapgit_1_33_3.png) \ No newline at end of file From a17b32a7b03bbc01d8c29aa3cc89758da3e6a834 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 11 Jun 2017 11:23:31 +0000 Subject: [PATCH 184/188] fix #784 --- docs/_data/navigation.yml | 54 ---------------- docs/_includes/navigation.html | 80 ++++++++++++++---------- docs/guide-contributing.md | 2 + docs/guide-export-zip.md | 2 + docs/guide-first-project.md | 2 + docs/guide-import-zip.md | 2 + docs/guide-install.md | 2 + docs/guide-moving-package.md | 4 +- docs/guide-online-install.md | 2 + docs/guide-online-uninstall.md | 2 + docs/guide-online-update.md | 2 + docs/guide-regular-backup.md | 2 + docs/guide-saplink.md | 2 + docs/guide-uninstall.md | 4 +- docs/guide-upgrade.md | 4 +- docs/other-articles-and-presentations.md | 2 + docs/other-file-formats.md | 2 + docs/other-technical-links.md | 2 + docs/other-test-ssl.md | 2 + docs/other-xml-mismatch.md | 2 + docs/ref-dot-abapgit.md | 2 + docs/ref-supported.md | 2 + docs/ref-write-protect.md | 2 + 23 files changed, 93 insertions(+), 89 deletions(-) delete mode 100644 docs/_data/navigation.yml diff --git a/docs/_data/navigation.yml b/docs/_data/navigation.yml deleted file mode 100644 index 9ee82a13b..000000000 --- a/docs/_data/navigation.yml +++ /dev/null @@ -1,54 +0,0 @@ -- title: Guides - items: - - file: guide-install - title: Installation - - file: guide-upgrade - title: Upgrading - - file: guide-uninstall - title: Uninstalling - - title: Online projects - subitems: - - file: guide-online-install - title: Installing a repository - - title: Keeping code up to date - file: guide-online-update - - title: Uninstalling a repository - file: guide-online-uninstall - - title: Your first abapGit project - file: guide-first-project - - title: Moving package into git - file: guide-moving-package - - title: Contributing to a project - file: guide-contributing - - title: Offline projects - subitems: - - title: Importing zip - file: guide-import-zip - - title: Exporting zip - file: guide-export-zip - - title: Regular backup - file: guide-regular-backup - - title: Migrating from SAPlink - file: guide-saplink - -- title: Reference - items: - - title: .abapgit.xml - file: ref-dot-abapgit - - title: Write protect - file: ref-write-protect - - title: Supported object types - file: ref-supported - -- title: Other - items: - - title: Articles and Presentations - file: other-articles-and-presentations - - title: ZABAPGIT_TEST_SSL - file: other-test-ssl - - title: XML mismatch - file: other-xml-mismatch - - title: Object File Formats - file: other-file-formats - - title: Technical Links - file: other-technical-links diff --git a/docs/_includes/navigation.html b/docs/_includes/navigation.html index 6568f8773..9a6783e00 100644 --- a/docs/_includes/navigation.html +++ b/docs/_includes/navigation.html @@ -1,34 +1,50 @@ - - {% for section in site.data.navigation %} -

    - {% endfor %} + {% endfor %} + + +

    Offline Projects

    +
      + {% assign pages = site.pages | sort: 'order' %} + {% for doc in pages %} + {% if doc.category == "offline projects" %} +
    • {{ doc.title }}
    • + {% endif %} + {% endfor %} +
    + +

    Reference

    +
      + {% assign pages = site.pages | sort: 'order' %} + {% for doc in pages %} + {% if doc.category == "reference" %} +
    • {{ doc.title }}
    • + {% endif %} + {% endfor %} +
    + +

    Other

    +
      + {% assign pages = site.pages | sort: 'order' %} + {% for doc in pages %} + {% if doc.category == "other" %} +
    • {{ doc.title }}
    • + {% endif %} + {% endfor %} +
    \ No newline at end of file diff --git a/docs/guide-contributing.md b/docs/guide-contributing.md index 469462c62..fbbc6ff83 100644 --- a/docs/guide-contributing.md +++ b/docs/guide-contributing.md @@ -1,5 +1,7 @@ --- title: Contributing to a project +category: online projects +order: 60 --- * Fork the repository diff --git a/docs/guide-export-zip.md b/docs/guide-export-zip.md index 9b00b48f6..14a1dfde9 100644 --- a/docs/guide-export-zip.md +++ b/docs/guide-export-zip.md @@ -1,5 +1,7 @@ --- title: Export zip +category: offline projects +order: 20 --- Assuming the offline project has been created. diff --git a/docs/guide-first-project.md b/docs/guide-first-project.md index caf551f4f..835757480 100644 --- a/docs/guide-first-project.md +++ b/docs/guide-first-project.md @@ -1,5 +1,7 @@ --- title: First project +category: online projects +order: 40 --- ## Repository Setup ## diff --git a/docs/guide-import-zip.md b/docs/guide-import-zip.md index 7f58a4ea6..bd985afea 100644 --- a/docs/guide-import-zip.md +++ b/docs/guide-import-zip.md @@ -1,5 +1,7 @@ --- title: Import zip +category: offline projects +order: 10 --- 1: Run report ZABAPGIT via SE38 or SA38 diff --git a/docs/guide-install.md b/docs/guide-install.md index d5dc653bf..a8990a300 100644 --- a/docs/guide-install.md +++ b/docs/guide-install.md @@ -1,5 +1,7 @@ --- title: Installation +category: getting-started +order: 10 --- ## ABAP Report ## diff --git a/docs/guide-moving-package.md b/docs/guide-moving-package.md index 97af6efc2..3beb63312 100644 --- a/docs/guide-moving-package.md +++ b/docs/guide-moving-package.md @@ -1,5 +1,7 @@ --- -title: Moving existing package contents into git +title: Moving package into git +category: online projects +order: 50 --- You have an existing package in your system that you want to copy to a new git repository, diff --git a/docs/guide-online-install.md b/docs/guide-online-install.md index ff17d6d62..ab232ea1f 100644 --- a/docs/guide-online-install.md +++ b/docs/guide-online-install.md @@ -1,5 +1,7 @@ --- title: Installing online repo +category: online projects +order: 10 --- * Start ZABAPGIT diff --git a/docs/guide-online-uninstall.md b/docs/guide-online-uninstall.md index dcfdc38bc..8c4a821ef 100644 --- a/docs/guide-online-uninstall.md +++ b/docs/guide-online-uninstall.md @@ -1,5 +1,7 @@ --- title: Uninstall repository +category: online projects +order: 30 --- * Start ZABAPGIT diff --git a/docs/guide-online-update.md b/docs/guide-online-update.md index a5d2cc4fe..52ab47b91 100644 --- a/docs/guide-online-update.md +++ b/docs/guide-online-update.md @@ -1,5 +1,7 @@ --- title: Keeping code up to date +category: online projects +order: 20 --- * Start ZABAPGIT, it will automatically compare local and remote code. If code is updated in the remote repository a "pull" link will appear diff --git a/docs/guide-regular-backup.md b/docs/guide-regular-backup.md index 5b504a411..732723ce8 100644 --- a/docs/guide-regular-backup.md +++ b/docs/guide-regular-backup.md @@ -1,5 +1,7 @@ --- title: Regular backup +category: other +order: 10 --- Editing Using abapGit and abapGitServer for regular backup diff --git a/docs/guide-saplink.md b/docs/guide-saplink.md index 82c7c4dcc..6653138f9 100644 --- a/docs/guide-saplink.md +++ b/docs/guide-saplink.md @@ -1,5 +1,7 @@ --- title: Migrating from SAPlink +category: other +order: 20 --- 1: Install the slinkee/nuggets into the ABAP system using saplink diff --git a/docs/guide-uninstall.md b/docs/guide-uninstall.md index fe12221f0..e5d5ea5de 100644 --- a/docs/guide-uninstall.md +++ b/docs/guide-uninstall.md @@ -1,5 +1,7 @@ --- -title: Uinstalling abapGit +title: Uninstalling +category: getting-started +order: 30 --- * Delete ABAP reports ZABAPGIT* using SE38 or SE80 diff --git a/docs/guide-upgrade.md b/docs/guide-upgrade.md index bbdabba27..2df6ab3e8 100644 --- a/docs/guide-upgrade.md +++ b/docs/guide-upgrade.md @@ -1,5 +1,7 @@ --- -title: Upgrading abapGit +title: Upgrading +category: getting-started +order: 20 --- diff --git a/docs/other-articles-and-presentations.md b/docs/other-articles-and-presentations.md index 758121400..8e3946e89 100644 --- a/docs/other-articles-and-presentations.md +++ b/docs/other-articles-and-presentations.md @@ -1,5 +1,7 @@ --- title: Articles and Presentations +category: other +order: 30 --- ### 2014 diff --git a/docs/other-file-formats.md b/docs/other-file-formats.md index 7b572bc70..9184178c6 100644 --- a/docs/other-file-formats.md +++ b/docs/other-file-formats.md @@ -1,5 +1,7 @@ --- title: Object File Formats +category: other +order: 40 --- # CLAS diff --git a/docs/other-technical-links.md b/docs/other-technical-links.md index 82e87b4de..f7514daae 100644 --- a/docs/other-technical-links.md +++ b/docs/other-technical-links.md @@ -1,5 +1,7 @@ --- title: Technical Links +category: other +order: 50 --- Collection of links to various git related documentation, diff --git a/docs/other-test-ssl.md b/docs/other-test-ssl.md index 15089a99a..5567489ce 100644 --- a/docs/other-test-ssl.md +++ b/docs/other-test-ssl.md @@ -1,5 +1,7 @@ --- title: ZABAPGIT_TEST_SSL +category: other +order: 60 --- Following report can be used to test SSL connection to github, diff --git a/docs/other-xml-mismatch.md b/docs/other-xml-mismatch.md index fb61ab227..9729a86ff 100644 --- a/docs/other-xml-mismatch.md +++ b/docs/other-xml-mismatch.md @@ -1,5 +1,7 @@ --- title: XML Mismatch +category: other +order: 70 --- ### For end-users diff --git a/docs/ref-dot-abapgit.md b/docs/ref-dot-abapgit.md index 0b9118e88..b0fdbf5ac 100644 --- a/docs/ref-dot-abapgit.md +++ b/docs/ref-dot-abapgit.md @@ -1,5 +1,7 @@ --- title: .abapgit.xml +category: reference +order: 10 --- **.abapgit.xml** is a special abapGit file. It contains meta information of the abapGit project. diff --git a/docs/ref-supported.md b/docs/ref-supported.md index 22367bd27..ad881886f 100644 --- a/docs/ref-supported.md +++ b/docs/ref-supported.md @@ -1,5 +1,7 @@ --- title: Supported object types +category: reference +order: 20 --- diff --git a/docs/ref-write-protect.md b/docs/ref-write-protect.md index 749f57247..5d700ea37 100644 --- a/docs/ref-write-protect.md +++ b/docs/ref-write-protect.md @@ -1,5 +1,7 @@ --- title: Write protect +category: reference +order: 30 --- The write protected repository feature will make sure users cannot overwrite objects in the SAP system with objects from the git repository. So it helps enforcing that data can only go from the SAP system to the Git repository. From 34b9c9a1a1ba237ae7d7fd923e42b70d404db158 Mon Sep 17 00:00:00 2001 From: bigld Date: Sun, 11 Jun 2017 22:18:38 +0200 Subject: [PATCH 185/188] delete online repo after error if new --- src/zabapgit_repo.prog.abap | 3 +++ src/zabapgit_repo_impl.prog.abap | 14 ++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/src/zabapgit_repo.prog.abap b/src/zabapgit_repo.prog.abap index 0f07cdfa4..131144ca6 100644 --- a/src/zabapgit_repo.prog.abap +++ b/src/zabapgit_repo.prog.abap @@ -147,6 +147,9 @@ CLASS lcl_repo_online DEFINITION INHERITING FROM lcl_repo FINAL. initialize RAISING lcx_exception, actualize_head_branch + RAISING lcx_exception, + delete_initial_online_repo + importing iv_commit type flag RAISING lcx_exception. ENDCLASS. "lcl_repo_online DEFINITION diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index ef402633c..2a9859a18 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -295,6 +295,20 @@ CLASS lcl_repo_online IMPLEMENTATION. ENDMETHOD. " rebuild_local_checksums. + METHOD delete_initial_online_repo. + + IF me->is_offline( ) = abap_false AND me->get_sha1_local( ) IS INITIAL. + + lcl_app=>repo_srv( )->delete( me ). + + IF iv_commit = abap_true. + COMMIT WORK. + ENDIF. + + ENDIF. + + ENDMETHOD. " delete_initial_online_repo + ENDCLASS. "lcl_repo_online IMPLEMENTATION *----------------------------------------------------------------------* From 88a4158c89eb1d8e7affe2cf79152be676355004 Mon Sep 17 00:00:00 2001 From: bigld Date: Sun, 11 Jun 2017 22:42:54 +0200 Subject: [PATCH 186/188] delete online repo after error if new --- src/zabapgit_repo_impl.prog.abap | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 2a9859a18..14e14190d 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -72,6 +72,8 @@ CLASS lcl_repo_online IMPLEMENTATION. METHOD refresh. + DATA: lx_exception TYPE REF TO lcx_exception. + super->refresh( iv_drop_cache ). reset_status( ). @@ -80,10 +82,20 @@ CLASS lcl_repo_online IMPLEMENTATION. iv_total = 1 iv_text = 'Remote files' ) ##NO_TEXT. - lcl_git_porcelain=>pull( EXPORTING io_repo = me - IMPORTING et_files = mt_remote - et_objects = mt_objects - ev_branch = mv_branch ). + TRY. + + lcl_git_porcelain=>pull( EXPORTING io_repo = me + IMPORTING et_files = mt_remote + et_objects = mt_objects + ev_branch = mv_branch ). + + CATCH lcx_exception INTO lx_exception. + + delete_initial_online_repo( abap_true ). + + lcx_exception=>raise( iv_text = lx_exception->mv_text ). + + ENDTRY. mo_branches = lcl_git_transport=>branches( get_url( ) ). actualize_head_branch( ). @@ -295,7 +307,7 @@ CLASS lcl_repo_online IMPLEMENTATION. ENDMETHOD. " rebuild_local_checksums. - METHOD delete_initial_online_repo. + METHOD delete_initial_online_repo. IF me->is_offline( ) = abap_false AND me->get_sha1_local( ) IS INITIAL. From 9f675bab5e3d397daf8d7db185bd3df53b00e2c7 Mon Sep 17 00:00:00 2001 From: bigld Date: Tue, 13 Jun 2017 23:24:33 +0200 Subject: [PATCH 187/188] raise exception direct --- src/zabapgit_repo_impl.prog.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/zabapgit_repo_impl.prog.abap b/src/zabapgit_repo_impl.prog.abap index 14e14190d..eaedd802a 100644 --- a/src/zabapgit_repo_impl.prog.abap +++ b/src/zabapgit_repo_impl.prog.abap @@ -93,7 +93,7 @@ CLASS lcl_repo_online IMPLEMENTATION. delete_initial_online_repo( abap_true ). - lcx_exception=>raise( iv_text = lx_exception->mv_text ). + RAISE EXCEPTION lx_exception. ENDTRY. From cfd05b8ab66cd0d02b8281f3a77d7c62e9720e55 Mon Sep 17 00:00:00 2001 From: Andenor Date: Thu, 15 Jun 2017 16:53:35 +0200 Subject: [PATCH 188/188] MSAG last update user --- src/zabapgit_object_msag.prog.abap | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/zabapgit_object_msag.prog.abap b/src/zabapgit_object_msag.prog.abap index e14a7f751..a152f2093 100644 --- a/src/zabapgit_object_msag.prog.abap +++ b/src/zabapgit_object_msag.prog.abap @@ -47,7 +47,8 @@ CLASS lcl_object_msag IMPLEMENTATION. SELECT SINGLE lastuser FROM t100a INTO rv_user WHERE arbgb = ms_item-obj_name. "#EC CI_GENBUFF - IF sy-subrc <> 0. + IF sy-subrc <> 0 OR + rv_user EQ ''. rv_user = c_user_unknown. ENDIF.