From d907898fb6c247bc80240e6442919eabbb25e1c0 Mon Sep 17 00:00:00 2001 From: Ivan Date: Fri, 26 Dec 2014 12:39:22 -0600 Subject: [PATCH] New Daily Build ABAP2XLSX_V_7_0_2.zip => SAP codata and cofile ABAP2XLSX_V_7_0_2.nugg.zip => SAPlink nugg file Fixes for: #326, #329, #336, #295, #337, #333 --- build/ABAP2XLSX_V_7_0_2.nugg | 39261 ++++++++++++++++ build/ABAP2XLSX_V_7_0_2.nugg.zip | Bin 0 -> 319157 bytes build/ABAP2XLSX_V_7_0_2.zip | Bin 0 -> 1483039 bytes .../{ => old_releases}/ABAP2XLSX_V_7_0_1.nugg | 0 .../ABAP2XLSX_V_7_0_1.nugg.zip | Bin .../{ => old_releases}/ABAP2XLSX_V_7_0_1.zip | Bin 6 files changed, 39261 insertions(+) create mode 100644 build/ABAP2XLSX_V_7_0_2.nugg create mode 100644 build/ABAP2XLSX_V_7_0_2.nugg.zip create mode 100644 build/ABAP2XLSX_V_7_0_2.zip rename build/{ => old_releases}/ABAP2XLSX_V_7_0_1.nugg (100%) rename build/{ => old_releases}/ABAP2XLSX_V_7_0_1.nugg.zip (100%) rename build/{ => old_releases}/ABAP2XLSX_V_7_0_1.zip (100%) diff --git a/build/ABAP2XLSX_V_7_0_2.nugg b/build/ABAP2XLSX_V_7_0_2.nugg new file mode 100644 index 0000000..0c657c7 --- /dev/null +++ b/build/ABAP2XLSX_V_7_0_2.nugg @@ -0,0 +1,39261 @@ + + + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + +TYPES: BEGIN OF ts_alv_types, + seoclass TYPE seoclsname, + clsname TYPE seoclsname, + END OF ts_alv_types, + tt_alv_types TYPE HASHED TABLE OF ts_alv_types WITH UNIQUE KEY seoclass. + +TYPES: BEGIN OF ts_sort_values, + fieldname TYPE fieldname, + row_int TYPE zexcel_cell_row, + value TYPE REF TO data, + new TYPE flag, + sort_level TYPE int4, + is_collapsed type flag, + END OF ts_sort_values, + + tt_sort_values TYPE HASHED TABLE OF ts_sort_values WITH UNIQUE KEY fieldname. +TYPES: BEGIN OF ts_subtotal_rows, + row_int TYPE zexcel_cell_row, + row_int_start TYPE zexcel_cell_row, + columnname TYPE fieldname, + END OF ts_subtotal_rows, + + tt_subtotal_rows TYPE HASHED TABLE OF ts_subtotal_rows WITH UNIQUE KEY row_int. + +TYPES: BEGIN OF ts_styles, + type TYPE char1, + alignment TYPE zexcel_alignment, + inttype TYPE inttype, + decimals TYPE int1, + style TYPE REF TO zcl_excel_style, + guid TYPE zexcel_cell_style, + END OF ts_styles, + + tt_styles TYPE HASHED TABLE OF ts_styles WITH UNIQUE KEY type alignment inttype decimals. + +TYPES: BEGIN OF ts_color_styles, + guid_old TYPE zexcel_cell_style, + fontcolor TYPE zexcel_style_color_argb, + fillcolor TYPE zexcel_style_color_argb, + style_new TYPE REF TO zcl_excel_style, + END OF ts_color_styles, + + tt_color_styles TYPE HASHED TABLE OF ts_color_styles WITH UNIQUE KEY guid_old fontcolor fillcolor. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + ABAP + SLIS + SOI + + + + + + + + + + + + + + + + + + + + + + + + + + + + method ASK_OPTION. + DATA: ls_sval TYPE sval, + lt_sval TYPE STANDARD TABLE OF sval, + l_returncode TYPE string, + lt_fields TYPE ddfields, + ls_fields TYPE dfies. + + FIELD-SYMBOLS: <fs> TYPE ANY. + + rs_option = ws_option. + + CALL FUNCTION 'DDIF_FIELDINFO_GET' + EXPORTING + tabname = 'ZEXCEL_S_CONVERTER_OPTION' +* FIELDNAME = ' ' +* LANGU = sy-langu +* LFIELDNAME = ' ' +* ALL_TYPES = ' ' +* GROUP_NAMES = ' ' +* UCLEN = +* IMPORTING +* X030L_WA = +* DDOBJTYPE = +* DFIES_WA = +* LINES_DESCR = + TABLES + dfies_tab = lt_fields +* FIXED_VALUES = + EXCEPTIONS + not_found = 1 + internal_error = 2 + OTHERS = 3 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + LOOP AT lt_fields INTO ls_fields. + ASSIGN COMPONENT ls_fields-fieldname OF STRUCTURE ws_option TO <fs>. + IF sy-subrc = 0. + CLEAR ls_sval. + ls_sval-tabname = ls_fields-tabname. + ls_sval-fieldname = ls_fields-fieldname. + ls_sval-value = <fs>. + ls_sval-field_attr = space. + ls_sval-field_obl = space. + ls_sval-comp_code = space. + ls_sval-fieldtext = ls_fields-scrtext_m. + ls_sval-comp_tab = space. + ls_sval-comp_field = space. + ls_sval-novaluehlp = space. + INSERT ls_sval INTO TABLE lt_sval. + ENDIF. + ENDLOOP. + + CALL FUNCTION 'POPUP_GET_VALUES' + EXPORTING +* NO_VALUE_CHECK = space + popup_title = 'Excel creation options'(008) +* START_COLUMN = '5' +* START_ROW = '5' + IMPORTING + returncode = l_returncode + TABLES + fields = lt_sval + EXCEPTIONS + error_in_fields = 1 + OTHERS = 2 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ELSE. + IF l_returncode = 'A'. + RAISE EXCEPTION TYPE zcx_excel. + ELSE. + LOOP AT lt_sval INTO ls_sval. + ASSIGN COMPONENT ls_sval-fieldname OF STRUCTURE ws_option TO <fs>. + IF sy-subrc = 0. + <fs> = ls_sval-value. + ENDIF. + ENDLOOP. + set_option( is_option = ws_option ) . + rs_option = ws_option. + ENDIF. + ENDIF. + endmethod. + + + + + method BIND_CELLS. + +* Do we need subtotals with grouping + READ TABLE wt_fieldcatalog TRANSPORTING NO FIELDS WITH KEY is_subtotalled = abap_true. + IF sy-subrc = 0 . + r_freeze_col = loop_subtotal( i_row_int = w_row_int + i_col_int = w_col_int ) . + ELSE. + r_freeze_col = loop_normal( i_row_int = w_row_int + i_col_int = w_col_int ) . + ENDIF. + + endmethod. + + + + + + method BIND_TABLE. + data: lt_field_catalog type zexcel_t_fieldcatalog, + ls_field_catalog type zexcel_s_fieldcatalog, + ls_fcat type zexcel_s_converter_fcat, + lo_col_dim type ref to zcl_excel_worksheet_columndime, + lo_row_dim type ref to zcl_excel_worksheet_rowdimensi, + l_col_int type zexcel_cell_column, + l_col_alpha type zexcel_cell_column_alpha, + ls_settings type zexcel_s_table_settings, + l_line type i. + + field-symbols: <fs_tab> type any table. + + assign wo_data->* to <fs_tab> . + + ls_settings-table_style = i_style_table. + ls_settings-top_left_column = zcl_excel_common=>convert_column2alpha( ip_column = w_col_int ). + ls_settings-top_left_row = w_row_int. + ls_settings-show_row_stripes = ws_layout-is_stripped. + + describe table wt_fieldcatalog lines l_line. + l_line = l_line + 1 + w_col_int. + ls_settings-bottom_right_column = zcl_excel_common=>convert_column2alpha( ip_column = l_line ). + + describe table <fs_tab> lines l_line. + ls_settings-bottom_right_row = l_line + 1 + w_row_int. + sort wt_fieldcatalog by position. + loop at wt_fieldcatalog into ls_fcat. + move-corresponding ls_fcat to ls_field_catalog. + ls_field_catalog-dynpfld = abap_true. + insert ls_field_catalog into table lt_field_catalog. + endloop. + + wo_worksheet->bind_table( + exporting + ip_table = <fs_tab> + it_field_catalog = lt_field_catalog + is_table_settings = ls_settings + importing + es_table_settings = ls_settings + ). + loop at wt_fieldcatalog into ls_fcat. + l_col_int = w_col_int + ls_fcat-position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). +* Freeze panes + if ls_fcat-fix_column = abap_true. + add 1 to r_freeze_col. + endif. +* Now let's check for optimized + if ls_fcat-is_optimized = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_auto_size( ip_auto_size = abap_true ) . + endif. +* Now let's check for visible + if ls_fcat-is_hidden = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_visible( ip_visible = abap_false ) . + endif. + endloop. + + endmethod. + + + method CLASS_CONSTRUCTOR. + DATA: ls_objects TYPE ts_alv_types. + DATA: ls_option TYPE zexcel_s_converter_option, + l_uname TYPE sy-uname. + + GET PARAMETER ID 'ZUS' FIELD l_uname. + IF l_uname IS INITIAL OR l_uname = space. + l_uname = sy-uname. + ENDIF. + +* Object CL_GUI_ALV_GRID + ls_objects-seoclass = 'CL_GUI_ALV_GRID'. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_ALV_GRID'. + INSERT ls_objects INTO TABLE wt_objects. + +* Object CL_SALV_TABLE + ls_objects-seoclass = 'CL_SALV_TABLE'. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_SALV_TABLE'. + INSERT ls_objects INTO TABLE wt_objects. + +* Object CL_SALV_RESULT + ls_objects-seoclass = 'CL_SALV_EX_RESULT_DATA_TABLE '. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_RESULT_EX'. + INSERT ls_objects INTO TABLE wt_objects. +* Object CL_SALV_WD_RESULT + ls_objects-seoclass = 'CL_SALV_WD_RESULT_DATA_TABLE '. + ls_objects-clsname = 'ZCL_EXCEL_CONVERTER_RESULT_WD'. + INSERT ls_objects INTO TABLE wt_objects. + + CONCATENATE 'EXCEL_' sy-uname INTO ws_indx-srtfd. + + IMPORT p1 = ls_option FROM DATABASE indx(xl) TO ws_indx ID ws_indx-srtfd. + + IF sy-subrc = 0. + ws_option = ls_option. + ELSE. + init_option( ) . + ENDIF. + + endmethod. + + + method CLEAN_FIELDCATALOG. + DATA: l_position TYPE int1. + + FIELD-SYMBOLS: <fs_sfcat> TYPE zexcel_s_converter_fcat. + + SORT wt_fieldcatalog BY position col_id. + + CLEAR l_position. + LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat>. + ADD 1 TO l_position. + <fs_sfcat>-position = l_position. +* Default stype with alignment and format + <fs_sfcat>-style_hdr = get_style( i_type = c_type_hdr + i_alignment = <fs_sfcat>-alignment ). + IF ws_layout-is_stripped = abap_true. + <fs_sfcat>-style_stripped = get_style( i_type = c_type_str + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + ENDIF. + <fs_sfcat>-style_normal = get_style( i_type = c_type_nor + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + <fs_sfcat>-style_subtotal = get_style( i_type = c_type_sub + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + <fs_sfcat>-style_total = get_style( i_type = c_type_tot + i_alignment = <fs_sfcat>-alignment + i_inttype = <fs_sfcat>-inttype + i_decimals = <fs_sfcat>-decimals ). + ENDLOOP. + + endmethod. + + + + + + + + + + + + + method CONVERT. + + IF is_option IS SUPPLIED. + ws_option = is_option. + ENDIF. + + TRY. + execute_converter( EXPORTING io_object = io_alv + it_table = it_table ) . + ENDTRY. + + IF io_worksheet IS SUPPLIED AND io_worksheet IS BOUND. + wo_worksheet = io_worksheet. + ENDIF. + IF co_excel IS SUPPLIED. + IF co_excel IS NOT BOUND. + CREATE OBJECT co_excel. + co_excel->zif_excel_book_properties~creator = sy-uname. + ENDIF. + wo_excel = co_excel. + ENDIF. + +* Move table to data object and clean it up + IF wt_fieldcatalog IS NOT INITIAL. + create_table( ). + ELSE. + wo_data = wo_table . + ENDIF. + + IF wo_excel IS NOT BOUND. + CREATE OBJECT wo_excel. + wo_excel->zif_excel_book_properties~creator = sy-uname. + ENDIF. + IF wo_worksheet IS NOT BOUND. + " Get active sheet + wo_worksheet = wo_excel->get_active_worksheet( ). + wo_worksheet->set_title( ip_title = 'Sheet1'(001) ). + ENDIF. + + IF i_row_int <= 0. + w_row_int = 1. + ELSE. + w_row_int = i_row_int. + ENDIF. + IF i_column_int <= 0. + w_col_int = 1. + ELSE. + w_col_int = i_column_int. + ENDIF. + + create_worksheet( i_table = i_table + i_style_table = i_style_table ) . + + endmethod. + + + + + + method CREATE_COLOR_STYLE. + DATA: ls_styles TYPE ts_styles. + DATA: lo_style TYPE REF TO zcl_excel_style. + + READ TABLE wt_styles INTO ls_styles WITH KEY guid = i_style. + IF sy-subrc = 0. + lo_style = wo_excel->add_new_style( ). +* lo_style->borders = ls_styles-style->borders. +* lo_style->protection = ls_styles-style->protection. + lo_style->font->bold = ls_styles-style->font->bold. + lo_style->alignment->horizontal = ls_styles-style->alignment->horizontal. + lo_style->number_format->format_code = ls_styles-style->number_format->format_code. + + lo_style->font->color-rgb = is_colors-fontcolor. + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = is_colors-fillcolor. + + ro_style = lo_style. + ENDIF. + endmethod. + + + + + + + + method CREATE_FORMULAR_SUBTOTAL. + data: l_row_alpha_start type string, + l_row_alpha_end type string, + l_func_num type string. + + l_row_alpha_start = i_row_int_start. + l_row_alpha_end = i_row_int_end. + + l_func_num = get_function_number( i_totals_function = i_totals_function ). + concatenate 'SUBTOTAL(' l_func_num ',' i_column l_row_alpha_start ':' i_column l_row_alpha_end ')' into r_formula. + endmethod. + + + + + + + method CREATE_FORMULAR_TOTAL. + data: l_row_alpha type string, + l_row_e_alpha type string. + + l_row_alpha = w_row_int + 1. + l_row_e_alpha = i_row_int. + + concatenate i_totals_function '(' i_column l_row_alpha ':' i_column l_row_e_alpha ')' into r_formula. + endmethod. + + + + method CREATE_PATH. + DATA: l_sep TYPE c , + l_path TYPE string, + l_return TYPE i . + + CLEAR r_path. + + " Save the file + cl_gui_frontend_services=>get_sapgui_workdir( + CHANGING + sapworkdir = l_path + EXCEPTIONS + get_sapworkdir_failed = 1 + cntl_error = 2 + error_no_gui = 3 + not_supported_by_gui = 4 + ). + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + CONCATENATE 'Excel_' w_fcount '.xlsx' INTO r_path. + ELSE. + DO. + ADD 1 TO w_fcount. +*-obtain file separator character--------------------------------------- + CALL METHOD cl_gui_frontend_services=>get_file_separator + CHANGING + file_separator = l_sep + EXCEPTIONS + cntl_error = 1 + error_no_gui = 2 + not_supported_by_gui = 3 + OTHERS = 4. + + IF sy-subrc <> 0. + l_sep = ''. + ENDIF. + + CONCATENATE l_path l_sep 'Excel_' w_fcount '.xlsx' INTO r_path. + + IF cl_gui_frontend_services=>file_exist( file = r_path ) = abap_true. + cl_gui_frontend_services=>file_delete( EXPORTING filename = r_path + CHANGING rc = l_return + EXCEPTIONS OTHERS = 1 ). + IF sy-subrc = 0 . + RETURN. + ENDIF. + ELSE. + RETURN. + ENDIF. + ENDDO. + ENDIF. + + endmethod. + + + + + method CREATE_STYLE_HDR. + data: lo_style type ref to zcl_excel_style. + + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. + lo_style->font->color-rgb = zcl_excel_style_color=>c_white. + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FF4F81BD'. + if i_alignment is supplied and i_alignment is not initial. + lo_style->alignment->horizontal = i_alignment. + endif. + ro_style = lo_style . + endmethod. + + + + + + + method CREATE_STYLE_NORMAL. + DATA: lo_style TYPE REF TO zcl_excel_style, + l_format TYPE zexcel_number_format. + + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + ENDIF. + IF l_format IS NOT INITIAL OR + ( i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL ) . + + lo_style = wo_excel->add_new_style( ). + + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. + ENDIF. + + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. + ENDIF. + + ro_style = lo_style . + + ENDIF. + endmethod. + + + + + + + method CREATE_STYLE_STRIPPED. + data: lo_style type ref to zcl_excel_style. + data: l_format type zexcel_number_format. + + lo_style = wo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FFDBE5F1'. + if i_alignment is supplied and i_alignment is not initial. + lo_style->alignment->horizontal = i_alignment. + endif. + if i_inttype is supplied and i_inttype is not initial. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + if l_format is not initial. + lo_style->number_format->format_code = l_format. + endif. + endif. + ro_style = lo_style. + + endmethod. + + + + + + + method CREATE_STYLE_SUBTOTAL. + data: lo_style type ref to zcl_excel_style. + data: l_format type zexcel_number_format. + + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. + + if i_alignment is supplied and i_alignment is not initial. + lo_style->alignment->horizontal = i_alignment. + endif. + if i_inttype is supplied and i_inttype is not initial. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + if l_format is not initial. + lo_style->number_format->format_code = l_format. + endif. + endif. + + ro_style = lo_style . + + endmethod. + + + + + + + method CREATE_STYLE_TOTAL. + DATA: lo_style TYPE REF TO zcl_excel_style. + DATA: l_format TYPE zexcel_number_format. + + lo_style = wo_excel->add_new_style( ). + lo_style->font->bold = abap_true. + + CREATE OBJECT lo_style->borders->top. + lo_style->borders->top->border_style = zcl_excel_style_border=>c_border_thin. + lo_style->borders->top->border_color-rgb = zcl_excel_style_color=>c_black. + + CREATE OBJECT lo_style->borders->right. + lo_style->borders->right->border_style = zcl_excel_style_border=>c_border_none. + lo_style->borders->right->border_color-rgb = zcl_excel_style_color=>c_black. + + CREATE OBJECT lo_style->borders->down. + lo_style->borders->down->border_style = zcl_excel_style_border=>c_border_double. + lo_style->borders->down->border_color-rgb = zcl_excel_style_color=>c_black. + + CREATE OBJECT lo_style->borders->left. + lo_style->borders->left->border_style = zcl_excel_style_border=>c_border_none. + lo_style->borders->left->border_color-rgb = zcl_excel_style_color=>c_black. + + IF i_alignment IS SUPPLIED AND i_alignment IS NOT INITIAL. + lo_style->alignment->horizontal = i_alignment. + ENDIF. + IF i_inttype IS SUPPLIED AND i_inttype IS NOT INITIAL. + l_format = set_cell_format( i_inttype = i_inttype + i_decimals = i_decimals ) . + IF l_format IS NOT INITIAL. + lo_style->number_format->format_code = l_format. + ENDIF. + ENDIF. + + ro_style = lo_style . + + endmethod. + + + method CREATE_TABLE. + TYPES: BEGIN OF ts_output, + fieldname TYPE fieldname, + function TYPE funcname, + END OF ts_output. + + DATA: lo_data TYPE REF TO data. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + lt_components_tab TYPE cl_abap_structdescr=>component_table, + ls_components TYPE abap_componentdescr, + lo_table TYPE REF TO cl_abap_tabledescr, + lo_struc TYPE REF TO cl_abap_structdescr, + lt_fieldcatalog TYPE zexcel_t_converter_fcat. + + FIELD-SYMBOLS: <fs_scat> TYPE zexcel_s_converter_fcat, + <fs_stab> TYPE ANY, + <fs_ttab> TYPE STANDARD TABLE, + <fs> TYPE ANY, + <fs_table> TYPE STANDARD TABLE. + + SORT wt_fieldcatalog BY position. + ASSIGN wo_table->* TO <fs_table>. + + READ TABLE <fs_table> ASSIGNING <fs_stab> INDEX 1. + IF sy-subrc EQ 0 . + LOOP AT wt_fieldcatalog ASSIGNING <fs_scat>. + ASSIGN COMPONENT <fs_scat>-columnname OF STRUCTURE <fs_stab> TO <fs>. + IF sy-subrc = 0. + ls_components-name = <fs_scat>-columnname. + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_data( <fs> ). + CATCH cx_sy_move_cast_error. + CLEAR lo_addit. + DELETE TABLE wt_fieldcatalog FROM <fs_scat>. + ENDTRY. + IF lo_addit IS BOUND. + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ENDIF. + ENDIF. + ENDLOOP. + IF lt_components_tab IS NOT INITIAL. + "create new line type + TRY. + lo_struc = cl_abap_structdescr=>create( P_COMPONENTS = lt_components_tab + P_STRICT = abap_false ). + CATCH cx_sy_struct_creation. + RETURN. " We can not do anything in this case. + ENDTRY. + + lo_table = cl_abap_tabledescr=>create( lo_struc ). + + CREATE DATA wo_data TYPE HANDLE lo_table. + CREATE DATA lo_data TYPE HANDLE lo_struc. + + ASSIGN wo_data->* TO <fs_ttab>. + ASSIGN lo_data->* TO <fs_stab>. + LOOP AT <fs_table> ASSIGNING <fs>. + CLEAR <fs_stab>. + MOVE-CORRESPONDING <fs> TO <fs_stab>. + APPEND <fs_stab> TO <fs_ttab>. + ENDLOOP. + ENDIF. + ENDIF. + + endmethod. + + + + + + METHOD create_text_subtotal. + DATA: l_string(256) TYPE c, + l_func TYPE string. + + CASE i_totals_function. + WHEN zcl_excel_table=>totals_function_sum. " Total + l_func = 'Total'(003). + WHEN zcl_excel_table=>totals_function_min. " Minimum + l_func = 'Minimum'(004). + WHEN zcl_excel_table=>totals_function_max. " Maximum + l_func = 'Maximum'(005). + WHEN zcl_excel_table=>totals_function_average. " Mean Value + l_func = 'Average'(006). + WHEN zcl_excel_table=>totals_function_count. " Count + l_func = 'Count'(007). + WHEN OTHERS. + CLEAR l_func. + ENDCASE. + + MOVE i_value TO l_string. + + CONCATENATE l_string l_func INTO r_text SEPARATED BY space. + +ENDMETHOD. + + + + + + method CREATE_WORKSHEET. + DATA: l_freeze_col TYPE i. + DATA: l_guid TYPE oltpguid16. + + IF wo_data IS BOUND AND wo_worksheet IS BOUND. + + wo_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_on. " By default is on + + IF wt_fieldcatalog IS INITIAL. + set_fieldcatalog( ) . + ELSE. + clean_fieldcatalog( ) . + ENDIF. + + IF i_table = abap_true. + l_freeze_col = bind_table( i_style_table = i_style_table ) . + ELSE. +* Let's check for filter. + IF wt_filter IS NOT INITIAL. + wo_autofilter = wo_excel->add_new_autofilter( io_sheet = wo_worksheet ). + l_freeze_col = bind_cells( ) . + set_autofilter_area( ) . + ELSE. + l_freeze_col = bind_cells( ) . + ENDIF. + + ENDIF. + +* Check for freeze panes + IF ws_layout-is_fixed = abap_true. + IF l_freeze_col = 0. + l_freeze_col = w_col_int. + ENDIF. + wo_worksheet->freeze_panes( EXPORTING ip_num_columns = l_freeze_col + ip_num_rows = w_row_int ) . + ENDIF. + ENDIF. + + endmethod. + + + + + + method EXECUTE_CONVERTER. + DATA: lt_fieldcatalog TYPE zexcel_t_fieldcatalog, + ls_fieldcatalog TYPE zexcel_s_converter_fcat, + lo_if TYPE REF TO zif_excel_converter, + ls_types TYPE ts_alv_types, + lo_addit TYPE REF TO cl_abap_classdescr. + + IF io_object IS BOUND. + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_object_ref( io_object ). + CATCH cx_sy_move_cast_error. + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + ls_types-seoclass = lo_addit->get_relative_name( ). + READ TABLE wt_objects INTO ls_types WITH TABLE KEY seoclass = ls_types-seoclass. + IF sy-subrc = 0. + CREATE OBJECT lo_if TYPE (ls_types-clsname). + + TRY. + lo_if->create_fieldcatalog( + EXPORTING + is_option = ws_option + io_object = io_object + it_table = it_table + IMPORTING + es_layout = ws_layout + et_fieldcatalog = wt_fieldcatalog + eo_table = wo_table + et_colors = wt_colors + et_filter = wt_filter + ). + ENDTRY. +* data lines of highest level. + IF ws_layout-max_subtotal_level > 0. + ADD 1 TO ws_layout-max_subtotal_level. + ENDIF. + ELSE. + RAISE EXCEPTION TYPE zcx_excel. + ENDIF. + ELSE. + REFRESH wt_fieldcatalog. + GET REFERENCE OF it_table INTO wo_table. + ENDIF. + + endmethod. + + + + + + + method GET_COLOR_STYLE. + DATA: ls_colors TYPE zexcel_s_converter_col, + ls_color_styles TYPE ts_color_styles, + lo_style TYPE REF TO zcl_excel_style. + + r_style = i_style. " Default we change nothing + + IF wt_colors IS NOT INITIAL. +* Full line has color + READ TABLE wt_colors INTO ls_colors WITH KEY rownumber = i_row + columnname = space. + IF sy-subrc = 0. + READ TABLE wt_color_styles INTO ls_color_styles WITH KEY guid_old = i_style + fontcolor = ls_colors-fontcolor + fillcolor = ls_colors-fillcolor. + IF sy-subrc = 0. + r_style = ls_color_styles-style_new->get_guid( ). + ELSE. + lo_style = create_color_style( i_style = i_style + is_colors = ls_colors ) . + r_style = lo_style->get_guid( ) . + ls_color_styles-guid_old = i_style. + ls_color_styles-fontcolor = ls_colors-fontcolor. + ls_color_styles-fillcolor = ls_colors-fillcolor. + ls_color_styles-style_new = lo_style. + INSERT ls_color_styles INTO TABLE wt_color_styles. + ENDIF. + ELSE. +* Only field has color + READ TABLE wt_colors INTO ls_colors WITH KEY rownumber = i_row + columnname = i_fieldname. + IF sy-subrc = 0. + READ TABLE wt_color_styles INTO ls_color_styles WITH KEY guid_old = i_style + fontcolor = ls_colors-fontcolor + fillcolor = ls_colors-fillcolor. + IF sy-subrc = 0. + r_style = ls_color_styles-style_new->get_guid( ). + ELSE. + lo_style = create_color_style( i_style = i_style + is_colors = ls_colors ) . + ls_color_styles-guid_old = i_style. + ls_color_styles-fontcolor = ls_colors-fontcolor. + ls_color_styles-fillcolor = ls_colors-fillcolor. + ls_color_styles-style_new = lo_style. + INSERT ls_color_styles INTO TABLE wt_color_styles. + r_style = ls_color_styles-style_new->get_guid( ). + ENDIF. + ELSE. + r_style = i_style. + ENDIF. + ENDIF. + ELSE. + r_style = i_style. + ENDIF. + + endmethod. + + + + + + method GET_FILE. + data: lo_excel_writer type ref to zif_excel_writer, + lo_excel type ref to zcl_excel. + + data: ls_seoclass type seoclass. + + + if wo_excel is bound. + create object lo_excel_writer type zcl_excel_writer_2007. + e_file = lo_excel_writer->write_file( wo_excel ). + + select single * into ls_seoclass + from seoclass + where clsname = 'CL_BCS_CONVERT'. + + if sy-subrc = 0. + call method (ls_seoclass-clsname)=>xstring_to_solix + exporting + iv_xstring = e_file + receiving + et_solix = et_file. + e_bytecount = xstrlen( e_file ). + else. + " Convert to binary + call function 'SCMS_XSTRING_TO_BINARY' + exporting + buffer = e_file + importing + output_length = e_bytecount + tables + binary_tab = et_file. + endif. + endif. + + endmethod. + + + + + method GET_FUNCTION_NUMBER. +*Number Function +*1 AVERAGE +*2 COUNT +*3 COUNTA +*4 MAX +*5 MIN +*6 PRODUCT +*7 STDEV +*8 STDEVP +*9 SUM +*10 VAR +*11 VARP + + case i_totals_function. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_SUM. " Total + r_function_number = 9. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_MIN. " Minimum + r_function_number = 5. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_MAX. " Maximum + r_function_number = 4. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_AVERAGE. " Mean Value + r_function_number = 1. + when ZCL_EXCEL_TABLE=>TOTALS_FUNCTION_count. " Count + r_function_number = 2. + when others. + clear r_function_number. + endcase. + endmethod. + + + + method GET_OPTION. + + rs_option = ws_option. + + endmethod. + + + + + + + + method GET_STYLE. + DATA: ls_styles TYPE ts_styles, + lo_style TYPE REF TO zcl_excel_style. + + CLEAR r_style. + + READ TABLE wt_styles INTO ls_styles WITH TABLE KEY type = i_type + alignment = i_alignment + inttype = i_inttype + decimals = i_decimals. + IF sy-subrc = 0. + r_style = ls_styles-guid. + ELSE. + CASE i_type. + WHEN c_type_hdr. " Header + lo_style = create_style_hdr( i_alignment = i_alignment ). + WHEN c_type_str. "Stripped + lo_style = create_style_stripped( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_nor. "Normal + lo_style = create_style_normal( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_sub. "Subtotals + lo_style = create_style_subtotal( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + WHEN c_type_tot. "Totals + lo_style = create_style_total( i_alignment = i_alignment + i_inttype = i_inttype + i_decimals = i_decimals ). + ENDCASE. + IF lo_style IS NOT INITIAL. + r_style = lo_style->get_guid( ). + ls_styles-type = i_type. + ls_styles-alignment = i_alignment. + ls_styles-inttype = i_inttype. + ls_styles-decimals = i_decimals. + ls_styles-guid = r_style. + ls_styles-style = lo_style. + INSERT ls_styles INTO TABLE wt_styles. + ENDIF. + ENDIF. + endmethod. + + + method INIT_OPTION. + + ws_option-filter = abap_true. + ws_option-hidenc = abap_true. + ws_option-subtot = abap_true. + + endmethod. + + + + + + + method LOOP_NORMAL. + DATA: lo_data TYPE REF TO data, + l_row_header TYPE zexcel_cell_row VALUE 2, + l_col_header TYPE zexcel_cell_column_alpha VALUE 'B', + l_row_int_start TYPE zexcel_cell_row, + l_row_int_end TYPE zexcel_cell_row, + l_row_int TYPE zexcel_cell_row, + l_col_int TYPE zexcel_cell_column, + l_col_alpha TYPE zexcel_cell_column_alpha, + l_col_alpha_start TYPE zexcel_cell_column_alpha, + l_cell_value TYPE zexcel_cell_value, + l_s_color TYPE abap_bool, + lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi, + l_formula TYPE zexcel_cell_formula, + l_style TYPE zexcel_cell_style, + l_cells TYPE i, + l_count TYPE i, + l_table_row TYPE i. + + FIELD-SYMBOLS: <fs_stab> TYPE ANY, + <fs_tab> TYPE STANDARD TABLE, + <fs_sfcat> TYPE zexcel_s_converter_fcat, + <fs_fldval> TYPE ANY, + <fs_cell_value> TYPE zexcel_cell_value. + + ASSIGN wo_data->* TO <fs_tab> . + + DESCRIBE TABLE wt_fieldcatalog LINES l_cells. + DESCRIBE TABLE <fs_tab> LINES l_count. + l_cells = l_cells * l_count. + +* It is better to loop column by column + LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat>. + l_row_int = i_row_int. + l_col_int = i_col_int + <fs_sfcat>-position - 1. + +* Freeze panes + IF <fs_sfcat>-fix_column = abap_true. + ADD 1 TO r_freeze_col. + ENDIF. + l_s_color = abap_true. + + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + +* Only if the Header is required create it. + IF ws_option-hidehd IS INITIAL. + " First of all write column header + l_cell_value = <fs_sfcat>-scrtext_m. + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_style = <fs_sfcat>-style_hdr ). + ADD 1 TO l_row_int. + ENDIF. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_table_row = sy-tabix. +* Now the cell values + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. +* Now let's write the cell values + IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_stripped ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + CLEAR l_s_color. + ELSE. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_normal ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + l_s_color = abap_true. + ENDIF. + READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row + columnname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + wo_worksheet->get_cell( EXPORTING + ip_column = l_col_alpha + ip_row = l_row_int + IMPORTING + ep_value = l_cell_value ). + wo_autofilter->set_value( i_column = l_col_int + i_value = l_cell_value ). + ENDIF. + ADD 1 TO l_row_int. + ENDLOOP. +* Now let's check for optimized + IF <fs_sfcat>-is_optimized = abap_true . + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_auto_size( ip_auto_size = abap_true ) . + ENDIF. +* Now let's check for visible + IF <fs_sfcat>-is_hidden = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_visible( ip_visible = abap_false ) . + ENDIF. +* Now let's check for total versus subtotal. + IF <fs_sfcat>-totals_function IS NOT INITIAL. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_total( i_row_int = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_total ). + ENDIF. + ENDLOOP. + endmethod. + + + + + + + method LOOP_SUBTOTAL. + + DATA: lo_data TYPE REF TO data, + l_row_header TYPE zexcel_cell_row VALUE 2, + l_col_header TYPE zexcel_cell_column_alpha VALUE 'B', + l_row_int_start TYPE zexcel_cell_row, + l_row_int_end TYPE zexcel_cell_row, + l_row_int TYPE zexcel_cell_row, + l_col_int TYPE zexcel_cell_column, + l_col_alpha TYPE zexcel_cell_column_alpha, + l_col_alpha_start TYPE zexcel_cell_column_alpha, + l_cell_value TYPE zexcel_cell_value, + l_s_color TYPE abap_bool, + lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi, + l_formula TYPE zexcel_cell_formula, + l_style TYPE zexcel_cell_style, + l_subtotalled TYPE flag, + l_text TYPE string, + ls_sort_values TYPE ts_sort_values, + ls_subtotal_rows TYPE ts_subtotal_rows, + l_sort_level TYPE int4, + l_hidden TYPE int4, + l_line TYPE i, + l_guid TYPE guid_22, + l_tabix TYPE sy-tabix, + l_cells TYPE i, + l_count TYPE i, + l_table_row TYPE i, + lt_fcat TYPE zexcel_t_converter_fcat. + + FIELD-SYMBOLS: <fs_stab> TYPE ANY, + <fs_tab> TYPE STANDARD TABLE, + <fs_sfcat> TYPE zexcel_s_converter_fcat, + <fs_fldval> TYPE ANY, + <fs_sortval> TYPE ANY, + <fs_sortv> TYPE ts_sort_values, + <fs_cell_value> TYPE zexcel_cell_value. + + ASSIGN wo_data->* TO <fs_tab> . + + REFRESH: wt_sort_values, + wt_subtotal_rows. + + DESCRIBE TABLE wt_fieldcatalog LINES l_cells. + DESCRIBE TABLE <fs_tab> LINES l_count. + l_cells = l_cells * l_count. + + READ TABLE <fs_tab> ASSIGNING <fs_stab> INDEX 1. + IF sy-subrc = 0. + l_row_int = i_row_int + 1. + lt_fcat = wt_fieldcatalog. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true. + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. + ls_sort_values-fieldname = <fs_sfcat>-columnname. + ls_sort_values-row_int = l_row_int. + ls_sort_values-sort_level = <fs_sfcat>-sort_level. + ls_sort_values-is_collapsed = <fs_sfcat>-is_collapsed. + CREATE DATA ls_sort_values-value LIKE <fs_fldval>. + ASSIGN ls_sort_values-value->* TO <fs_sortval>. + <fs_sortval> = <fs_fldval>. + INSERT ls_sort_values INTO TABLE wt_sort_values. + ENDLOOP. + ENDIF. + l_row_int = i_row_int. +* Let's check if we need to hide a sort level. + DESCRIBE TABLE wt_sort_values LINES l_line. + IF l_line <= 1. + CLEAR l_hidden. + ELSE. + LOOP AT wt_sort_values INTO ls_sort_values WHERE is_collapsed = abap_false. + IF l_hidden < ls_sort_values-sort_level. + l_hidden = ls_sort_values-sort_level. + ENDIF. + ENDLOOP. + ENDIF. + ADD 1 TO l_hidden. " As this is the first level we show. +* First loop without formular only addtional rows with subtotal text. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + ADD 1 TO l_row_int. " 1 is for header row. + l_row_int_start = l_row_int. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true. + l_col_int = i_col_int + <fs_sfcat>-position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). +* Now the cell values + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. + IF sy-subrc = 0. + READ TABLE wt_sort_values ASSIGNING <fs_sortv> WITH TABLE KEY fieldname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + ASSIGN <fs_sortv>-value->* TO <fs_sortval>. + IF <fs_sortval> <> <fs_fldval> OR <fs_sortv>-new = abap_true. +* First let's remmember the subtotal values as it has to appear later. + ls_subtotal_rows-row_int = l_row_int. + ls_subtotal_rows-row_int_start = <fs_sortv>-row_int. + ls_subtotal_rows-columnname = <fs_sfcat>-columnname. + INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. +* Now let's write the subtotal line + l_cell_value = create_text_subtotal( i_value = <fs_sortval> + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = <fs_sfcat>-sort_level ) . + IF <fs_sfcat>-is_collapsed = abap_true. + IF <fs_sfcat>-sort_level > l_hidden. + lo_row_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . + ENDIF. +* Now let's change the key + ADD 1 TO l_row_int. + <fs_sortval> = <fs_fldval>. + <fs_sortv>-new = abap_false. + l_line = <fs_sortv>-sort_level. + LOOP AT wt_sort_values ASSIGNING <fs_sortv> WHERE sort_level >= l_line. + <fs_sortv>-row_int = l_row_int. + ENDLOOP. + ENDIF. + ENDIF. + ENDIF. + ENDLOOP. + ENDLOOP. + ADD 1 TO l_row_int. + l_row_int_start = l_row_int. + SORT lt_fcat BY sort_level DESCENDING. + LOOP AT lt_fcat ASSIGNING <fs_sfcat> WHERE is_subtotalled = abap_true. + l_col_int = i_col_int + <fs_sfcat>-position - 1. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + READ TABLE wt_sort_values ASSIGNING <fs_sortv> WITH TABLE KEY fieldname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + ASSIGN <fs_sortv>-value->* TO <fs_sortval>. + ls_subtotal_rows-row_int = l_row_int. + ls_subtotal_rows-row_int_start = <fs_sortv>-row_int. + ls_subtotal_rows-columnname = <fs_sfcat>-columnname. + INSERT ls_subtotal_rows INTO TABLE wt_subtotal_rows. +* First let's write the value as it has to appear. + l_cell_value = create_text_subtotal( i_value = <fs_sortval> + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + + l_sort_level = <fs_sfcat>-sort_level. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = l_sort_level ) . + IF <fs_sfcat>-is_collapsed = abap_true. + IF <fs_sfcat>-sort_level > l_hidden. + lo_row_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . + ENDIF. + ADD 1 TO l_row_int. + ENDIF. + ENDLOOP. +* Let's write the Grand total + l_sort_level = 0. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = l_sort_level ) . +* lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . Not on grand total + + l_text = create_text_subtotal( i_value = 'Grand'(002) + i_totals_function = <fs_sfcat>-totals_function ). + + l_col_alpha_start = zcl_excel_common=>convert_column2alpha( i_col_int ). + wo_worksheet->set_cell( ip_column = l_col_alpha_start + ip_row = l_row_int + ip_value = l_text + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_subtotal ). + +* It is better to loop column by column second time around +* Second loop with formular and data. + LOOP AT wt_fieldcatalog ASSIGNING <fs_sfcat>. + l_row_int = i_row_int. + l_col_int = i_col_int + <fs_sfcat>-position - 1. +* Freeze panes + IF <fs_sfcat>-fix_column = abap_true. + ADD 1 TO r_freeze_col. + ENDIF. + l_s_color = abap_true. + l_col_alpha = zcl_excel_common=>convert_column2alpha( l_col_int ). + " First of all write column header + l_cell_value = <fs_sfcat>-scrtext_m. + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = l_cell_value + ip_abap_type = cl_abap_typedescr=>typekind_string + ip_style = <fs_sfcat>-style_hdr ). + ADD 1 TO l_row_int. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_table_row = sy-tabix. +* Now the cell values + ASSIGN COMPONENT <fs_sfcat>-columnname OF STRUCTURE <fs_stab> TO <fs_fldval>. +* Let's check for subtotal lines + DO. + READ TABLE wt_subtotal_rows TRANSPORTING NO FIELDS WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + IF <fs_sfcat>-is_subtotalled = abap_false AND + <fs_sfcat>-totals_function IS NOT INITIAL. + DO. + READ TABLE wt_subtotal_rows INTO ls_subtotal_rows WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + l_row_int_start = ls_subtotal_rows-row_int_start. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_subtotal ). + IF <fs_sfcat>-is_collapsed = abap_true. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ). + IF <fs_sfcat>-sort_level > l_hidden. + lo_row_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + ENDIF. + ADD 1 TO l_row_int. + ELSE. + EXIT. + ENDIF. + ENDDO. + ELSE. + ADD 1 TO l_row_int. + ENDIF. + ELSE. + EXIT. + ENDIF. + ENDDO. +* Let's set the row dimension values + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_outline_level( ip_outline_level = ws_layout-max_subtotal_level ) . + IF <fs_sfcat>-is_collapsed = abap_true. + lo_row_dim->set_visible( ip_visible = abap_false ) . + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ) . + ENDIF. +* Now let's write the cell values + IF ws_layout-is_stripped = abap_true AND l_s_color = abap_true. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_stripped ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + CLEAR l_s_color. + ELSE. + l_style = get_color_style( i_row = l_table_row + i_fieldname = <fs_sfcat>-columnname + i_style = <fs_sfcat>-style_normal ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_value = <fs_fldval> + ip_style = l_style ). + l_s_color = abap_true. + ENDIF. + READ TABLE wt_filter TRANSPORTING NO FIELDS WITH TABLE KEY rownumber = l_table_row + columnname = <fs_sfcat>-columnname. + IF sy-subrc = 0. + wo_worksheet->get_cell( EXPORTING + ip_column = l_col_alpha + ip_row = l_row_int + IMPORTING + ep_value = l_cell_value ). + wo_autofilter->set_value( i_column = l_col_int + i_value = l_cell_value ). + ENDIF. + ADD 1 TO l_row_int. + ENDLOOP. +* Let's check for subtotal lines + DO. + READ TABLE wt_subtotal_rows TRANSPORTING NO FIELDS WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + IF <fs_sfcat>-is_subtotalled = abap_false AND + <fs_sfcat>-totals_function IS NOT INITIAL. + DO. + READ TABLE wt_subtotal_rows INTO ls_subtotal_rows WITH TABLE KEY row_int = l_row_int. + IF sy-subrc = 0. + l_row_int_start = ls_subtotal_rows-row_int_start. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_subtotal ). + IF <fs_sfcat>-is_collapsed = abap_true. + lo_row_dim = wo_worksheet->get_row_dimension( ip_row = l_row_int ). + lo_row_dim->set_collapsed( ip_collapsed = <fs_sfcat>-is_collapsed ). + ENDIF. + ADD 1 TO l_row_int. + ELSE. + EXIT. + ENDIF. + ENDDO. + ELSE. + ADD 1 TO l_row_int. + ENDIF. + ELSE. + EXIT. + ENDIF. + ENDDO. +* Now let's check for Grand total + IF <fs_sfcat>-is_subtotalled = abap_false AND + <fs_sfcat>-totals_function IS NOT INITIAL. + l_row_int_start = i_row_int + 1. + l_row_int_end = l_row_int - 1. + + l_formula = create_formular_subtotal( i_row_int_start = l_row_int_start + i_row_int_end = l_row_int_end + i_column = l_col_alpha + i_totals_function = <fs_sfcat>-totals_function ). + wo_worksheet->set_cell( ip_column = l_col_alpha + ip_row = l_row_int + ip_formula = l_formula + ip_style = <fs_sfcat>-style_subtotal ). + ENDIF. +* Now let's check for optimized + IF <fs_sfcat>-is_optimized = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_auto_size( ip_auto_size = abap_true ) . + ENDIF. +* Now let's check for visible + IF <fs_sfcat>-is_hidden = abap_true. + lo_col_dim = wo_worksheet->get_column_dimension( ip_column = l_col_alpha ). + lo_col_dim->set_visible( ip_visible = abap_false ) . + ENDIF. + ENDLOOP. + + endmethod. + + + method OPEN_FILE. + data: l_bytecount type i, + lt_file type solix_tab, + l_dir type string, + l_sep type c. + + field-symbols: <fs_data> type any table. + + assign wo_data->* to <fs_data>. + +* catch zcx_excel . +*endtry. + if wo_excel is bound. + get_file( importing e_bytecount = l_bytecount + et_file = lt_file ) . + + l_dir = create_path( ) . + + cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount + filename = l_dir + filetype = 'BIN' + changing data_tab = lt_file ). + cl_gui_frontend_services=>execute( + exporting + document = l_dir +* application = +* parameter = +* default_directory = +* maximized = +* minimized = +* synchronous = +* operation = 'OPEN' + exceptions + cntl_error = 1 + error_no_gui = 2 + bad_parameter = 3 + file_not_found = 4 + path_not_found = 5 + file_extension_unknown = 6 + error_execute_failed = 7 + synchronous_failed = 8 + not_supported_by_gui = 9 + ). + if sy-subrc <> 0. + message id sy-msgid type sy-msgty number sy-msgno + with sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + endif. + + endif. + + + endmethod. + + + method SET_AUTOFILTER_AREA. + DATA: ls_area TYPE zexcel_s_autofilter_area, + l_lines TYPE i, + lt_values TYPE zexcel_t_autofilter_values, + ls_values TYPE zexcel_s_autofilter_values. + +* Let's check for filter. + IF wo_autofilter IS BOUND. + ls_area-row_start = 1. + lt_values = wo_autofilter->get_values( ) . + SORT lt_values BY column ASCENDING. + DESCRIBE TABLE lt_values LINES l_lines. + READ TABLE lt_values INTO ls_values INDEX 1. + IF sy-subrc = 0. + ls_area-col_start = ls_values-column. + ENDIF. + READ TABLE lt_values INTO ls_values INDEX l_lines. + IF sy-subrc = 0. + ls_area-col_end = ls_values-column. + ENDIF. + wo_autofilter->set_filter_area( is_area = ls_area ) . + ENDIF. + + endmethod. + + + + + + method SET_CELL_FORMAT. + DATA: l_format TYPE zexcel_number_format. + + CLEAR r_format. + CASE i_inttype. + WHEN cl_abap_typedescr=>typekind_date. + r_format = wo_worksheet->get_default_excel_date_format( ). + WHEN cl_abap_typedescr=>typekind_time. + r_format = wo_worksheet->get_default_excel_time_format( ). + WHEN cl_abap_typedescr=>typekind_float OR cl_abap_typedescr=>typekind_packed. + IF i_decimals > 0 . + l_format = '#,##0.'. + DO i_decimals TIMES. + CONCATENATE l_format '0' INTO l_format. + ENDDO. + r_format = l_format. + ENDIF. + WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2. + r_format = '#,##0'. + ENDCASE. + + endmethod. + + + method SET_FIELDCATALOG. + + DATA: lr_data TYPE REF TO data, + lo_structdescr TYPE REF TO cl_abap_structdescr, + lt_dfies TYPE ddfields, + ls_dfies TYPE dfies, + ls_fieldcatalog TYPE zexcel_s_fieldcatalog. + DATA: ls_fcat TYPE zexcel_s_converter_fcat. + + FIELD-SYMBOLS: <fs_tab> TYPE ANY TABLE. + + ASSIGN wo_data->* TO <fs_tab> . + + CREATE DATA lr_data LIKE LINE OF <fs_tab>. + + lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + + lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + + LOOP AT lt_dfies INTO ls_dfies. + MOVE-CORRESPONDING ls_dfies TO ls_fcat. + ls_fcat-columnname = ls_dfies-fieldname. + INSERT ls_fcat INTO TABLE wt_fieldcatalog. + ENDLOOP. + + clean_fieldcatalog( ). + + endmethod. + + + + method SET_OPTION. + + IF ws_indx-begdt IS INITIAL. + ws_indx-begdt = sy-datum. + ENDIF. + + ws_indx-aedat = sy-datum. + ws_indx-usera = sy-uname. + ws_indx-pgmid = sy-cprog. + + EXPORT p1 = is_option TO DATABASE indx(xl) FROM ws_indx ID ws_indx-srtfd. + + IF sy-subrc = 0. + ws_option = is_option. + ENDIF. + + endmethod. + + + + method WRITE_FILE. + data: l_bytecount type i, + lt_file type solix_tab, + l_dir type string. + + field-symbols: <fs_data> type any table. + + assign wo_data->* to <fs_data>. + +* catch zcx_excel . +*endtry. + if wo_excel is bound. + get_file( importing e_bytecount = l_bytecount + et_file = lt_file ) . + if i_path is initial. + l_dir = create_path( ) . + else. + l_dir = i_path. + endif. + cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount + filename = l_dir + filetype = 'BIN' + changing data_tab = lt_file ). + endif. + endmethod. + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature +TYPES: BEGIN OF ts_col_converter, + col TYPE lvc_col, + int TYPE lvc_int, + inv TYPE lvc_inv, + fontcolor TYPE zexcel_style_color_argb, + fillcolor TYPE zexcel_style_color_argb, + END OF ts_col_converter, + + tt_col_converter TYPE HASHED TABLE OF ts_col_converter WITH UNIQUE KEY col int inv. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + ABAP + KKBLO + + + + + + + + + + method APPLY_SORT. + DATA: lt_otab TYPE abap_sortorder_tab, + ls_otab TYPE abap_sortorder. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE, + <fs_sort> TYPE lvc_s_sort. + + CREATE DATA eo_table LIKE it_table. + ASSIGN eo_table->* TO <fs_table>. + + <fs_table> = it_table. + + SORT wt_sort BY spos. + LOOP AT wt_sort ASSIGNING <fs_sort>. + IF <fs_sort>-up = abap_true. + ls_otab-name = <fs_sort>-fieldname. + ls_otab-descending = abap_false. +* ls_otab-astext = abap_true. " not only text fields + INSERT ls_otab INTO TABLE lt_otab. + ENDIF. + IF <fs_sort>-down = abap_true. + ls_otab-name = <fs_sort>-fieldname. + ls_otab-descending = abap_true. +* ls_otab-astext = abap_true. " not only text fields + INSERT ls_otab INTO TABLE lt_otab. + ENDIF. + ENDLOOP. + IF lt_otab IS NOT INITIAL. + SORT <fs_table> BY (lt_otab). + ENDIF. + + endmethod. + + + method CLASS_CONSTRUCTOR. +* let's fill the color conversion routines. + DATA: ls_color TYPE ts_col_converter. +* 0 all combination the same + ls_color-col = 0. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 0. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* Blue + ls_color-col = 1. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFB0E4FC'. " 176 228 252 blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFB0E4FC'. " 176 228 252 blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF5FCBFE'. " 095 203 254 Int blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 1. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF5FCBFE'. " 095 203 254 + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 + INSERT ls_color INTO TABLE wt_colors. + +* Gray + ls_color-col = 2. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. + ls_color-fillcolor = 'FFE5EAF0'. " 229 234 240 gray + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFE5EAF0'. " 229 234 240 gray + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFD8E8F4'. " 216 234 244 int gray + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 2. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFD8E8F4'. " 216 234 244 int gray + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +*Yellow + ls_color-col = 3. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFEFEB8'. " 254 254 184 yellow + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFEFEB8'. " 254 254 184 yellow + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFF9ED5D'. " 249 237 093 int yellow + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 3. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFF9ED5D'. " 249 237 093 int yellow + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* light blue + ls_color-col = 4. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFCEE7FB'. " 206 231 251 light blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFCEE7FB'. " 206 231 251 light blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF9ACCEF'. " 154 204 239 int light blue + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 4. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF9ACCEF'. " 154 204 239 int light blue + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* Green + ls_color-col = 5. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFCEF8AE'. " 206 248 174 Green + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFCEF8AE'. " 206 248 174 Green + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FF7AC769'. " 122 199 105 int Green + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 5. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FF7AC769'. " 122 199 105 int Green + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + +* Red + ls_color-col = 6. + ls_color-int = 0. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFDBBBC'. " 253 187 188 Red + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 0. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFDBBBC'. " 253 187 188 Red + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 1. + ls_color-inv = 0. + ls_color-fontcolor = 'FF000000'. " 000 000 000 Black + ls_color-fillcolor = 'FFFB6B6B'. " 251 107 107 int Red + INSERT ls_color INTO TABLE wt_colors. + + ls_color-col = 6. + ls_color-int = 1. + ls_color-inv = 1. + ls_color-fontcolor = 'FFFB6B6B'. " 251 107 107 int Red + ls_color-fillcolor = 'FFFFFFFF'. " 255 255 255 White + INSERT ls_color INTO TABLE wt_colors. + + endmethod. + + + + + method GET_COLOR. + DATA: ls_con_col TYPE zexcel_s_converter_col, + ls_color TYPE ts_col_converter, + l_line TYPE i, + l_color(4) TYPE c. + FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE, + <fs_stab> TYPE ANY, + <fs> TYPE ANY, + <fs_tcol> TYPE lvc_t_scol, + <fs_scol> TYPE lvc_s_scol. + +* Loop trough the table to set the color properties of each line. The color properties field is +* Char 4 and the characters is set as follows: +* Char 1 = C = This is a color property +* Char 2 = 6 = Color code (1 - 7) +* Char 3 = Intensified on/of = 1 = on +* Char 4 = Inverse display = 0 = of + + ASSIGN io_table->* TO <fs_tab>. + + IF ws_layo-info_fname IS NOT INITIAL OR + ws_layo-ctab_fname IS NOT INITIAL. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_line = sy-tabix. + IF ws_layo-info_fname IS NOT INITIAL. + ASSIGN COMPONENT ws_layo-info_fname OF STRUCTURE <fs_stab> TO <fs>. + IF sy-subrc = 0. + IF <fs> IS NOT INITIAL. + l_color = <fs>. + IF l_color(1) = 'C'. + READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = l_color+1(1) + int = l_color+2(1) + inv = l_color+3(1). + IF sy-subrc = 0. + ls_con_col-rownumber = l_line. + ls_con_col-columnname = space. + ls_con_col-fontcolor = ls_color-fontcolor. + ls_con_col-fillcolor = ls_color-fillcolor. + INSERT ls_con_col INTO TABLE et_colors. + ENDIF. + ENDIF. + ENDIF. + ENDIF. + ENDIF. + IF ws_layo-ctab_fname IS NOT INITIAL. + ASSIGN COMPONENT ws_layo-ctab_fname OF STRUCTURE <fs_stab> TO <fs_tcol>. + IF sy-subrc = 0. + LOOP AT <fs_tcol> ASSIGNING <fs_scol>. + READ TABLE wt_colors INTO ls_color WITH TABLE KEY col = <fs_scol>-color-col + int = <fs_scol>-color-int + inv = <fs_scol>-color-inv. + IF sy-subrc = 0. + ls_con_col-rownumber = l_line. + ls_con_col-columnname = <fs_scol>-fname. + ls_con_col-fontcolor = ls_color-fontcolor. + ls_con_col-fillcolor = ls_color-fillcolor. + ls_con_col-nokeycol = <fs_scol>-nokeycol. + INSERT ls_con_col INTO TABLE et_colors. + ENDIF. + ENDLOOP. + ENDIF. + ENDIF. + ENDLOOP. + ENDIF. + endmethod. + + + + + METHOD get_filter. + DATA: ls_filt TYPE lvc_s_filt, + l_line TYPE i, + ls_filter TYPE zexcel_s_converter_fil. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + lt_components_tab TYPE cl_abap_structdescr=>component_table, + ls_components TYPE abap_componentdescr, + lo_table TYPE REF TO cl_abap_tabledescr, + lo_struc TYPE REF TO cl_abap_structdescr, + lo_trange TYPE REF TO data, + lo_srange TYPE REF TO data, + lo_ltabdata TYPE REF TO data. + + FIELD-SYMBOLS: <fs_tab> TYPE STANDARD TABLE, + <fs_ltab> TYPE STANDARD TABLE, + <fs_stab> TYPE any, + <fs> TYPE any, + <fs1> TYPE any, + <fs_srange> TYPE any, + <fs_trange> TYPE STANDARD TABLE. + + IF ws_option-filter = abap_false. + REFRESH et_filter. + RETURN. + ENDIF. + + ASSIGN xo_table->* TO <fs_tab>. + + CREATE DATA lo_ltabdata LIKE <fs_tab>. + ASSIGN lo_ltabdata->* TO <fs_ltab>. + + LOOP AT wt_filt INTO ls_filt. + LOOP AT <fs_tab> ASSIGNING <fs_stab>. + l_line = sy-tabix. + ASSIGN COMPONENT ls_filt-fieldname OF STRUCTURE <fs_stab> TO <fs>. + IF sy-subrc = 0. + IF l_line = 1. + REFRESH lt_components_tab. + ls_components-name = 'SIGN'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-sign ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'OPTION'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ls_filt-option ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'LOW'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( <fs> ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + ls_components-name = 'HIGH'. + lo_addit ?= cl_abap_typedescr=>describe_by_data( <fs> ). + ls_components-type = lo_addit . + INSERT ls_components INTO TABLE lt_components_tab. + "create new line type + TRY. + lo_struc = cl_abap_structdescr=>create( p_components = lt_components_tab + p_strict = abap_false ). + CATCH cx_sy_struct_creation. + CONTINUE. + ENDTRY. + lo_table = cl_abap_tabledescr=>create( lo_struc ). + + CREATE DATA lo_trange TYPE HANDLE lo_table. + CREATE DATA lo_srange TYPE HANDLE lo_struc. + + ASSIGN lo_trange->* TO <fs_trange>. + ASSIGN lo_srange->* TO <fs_srange>. + ENDIF. + REFRESH <fs_trange>. + ASSIGN COMPONENT 'SIGN' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-sign. + ASSIGN COMPONENT 'OPTION' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-option. + ASSIGN COMPONENT 'LOW' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-low. + ASSIGN COMPONENT 'HIGH' OF STRUCTURE <fs_srange> TO <fs1>. + <fs1> = ls_filt-high. + INSERT <fs_srange> INTO TABLE <fs_trange>. + IF <fs> IN <fs_trange>. + IF ws_option-filter = abap_true. + ls_filter-rownumber = l_line. + ls_filter-columnname = ls_filt-fieldname. + INSERT ls_filter INTO TABLE et_filter. + ELSE. + INSERT <fs_stab> INTO TABLE <fs_ltab>. + ENDIF. + ENDIF. + ENDIF. + ENDLOOP. + IF ws_option-filter = abap_undefined. + <fs_tab> = <fs_ltab>. + REFRESH <fs_ltab>. + ENDIF. + ENDLOOP. + +ENDMETHOD. + + + + + method UPDATE_CATALOG. + DATA: ls_fieldcatalog TYPE zexcel_s_converter_fcat, + ls_ref TYPE salv_s_ddic_reference, + ls_fcat TYPE lvc_s_fcat, + ls_sort TYPE lvc_s_sort, + l_decimals TYPE lvc_decmls. + + FIELD-SYMBOLS: <fs_scat> TYPE zexcel_s_converter_fcat. + + IF ws_layo-zebra IS NOT INITIAL. + cs_layout-is_stripped = abap_true. + ENDIF. + IF ws_layo-no_keyfix IS INITIAL OR + ws_layo-no_keyfix = '0'. + cs_layout-is_fixed = abap_true. + ENDIF. + + LOOP AT wt_fcat INTO ls_fcat. + CLEAR: ls_fieldcatalog, + l_decimals. + CASE ws_option-hidenc. + WHEN abap_false. " We make hiden columns visible + CLEAR ls_fcat-no_out. + WHEN abap_true. +* We convert column and hide it. + WHEN abap_undefined. "We don't convert hiden columns + IF ls_fcat-no_out = abap_true. + ls_fcat-tech = abap_true. + ENDIF. + ENDCASE. + IF ls_fcat-tech = abap_false. + ls_fieldcatalog-tabname = ls_fcat-tabname. + ls_fieldcatalog-fieldname = ls_fcat-fieldname . + ls_fieldcatalog-columnname = ls_fcat-fieldname . + ls_fieldcatalog-position = ls_fcat-col_pos. + ls_fieldcatalog-col_id = ls_fcat-col_id. + ls_fieldcatalog-convexit = ls_fcat-convexit. + ls_fieldcatalog-inttype = ls_fcat-inttype. + ls_fieldcatalog-scrtext_s = ls_fcat-scrtext_s . + ls_fieldcatalog-scrtext_m = ls_fcat-scrtext_m . + ls_fieldcatalog-scrtext_l = ls_fcat-scrtext_l. + l_decimals = ls_fcat-decimals_o. + IF l_decimals IS NOT INITIAL. + ls_fieldcatalog-decimals = l_decimals. + ELSE. + ls_fieldcatalog-decimals = ls_fcat-decimals . + ENDIF. + CASE ws_option-subtot. + WHEN abap_false. " We ignore subtotals + CLEAR ls_fcat-do_sum. + WHEN abap_true. " We convert subtotals and detail + + WHEN abap_undefined. " We should only take subtotals and displayed detail +* for now abap_true + ENDCASE. + CASE ls_fcat-do_sum. + WHEN abap_true. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. + WHEN 'A'. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_min. + WHEN 'B' . + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_max. + WHEN 'C' . + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_average. + WHEN OTHERS. + CLEAR ls_fieldcatalog-totals_function . + ENDCASE. + ls_fieldcatalog-fix_column = ls_fcat-fix_column. + IF ws_layo-cwidth_opt IS INITIAL. + IF ls_fcat-col_opt IS NOT INITIAL. + ls_fieldcatalog-is_optimized = abap_true. + ENDIF. + ELSE. + ls_fieldcatalog-is_optimized = abap_true. + ENDIF. + IF ls_fcat-no_out IS NOT INITIAL. + ls_fieldcatalog-is_hidden = abap_true. + ls_fieldcatalog-position = ls_fieldcatalog-col_id. " We hide based on orginal data structure + ENDIF. +* Alignment in each cell + CASE ls_fcat-just. + WHEN 'R'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_right. + WHEN 'L'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_left. + WHEN 'C'. + ls_fieldcatalog-alignment = zcl_excel_style_alignment=>c_horizontal_center. + WHEN OTHERS. + CLEAR ls_fieldcatalog-alignment. + ENDCASE. +* Check for subtotals. + READ TABLE wt_sort INTO ls_sort WITH KEY fieldname = ls_fcat-fieldname. + IF sy-subrc = 0 AND ws_option-subtot <> abap_false. + ls_fieldcatalog-sort_level = 0 . +* IF ls_fieldcatalog-totals_function IS INITIAL. " Not clear why not +* CLEAR ls_fieldcatalog-is_subtotalled. +* ELSE. + ls_fieldcatalog-is_subtotalled = ls_sort-subtot. +* ENDIF. + ls_fieldcatalog-is_collapsed = ls_sort-expa. + IF ls_fieldcatalog-is_subtotalled = abap_true. + ls_fieldcatalog-sort_level = ls_sort-spos. + ls_fieldcatalog-totals_function = zcl_excel_table=>totals_function_sum. " we need function for text + ENDIF. + ENDIF. + APPEND ls_fieldcatalog TO ct_fieldcatalog. + ENDIF. + ENDLOOP. + + SORT ct_fieldcatalog BY sort_level ASCENDING. + cs_layout-max_subtotal_level = 0. + LOOP AT ct_fieldcatalog ASSIGNING <fs_scat> WHERE sort_level > 0. + cs_layout-max_subtotal_level = cs_layout-max_subtotal_level + 1. + <fs_scat>-sort_level = cs_layout-max_subtotal_level. + ENDLOOP. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + method ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + data: lo_alv type REF TO cl_gui_alv_grid. + + try. + lo_alv ?= io_object. + catch cx_sy_move_cast_error . + raise exception type zcx_excel. + endtry. + +endmethod. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_alv TYPE REF TO cl_gui_alv_grid. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_alv ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog. + + IF lo_alv IS BOUND. + lo_alv->get_frontend_fieldcatalog( IMPORTING et_fieldcatalog = wt_fcat ). + lo_alv->get_frontend_layout( IMPORTING es_layout = ws_layo ). + lo_alv->get_sort_criteria( IMPORTING et_sort = wt_sort ) . + lo_alv->get_filter_criteria( IMPORTING et_filter = wt_filt ) . + + apply_sort( EXPORTING it_table = it_table + IMPORTING eo_table = eo_table ) . + + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ENDIF. +ENDMETHOD. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + method GET_TABLE. + DATA: lo_object TYPE REF TO object, + ls_seoclass TYPE seoclass, + l_method TYPE string. + + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'IF_SALV_BS_DATA_SOURCE'. + + IF sy-subrc = 0. + l_method = 'GET_TABLE_REF'. + lo_object ?= io_object. + CALL METHOD lo_object->(l_method) + RECEIVING + value = ro_data. + ELSE. + l_method = 'GET_REF_TO_TABLE'. + lo_object ?= io_object. + CALL METHOD lo_object->(l_method) + RECEIVING + value = ro_data. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + + DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table. + + TRY. + lo_result ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + +ENDMETHOD. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_result TYPE REF TO cl_salv_ex_result_data_table, + lo_ex_cm TYPE REF TO cl_salv_ex_cm, + lo_data TYPE REF TO data. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_result ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog. + + IF lo_result IS BOUND. + lo_data = get_table( io_object = lo_result->r_model->r_data ). + IF lo_data IS BOUND. + ASSIGN lo_data->* TO <fs_table> . + + lo_ex_cm ?= lo_result->r_model->r_model. + ws_layo = lo_ex_cm->s_layo. +* T_DRDN Instance Attribute Public Type LVC_T_DROP + wt_fcat = lo_ex_cm->t_fcat. + wt_filt = lo_ex_cm->t_filt. +* T_HYPE Instance Attribute Public Type LVC_T_HYPE +* T_SELECTED_CELLS Instance Attribute Public Type LVC_T_CELL +* T_SELECTED_COLUMNS Instance Attribute Public Type LVC_T_COL + wt_sort = lo_ex_cm->t_sort. + + apply_sort( EXPORTING it_table = <fs_table> + IMPORTING eo_table = eo_table ) . + + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + else. +* We have a problem and should stop here. + ENDIF. + ENDIF. +ENDMETHOD. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + METHOD ZIF_EXCEL_CONVERTER~CAN_CONVERT_OBJECT. + + DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table. + + TRY. + lo_result ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + +ENDMETHOD. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_result TYPE REF TO cl_salv_wd_result_data_table, + lo_data TYPE REF TO data. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_result ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog. + + IF lo_result IS BOUND. + lo_data = get_table( io_object = lo_result->r_model->r_data ). + IF lo_data IS BOUND. + ASSIGN lo_data->* TO <fs_table> . + + wo_config ?= lo_result->r_model->r_model. + + IF wo_config IS BOUND. + wt_fields = wo_config->if_salv_wd_field_settings~get_fields( ) . + wt_columns = wo_config->if_salv_wd_column_settings~get_columns( ) . + ENDIF. + + create_wt_fcat( io_table = lo_data ). + create_wt_sort( ). + create_wt_filt( ). + + apply_sort( EXPORTING it_table = <fs_table> + IMPORTING eo_table = eo_table ) . + +* get_color( EXPORTING io_table = eo_table +* IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ELSE. +* We have a problem and should stop here + ENDIF. + ENDIF. +ENDMETHOD. + + + + method CREATE_WT_FCAT. + DATA: lr_data TYPE REF TO data, + lo_structdescr TYPE REF TO cl_abap_structdescr, + lt_dfies TYPE ddfields, + ls_dfies TYPE dfies, + lv_sytabix TYPE sytabix. + + DATA: ls_fcat TYPE lvc_s_fcat. + + FIELD-SYMBOLS: <fs_tab> TYPE ANY TABLE. + + ASSIGN io_table->* TO <fs_tab> . + CREATE DATA lr_data LIKE LINE OF <fs_tab>. + + lo_structdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + + lt_dfies = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + + loop at lt_dfies into ls_dfies. + MOVE-CORRESPONDING ls_dfies TO ls_fcat. +* ls_fcat-columnname = ls_dfies-fieldname. + ls_fcat-col_pos = ls_dfies-position. + ls_fcat-key = ls_dfies-keyflag. + get_fields_info( CHANGING xs_fcat = ls_fcat ) . + + ls_fcat-col_opt = abap_true. + + get_columns_info( CHANGING xs_fcat = ls_fcat ) . + + INSERT ls_fcat INTO TABLE wt_fcat. + endloop. + + endmethod. + + + method CREATE_WT_FILT. +* No neeed for superclass. +* Only for WD + DATA: lt_otab TYPE abap_sortorder_tab, + ls_otab TYPE abap_sortorder. + DATA: lt_filters TYPE salv_wd_t_filter_rule_ref, + ls_filt TYPE lvc_s_filt. + + FIELD-SYMBOLS: <fs_fields> TYPE salv_wd_s_field_ref, + <fs_filter> TYPE salv_wd_s_filter_rule_ref. + + LOOP AT wt_fields ASSIGNING <fs_fields>. + REFRESH lt_filters. + lt_filters = <fs_fields>-r_field->if_salv_wd_filter~get_filter_rules( ) . + LOOP AT lt_filters ASSIGNING <fs_filter>. + ls_filt-fieldname = <fs_fields>-fieldname. + IF <fs_filter>-r_filter_rule->get_included( ) = abap_true. + ls_filt-sign = 'I'. + ELSE. + ls_filt-sign = 'E'. + ENDIF. + ls_filt-option = <fs_filter>-r_filter_rule->get_operator( ). + ls_filt-high = <fs_filter>-r_filter_rule->get_high_value( ) . + ls_filt-low = <fs_filter>-r_filter_rule->get_low_value( ) . + INSERT ls_filt INTO TABLE wt_filt. + ENDLOOP. + ENDLOOP. + + endmethod. + + + method CREATE_WT_SORT. + DATA: lo_sort TYPE REF TO cl_salv_wd_sort_rule, + l_sort_order TYPE salv_wd_constant, + ls_sort TYPE lvc_s_sort. + + FIELD-SYMBOLS: <fs_fields> TYPE salv_wd_s_field_ref. + + LOOP AT wt_fields ASSIGNING <fs_fields>. + lo_sort = <fs_fields>-r_field->if_salv_wd_sort~get_sort_rule( ) . + IF lo_sort IS BOUND. + l_sort_order = lo_sort->get_sort_order( ). + IF l_sort_order <> if_salv_wd_c_sort=>sort_order. + CLEAR ls_sort. + ls_sort-spos = lo_sort->get_sort_position( ). + ls_sort-fieldname = <fs_fields>-fieldname. +* ls_sort-GROUP + ls_sort-subtot = lo_sort->get_group_aggregation( ). +* ls_sort-COMP +* ls_sort-EXPA +* ls_sort-SELTEXT +* ls_sort-OBLIGATORY +* ls_sort-LEVEL +* ls_sort-NO_OUT + IF l_sort_order = if_salv_wd_c_sort=>sort_order_ascending. + ls_sort-up = abap_true. + ELSE. + ls_sort-down = abap_true. + ENDIF. + INSERT ls_sort INTO TABLE wt_sort. + ENDIF. + ENDIF. + ENDLOOP. + + endmethod. + + + + method GET_COLUMNS_INFO. + DATA: l_numc2 TYPE salv_wd_constant. + + + FIELD-SYMBOLS: <fs_column> TYPE salv_wd_s_column_ref. + + READ TABLE wt_columns ASSIGNING <fs_column> WITH KEY id = xs_fcat-fieldname . + IF sy-subrc = 0. + xs_fcat-col_pos = <fs_column>-r_column->get_position( ) . + l_numc2 = <fs_column>-r_column->get_fixed_position( ). + IF l_numc2 = '02'. + xs_fcat-fix_column = abap_true . + ENDIF. + l_numc2 = <fs_column>-r_column->get_visible( ). + IF l_numc2 = '01'. + xs_fcat-no_out = abap_true . + ENDIF. + ENDIF. + + endmethod. + + + + method GET_FIELDS_INFO. + DATA: lo_aggr TYPE REF TO cl_salv_wd_aggr_rule, + l_aggrtype TYPE salv_wd_constant. + + FIELD-SYMBOLS: <fs_fields> TYPE salv_wd_s_field_ref. + + READ TABLE wt_fields ASSIGNING <fs_fields> WITH KEY fieldname = xs_fcat-fieldname. + IF sy-subrc = 0. + lo_aggr = <fs_fields>-r_field->if_salv_wd_aggr~get_aggr_rule( ) . + IF lo_aggr IS BOUND. + l_aggrtype = lo_aggr->get_aggregation_type( ) . + CASE l_aggrtype. + WHEN if_salv_wd_c_aggregation=>aggrtype_total. + xs_fcat-do_sum = abap_true. + WHEN if_salv_wd_c_aggregation=>aggrtype_minimum. + xs_fcat-do_sum = 'A'. + WHEN if_salv_wd_c_aggregation=>aggrtype_maximum . + xs_fcat-do_sum = 'B'. + WHEN if_salv_wd_c_aggregation=>aggrtype_average . + xs_fcat-do_sum = 'C'. + WHEN OTHERS. + CLEAR xs_fcat-do_sum . + ENDCASE. + ENDIF. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + METHOD zif_excel_converter~can_convert_object. + + DATA: lo_salv TYPE REF TO cl_salv_table. + + TRY. + lo_salv ?= io_object. + CATCH cx_sy_move_cast_error . + RAISE EXCEPTION TYPE zcx_excel. + ENDTRY. + +ENDMETHOD. + + + METHOD zif_excel_converter~create_fieldcatalog. + DATA: lo_salv TYPE REF TO cl_salv_table. + + TRY. + zif_excel_converter~can_convert_object( io_object = io_object ). + ENDTRY. + + ws_option = is_option. + + lo_salv ?= io_object. + + CLEAR: es_layout, + et_fieldcatalog, + et_colors . + + IF lo_salv IS BOUND. + load_data( EXPORTING io_salv = lo_salv + it_table = it_table ). + apply_sort( EXPORTING it_table = it_table + IMPORTING eo_table = eo_table ) . + + get_color( EXPORTING io_table = eo_table + IMPORTING et_colors = et_colors ) . + + get_filter( IMPORTING et_filter = et_filter + CHANGING xo_table = eo_table ) . + + update_catalog( CHANGING cs_layout = es_layout + ct_fieldcatalog = et_fieldcatalog ). + ENDIF. +ENDMETHOD. + + + + + method LOAD_DATA. + DATA: lo_columns TYPE REF TO cl_salv_columns_table, + lo_aggregations TYPE REF TO cl_salv_aggregations, + lo_sorts TYPE REF TO cl_salv_sorts, + lo_filters TYPE REF TO cl_salv_filters, + lo_functional TYPE REF TO cl_salv_functional_settings, + lo_display TYPE REF TO cl_salv_display_settings, + lo_selections TYPE REF TO cl_salv_selections. + + DATA: ls_vari TYPE disvariant, + lo_layout TYPE REF TO cl_salv_layout. + + DATA: lr_form_tol TYPE REF TO cl_salv_form, + lr_form_eol TYPE REF TO cl_salv_form. + + DATA lt_kkblo_fieldcat TYPE kkblo_t_fieldcat. + DATA ls_kkblo_layout TYPE kkblo_layout. + DATA lt_kkblo_filter TYPE kkblo_t_filter. + DATA lt_kkblo_sort TYPE kkblo_t_sortinfo. + + lo_layout = io_salv->get_layout( ) . + lo_columns = io_salv->get_columns( ). + lo_aggregations = io_salv->get_aggregations( ) . + lo_sorts = io_salv->get_sorts( ) . + lo_filters = io_salv->get_filters( ) . + lo_display = io_salv->get_display_settings( ) . + lo_functional = io_salv->get_functional_settings( ) . + + REFRESH: wt_fcat, + wt_sort, + wt_filt. + +* First update metadata if we can. + IF io_salv->is_offline( ) = abap_false. + io_salv->get_metadata( ) . + ELSE. +* If we are offline we need to build this. + cl_salv_controller_metadata=>get_variant( + EXPORTING + r_layout = lo_layout + CHANGING + s_variant = ls_vari ). + ENDIF. + +*... get the column information + wt_fcat = cl_salv_controller_metadata=>get_lvc_fieldcatalog( + r_columns = lo_columns + r_aggregations = lo_aggregations ). + +*... get the layout information + cl_salv_controller_metadata=>get_lvc_layout( + EXPORTING + r_functional_settings = lo_functional + r_display_settings = lo_display + r_columns = lo_columns + r_aggregations = lo_aggregations + CHANGING + s_layout = ws_layo ). + +* the fieldcatalog is not complete yet! + CALL FUNCTION 'LVC_FIELDCAT_COMPLETE' + EXPORTING + i_complete = 'X' + i_refresh_buffer = space + i_buffer_active = space + is_layout = ws_layo + i_test = '1' + i_fcat_complete = 'X' + IMPORTING +* E_EDIT = + es_layout = ws_layo + CHANGING + ct_fieldcat = wt_fcat. + + IF ls_vari IS NOT INITIAL AND io_salv->is_offline( ) = abap_true. + CALL FUNCTION 'LVC_TRANSFER_TO_KKBLO' + EXPORTING + it_fieldcat_lvc = wt_fcat + is_layout_lvc = ws_layo + IMPORTING + et_fieldcat_kkblo = lt_kkblo_fieldcat + es_layout_kkblo = ls_kkblo_layout + TABLES + it_data = it_table + EXCEPTIONS + it_data_missing = 1 + it_fieldcat_lvc_missing = 2 + OTHERS = 3. + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + CALL FUNCTION 'LT_VARIANT_LOAD' + EXPORTING +* I_TOOL = 'LT' + i_tabname = '1' +* I_TABNAME_SLAVE = + i_dialog = ' ' +* I_USER_SPECIFIC = ' ' +* I_DEFAULT = 'X' +* I_NO_REPTEXT_OPTIMIZE = +* I_VIA_GRID = + i_fcat_complete = 'X' + IMPORTING +* E_EXIT = + et_fieldcat = lt_kkblo_fieldcat + et_sort = lt_kkblo_sort + et_filter = lt_kkblo_filter + CHANGING + cs_layout = ls_kkblo_layout + ct_default_fieldcat = lt_kkblo_fieldcat + cs_variant = ls_vari + EXCEPTIONS + wrong_input = 1 + fc_not_complete = 2 + not_found = 3 + OTHERS = 4 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + CALL FUNCTION 'LVC_TRANSFER_FROM_KKBLO' + EXPORTING +* I_TECH_COMPLETE = +* I_STRUCTURE_NAME = + it_fieldcat_kkblo = lt_kkblo_fieldcat + it_sort_kkblo = lt_kkblo_sort + it_filter_kkblo = lt_kkblo_filter +* IT_SPECIAL_GROUPS_KKBLO = +* IT_FILTERED_ENTRIES_KKBLO = +* IT_GROUPLEVELS_KKBLO = +* IS_SUBTOT_OPTIONS_KKBLO = + is_layout_kkblo = ls_kkblo_layout +* IS_REPREP_ID_KKBLO = +* I_CALLBACK_PROGRAM_KKBLO = +* IT_ADD_FIELDCAT = +* IT_EXCLUDING_KKBLO = +* IT_EXCEPT_QINFO_KKBLO = + IMPORTING + et_fieldcat_lvc = wt_fcat + et_sort_lvc = wt_sort + et_filter_lvc = wt_filt +* ET_SPECIAL_GROUPS_LVC = +* ET_FILTER_INDEX_LVC = +* ET_GROUPLEVELS_LVC = +* ES_TOTAL_OPTIONS_LVC = + es_layout_lvc = ws_layo +* ES_VARIANT_LVC = +* E_VARIANT_SAVE_LVC = +* ES_PRINT_INFO_LVC = +* ES_REPREP_LVC = +* E_REPREP_ACTIVE_LVC = +* ET_EXCLUDING_LVC = +* ET_EXCEPT_QINFO_LVC = + TABLES + it_data = it_table + EXCEPTIONS + it_data_missing = 1 + OTHERS = 2 + . + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ENDIF. + + ELSE. +* ... get the sort information + wt_sort = cl_salv_controller_metadata=>get_lvc_sort( lo_sorts ). + +* ... get the filter information + wt_filt = cl_salv_controller_metadata=>get_lvc_filter( lo_filters ). + ENDIF. + + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + " Initialise instance variables + formula1 = ''. + formula2 = ''. + type = me->c_type_none. + errorstyle = me->c_style_stop. + operator = ''. + allowblank = abap_false. + showdropdown = abap_false. + showinputmessage = abap_true. + showerrormessage = abap_true. + errortitle = ''. + error = ''. + prompttitle = ''. + prompt = ''. +* inizialize dimension range + cell_row = 1. + cell_column = 'A'. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + method ADD. + data_validations->add( ip_data_validation ). + endmethod. + + + method CLEAR. + data_validations->clear( ). + endmethod. + + + method CONSTRUCTOR. + + CREATE OBJECT data_validations. + + endmethod. + + + + method GET_ITERATOR. + eo_iterator ?= data_validations->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + is_empty = data_validations->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + data_validations->remove( ip_data_validation ). + endmethod. + + + + method SIZE. + ep_size = data_validations->if_object_collection~size( ). + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = me->guid. + + IF ip_title IS NOT INITIAL. + title = ip_title. + ELSE. + title = me->guid. + ENDIF. + + me->type = ip_type. + +* inizialize dimension range + anchor = anchor_one_cell. + from_loc-col = 1. + from_loc-row = 1. + endmethod. + + + + method CREATE_MEDIA_NAME. + +* if media name is initial, create unique name + CHECK media_name IS INITIAL. + + index = ip_index. + CONCATENATE me->type index INTO media_name. + CONDENSE media_name NO-GAPS. + endmethod. + + + + method GET_FROM_COL. + r_from_col = me->from_loc-col. + endmethod. + + + + method GET_FROM_ROW. + r_from_row = me->from_loc-row. + endmethod. + + + + method GET_GUID. + + ep_guid = me->guid. + + endmethod. + + + + method GET_HEIGHT_EMU_STR. + r_height = pixel2emu( size-height ). + CONDENSE r_height NO-GAPS. + endmethod. + + + + method GET_INDEX. + rp_index = me->index. + endmethod. + + + + METHOD get_media. + + DATA: lv_language TYPE sylangu. + DATA: lt_bin_mime TYPE sdokcntbins. + DATA: lt_mime TYPE tsfmime, + lv_filesize TYPE i, + lv_filesizec(10). + + CASE media_source. + WHEN c_media_source_xstring. + r_media = media. + WHEN c_media_source_www. + CALL FUNCTION 'WWWDATA_IMPORT' + EXPORTING + key = media_key_www + TABLES + mime = lt_mime + EXCEPTIONS + OTHERS = 1. + + CALL FUNCTION 'WWWPARAMS_READ' + EXPORTING + relid = media_key_www-relid + objid = media_key_www-objid + name = 'filesize' + IMPORTING + value = lv_filesizec. + + lv_filesize = lv_filesizec. + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filesize + IMPORTING + buffer = r_media + TABLES + binary_tab = lt_mime + EXCEPTIONS + failed = 1 + OTHERS = 2. + WHEN c_media_source_mime. + lv_language = sy-langu. + cl_wb_mime_repository=>load_mime( EXPORTING + io = me->io + IMPORTING + filesize = lv_filesize + bin_data = lt_bin_mime + CHANGING + language = lv_language ). + + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filesize + IMPORTING + buffer = r_media + TABLES + binary_tab = lt_bin_mime + EXCEPTIONS + failed = 1 + OTHERS = 2. + ENDCASE. +ENDMETHOD. + + + + method GET_MEDIA_NAME. + CONCATENATE media_name `.` media_type INTO r_name. + endmethod. + + + + method GET_MEDIA_TYPE. + r_type = media_type. + endmethod. + + + + method GET_NAME. + r_name = title. + endmethod. + + + + method GET_POSITION. + rp_position-anchor = anchor. + rp_position-from = from_loc. + rp_position-to = to_loc. + rp_position-size = size. + endmethod. + + + + method GET_TO_COL. + r_to_col = me->to_loc-col. + endmethod. + + + + method GET_TO_ROW. + r_to_row = me->to_loc-row. + endmethod. + + + + method GET_TYPE. + rp_type = me->type. + endmethod. + + + + method GET_WIDTH_EMU_STR. + r_width = pixel2emu( size-width ). + CONDENSE r_width NO-GAPS. + endmethod. + + + + method LOAD_CHART_ATTRIBUTES. + DATA: node TYPE REF TO if_ixml_element. + DATA: node2 TYPE REF TO if_ixml_element. + DATA: node3 TYPE REF TO if_ixml_element. + DATA: node4 TYPE REF TO if_ixml_element. + DATA: iterator TYPE REF TO if_ixml_node_iterator. + + DATA: chartspace TYPE REF TO if_ixml_node_collection. + DATA: coll_length TYPE i. + DATA: chartelem TYPE REF TO if_ixml_element. + + DATA lo_barchart TYPE REF TO zcl_excel_graph_bars. + DATA lo_piechart TYPE REF TO zcl_excel_graph_pie. + DATA lo_linechart TYPE REF TO zcl_excel_graph_line. + + TYPES: BEGIN OF t_prop, + val TYPE string, + rtl TYPE string, + lang TYPE string, + formatcode TYPE string, + sourcelinked TYPE string, + END OF t_prop. + + TYPES: BEGIN OF t_pagemargins, + b TYPE string, + l TYPE string, + r TYPE string, + t TYPE string, + header TYPE string, + footer TYPE string, + END OF t_pagemargins. + + DATA ls_prop TYPE t_prop. + DATA ls_pagemargins TYPE t_pagemargins. + + DATA lo_collection TYPE REF TO if_ixml_node_collection. + DATA lo_node TYPE REF TO if_ixml_node. + DATA lo_iterator TYPE REF TO if_ixml_node_iterator. + DATA lv_idx TYPE i. + DATA lv_order TYPE i. + DATA lv_invertifnegative TYPE string. + DATA lv_symbol TYPE string. + DATA lv_smooth TYPE c. + DATA lv_sername TYPE string. + DATA lv_label TYPE string. + DATA lv_value TYPE string. + DATA lv_axid TYPE string. + DATA lv_orientation TYPE string. + DATA lv_delete TYPE string. + DATA lv_axpos TYPE string. + DATA lv_formatcode TYPE string. + DATA lv_sourcelinked TYPE string. + DATA lv_majortickmark TYPE string. + DATA lv_minortickmark TYPE string. + DATA lv_ticklblpos TYPE string. + DATA lv_crossax TYPE string. + DATA lv_crosses TYPE string. + DATA lv_auto TYPE string. + DATA lv_lblalgn TYPE string. + DATA lv_lbloffset TYPE string. + DATA lv_nomultilvllbl TYPE string. + DATA lv_crossbetween TYPE string. + + node ?= ip_chart->if_ixml_node~get_first_child( ). + CHECK node IS NOT INITIAL. + + CASE me->graph_type. + WHEN c_graph_bars. + CREATE OBJECT lo_barchart. + me->graph = lo_barchart. + WHEN c_graph_pie. + CREATE OBJECT lo_piechart. + me->graph = lo_piechart. + WHEN c_graph_line. + CREATE OBJECT lo_linechart. + me->graph = lo_linechart. + WHEN OTHERS. + ENDCASE. + + "Fill properties + node2 ?= node->find_from_name( name = 'date1904' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_1904val = ls_prop-val. + node2 ?= node->find_from_name( name = 'lang' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_langval = ls_prop-val. + node2 ?= node->find_from_name( name = 'roundedCorners' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_roundedcornersval = ls_prop-val. + + "style + node2 ?= node->find_from_name( name = 'style' namespace = 'c14' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_c14styleval = ls_prop-val. + node2 ?= node->find_from_name( name = 'style' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_styleval = ls_prop-val. + "---------------------------Read graph properties + node2 ?= node->find_from_name( name = 'autoTitleDeleted' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_autotitledeletedval = ls_prop-val. + + "plotArea + CASE me->graph_type. + WHEN c_graph_bars. + node2 ?= node->find_from_name( name = 'barDir' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_bardirval = ls_prop-val. + node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_groupingval = ls_prop-val. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'invertIfNegative' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_invertifnegative = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_barchart->create_serie + EXPORTING + ip_idx = lv_idx + ip_order = lv_order + ip_invertifnegative = lv_invertifnegative + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_showbubblesizeval = ls_prop-val. + node2 ?= node->find_from_name( name = 'gapWidth' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_gapwidthval = ls_prop-val. + + "Load axes + node2 ?= node->find_from_name( name = 'barChart' namespace = 'c' ). + CALL METHOD node2->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'axId' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lv_axid = ls_prop-val. + IF sy-index EQ 1. "catAx + node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_auto = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lblalgn = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lbloffset = ls_prop-val. + node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_nomultilvllbl = ls_prop-val. + CALL METHOD lo_barchart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_bars=>c_catax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_auto = lv_auto + ip_lblalgn = lv_lblalgn + ip_lbloffset = lv_lbloffset + ip_nomultilvllbl = lv_nomultilvllbl. + ELSEIF sy-index EQ 2. "valAx + node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossbetween = ls_prop-val. + CALL METHOD lo_barchart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_bars=>c_valax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_crossbetween = lv_crossbetween. + ENDIF. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + + WHEN c_graph_pie. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_piechart->create_serie + EXPORTING + ip_idx = lv_idx + ip_order = lv_order + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showbubblesizeval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showLeaderLines' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_showleaderlinesval = ls_prop-val. + node2 ?= node->find_from_name( name = 'firstSliceAng' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_firstsliceangval = ls_prop-val. + WHEN c_graph_line. + node2 ?= node->find_from_name( name = 'grouping' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_groupingval = ls_prop-val. + node2 ?= node->find_from_name( name = 'varyColors' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_varycolorsval = ls_prop-val. + + "Load series + CALL METHOD node->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'ser' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + node3 ?= node2->find_from_name( name = 'idx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_idx = ls_prop-val. + node3 ?= node2->find_from_name( name = 'order' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_order = ls_prop-val. + node3 ?= node2->find_from_name( name = 'symbol' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_symbol = ls_prop-val. + node3 ?= node2->find_from_name( name = 'smooth' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_smooth = ls_prop-val. + node3 ?= node2->find_from_name( name = 'v' namespace = 'c' ). + IF node3 IS BOUND. + lv_sername = node3->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'strRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_label = node4->get_value( ). + ENDIF. + node3 ?= node2->find_from_name( name = 'numRef' namespace = 'c' ). + IF node3 IS BOUND. + node4 ?= node3->find_from_name( name = 'f' namespace = 'c' ). + lv_value = node4->get_value( ). + ENDIF. + CALL METHOD lo_linechart->create_serie + EXPORTING + ip_idx = lv_idx + ip_order = lv_order + ip_symbol = lv_symbol + ip_smooth = lv_smooth + ip_lbl = lv_label + ip_ref = lv_value + ip_sername = lv_sername. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + "note: numCache avoided + node2 ?= node->find_from_name( name = 'showLegendKey' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showlegendkeyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showVal' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showvalval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showCatName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showcatnameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showSerName' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showsernameval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showPercent' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showpercentval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showBubbleSize' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_showbubblesizeval = ls_prop-val. + + node ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). + node2 ?= node->find_from_name( name = 'marker' namespace = 'c' DEPTH = '1' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->NS_MARKERVAL = ls_prop-val. + node2 ?= node->find_from_name( name = 'smooth' namespace = 'c' DEPTH = '1' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->NS_SMOOTHVAL = ls_prop-val. + node ?= ip_chart->if_ixml_node~get_first_child( ). + CHECK node IS NOT INITIAL. + + "Load axes + node2 ?= node->find_from_name( name = 'lineChart' namespace = 'c' ). + CALL METHOD node2->get_elements_by_tag_name + EXPORTING +* depth = 0 + name = 'axId' +* namespace = '' + RECEIVING + rval = lo_collection. + CALL METHOD lo_collection->create_iterator + RECEIVING + rval = lo_iterator. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + WHILE lo_node IS BOUND. + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lv_axid = ls_prop-val. + IF sy-index EQ 1. "catAx + node2 ?= node->find_from_name( name = 'catAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. +* node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). +* zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). +* lv_formatcode = ls_prop-formatcode. +* lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'auto' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_auto = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblAlgn' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lblalgn = ls_prop-val. + node3 ?= node2->find_from_name( name = 'lblOffset' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_lbloffset = ls_prop-val. + node3 ?= node2->find_from_name( name = 'noMultiLvlLbl' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_nomultilvllbl = ls_prop-val. + CALL METHOD lo_linechart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_line=>c_catax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_auto = lv_auto + ip_lblalgn = lv_lblalgn + ip_lbloffset = lv_lbloffset + ip_nomultilvllbl = lv_nomultilvllbl. + ELSEIF sy-index EQ 2. "valAx + node2 ?= node->find_from_name( name = 'valAx' namespace = 'c' ). + node3 ?= node2->find_from_name( name = 'orientation' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_orientation = ls_prop-val. + node3 ?= node2->find_from_name( name = 'delete' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_delete = ls_prop-val. + node3 ?= node2->find_from_name( name = 'axPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_axpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'numFmt' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_formatcode = ls_prop-formatcode. + lv_sourcelinked = ls_prop-sourcelinked. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_majortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'majorTickMark' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_minortickmark = ls_prop-val. + node3 ?= node2->find_from_name( name = 'tickLblPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_ticklblpos = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossAx' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossax = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crosses' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crosses = ls_prop-val. + node3 ?= node2->find_from_name( name = 'crossBetween' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = ls_prop ). + lv_crossbetween = ls_prop-val. + CALL METHOD lo_linechart->create_ax + EXPORTING + ip_axid = lv_axid + ip_type = zcl_excel_graph_line=>c_valax + ip_orientation = lv_orientation + ip_delete = lv_delete + ip_axpos = lv_axpos + ip_formatcode = lv_formatcode + ip_sourcelinked = lv_sourcelinked + ip_majortickmark = lv_majortickmark + ip_minortickmark = lv_minortickmark + ip_ticklblpos = lv_ticklblpos + ip_crossax = lv_crossax + ip_crosses = lv_crosses + ip_crossbetween = lv_crossbetween. + ENDIF. + lo_node = lo_iterator->get_next( ). + IF lo_node IS BOUND. + node2 ?= lo_node->query_interface( ixml_iid_element ). + ENDIF. + ENDWHILE. + WHEN OTHERS. + ENDCASE. + + "legend + CASE me->graph_type. + WHEN c_graph_bars. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_barchart->ns_overlayval = ls_prop-val. + WHEN c_graph_line. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_linechart->ns_overlayval = ls_prop-val. + WHEN c_graph_pie. + node2 ?= node->find_from_name( name = 'legendPos' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_legendposval = ls_prop-val. + node2 ?= node->find_from_name( name = 'overlay' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_overlayval = ls_prop-val. + node2 ?= node->find_from_name( name = 'pPr' namespace = 'a' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_pprrtl = ls_prop-rtl. + node2 ?= node->find_from_name( name = 'endParaRPr' namespace = 'a' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + lo_piechart->ns_endpararprlang = ls_prop-lang. + + WHEN OTHERS. + ENDCASE. + + node2 ?= node->find_from_name( name = 'plotVisOnly' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_plotvisonlyval = ls_prop-val. + node2 ?= node->find_from_name( name = 'dispBlanksAs' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_dispblanksasval = ls_prop-val. + node2 ?= node->find_from_name( name = 'showDLblsOverMax' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_prop ). + me->graph->ns_showdlblsovermaxval = ls_prop-val. + "--------------------- + + node2 ?= node->find_from_name( name = 'pageMargins' namespace = 'c' ). + zcl_excel_reader_2007=>fill_struct_from_attributes( EXPORTING ip_element = node2 CHANGING cp_structure = ls_pagemargins ). + me->graph->pagemargins = ls_pagemargins. + + + endmethod. + + + + + + method PIXEL2EMU. +* suppose 96 DPI + IF ip_dpi IS SUPPLIED. + r_emu = ip_pixel * 914400 / ip_dpi. + ELSE. +* suppose 96 DPI + r_emu = ip_pixel * 914400 / 96. + ENDIF. + endmethod. + + + + + + + method SET_MEDIA. + IF ip_media IS SUPPLIED. + media = ip_media. + ENDIF. + media_type = ip_media_type. + media_source = c_media_source_xstring. + IF ip_width IS SUPPLIED. + size-width = ip_width. + ENDIF. + IF ip_height IS SUPPLIED. + size-height = ip_height. + ENDIF. + endmethod. + + + + + + METHOD set_media_mime. + + DATA: lv_language TYPE sylangu. + + io = ip_io. + media_source = c_media_source_mime. + size-width = ip_width. + size-height = ip_height. + + lv_language = sy-langu. + cl_wb_mime_repository=>load_mime( EXPORTING + io = ip_io + IMPORTING + filename = media_name + "mimetype = media_type + CHANGING + language = lv_language ). + + SPLIT media_name AT '.' INTO media_name media_type. + +ENDMETHOD. + + + + + + method SET_MEDIA_WWW. + DATA: lv_value(20). + + media_key_www = ip_key. + media_source = c_media_source_www. + + CALL FUNCTION 'WWWPARAMS_READ' + EXPORTING + relid = media_key_www-relid + objid = media_key_www-objid + name = 'fileextension' + IMPORTING + value = lv_value. + media_type = lv_value. + SHIFT media_type LEFT DELETING LEADING '.'. + + size-width = ip_width. + size-height = ip_height. + endmethod. + + + + + + + method SET_POSITION. + from_loc-col = zcl_excel_common=>convert_column2int( ip_from_col ) - 1. + IF ip_coloff IS SUPPLIED. + from_loc-col_offset = ip_coloff. + ENDIF. + from_loc-row = ip_from_row - 1. + IF ip_rowoff IS SUPPLIED. + from_loc-row_offset = ip_rowoff. + ENDIF. + anchor = anchor_one_cell. + endmethod. + + + + + + method SET_POSITION2. + + data: lv_anchor type zexcel_drawing_anchor. + lv_anchor = ip_anchor. + + IF lv_anchor IS INITIAL. + IF ip_to IS NOT INITIAL. + lv_anchor = anchor_two_cell. + ELSE. + lv_anchor = anchor_one_cell. + ENDIF. + ENDIF. + + CASE lv_anchor. + WHEN anchor_absolute OR anchor_one_cell. + CLEAR: me->to_loc. + WHEN anchor_two_cell. + CLEAR: me->size. + ENDCASE. + + me->from_loc = ip_from. + me->to_loc = ip_to. + me->anchor = lv_anchor. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + method ADD. + DATA: lv_index TYPE i. + + drawings->add( ip_drawing ). + lv_index = drawings->if_object_collection~size( ). + ip_drawing->create_media_name( + ip_index = lv_index ). + endmethod. + + + method CLEAR. + + drawings->clear( ). + endmethod. + + + + method CONSTRUCTOR. + + CREATE OBJECT drawings. + type = ip_type. + + endmethod. + + + + + method GET. + + DATA lv_index TYPE i. + lv_index = ip_index. + eo_drawing ?= drawings->if_object_collection~get( lv_index ). + endmethod. + + + + method GET_ITERATOR. + + eo_iterator ?= drawings->if_object_collection~get_iterator( ). + endmethod. + + + + method GET_TYPE. + rp_type = me->type. + endmethod. + + + + method INCLUDE. + drawings->add( ip_drawing ). + endmethod. + + + + method IS_EMPTY. + + is_empty = drawings->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + + drawings->remove( ip_drawing ). + endmethod. + + + + method SIZE. + + ep_size = drawings->if_object_collection~size( ). + endmethod. + + + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + "Load default values + me->pagemargins-b = '0.75'. + me->pagemargins-l = '0.7'. + me->pagemargins-r = '0.7'. + me->pagemargins-t = '0.75'. + me->pagemargins-header = '0.3'. + me->pagemargins-footer = '0.3'. + endmethod. + + + + + + + + + + + + + + + + + + + + method CREATE_SERIE. + DATA ls_serie TYPE s_series. + + DATA: lv_start_row_c TYPE char7, + lv_stop_row_c TYPE char7. + + + IF ip_lbl IS NOT SUPPLIED. + lv_stop_row_c = ip_lbl_to_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_lbl_from_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + ls_serie-lbl = ip_sheet. + ls_serie-lbl = zcl_excel_common=>escape_string( ip_value = ls_serie-lbl ). + CONCATENATE ls_serie-lbl '!$' ip_lbl_from_col '$' lv_start_row_c ':$' ip_lbl_to_col '$' lv_stop_row_c INTO ls_serie-lbl. + CLEAR: lv_start_row_c, lv_stop_row_c. + ELSE. + ls_serie-lbl = ip_lbl. + ENDIF. + IF ip_ref IS NOT SUPPLIED. + lv_stop_row_c = ip_ref_to_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_ref_from_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + ls_serie-ref = ip_sheet. + ls_serie-ref = zcl_excel_common=>escape_string( ip_value = ls_serie-ref ). + CONCATENATE ls_serie-ref '!$' ip_ref_from_col '$' lv_start_row_c ':$' ip_ref_to_col '$' lv_stop_row_c INTO ls_serie-ref. + CLEAR: lv_start_row_c, lv_stop_row_c. + ELSE. + ls_serie-ref = ip_ref. + ENDIF. + ls_serie-idx = ip_idx. + ls_serie-order = ip_order. + ls_serie-invertifnegative = ip_invertifnegative. + ls_serie-symbol = ip_symbol. + ls_serie-smooth = ip_smooth. + ls_serie-sername = ip_sername. + APPEND ls_serie TO me->series. + SORT me->series BY order ASCENDING. + endmethod. + + + + method SET_PRINT_LBL. + me->print_label = ip_value. + endmethod. + + + + method SET_STYLE. + me->ns_c14styleval = ip_style-c14style. + CONDENSE me->ns_c14styleval NO-GAPS. + me->ns_styleval = ip_style-cstyle. + CONDENSE me->ns_styleval NO-GAPS. + endmethod. + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CREATE_AX. + DATA ls_ax TYPE s_ax. + ls_ax-type = ip_type. + + if ip_type = c_catax. + if ip_axid is SUPPLIED. + ls_ax-axid = ip_axid. + else. + ls_ax-axid = '1'. + endif. + if ip_orientation is SUPPLIED. + ls_ax-orientation = ip_orientation. + else. + ls_ax-orientation = 'minMax'. + endif. + if ip_delete is SUPPLIED. + ls_ax-delete = ip_delete. + else. + ls_ax-delete = '0'. + endif. + if ip_axpos is SUPPLIED. + ls_ax-axpos = ip_axpos. + else. + ls_ax-axpos = 'b'. + endif. + if ip_formatcode is SUPPLIED. + ls_ax-formatcode = ip_formatcode. + else. + ls_ax-formatcode = 'General'. + endif. + if ip_sourcelinked is SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + else. + ls_ax-sourcelinked = '1'. + endif. + if ip_majorTickMark is SUPPLIED. + ls_ax-majorTickMark = ip_majorTickMark. + else. + ls_ax-majorTickMark = 'out'. + endif. + if ip_minorTickMark is SUPPLIED. + ls_ax-minorTickMark = ip_minorTickMark. + else. + ls_ax-minorTickMark = 'none'. + endif. + if ip_ticklblpos is SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + else. + ls_ax-ticklblpos = 'nextTo'. + endif. + if ip_crossax is SUPPLIED. + ls_ax-crossax = ip_crossax. + else. + ls_ax-crossax = '2'. + endif. + if ip_crosses is SUPPLIED. + ls_ax-crosses = ip_crosses. + else. + ls_ax-crosses = 'autoZero'. + endif. + if ip_auto is SUPPLIED. + ls_ax-auto = ip_auto. + else. + ls_ax-auto = '1'. + endif. + if ip_lblAlgn is SUPPLIED. + ls_ax-lblAlgn = ip_lblAlgn. + else. + ls_ax-lblAlgn = 'ctr'. + endif. + if ip_lblOffset is SUPPLIED. + ls_ax-lblOffset = ip_lblOffset. + else. + ls_ax-lblOffset = '100'. + endif. + if ip_noMultiLvlLbl is SUPPLIED. + ls_ax-noMultiLvlLbl = ip_noMultiLvlLbl. + else. + ls_ax-noMultiLvlLbl = '0'. + endif. + elseif ip_type = c_valax. + if ip_axid is SUPPLIED. + ls_ax-axid = ip_axid. + else. + ls_ax-axid = '2'. + endif. + if ip_orientation is SUPPLIED. + ls_ax-orientation = ip_orientation. + else. + ls_ax-orientation = 'minMax'. + endif. + if ip_delete is SUPPLIED. + ls_ax-delete = ip_delete. + else. + ls_ax-delete = '0'. + endif. + if ip_axpos is SUPPLIED. + ls_ax-axpos = ip_axpos. + else. + ls_ax-axpos = 'l'. + endif. + if ip_formatcode is SUPPLIED. + ls_ax-formatcode = ip_formatcode. + else. + ls_ax-formatcode = 'General'. + endif. + if ip_sourcelinked is SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + else. + ls_ax-sourcelinked = '1'. + endif. + if ip_majorTickMark is SUPPLIED. + ls_ax-majorTickMark = ip_majorTickMark. + else. + ls_ax-majorTickMark = 'out'. + endif. + if ip_minorTickMark is SUPPLIED. + ls_ax-minorTickMark = ip_minorTickMark. + else. + ls_ax-minorTickMark = 'none'. + endif. + if ip_ticklblpos is SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + else. + ls_ax-ticklblpos = 'nextTo'. + endif. + if ip_crossax is SUPPLIED. + ls_ax-crossax = ip_crossax. + else. + ls_ax-crossax = '1'. + endif. + if ip_crosses is SUPPLIED. + ls_ax-crosses = ip_crosses. + else. + ls_ax-crosses = 'autoZero'. + endif. + if ip_crossBetween is SUPPLIED. + ls_ax-crossBetween = ip_crossBetween. + else. + ls_ax-crossBetween = 'between'. + endif. + endif. + + APPEND ls_ax TO me->axes. + sort me->axes by axid ascending. + endmethod. + + + + method SET_SHOW_CAT_NAME. + ns_showcatnameval = ip_value. + endmethod. + + + + method SET_SHOW_LEGEND_KEY. + ns_showlegendkeyval = ip_value. + endmethod. + + + + method SET_SHOW_PERCENT. + ns_showpercentval = ip_value. + endmethod. + + + + method SET_SHOW_SER_NAME. + ns_showsernameval = ip_value. + endmethod. + + + + method SET_SHOW_VALUES. + ns_showvalval = ip_value. + endmethod. + + + + method SET_VARYCOLOR. + ns_varycolorsval = ip_value. + endmethod. + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CREATE_AX. + DATA ls_ax TYPE s_ax. + ls_ax-type = ip_type. + + IF ip_type = c_catax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '1'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'b'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '2'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_auto IS SUPPLIED. + ls_ax-auto = ip_auto. + ELSE. + ls_ax-auto = '1'. + ENDIF. + IF ip_lblalgn IS SUPPLIED. + ls_ax-lblalgn = ip_lblalgn. + ELSE. + ls_ax-lblalgn = 'ctr'. + ENDIF. + IF ip_lbloffset IS SUPPLIED. + ls_ax-lbloffset = ip_lbloffset. + ELSE. + ls_ax-lbloffset = '100'. + ENDIF. + IF ip_nomultilvllbl IS SUPPLIED. + ls_ax-nomultilvllbl = ip_nomultilvllbl. + ELSE. + ls_ax-nomultilvllbl = '0'. + ENDIF. + ELSEIF ip_type = c_valax. + IF ip_axid IS SUPPLIED. + ls_ax-axid = ip_axid. + ELSE. + ls_ax-axid = '2'. + ENDIF. + IF ip_orientation IS SUPPLIED. + ls_ax-orientation = ip_orientation. + ELSE. + ls_ax-orientation = 'minMax'. + ENDIF. + IF ip_delete IS SUPPLIED. + ls_ax-delete = ip_delete. + ELSE. + ls_ax-delete = '0'. + ENDIF. + IF ip_axpos IS SUPPLIED. + ls_ax-axpos = ip_axpos. + ELSE. + ls_ax-axpos = 'l'. + ENDIF. + IF ip_formatcode IS SUPPLIED. + ls_ax-formatcode = ip_formatcode. + ELSE. + ls_ax-formatcode = 'General'. + ENDIF. + IF ip_sourcelinked IS SUPPLIED. + ls_ax-sourcelinked = ip_sourcelinked. + ELSE. + ls_ax-sourcelinked = '1'. + ENDIF. + IF ip_majortickmark IS SUPPLIED. + ls_ax-majortickmark = ip_majortickmark. + ELSE. + ls_ax-majortickmark = 'out'. + ENDIF. + IF ip_minortickmark IS SUPPLIED. + ls_ax-minortickmark = ip_minortickmark. + ELSE. + ls_ax-minortickmark = 'none'. + ENDIF. + IF ip_ticklblpos IS SUPPLIED. + ls_ax-ticklblpos = ip_ticklblpos. + ELSE. + ls_ax-ticklblpos = 'nextTo'. + ENDIF. + IF ip_crossax IS SUPPLIED. + ls_ax-crossax = ip_crossax. + ELSE. + ls_ax-crossax = '1'. + ENDIF. + IF ip_crosses IS SUPPLIED. + ls_ax-crosses = ip_crosses. + ELSE. + ls_ax-crosses = 'autoZero'. + ENDIF. + IF ip_crossbetween IS SUPPLIED. + ls_ax-crossbetween = ip_crossbetween. + ELSE. + ls_ax-crossbetween = 'between'. + ENDIF. + ENDIF. + + APPEND ls_ax TO me->axes. + SORT me->axes BY axid ASCENDING. + endmethod. + + + + method SET_SHOW_CAT_NAME. + ns_showcatnameval = ip_value. + endmethod. + + + + method SET_SHOW_LEGEND_KEY. + ns_showlegendkeyval = ip_value. + endmethod. + + + + method SET_SHOW_PERCENT. + ns_showpercentval = ip_value. + endmethod. + + + + method SET_SHOW_SER_NAME. + ns_showsernameval = ip_value. + endmethod. + + + + method SET_SHOW_VALUES. + ns_showvalval = ip_value. + endmethod. + + + + method SET_VARYCOLOR. + ns_varycolorsval = ip_value. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + method SET_SHOW_CAT_NAME. + ns_showcatnameval = ip_value. + endmethod. + + + + method SET_SHOW_LEADER_LINES. + ns_showleaderlinesval = ip_value. + endmethod. + + + + method SET_SHOW_LEGEND_KEY. + ns_showlegendkeyval = ip_value. + endmethod. + + + + method SET_SHOW_PERCENT. + ns_showpercentval = ip_value. + endmethod. + + + + method SET_SHOW_SER_NAME. + ns_showsernameval = ip_value. + endmethod. + + + + method SET_SHOW_VALUES. + ns_showvalval = ip_value. + endmethod. + + + + method SET_VARYCOLOR. + ns_varycolorsval = ip_value. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + method CREATE. + data: lo_hyperlink type REF TO zcl_excel_hyperlink. + + create OBJECT lo_hyperlink. + + lo_hyperlink->location = iv_url. + lo_hyperlink->internal = iv_internal. + + ov_link = lo_hyperlink. + endmethod. + + + + + method CREATE_EXTERNAL_LINK. + + ov_link = zcl_excel_hyperlink=>create( iv_url = iv_url + iv_internal = abap_false ). + endmethod. + + + + + method CREATE_INTERNAL_LINK. + ov_link = zcl_excel_hyperlink=>create( iv_url = iv_location + iv_internal = abap_true ). + endmethod. + + + + method GET_REF. + ev_ref = row. + CONDENSE ev_ref. + CONCATENATE column ev_ref INTO ev_ref. + endmethod. + + + + method GET_URL. + ev_url = me->location. + endmethod. + + + + method IS_INTERNAL. + ev_ret = me->internal. + endmethod. + + + + + + method SET_CELL_REFERENCE. + me->column = zcl_excel_common=>convert_column2alpha( ip_column ). " issue #155 - less restrictive typing for ip_column + me->row = ip_row. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + method CONSTRUCTOR. + " default Excel palette based on + " http://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.indexedcolors.aspx + + APPEND '00000000' TO colors. + APPEND '00FFFFFF' TO colors. + APPEND '00FF0000' TO colors. + APPEND '0000FF00' TO colors. + APPEND '000000FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00000000' TO colors. + APPEND '00FFFFFF' TO colors. + + APPEND '00FF0000' TO colors. + APPEND '0000FF00' TO colors. + APPEND '000000FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00800000' TO colors. + APPEND '00008000' TO colors. + APPEND '00000080' TO colors. + APPEND '00808000' TO colors. + + APPEND '00800080' TO colors. + APPEND '00008080' TO colors. + APPEND '00C0C0C0' TO colors. + APPEND '00808080' TO colors. + APPEND '009999FF' TO colors. + APPEND '00993366' TO colors. + APPEND '00FFFFCC' TO colors. + APPEND '00CCFFFF' TO colors. + APPEND '00660066' TO colors. + APPEND '00FF8080' TO colors. + + APPEND '000066CC' TO colors. + APPEND '00CCCCFF' TO colors. + APPEND '00000080' TO colors. + APPEND '00FF00FF' TO colors. + APPEND '00FFFF00' TO colors. + APPEND '0000FFFF' TO colors. + APPEND '00800080' TO colors. + APPEND '00800000' TO colors. + APPEND '00008080' TO colors. + APPEND '000000FF' TO colors. + + APPEND '0000CCFF' TO colors. + APPEND '00CCFFFF' TO colors. + APPEND '00CCFFCC' TO colors. + APPEND '00FFFF99' TO colors. + APPEND '0099CCFF' TO colors. + APPEND '00FF99CC' TO colors. + APPEND '00CC99FF' TO colors. + APPEND '00FFCC99' TO colors. + APPEND '003366FF' TO colors. + APPEND '0033CCCC' TO colors. + + APPEND '0099CC00' TO colors. + APPEND '00FFCC00' TO colors. + APPEND '00FF9900' TO colors. + APPEND '00FF6600' TO colors. + APPEND '00666699' TO colors. + APPEND '00969696' TO colors. + APPEND '00003366' TO colors. + APPEND '00339966' TO colors. + APPEND '00003300' TO colors. + APPEND '00333300' TO colors. + + APPEND '00993300' TO colors. + APPEND '00993366' TO colors. + APPEND '00333399' TO colors. + APPEND '00333333' TO colors. + + endmethod. + + + + + + method GET_COLOR. + DATA: lv_index type i. + + lv_index = ip_index + 1. + READ TABLE colors INTO ep_color INDEX lv_index. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid color index'. + ENDIF. + endmethod. + + + + method GET_COLORS. + ep_colors = colors. + endmethod. + + + + method IS_MODIFIED. + ep_modified = modified. + endmethod. + + + + + method SET_COLOR. + DATA: lv_index TYPE i. + + FIELD-SYMBOLS: <lv_color> LIKE LINE OF colors. + + lv_index = ip_index + 1. + READ TABLE colors ASSIGNING <lv_color> INDEX lv_index. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid color index'. + ENDIF. + + IF <lv_color> <> ip_color. + modified = abap_true. + <lv_color> = ip_color. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + method GET_GUID. + + ep_guid = me->guid. + + endmethod. + + + + method GET_VALUE. + + ep_value = me->value. + + endmethod. + + + + method SET_RANGE_VALUE. + me->value = ip_value. + endmethod. + + + + + + + + method SET_VALUE. + DATA: lv_start_row_c TYPE char7, + lv_stop_row_c TYPE char7, + lv_value TYPE string. + lv_stop_row_c = ip_stop_row. + SHIFT lv_stop_row_c RIGHT DELETING TRAILING space. + SHIFT lv_stop_row_c LEFT DELETING LEADING space. + lv_start_row_c = ip_start_row. + SHIFT lv_start_row_c RIGHT DELETING TRAILING space. + SHIFT lv_start_row_c LEFT DELETING LEADING space. + lv_value = ip_sheet_name. + me->value = zcl_excel_common=>escape_string( ip_value = lv_value ). + + CONCATENATE me->value '!$' ip_start_column '$' lv_start_row_c ':$' ip_stop_column '$' lv_stop_row_c INTO me->value. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + + DATA: ls_iconset TYPE zexcel_conditional_iconset. + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights. + ls_iconset-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo1_value = '0'. + ls_iconset-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo2_value = '20'. + ls_iconset-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo3_value = '40'. + ls_iconset-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo4_value = '60'. + ls_iconset-cfvo5_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo5_value = '80'. + + + me->rule = zcl_excel_style_conditional=>c_rule_none. +* me->iconset->operator = zcl_excel_style_conditional=>c_operator_none. + me->mode_iconset = ls_iconset. + me->priority = 1. + +* inizialize dimension range + me->stop_cell-cell_row = 1. + me->stop_cell-cell_column = 1. + me->start_cell-cell_row = 1. + me->start_cell-cell_column = 1. + endmethod. + + + + method GET_DIMENSION_RANGE. + IF stop_cell EQ start_cell. "only one cell + ep_dimension_range = start_cell-cell_coords. + ELSE. + CONCATENATE start_cell-cell_coords ':' stop_cell-cell_coords INTO ep_dimension_range. + ENDIF. + endmethod. + + + + + + + method SET_RANGE. + DATA: lv_column TYPE zexcel_cell_column, + lv_row_alpha TYPE string. + + lv_column = zcl_excel_common=>convert_column2int( ip_stop_column ). + stop_cell-cell_row = 1. + stop_cell-cell_column = lv_column. + lv_row_alpha = ip_stop_row. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_stop_column lv_row_alpha INTO stop_cell-cell_coords. + + lv_column = zcl_excel_common=>convert_column2int( ip_start_column ). + start_cell-cell_row = 1. + start_cell-cell_column = lv_column. + lv_row_alpha = ip_start_row. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_start_column lv_row_alpha INTO start_cell-cell_coords. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + filltype = zcl_excel_style_fill=>c_fill_none. + fgcolor-theme = zcl_excel_style_color=>c_theme_not_set. + fgcolor-indexed = zcl_excel_style_color=>c_indexed_not_set. + bgcolor-theme = zcl_excel_style_color=>c_theme_not_set. + bgcolor-indexed = zcl_excel_style_color=>c_indexed_sys_foreground. + rotation = 0. + endmethod. + + + + method GET_STRUCTURE. + es_fill-rotation = me->rotation. + es_fill-filltype = me->filltype. + es_fill-fgColor = me->fgColor. + es_fill-bgColor = me->bgColor. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CALCULATE_TEXT_WIDTH. + " Addition to solve issue #120, contribution by Stefan Schmöcker + r_width = strlen( i_text ). + " use scale factor based on default 11 + " ( don't know where defaultsetting is stored currently ) + r_width = r_width * me->size / 11. + endmethod. + + + method CONSTRUCTOR. + me->color-rgb = zcl_excel_style_color=>c_black. + me->color-theme = zcl_excel_style_color=>c_theme_not_set. + me->color-indexed = zcl_excel_style_color=>c_indexed_not_set. + me->scheme = zcl_excel_style_font=>c_scheme_minor. + me->underline_mode = zcl_excel_style_font=>c_underline_single. + endmethod. + + + + method GET_STRUCTURE. + + es_font-bold = me->bold. + es_font-italic = me->italic. + es_font-underline = me->underline. + es_font-underline_mode = me->underline_mode. + es_font-strikethrough = me->strikethrough. + es_font-size = me->size. + es_font-color = me->color. + es_font-name = me->name. + es_font-family = me->family. + es_font-scheme = me->scheme. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + format_code = me->c_format_general. + endmethod. + + + + method GET_STRUCTURE. + ep_number_format-numfmt = me->format_code. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + method CONSTRUCTOR. + locked = me->c_protection_locked. + hidden = me->c_protection_unhidden. + endmethod. + + + + method GET_STRUCTURE. + ep_protection-locked = me->locked. + ep_protection-hidden = me->hidden. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + CLASS lcl_excel_common_test DEFINITION DEFERRED. +CLASS zcl_excel_common DEFINITION LOCAL FRIENDS lcl_excel_common_test. + +*----------------------------------------------------------------------* +* CLASS lcl_Excel_Common_Test DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_excel_common_test DEFINITION FOR TESTING "#AU Risk_Level Harmless + . "#AU Duration Short +*?<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> +*?<asx:values> +*?<TESTCLASS_OPTIONS> +*?<TEST_CLASS>lcl_Excel_Common_Test +*?</TEST_CLASS> +*?<TEST_MEMBER>f_Cut +*?</TEST_MEMBER> +*?<OBJECT_UNDER_TEST>ZCL_EXCEL_COMMON +*?</OBJECT_UNDER_TEST> +*?<OBJECT_IS_LOCAL/> +*?<GENERATE_FIXTURE>X +*?</GENERATE_FIXTURE> +*?<GENERATE_CLASS_FIXTURE>X +*?</GENERATE_CLASS_FIXTURE> +*?<GENERATE_INVOCATION>X +*?</GENERATE_INVOCATION> +*?<GENERATE_ASSERT_EQUAL>X +*?</GENERATE_ASSERT_EQUAL> +*?</TESTCLASS_OPTIONS> +*?</asx:values> +*?</asx:abap> + PRIVATE SECTION. +* ================ + DATA: + lx_excel TYPE REF TO zcx_excel, + ls_symsg_act TYPE symsg, " actual messageinformation of exception + ls_symsg_exp TYPE symsg, " expected messageinformation of exception + f_cut TYPE REF TO zcl_excel_common. "class under test + + CLASS-METHODS: class_setup. + CLASS-METHODS: class_teardown. + METHODS: setup. + METHODS: teardown. +* METHODS: char2hex FOR TESTING. + METHODS: convert_column2alpha FOR TESTING. + METHODS: convert_column2int FOR TESTING. + METHODS: date_to_excel_string FOR TESTING. + METHODS: encrypt_password FOR TESTING. + METHODS: excel_string_to_date FOR TESTING. + METHODS: excel_string_to_time FOR TESTING. +* METHODS: number_to_excel_string FOR TESTING. + METHODS: time_to_excel_string FOR TESTING. + METHODS: split_file FOR TESTING. + METHODS: convert_range2column_a_row FOR TESTING. + METHODS: describe_structure FOR TESTING. + METHODS: calculate_cell_distance FOR TESTING. + METHODS: shift_formula FOR TESTING. + METHODS: is_cell_in_range FOR TESTING. +ENDCLASS. "lcl_Excel_Common_Test + + +*----------------------------------------------------------------------* +* CLASS lcl_Excel_Common_Test IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_excel_common_test IMPLEMENTATION. +* =========================================== + + METHOD class_setup. +* =================== + + + ENDMETHOD. "class_Setup + + + METHOD class_teardown. +* ====================== + + + ENDMETHOD. "class_Teardown + + + METHOD setup. +* ============= + + CREATE OBJECT f_cut. + ENDMETHOD. "setup + + + METHOD teardown. +* ================ + + + ENDMETHOD. "teardown + + + METHOD convert_column2alpha. +* ============================ + DATA ep_column TYPE zexcel_cell_column_alpha. + +* Test 1. Simple test + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 1 ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 'A' + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Max column for OXML #16,384 = XFD + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 16384 ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 'XFD' + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Index 0 is out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 0 ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 'A' + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Colum index 0 is out of bounds, min column index is 1' + level = if_aunit_constants=>fatal + ). + ENDTRY. + +* Test 4. Exception should be thrown index out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2alpha( 16385 ). + + zcl_excel_common=>assert_differs( + act = ep_column + exp = 'XFE' + msg = 'Colum index 16385 is out of bounds, max column index is 16384' + level = if_aunit_constants=>fatal + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Wrong exception is thrown' + level = if_aunit_constants=>tolerable + ). + ENDTRY. + ENDMETHOD. "convert_Column2alpha + + + METHOD convert_column2int. +* ========================== + DATA ep_column TYPE zexcel_cell_column. + +* Test 1. Basic test + TRY. + ep_column = zcl_excel_common=>convert_column2int( 'A' ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 1 + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Max column + TRY. + ep_column = zcl_excel_common=>convert_column2int( 'XFD' ). + + zcl_excel_common=>assert_equals( + act = ep_column + exp = 16384 + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2int( '' ). + + zcl_excel_common=>assert_differs( act = ep_column + exp = '0' + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical ). + CATCH zcx_excel INTO lx_excel. + CLEAR: ls_symsg_act, + ls_symsg_exp. + ls_symsg_exp-msgid = 'ZABAP2XLSX'. + ls_symsg_exp-msgno = '800'. + ls_symsg_act-msgid = lx_excel->syst_at_raise-msgid. + ls_symsg_act-msgno = lx_excel->syst_at_raise-msgno. + zcl_excel_common=>assert_equals( act = ls_symsg_act + exp = ls_symsg_exp + msg = 'Colum name should be a valid string' + level = if_aunit_constants=>fatal ). + ENDTRY. + +* Test 4. Out of bounds + TRY. + ep_column = zcl_excel_common=>convert_column2int( 'XFE' ). + + zcl_excel_common=>assert_differs( act = ep_column + exp = 16385 + msg = 'Wrong column conversion' + level = if_aunit_constants=>critical ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Colum XFE is out of range' + level = if_aunit_constants=>fatal ). + ENDTRY. + ENDMETHOD. "convert_Column2int + + + METHOD date_to_excel_string. +* ============================ + DATA ep_value TYPE zexcel_cell_value. + +* Test 1. Basic conversion + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '19000101' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 1 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. +* Check around the "Excel Leap Year" 1900 + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '19000228' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 59 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '19000301' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 61 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + + +* Test 2. Basic conversion + TRY. + ep_value = zcl_excel_common=>date_to_excel_string( '99991212' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = 2958446 + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Initial date + TRY. + DATA: lv_date TYPE d. + ep_value = zcl_excel_common=>date_to_excel_string( lv_date ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Basic conversion + TRY. + DATA exp_value TYPE zexcel_cell_value VALUE 0. + ep_value = zcl_excel_common=>date_to_excel_string( '18991231' ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = exp_value + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Dates prior of 1900 are not available in excel' + level = if_aunit_constants=>critical + ). + ENDTRY. + + ENDMETHOD. "date_To_Excel_String + + + METHOD encrypt_password. +* ======================== + DATA lv_encrypted_pwd TYPE zexcel_aes_password. + + TRY. + lv_encrypted_pwd = zcl_excel_common=>encrypt_password( 'test' ). + + zcl_excel_common=>assert_equals( + act = lv_encrypted_pwd + exp = 'CBEB' + msg = 'Wrong password encryption' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + ENDMETHOD. "encrypt_Password + + + METHOD excel_string_to_date. +* ============================ + DATA ep_value TYPE d. + + +* Test 1. Simple test -> ABAP Manage also date prior of 1900 + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '0' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '18991231' + msg = 'Wrong date conversion' + level = if_aunit_constants=>tolerable + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. +* Check around the "Excel Leap Year" 1900 + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '59' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '19000228' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '61' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '19000301' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '1' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '19000101' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Index 0 is out of bounds + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '2958446' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '99991212' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 4. Exception should be thrown index out of bounds + TRY. + ep_value = zcl_excel_common=>excel_string_to_date( '2958447' ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = '99991212' + msg = 'Wrong date conversion' + level = if_aunit_constants=>fatal + ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = '00000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>fatal + ). + + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Index out of bounds' + msg = 'Wrong exception is thrown' + level = if_aunit_constants=>tolerable + ). + ENDTRY. + ENDMETHOD. "excel_String_To_Date + + + METHOD excel_string_to_time. +* ============================ + DATA ep_value TYPE t. + +* Test 1. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '0' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>tolerable + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '1' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Simple test + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '0.99999' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '235959' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 4. Also string greater than 1 should be managed + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( '4.1' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '022400' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 4. string is not a number + TRY. + ep_value = zcl_excel_common=>excel_string_to_time( 'NaN' ). + + zcl_excel_common=>assert_differs( + act = ep_value + exp = '000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>assert_equals( + act = lx_excel->error + exp = 'Unable to interpret time' + msg = 'Time should be a valid string' + level = if_aunit_constants=>fatal + ). + ENDTRY. + ENDMETHOD. "excel_String_To_Time + + + METHOD time_to_excel_string. +* ============================ + DATA ep_value TYPE zexcel_cell_value. + +* Test 1. Basic conversion + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '000001' ). + " A test directly in Excel returns the value 0.0000115740740740741000 + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0.0000115740740741' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Basic conversion + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '235959' ). + " A test directly in Excel returns the value 0.9999884259259260000000 + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0.9999884259259260' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 3. Initial date + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '000000' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + +* Test 2. Basic conversion + TRY. + ep_value = zcl_excel_common=>time_to_excel_string( '022400' ). + + zcl_excel_common=>assert_equals( + act = ep_value + exp = '0.1000000000000000' + msg = 'Wrong date conversion' + level = if_aunit_constants=>critical + ). + CATCH zcx_excel INTO lx_excel. + zcl_excel_common=>fail( + msg = 'unexpected exception' + level = if_aunit_constants=>critical " Error Severity + ). + ENDTRY. + + ENDMETHOD. "time_To_Excel_String + + METHOD split_file. +* ============================ + + DATA: ep_file TYPE text255, + ep_extension TYPE char10, + ep_dotextension TYPE char10. + + +* Test 1. Basic conversion + zcl_excel_common=>split_file( EXPORTING ip_file = 'filename.xml' + IMPORTING ep_file = ep_file + ep_extension = ep_extension + ep_dotextension = ep_dotextension ). + + zcl_excel_common=>assert_equals( + act = ep_file + exp = 'filename' + msg = 'Split filename failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_extension + exp = 'xml' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_dotextension + exp = '.xml' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + +* Test 2. no extension + zcl_excel_common=>split_file( EXPORTING ip_file = 'filename' + IMPORTING ep_file = ep_file + ep_extension = ep_extension + ep_dotextension = ep_dotextension ). + + zcl_excel_common=>assert_equals( + act = ep_file + exp = 'filename' + msg = 'Split filename failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_extension + exp = '' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + + zcl_excel_common=>assert_equals( + act = ep_dotextension + exp = '' + msg = 'Split extension failed' + level = if_aunit_constants=>critical ). + + ENDMETHOD. "split_file + + METHOD convert_range2column_a_row. + DATA: lv_range TYPE string. + DATA: lv_column_start TYPE zexcel_cell_column_alpha, + lv_column_end TYPE zexcel_cell_column_alpha, + lv_row_start TYPE zexcel_cell_row, + lv_row_end TYPE zexcel_cell_row, + lv_sheet TYPE string. + +* a) input empty --> nothing to do + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). +* b) sheetname existing - starts with ' example 'Sheet 1'!$B$6:$D$13 + lv_range = `'Sheet 1'!$B$6:$D$13`. + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = 'B' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = 'D' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '6' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '13' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = 'Sheet 1' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). +* c) sheetname existing - does not start with ' example Sheet1!$B$6:$D$13 + lv_range = `Sheet1!B6:$D$13`. + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = 'B' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = 'D' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '6' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '13' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = 'Sheet1' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). +* d) no sheetname - just area example $B$6:$D$13 + lv_range = `$B$6:D13`. + zcl_excel_common=>convert_range2column_a_row( + EXPORTING + i_range = lv_range + IMPORTING + e_column_start = lv_column_start " Cell Column Start + e_column_end = lv_column_end " Cell Column End + e_row_start = lv_row_start " Cell Row + e_row_end = lv_row_end " Cell Row + e_sheet = lv_sheet " Title + ). + + zcl_excel_common=>assert_equals( + act = lv_column_start + exp = 'B' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_column_end + exp = 'D' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_start + exp = '6' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_row_end + exp = '13' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + zcl_excel_common=>assert_equals( + act = lv_sheet + exp = '' + msg = 'Conversion of range failed' + level = if_aunit_constants=>critical ). + ENDMETHOD. "convert_range2column_a_row + + + METHOD describe_structure. + DATA: ls_test TYPE scarr. + DATA: lo_structdescr TYPE REF TO cl_abap_structdescr. + DATA: lt_structure TYPE ddfields. + FIELD-SYMBOLS: <line> LIKE LINE OF lt_structure. + + " Test with DDIC Type + lo_structdescr ?= cl_abap_structdescr=>describe_by_data( p_data = ls_test ). + lt_structure = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + READ TABLE lt_structure ASSIGNING <line> INDEX 1. + zcl_excel_common=>assert_equals( + act = <line>-fieldname + exp = 'MANDT' + msg = 'Describe structure failed' + level = if_aunit_constants=>critical ). + + " Test with local defined structure having DDIC and non DDIC elements + TYPES: + BEGIN OF t_test, + carrid TYPE s_carr_id, + carrname TYPE s_carrname, + carrdesc TYPE string, + END OF t_test. + DATA: ls_ttest TYPE t_test. + + lo_structdescr ?= cl_abap_structdescr=>describe_by_data( p_data = ls_ttest ). + lt_structure = zcl_excel_common=>describe_structure( io_struct = lo_structdescr ). + READ TABLE lt_structure ASSIGNING <line> INDEX 1. + zcl_excel_common=>assert_equals( + act = <line>-fieldname + exp = 'CARRID' + msg = 'Describe structure failed' + level = if_aunit_constants=>critical ). + + ENDMETHOD. "describe_structure + + + METHOD calculate_cell_distance. + DATA: lv_offset_rows TYPE i, + lv_offset_cols TYPE i, + lv_message TYPE string. + + DEFINE macro_calculate_cell_distance. + zcl_excel_common=>calculate_cell_distance( exporting iv_reference_cell = &1 + iv_current_cell = &2 + importing ev_row_difference = lv_offset_rows + ev_col_difference = lv_offset_cols ). +* Check delta columns + concatenate 'Error calculating column difference in test:' + &1 + '->' + &2 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_offset_cols + exp = &3 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). +* Check delta rows + concatenate 'Error calculating row difference in test:' + &1 + '->' + &2 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_offset_rows + exp = &4 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). + END-OF-DEFINITION. + + + macro_calculate_cell_distance: + 'C12' 'C12' 0 0 , " Same cell + 'C12' 'C13' 0 1 , " Shift down 1 place + 'C12' 'C25' 0 13 , " Shift down some places + 'C12' 'C11' 0 -1 , " Shift up 1 place + 'C12' 'C1' 0 -11 , " Shift up some place + 'C12' 'D12' 1 0 , " Shift right 1 place + 'C12' 'AA12' 24 0 , " Shift right some places + 'C12' 'B12' -1 0 , " Shift left 1 place + 'AA12' 'C12' -24 0 , " Shift left some place + 'AA121' 'C12' -24 -109 . " The full package. + + ENDMETHOD. "CALCULATE_CELL_DISTANCE + + METHOD shift_formula. + DATA: lv_resulting_formula TYPE string, + lv_message TYPE string, + lv_counter TYPE num8. + + DEFINE macro_shift_formula. + add 1 to lv_counter. + clear lv_resulting_formula. + try. + lv_resulting_formula = zcl_excel_common=>shift_formula( iv_reference_formula = &1 + iv_shift_cols = &2 + iv_shift_rows = &3 ). + concatenate 'Wrong result in test' + lv_counter + 'shifting formula ' + &1 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_resulting_formula + exp = &4 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). + catch zcx_excel. + concatenate 'Unexpected exception occurred in test' + lv_counter + 'shifting formula ' + &1 + into lv_message separated by space. + zcl_excel_common=>assert_equals( act = lv_resulting_formula + exp = &4 + msg = lv_message + quit = 0 " continue tests + level = if_aunit_constants=>critical ). + endtry. + END-OF-DEFINITION. + +* Test shifts that should result in a valid output + macro_shift_formula: + 'C17' 0 0 'C17', " Very basic check + 'C17' 2 3 'E20', " Check shift right and down + 'C17' -2 -3 'A14', " Check shift left and up + '$C$17' 1 1 '$C$17', " Fixed columns/rows + 'SUM($C17:C$23)+C30' 1 11 'SUM($C28:D$23)+D41', " Operators and Ranges, mixed fixed rows or columns + 'RNGNAME1+C7' -1 -4 'RNGNAME1+B3', " Operators and Rangename + '"Date:"&TEXT(B2)' 1 1 '"Date:"&TEXT(C3)', " String literals and string concatenation + '[TEST6.XLSX]SHEET1!A1' 1 11 '[TEST6.XLSX]SHEET1!B12', " External sheet reference + `X(B13, "KK" ) ` 1 1 `X(C14,"KK")`, " superflous blanks, multi-argument functions, literals in function, unknown functions +* 'SIN((((((B2))))))' 1 1 'SIN((((((C3))))))', " Deep nesting +* 'SIN(SIN(SIN(SIN(E22))))' 0 1 'SIN(SIN(SIN(SIN(E23))))', " Different type of deep nesting + `SIN(SIN(SIN(SIN(E22))))` 0 1 'SIN(SIN(SIN(SIN(E23))))', " same as above - but with string input instead of Char-input + 'HEUTE()' 2 5 'HEUTE()', " Functions w/o arguments, No cellreferences + '"B2"' 2 5 '"B2"', " No cellreferences + '' 2 5 '', " Empty + 'A1+$A1+A$1+$A$1+B2' -1 0 '#REF!+$A1+#REF!+$A$1+A2', " Referencing error , column only , underflow + 'A1+$A1+A$1+$A$1+B2' 0 -1 '#REF!+#REF!+A$1+$A$1+B1', " Referencing error , row only , underflow + 'A1+$A1+A$1+$A$1+B2' -1 -1 '#REF!+#REF!+#REF!+$A$1+A1'. " Referencing error , row and column , underflow + ENDMETHOD. "SHIFT_FORMULA + + METHOD is_cell_in_range. + DATA ep_cell_in_range TYPE abap_bool. + +* Test 1: upper left corner (in range) + TRY. + ep_cell_in_range = zcl_excel_common=>is_cell_in_range( + ip_column = 'B' + ip_row = 2 + ip_range = 'B2:D4' ). + + zcl_excel_common=>assert_equals( + act = ep_cell_in_range + exp = abap_true + msg = 'Check cell in range failed' + level = if_aunit_constants=>critical ). + CATCH zcx_excel. + zcl_excel_common=>fail( + msg = 'Unexpected exception' + level = if_aunit_constants=>critical ). + ENDTRY. + +* Test 2: lower right corner (in range) + TRY. + ep_cell_in_range = zcl_excel_common=>is_cell_in_range( + ip_column = 'D' + ip_row = 4 + ip_range = 'B2:D4' ). + + zcl_excel_common=>assert_equals( + act = ep_cell_in_range + exp = abap_true + msg = 'Check cell in range failed' + level = if_aunit_constants=>critical ). + CATCH zcx_excel. + zcl_excel_common=>fail( + msg = 'Unexpected exception' + level = if_aunit_constants=>critical ). + ENDTRY. + +* Test 3: left side (out of range) + TRY. + ep_cell_in_range = zcl_excel_common=>is_cell_in_range( + ip_column = 'A' + ip_row = 3 + ip_range = 'B2:D4' ). + + zcl_excel_common=>assert_equals( + act = ep_cell_in_range + exp = abap_false + msg = 'Check cell in range failed' + level = if_aunit_constants=>critical ). + CATCH zcx_excel. + zcl_excel_common=>fail( + msg = 'Unexpected exception' + level = if_aunit_constants=>critical ). + ENDTRY. + +* Test 4: upper side (out of range) + TRY. + ep_cell_in_range = zcl_excel_common=>is_cell_in_range( + ip_column = 'C' + ip_row = 1 + ip_range = 'B2:D4' ). + + zcl_excel_common=>assert_equals( + act = ep_cell_in_range + exp = abap_false + msg = 'Check cell in range failed' + level = if_aunit_constants=>critical ). + CATCH zcx_excel. + zcl_excel_common=>fail( + msg = 'Unexpected exception' + level = if_aunit_constants=>critical ). + ENDTRY. + +* Test 5: right side (out of range) + TRY. + ep_cell_in_range = zcl_excel_common=>is_cell_in_range( + ip_column = 'E' + ip_row = 3 + ip_range = 'B2:D4' ). + + zcl_excel_common=>assert_equals( + act = ep_cell_in_range + exp = abap_false + msg = 'Check cell in range failed' + level = if_aunit_constants=>critical ). + CATCH zcx_excel. + zcl_excel_common=>fail( + msg = 'Unexpected exception' + level = if_aunit_constants=>critical ). + ENDTRY. + +* Test 6: lower side (out of range) + TRY. + ep_cell_in_range = zcl_excel_common=>is_cell_in_range( + ip_column = 'C' + ip_row = 5 + ip_range = 'B2:D4' ). + + zcl_excel_common=>assert_equals( + act = ep_cell_in_range + exp = abap_false + msg = 'Check cell in range failed' + level = if_aunit_constants=>critical ). + CATCH zcx_excel. + zcl_excel_common=>fail( + msg = 'Unexpected exception' + level = if_aunit_constants=>critical ). + ENDTRY. + ENDMETHOD. + +ENDCLASS. "lcl_Excel_Common_Test + + + + + + + + + + + + + + + + ABAP + + + + + + + + + + + + + + + + + + method ASSERT_DIFFERS. + DATA: ls_seoclass TYPE seoclass. + +" Let see >=7.02 + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_ABAP_UNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_differs + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + RECEIVING + assertion_failed = assertion_failed. + ELSE. +" Let see >=7.00 or even lower + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_AUNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_differs + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + RECEIVING + assertion_failed = assertion_failed. + ELSE. +* We do nothing for now not supported + ENDIF. + ENDIF. +endmethod. + + + + + + + + + + + METHOD assert_equals. + DATA: ls_seoclass TYPE seoclass. + + " Let see >=7.02 + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_ABAP_UNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_equals + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + ignore_hash_sequence = ignore_hash_sequence + RECEIVING + assertion_failed = assertion_failed. + ELSE. + " Let see >=7.00 or even lower + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_AUNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>assert_equals + EXPORTING + exp = exp + act = act + msg = msg + level = level + tol = tol + quit = quit + ignore_hash_sequence = ignore_hash_sequence + RECEIVING + assertion_failed = assertion_failed. + ELSE. +* We do nothing for now not supported + ENDIF. + ENDIF. +ENDMETHOD. + + + + + + + + METHOD calculate_cell_distance. + + DATA: lv_reference_row TYPE i, + lv_reference_col_alpha TYPE zexcel_cell_column_alpha, + lv_reference_col TYPE i, + lv_current_row TYPE i, + lv_current_col_alpha TYPE zexcel_cell_column_alpha, + lv_current_col TYPE i. + +*--------------------------------------------------------------------* +* Split reference cell into numerical row/column representation +*--------------------------------------------------------------------* + convert_columnrow2column_a_row( EXPORTING + i_columnrow = iv_reference_cell + IMPORTING + e_column = lv_reference_col_alpha + e_row = lv_reference_row ). + lv_reference_col = convert_column2int( lv_reference_col_alpha ). + +*--------------------------------------------------------------------* +* Split current cell into numerical row/column representation +*--------------------------------------------------------------------* + convert_columnrow2column_a_row( EXPORTING + i_columnrow = iv_current_cell + IMPORTING + e_column = lv_current_col_alpha + e_row = lv_current_row ). + lv_current_col = convert_column2int( lv_current_col_alpha ). + +*--------------------------------------------------------------------* +* Calculate row and column difference +* Positive: Current cell below reference cell +* or Current cell right of reference cell +* Negative: Current cell above reference cell +* or Current cell left of reference cell +*--------------------------------------------------------------------* + ev_row_difference = lv_current_row - lv_reference_row. + ev_col_difference = lv_current_col - lv_reference_col. + +ENDMETHOD. + + + + + method CHAR2HEX. + + IF o_conv IS NOT BOUND. + o_conv = cl_abap_conv_out_ce=>create( endian = 'L' + ignore_cerr = abap_true + replacement = '#' ). + ENDIF. + + CALL METHOD o_conv->reset( ). + CALL METHOD o_conv->write( data = i_char ). + r_hex+1 = o_conv->get_buffer( ). " x'65' must be x'0065' + +endmethod. + + + + + + METHOD convert_column2alpha. + + DATA: lv_uccpi TYPE i, + lv_text TYPE sychar02, + lv_module TYPE int4, + lv_column TYPE zexcel_cell_column. + +* Propagate zcx_excel if error occurs " issue #155 - less restrictive typing for ip_column + lv_column = convert_column2int( ip_column ). " issue #155 - less restrictive typing for ip_column + +*--------------------------------------------------------------------* +* Check whether column is in allowed range for EXCEL to handle ( 1-16384 ) +*--------------------------------------------------------------------* + IF lv_column > 16384 + OR lv_column < 1. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Index out of bounds'. + ENDIF. + +*--------------------------------------------------------------------* +* Build alpha representation of column +*--------------------------------------------------------------------* + WHILE lv_column GT 0. + + lv_module = ( lv_column - 1 ) MOD 26. + lv_uccpi = 65 + lv_module. + + lv_column = ( lv_column - lv_module ) / 26. + + lv_text = cl_abap_conv_in_ce=>uccpi( lv_uccpi ). + CONCATENATE lv_text ep_column INTO ep_column. + + ENDWHILE. + +ENDMETHOD. + + + + + + METHOD convert_column2int. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-12-29 +* - ... +* changes: renaming variables to naming conventions +* removing unused variables +* removing commented out code that is inactive for more then half a year +* message made to support multilinguality +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#246 - error converting lower case column names +* - Stefan Schmöcker, 2012-12-29 +* changes: translating the correct variable to upper dase +* adding missing exception if input is a number +* that is out of bounds +* adding missing exception if input contains +* illegal characters like german umlauts +*--------------------------------------------------------------------* + + DATA: lv_column TYPE zexcel_cell_column_alpha, + lv_column_c TYPE char10, + lv_column_s TYPE string, + lv_errormessage TYPE string, " Can't pass '...'(abc) to exception-class + lv_modulo TYPE i. + +*--------------------------------------------------------------------* +* This module tries to identify which column a user wants to access +* Numbers as input are just passed back, anything else will be converted +* using EXCEL nomenclatura A = 1, AA = 27, ..., XFD = 16384 +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* Normalize input ( upper case , no gaps ) +*--------------------------------------------------------------------* + lv_column_c = ip_column. +* TRANSLATE lv_column TO UPPER CASE. " Fix #246 + TRANSLATE lv_column_c TO UPPER CASE. " Fix #246 + CONDENSE lv_column_c NO-GAPS. + IF lv_column_c EQ ''. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + +*--------------------------------------------------------------------* +* If a number gets passed, just convert it to an integer and return +* the converted value +*--------------------------------------------------------------------* + TRY. + IF lv_column_c CO '1234567890 '. " Fix #164 + ep_column = lv_column_c. " Fix #164 +*--------------------------------------------------------------------* +* Maximum column for EXCEL: XFD = 16384 " if anyone has a reference for this information - please add here instead of this comment +*--------------------------------------------------------------------* + IF ep_column > 16384 OR ep_column < 1. + lv_errormessage = 'Index out of bounds'(004). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + EXIT. + ENDIF. + CATCH cx_sy_conversion_no_number. "#EC NO_HANDLER + " Try the character-approach if approach via number has failed + ENDTRY. + +*--------------------------------------------------------------------* +* Raise error if unexpected characters turns up +*--------------------------------------------------------------------* + lv_column_s = lv_column_c. + IF lv_column_s CN sy-abcde. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + +*--------------------------------------------------------------------* +* Interpret input as number to base 26 with A=1, ... Z=26 +* Raise error if unexpected character turns up +*--------------------------------------------------------------------* +* 1st character +*--------------------------------------------------------------------* + lv_column = lv_column_c. + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+0(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + ep_column = lv_modulo. " Leftmost digit + +*--------------------------------------------------------------------* +* 2nd character if present +*--------------------------------------------------------------------* + CHECK lv_column+1(1) IS NOT INITIAL. " No need to continue if string ended + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+1(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + ep_column = 26 * ep_column + lv_modulo. " if second digit is present first digit is for 26^1 + +*--------------------------------------------------------------------* +* 3rd character if present +*--------------------------------------------------------------------* + CHECK lv_column+2(1) IS NOT INITIAL. " No need to continue if string ended + lv_modulo = cl_abap_conv_out_ce=>uccpi( lv_column+2(1) ) MOD zcl_excel_common=>c_excel_col_module. + IF lv_modulo < 1 OR lv_modulo > 26. +* lv_errormessage = 'Unable to interpret input as column'(003). +* RAISE EXCEPTION TYPE zcx_excel +* EXPORTING +* error = lv_errormessage. + MESSAGE e800(zabap2xlsx) INTO lv_errormessage. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + syst_at_raise = syst. + ENDIF. + ep_column = 26 * ep_column + lv_modulo. " if third digit is present first digit is for 26^2 and second digit for 26^1 + +*--------------------------------------------------------------------* +* Maximum column for EXCEL: XFD = 16384 " if anyone has a reference for this information - please add here instead of this comment +*--------------------------------------------------------------------* + IF ep_column > 16384 OR ep_column < 1. + lv_errormessage = 'Index out of bounds'(004). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + +ENDMETHOD. + + + + + + method CONVERT_COLUMNROW2COLUMN_A_ROW. +*--------------------------------------------------------------------* + "issue #256 - replacing char processing with regex +*--------------------------------------------------------------------* +* Stefan Schmöcker, 2013-08-11 +* Allow input to be CLIKE instead of STRING +*--------------------------------------------------------------------* + + DATA: pane_cell_row_a TYPE string, + lv_columnrow type string. + + lv_columnrow = i_columnrow. " Get rid of trailing blanks + + FIND REGEX '^(\D+)(\d+)$' IN lv_columnrow SUBMATCHES e_column + pane_cell_row_a. + e_row = pane_cell_row_a. + +endmethod. + + + + + + + + + + method CONVERT_RANGE2COLUMN_A_ROW. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-12-07 +* - ... +* changes: renaming variables to naming conventions +* aligning code +* added exceptionclass +* added errorhandling for invalid range +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#241 - error when sheetname contains "!" +* - sheetname should be returned unescaped +* - Stefan Schmöcker, 2012-12-07 +* changes: changed coding to support sheetnames with "!" +* unescaping sheetname +*--------------------------------------------------------------------* +* issue#155 - lessening restrictions of input parameters +* - Stefan Schmöcker, 2012-12-07 +* changes: i_range changed to clike +* e_sheet changed to clike +*--------------------------------------------------------------------* + + DATA: lv_sheet TYPE string, + lv_range TYPE string, + lv_columnrow_start TYPE string, + lv_columnrow_end TYPE string, + lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + + +*--------------------------------------------------------------------* +* Split input range into sheetname and Area +* 4 cases - a) input empty --> nothing to do +* - b) sheetname existing - starts with ' example 'Sheet 1'!$B$6:$D$13 +* - c) sheetname existing - does not start with ' example Sheet1!$B$6:$D$13 +* - d) no sheetname - just area example $B$6:$D$13 +*--------------------------------------------------------------------* +* Initialize output parameters + CLEAR: e_column_start, + e_column_end, + e_row_start, + e_row_end, + e_sheet. + + IF i_range IS INITIAL. " a) input empty --> nothing to do + EXIT. + + ELSEIF i_range(1) = `'`. " b) sheetname existing - starts with ' + FIND REGEX '\![^\!]*$' IN i_range MATCH OFFSET sy-fdpos. " Find last ! + IF sy-subrc = 0. + lv_sheet = i_range(sy-fdpos). + ADD 1 TO sy-fdpos. + lv_range = i_range. + SHIFT lv_range LEFT BY sy-fdpos PLACES. + ELSE. + lv_errormessage = 'Invalid range'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ELSEIF i_range CS '!'. " c) sheetname existing - does not start with ' + SPLIT i_range AT '!' INTO lv_sheet lv_range. + + ELSE. " d) no sheetname - just area + lv_range = i_range. + ENDIF. + + REPLACE ALL OCCURRENCES OF '$' IN lv_range WITH ''. + SPLIT lv_range AT ':' INTO lv_columnrow_start lv_columnrow_end. + + convert_columnrow2column_a_row( EXPORTING + i_columnrow = lv_columnrow_start + IMPORTING + e_column = e_column_start + e_row = e_row_start ). + convert_columnrow2column_a_row( EXPORTING + i_columnrow = lv_columnrow_end + IMPORTING + e_column = e_column_end + e_row = e_row_end ). + + e_sheet = unescape_string( lv_sheet ). " Return in unescaped form +endmethod. + + + + + method DATE_TO_EXCEL_STRING. + DATA: lv_date_diff TYPE i. + + CHECK ip_value IS NOT INITIAL. + " Needed hack caused by the problem that: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year + " http://support.microsoft.com/kb/214326/en-us + IF ip_value > c_excel_1900_leap_year. + lv_date_diff = ip_value - c_excel_baseline_date + 2. + ELSE. + lv_date_diff = ip_value - c_excel_baseline_date + 1. + ENDIF. + ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_date_diff ). +endmethod. + + + + + method DESCRIBE_STRUCTURE. + DATA: lt_components TYPE abap_component_tab, + lt_comps TYPE abap_component_tab, + lo_struct TYPE REF TO cl_abap_structdescr, + ls_component TYPE abap_componentdescr, + lo_elemdescr TYPE REF TO cl_abap_elemdescr, + ls_dfies TYPE dfies, + l_position TYPE tabfdpos. + + "for DDIC structure get the info directly + IF io_struct->is_ddic_type( ) = abap_true. + rt_dfies = io_struct->get_ddic_field_list( ). + ELSE. + lt_components = io_struct->get_components( ). + + LOOP AT lt_components INTO ls_component. + structure_case( EXPORTING is_component = ls_component + CHANGING xt_components = lt_comps ) . + ENDLOOP. + LOOP AT lt_comps INTO ls_component. + CLEAR ls_dfies. + IF ls_component-type->kind = cl_abap_typedescr=>kind_elem. "E Elementary Type + ADD 1 TO l_position. + lo_elemdescr ?= ls_component-type. + IF lo_elemdescr->is_ddic_type( ) = abap_true. + ls_dfies = lo_elemdescr->get_ddic_field( ). + ls_dfies-fieldname = ls_component-name. + ls_dfies-position = l_position. + ELSE. + ls_dfies-fieldname = ls_component-name. + ls_dfies-position = l_position. + ls_dfies-inttype = lo_elemdescr->type_kind. + ls_dfies-leng = lo_elemdescr->length. + ls_dfies-outputlen = lo_elemdescr->length. + ls_dfies-decimals = lo_elemdescr->decimals. + ls_dfies-fieldtext = ls_component-name. + ls_dfies-reptext = ls_component-name. + ls_dfies-scrtext_s = ls_component-name. + ls_dfies-scrtext_m = ls_component-name. + ls_dfies-scrtext_l = ls_component-name. + ls_dfies-dynpfld = abap_true. + ENDIF. + INSERT ls_dfies INTO TABLE rt_dfies. + ENDIF. + ENDLOOP. + ENDIF. +endmethod. + + + + + + + + METHOD determine_resulting_formula. + + DATA: lv_row_difference TYPE i, + lv_col_difference TYPE i. + +*--------------------------------------------------------------------* +* Calculate distance of reference and current cell +*--------------------------------------------------------------------* + calculate_cell_distance( EXPORTING + iv_reference_cell = iv_reference_cell + iv_current_cell = iv_current_cell + IMPORTING + ev_row_difference = lv_row_difference + ev_col_difference = lv_col_difference ). + +*--------------------------------------------------------------------* +* and shift formula by using the row- and columndistance +*--------------------------------------------------------------------* + ev_resulting_formula = shift_formula( iv_reference_formula = iv_reference_formula + iv_shift_rows = lv_row_difference + iv_shift_cols = lv_col_difference ). + +ENDMETHOD. "determine_resulting_formula + + + + + method ENCRYPT_PASSWORD. + + DATA lv_curr_offset TYPE i. + DATA lv_curr_char TYPE c LENGTH 1. + DATA lv_curr_hex TYPE zexcel_pwd_hash. + DATA lv_pwd_len TYPE zexcel_pwd_hash. + DATA lv_pwd_hash TYPE zexcel_pwd_hash. + + CONSTANTS: + lv_0x7fff TYPE zexcel_pwd_hash VALUE '7FFF', + lv_0x0001 TYPE zexcel_pwd_hash VALUE '0001', + lv_0xce4b TYPE zexcel_pwd_hash VALUE 'CE4B'. + + DATA lv_pwd TYPE zexcel_aes_password. + + lv_pwd = i_pwd(15). + + lv_pwd_len = STRLEN( lv_pwd ). + lv_curr_offset = lv_pwd_len - 1. + + WHILE lv_curr_offset GE 0. + + lv_curr_char = lv_pwd+lv_curr_offset(1). + lv_curr_hex = char2hex( lv_curr_char ). + + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). + + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_curr_hex. + SUBTRACT 1 FROM lv_curr_offset. + ENDWHILE. + + lv_pwd_hash = ( shr14( lv_pwd_hash ) BIT-AND lv_0x0001 ) BIT-OR ( shl01( lv_pwd_hash ) BIT-AND lv_0x7fff ). + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_0xce4b. + lv_pwd_hash = lv_pwd_hash BIT-XOR lv_pwd_len. + + WRITE lv_pwd_hash TO r_encrypted_pwd. + +endmethod. + + + + + method ESCAPE_STRING. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-12-08 +* - ... +* changes: aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#242 - Support escaping for white-spaces +* - Escaping also necessary when ' encountered in input +* - Stefan Schmöcker, 2012-12-08 +* changes: switched check if escaping is necessary to regular expression +* and moved the "REPLACE" +*--------------------------------------------------------------------* +* issue#155 - lessening restrictions of input parameters +* - Stefan Schmöcker, 2012-12-08 +* changes: ip_value changed to clike +*--------------------------------------------------------------------* + DATA: lv_value TYPE string. + +*--------------------------------------------------------------------* +* There exist various situations when a space will be used to separate +* different parts of a string. When we have a string consisting spaces +* that will cause errors unless we "escape" the string by putting ' at +* the beginning and at the end of the string. +*--------------------------------------------------------------------* + + +*--------------------------------------------------------------------* +* When allowing clike-input parameters we might encounter trailing +* "real" blanks . These are automatically eliminated when moving +* the input parameter to a string. +* Now any remaining spaces ( white-spaces or normal spaces ) should +* trigger the escaping as well as any ' +*--------------------------------------------------------------------* + lv_value = ip_value. + + + FIND REGEX `\s|'` IN lv_value. " \s finds regular and white spaces + IF sy-subrc = 0. + REPLACE ALL OCCURRENCES OF `'` IN lv_value WITH `''`. + CONCATENATE `'` lv_value `'` INTO lv_value . + ENDIF. + + ep_escaped_value = lv_value. + +endmethod. + + + + + + method EXCEL_STRING_TO_DATE. + DATA: lv_date_int TYPE i. + + TRY. + lv_date_int = ip_value. + ep_value = lv_date_int + c_excel_baseline_date - 2. + " Needed hack caused by the problem that: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year + " http://support.microsoft.com/kb/214326/en-us + IF ep_value < c_excel_1900_leap_year. + ep_value = ep_value + 1. + ENDIF. + CATCH cx_sy_conversion_error. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Index out of bounds'. + ENDTRY. +endmethod. + + + + + + method EXCEL_STRING_TO_TIME. + DATA: lv_seconds_in_day TYPE i, + lv_day_fraction TYPE f, + lc_seconds_in_day TYPE i VALUE 86400. + + TRY. + + lv_day_fraction = ip_value. + lv_seconds_in_day = lv_day_fraction * lc_seconds_in_day. + + ep_value = lv_seconds_in_day. + + CATCH cx_sy_conversion_error. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret time'. + ENDTRY. +endmethod. + + + + + + + method FAIL. + DATA: ls_seoclass TYPE seoclass. + + " Let see >=7.02 + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_ABAP_UNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>fail + EXPORTING + msg = msg + level = level + quit = quit + detail = detail. + ELSE. + " Let see >=7.00 or even lower + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_AUNIT_ASSERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>fail + EXPORTING + msg = msg + level = level + quit = quit + detail = detail. + ELSE. +* We do nothing for now not supported + ENDIF. + ENDIF. + +endmethod. + + + + + method GET_FIELDCATALOG. + DATA: lr_dref_tab TYPE REF TO data, + lo_salv_table TYPE REF TO cl_salv_table, + lo_salv_columns_table TYPE REF TO cl_salv_columns_table, + lt_salv_t_column_ref TYPE salv_t_column_ref, + ls_salv_t_column_ref LIKE LINE OF lt_salv_t_column_ref, + lo_salv_column_table TYPE REF TO cl_salv_column_table. + + FIELD-SYMBOLS: <tab> TYPE STANDARD TABLE. + FIELD-SYMBOLS: <fcat> LIKE LINE OF ep_fieldcatalog. + +* Get copy of IP_TABLE-structure <-- must be changeable to create salv + CREATE DATA lr_dref_tab LIKE ip_table. + ASSIGN lr_dref_tab->* TO <tab>. +* Create salv --> implicitly create fieldcat + TRY. + cl_salv_table=>factory( IMPORTING + r_salv_table = lo_salv_table + CHANGING + t_table = <tab> ). + lo_salv_columns_table = lo_salv_table->get_columns( ). + lt_salv_t_column_ref = lo_salv_columns_table->get( ). + CATCH cx_root. +* maybe some errorhandling here - just haven't made up my mind yet + ENDTRY. + +* Loop through columns and set relevant fields ( fieldname, texts ) + LOOP AT lt_salv_t_column_ref INTO ls_salv_t_column_ref. + + lo_salv_column_table ?= ls_salv_t_column_ref-r_column. + APPEND INITIAL LINE TO ep_fieldcatalog ASSIGNING <fcat>. + <fcat>-position = sy-tabix. + <fcat>-fieldname = ls_salv_t_column_ref-columnname. + <fcat>-scrtext_s = ls_salv_t_column_ref-r_column->get_short_text( ). + <fcat>-scrtext_m = ls_salv_t_column_ref-r_column->get_medium_text( ). + <fcat>-scrtext_l = ls_salv_t_column_ref-r_column->get_long_text( ). + + <fcat>-dynpfld = 'X'. " What in the world would we exclude here? + IF <fcat>-position = 1. " except for the MANDT-field of most tables ( 1st column that is ) + IF lo_salv_column_table->get_ddic_datatype( ) = 'CLNT'. + CLEAR <fcat>-dynpfld. + ENDIF. + ENDIF. + +* For fields that don't a description ( i.e. defined by "field type i," ) +* just use the fieldname as description - that is better than nothing + IF <fcat>-scrtext_s IS INITIAL + AND <fcat>-scrtext_m IS INITIAL + AND <fcat>-scrtext_l IS INITIAL. + CONCATENATE 'Col:' <fcat>-fieldname INTO <fcat>-scrtext_l SEPARATED BY space. + <fcat>-scrtext_m = <fcat>-scrtext_l. + <fcat>-scrtext_s = <fcat>-scrtext_l. + ENDIF. + + ENDLOOP. + +endmethod. + + + + + + + + method IS_CELL_IN_RANGE. + DATA lv_column_start TYPE zexcel_cell_column_alpha. + DATA lv_column_end TYPE zexcel_cell_column_alpha. + DATA lv_row_start TYPE zexcel_cell_row. + DATA lv_row_end TYPE zexcel_cell_row. + DATA lv_column_start_i TYPE zexcel_cell_column. + DATA lv_column_end_i TYPE zexcel_cell_column. + DATA lv_column_i TYPE zexcel_cell_column. + + +* Split range and convert columns + convert_range2column_a_row( + exporting + i_range = ip_range + IMPORTING + e_column_start = lv_column_start + e_column_end = lv_column_end + e_row_start = lv_row_start + e_row_end = lv_row_end ). + + lv_column_start_i = convert_column2int( ip_column = lv_column_start ). + lv_column_end_i = convert_column2int( ip_column = lv_column_end ). + + lv_column_i = convert_column2int( ip_column = ip_column ). + +* Check if cell is in range + IF lv_column_i >= lv_column_start_i AND + lv_column_i <= lv_column_end_i AND + ip_row >= lv_row_start AND + ip_row <= lv_row_end. + rp_in_range = abap_true. + ENDIF. +endmethod. + + + + + method NUMBER_TO_EXCEL_STRING. + DATA: lv_value_c TYPE c LENGTH 100. + + WRITE ip_value TO lv_value_c EXPONENT 0 NO-GROUPING NO-SIGN. + REPLACE ALL OCCURRENCES OF ',' IN lv_value_c WITH '.'. + + ep_value = lv_value_c. + CONDENSE ep_value. + + IF ip_value < 0. + CONCATENATE '-' ep_value INTO ep_value. + ELSEIF ip_value EQ 0. + ep_value = '0'. + ENDIF. +endmethod. + + + + + + method RECURSIVE_CLASS_TO_STRUCT. + " # issue 139 +* is working for me - but after looking through this coding I guess +* I'll rewrite this to a version w/o recursion +* This is private an no one using it so far except me, so no need to hurry + DATA: descr TYPE REF TO cl_abap_structdescr, + wa_component LIKE LINE OF descr->components, + attribute_name TYPE fieldname, + flag_class TYPE flag, + o_border TYPE REF TO zcl_excel_style_border. + + FIELD-SYMBOLS: <field> TYPE any, + <fieldx> TYPE any, + <class> TYPE REF TO object, + <attribute> TYPE any. + + + descr ?= cl_abap_structdescr=>describe_by_data( e_target ). + + LOOP AT descr->components INTO wa_component. + +* Assign structure and X-structure + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO <field>. + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_targetx TO <fieldx>. +* At least one field in the structure should be marked - otherwise continue with next field + CLEAR flag_class. +* maybe source is just a structure - try assign component... + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO <attribute>. + IF sy-subrc <> 0. +* not - then it is an attribute of the class - use different assign then + CONCATENATE 'i_source->' wa_component-name INTO attribute_name. + ASSIGN (attribute_name) TO <attribute>. + IF sy-subrc <> 0. + EXIT. + ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps + flag_class = abap_true. + ENDIF. + + CASE wa_component-type_kind. + WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursio +* IF flag_class = abap_true. +** Only borders will be passed as unbound references. But since we want to set a value we have to create an instance +* ENDIF. + zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = <attribute> + CHANGING e_target = <field> + e_targetx = <fieldx> ). + WHEN OTHERS. + <field> = <attribute>. + <fieldx> = abap_true. + + ENDCASE. + ENDLOOP. + +endmethod. + + + + + + method RECURSIVE_STRUCT_TO_CLASS. + " # issue 139 +* is working for me - but after looking through this coding I guess +* I'll rewrite this to a version w/o recursion +* This is private an no one using it so far except me, so no need to hurry + DATA: descr TYPE REF TO cl_abap_structdescr, + wa_component LIKE LINE OF descr->components, + attribute_name TYPE fieldname, + flag_class TYPE flag, + o_border TYPE REF TO zcl_excel_style_border. + + FIELD-SYMBOLS: <field> TYPE any, + <fieldx> TYPE any, + <class> TYPE REF TO object, + <attribute> TYPE any, + <attribute_s> TYPE ANY TABLE. + + + descr ?= cl_abap_structdescr=>describe_by_data( i_source ). + + LOOP AT descr->components INTO wa_component. + +* Assign structure and X-structure + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_source TO <field>. + ASSIGN COMPONENT wa_component-name OF STRUCTURE i_sourcex TO <fieldx>. +* At least one field in the structure should be marked - otherwise continue with next field + CHECK <fieldx> CA abap_true. + CLEAR flag_class. +* maybe target is just a structure - try assign component... + ASSIGN COMPONENT wa_component-name OF STRUCTURE e_target TO <attribute>. + IF sy-subrc <> 0. +* not - then it is an attribute of the class - use different assign then + CONCATENATE 'E_TARGET->' wa_component-name INTO attribute_name. + ASSIGN (attribute_name) TO <attribute>. + IF sy-subrc <> 0.EXIT.ENDIF. " Should not happen if structure is built properly - otherwise just exit to create no dumps + flag_class = abap_true. + ENDIF. + + CASE wa_component-type_kind. + WHEN cl_abap_structdescr=>typekind_struct1 OR cl_abap_structdescr=>typekind_struct2. " Structure --> use recursion + IF flag_class = abap_true AND <attribute> IS INITIAL. +* Only borders will be passed as unbound references. But since we want to set a value we have to create an instance + CREATE OBJECT o_border. + <attribute> = o_border. + ENDIF. + zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = <field> + i_sourcex = <fieldx> + CHANGING e_target = <attribute> ). +* WHEN cl_abap_structdescr=>typekind_struct2. " String +* CHECK <fieldx> = abap_true. " Marked for change +* <attribute_s> = <field>. + WHEN OTHERS. + CHECK <fieldx> = abap_true. " Marked for change + <attribute> = <field>. + + ENDCASE. + ENDLOOP. + +endmethod. + + + + + + + + METHOD shift_formula. + + CONSTANTS: lcv_operators TYPE string VALUE '+-/*^%=<>&, !', + lcv_letters TYPE string VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ$', + lcv_digits TYPE string VALUE '0123456789', + lcv_cell_reference_error TYPE string VALUE '#REF!'. + + DATA: lv_tcnt TYPE i, " Counter variable + lv_tlen TYPE i, " Temp variable length + lv_cnt TYPE i, " Counter variable + lv_cnt2 TYPE i, " Counter variable + lv_offset1 TYPE i, " Character offset + lv_numchars TYPE i, " Number of characters counter + lv_tchar(1) TYPE c, " Temp character + lv_tchar2(1) TYPE c, " Temp character + lv_cur_form(132) TYPE c, " Formula for current cell + lv_ref_cell_addr TYPE string, " Reference cell address + lv_tcol1 TYPE string, " Temp column letter + lv_tcol2 TYPE string, " Temp column letter + lv_tcoln TYPE i, " Temp column number + lv_trow1 TYPE string, " Temp row number + lv_trow2 TYPE string, " Temp row number + lv_flen TYPE i, " Length of reference formula + lv_tlen2 TYPE i, " Temp variable length + lv_substr1 TYPE string, " Substring variable + lv_abscol TYPE string, " Absolute column symbol + lv_absrow TYPE string, " Absolute row symbol + + lv_errormessage TYPE string. + + FIELD-SYMBOLS: <find_my_include> TYPE ANY. + +*--------------------------------------------------------------------* +* When copying a cell in EXCEL to another cell any inherent formulas +* are copied as well. Cell-references in the formula are being adjusted +* by the distance of the new cell to the original one +*--------------------------------------------------------------------* +* §1 Parse reference formula character by character +* §2 Identify Cell-references +* §3 Shift cell-reference +* §4 Build resulting formula +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* No distance --> Reference = resulting cell/formula +*--------------------------------------------------------------------* + IF iv_shift_cols = 0 + AND iv_shift_rows = 0. + ev_resulting_formula = iv_reference_formula. + EXIT. " done + ENDIF. + + + lv_flen = STRLEN( iv_reference_formula ). + lv_numchars = 1. + +*--------------------------------------------------------------------* +* §1 Parse reference formula character by character +*--------------------------------------------------------------------* + DO lv_flen TIMES. + + CLEAR: lv_tchar, + lv_substr1, + lv_ref_cell_addr. + lv_cnt2 = lv_cnt + 1. + IF lv_cnt2 > lv_flen. + EXIT. " Done + ENDIF. + +*--------------------------------------------------------------------* +* Here we have the current character in the formula +*--------------------------------------------------------------------* + lv_tchar = iv_reference_formula+lv_cnt(1). + +*--------------------------------------------------------------------* +* Operators or opening parenthesis will separate possible cellreferences +*--------------------------------------------------------------------* + IF ( lv_tchar CA lcv_operators + OR lv_tchar CA '(' ) + AND lv_cnt2 = 1. + lv_substr1 = iv_reference_formula+lv_offset1(1). + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. + +*--------------------------------------------------------------------* +* Quoted literal text holds no cell reference --> advance to end of text +*--------------------------------------------------------------------* + IF lv_tchar EQ '"'. + lv_cnt = lv_cnt + 1. + lv_numchars = lv_numchars + 1. + lv_tchar = iv_reference_formula+lv_cnt(1). + WHILE lv_tchar NE '"'. + + lv_cnt = lv_cnt + 1. + lv_numchars = lv_numchars + 1. + lv_tchar = iv_reference_formula+lv_cnt(1). + + ENDWHILE. + lv_cnt2 = lv_cnt + 1. + lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + IF lv_cnt = lv_flen. + EXIT. + ENDIF. + lv_offset1 = lv_cnt. + lv_numchars = 1. + lv_tchar = iv_reference_formula+lv_cnt(1). + lv_cnt2 = lv_cnt + 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. + + +*--------------------------------------------------------------------* +* Operators or parenthesis or last character in formula will separate possible cellreferences +*--------------------------------------------------------------------* + IF lv_tchar CA lcv_operators + OR lv_tchar CA '():' + OR lv_cnt2 = lv_flen. + IF lv_cnt > 0. + lv_substr1 = iv_reference_formula+lv_offset1(lv_numchars). +*--------------------------------------------------------------------* +* Check for text concatenation and functions +*--------------------------------------------------------------------* + IF ( lv_tchar CA lcv_operators AND lv_tchar EQ lv_substr1 ) OR lv_tchar EQ '('. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ENDIF. + + lv_tlen = lv_cnt2 - lv_offset1. +*--------------------------------------------------------------------* +* Exclude mathematical operators and closing parentheses +*--------------------------------------------------------------------* + IF lv_tchar CA lcv_operators + OR lv_tchar CA ':)'. + IF lv_cnt2 = lv_flen + AND lv_numchars = 1. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. " --> next character in formula can be analyzed + ELSE. + lv_tlen = lv_tlen - 1. + ENDIF. + ENDIF. +*--------------------------------------------------------------------* +* Capture reference cell address +*--------------------------------------------------------------------* + TRY. + MOVE: iv_reference_formula+lv_offset1(lv_tlen) TO lv_ref_cell_addr. "Ref cell address + CATCH cx_root. + lv_errormessage = 'Internal error in Class ZCL_EXCEL_COMMON Method SHIFT_FORMULA Spot 1 '. " Change to messageclass if possible + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDTRY. + +*--------------------------------------------------------------------* +* Split cell address into characters and numbers +*--------------------------------------------------------------------* + CLEAR: lv_tlen, + lv_tcnt, + lv_tcol1, + lv_trow1. + lv_tlen = STRLEN( lv_ref_cell_addr ). + IF lv_tlen <> 0. + CLEAR: lv_tcnt. + DO lv_tlen TIMES. + CLEAR: lv_tchar2. + lv_tchar2 = lv_ref_cell_addr+lv_tcnt(1). + IF lv_tchar2 CA lcv_letters. + CONCATENATE lv_tcol1 lv_tchar2 INTO lv_tcol1. + ELSEIF lv_tchar2 CA lcv_digits. + CONCATENATE lv_trow1 lv_tchar2 INTO lv_trow1. + ENDIF. + lv_tcnt = lv_tcnt + 1. + ENDDO. + ENDIF. +*--------------------------------------------------------------------* +* Check for invalid cell address +*--------------------------------------------------------------------* + IF lv_tcol1 IS INITIAL OR lv_trow1 IS INITIAL. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. +*--------------------------------------------------------------------* +* Check for range names +*--------------------------------------------------------------------* + CLEAR: lv_tlen. + lv_tlen = STRLEN( lv_tcol1 ). + IF lv_tlen GT 3. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. +*--------------------------------------------------------------------* +* Check for valid row +*--------------------------------------------------------------------* + IF lv_trow1 GT 1048576. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDIF. +*--------------------------------------------------------------------* +* Check for absolute column or row reference +*--------------------------------------------------------------------* + CLEAR: lv_tcol2, + lv_trow2, + lv_abscol, + lv_absrow. + lv_tlen2 = STRLEN( lv_tcol1 ) - 1. + IF lv_tcol1 IS NOT INITIAL. + lv_abscol = lv_tcol1(1). + ENDIF. + IF lv_tlen2 GE 0. + lv_absrow = lv_tcol1+lv_tlen2(1). + ENDIF. + IF lv_abscol EQ '$' AND lv_absrow EQ '$'. + lv_tlen2 = lv_tlen2 - 1. + IF lv_tlen2 > 0. + lv_tcol1 = lv_tcol1+1(lv_tlen2). + ENDIF. + lv_tlen2 = lv_tlen2 + 1. + ELSEIF lv_abscol EQ '$'. + lv_tcol1 = lv_tcol1+1(lv_tlen2). + ELSEIF lv_absrow EQ '$'. + lv_tcol1 = lv_tcol1(lv_tlen2). + ENDIF. +*--------------------------------------------------------------------* +* Check for valid column +*--------------------------------------------------------------------* + TRY. + lv_tcoln = zcl_excel_common=>convert_column2int( lv_tcol1 ) + iv_shift_cols. + CATCH zcx_excel. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDTRY. +*--------------------------------------------------------------------* +* Check whether there is a referencing problem +*--------------------------------------------------------------------* + lv_trow2 = lv_trow1 + iv_shift_rows. + IF ( lv_tcoln < 1 AND lv_abscol <> '$' ) " Maybe we should add here max-column and max row-tests as well. + OR ( lv_trow2 < 1 AND lv_absrow <> '$' ). " Check how EXCEL behaves in this case +*--------------------------------------------------------------------* +* Referencing problem encountered --> set error +*--------------------------------------------------------------------* + CONCATENATE lv_cur_form lcv_cell_reference_error INTO lv_cur_form. + ELSE. +*--------------------------------------------------------------------* +* No referencing problems --> adjust row and column +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* Adjust column +*--------------------------------------------------------------------* + IF lv_abscol EQ '$'. + CONCATENATE lv_cur_form lv_abscol lv_tcol1 INTO lv_cur_form. + ELSEIF iv_shift_cols EQ 0. + CONCATENATE lv_cur_form lv_tcol1 INTO lv_cur_form. + ELSE. + TRY. + lv_tcol2 = zcl_excel_common=>convert_column2alpha( lv_tcoln ). + CONCATENATE lv_cur_form lv_tcol2 INTO lv_cur_form. + CATCH zcx_excel. + CONCATENATE lv_cur_form lv_substr1 INTO lv_cur_form. + lv_cnt = lv_cnt + 1. + lv_offset1 = lv_cnt. + lv_cnt2 = lv_cnt + 1. + lv_numchars = 1. + CONTINUE. + ENDTRY. + ENDIF. +*--------------------------------------------------------------------* +* Adjust row +*--------------------------------------------------------------------* + IF lv_absrow EQ '$'. + CONCATENATE lv_cur_form lv_absrow lv_trow1 INTO lv_cur_form. + ELSEIF iv_shift_rows = 0. + CONCATENATE lv_cur_form lv_trow1 INTO lv_cur_form. +* elseif lv_trow2 < 1. +* CONCATENATE lv_cur_form lc_cell_reference_error INTO lv_cur_form. + ELSE. + CONCATENATE lv_cur_form lv_trow2 INTO lv_cur_form. + ENDIF. + ENDIF. + + lv_numchars = 0. + IF lv_tchar CA lcv_operators + OR lv_tchar CA ':)'. + CONCATENATE lv_cur_form lv_tchar INTO lv_cur_form. + ENDIF. + lv_offset1 = lv_cnt2. + ENDIF. + ENDIF. + lv_numchars = lv_numchars + 1. + lv_cnt = lv_cnt + 1. + lv_cnt2 = lv_cnt + 1. + + ENDDO. + + + +*--------------------------------------------------------------------* +* Return resulting formula +*--------------------------------------------------------------------* + IF lv_cur_form IS NOT INITIAL. + MOVE lv_cur_form TO ev_resulting_formula. + ENDIF. + +ENDMETHOD. + + + + + method SHL01. + + DATA: + lv_bit TYPE i, + lv_curr_pos TYPE i VALUE 2, + lv_prev_pos TYPE i VALUE 1. + + DO 15 TIMES. + GET BIT lv_curr_pos OF i_pwd_hash INTO lv_bit. + SET BIT lv_prev_pos OF r_pwd_hash TO lv_bit. + ADD 1 TO lv_curr_pos. + ADD 1 TO lv_prev_pos. + ENDDO. + SET BIT 16 OF r_pwd_hash TO 0. + +endmethod. + + + + + method SHR14. + + DATA: + lv_bit TYPE i, + lv_curr_pos TYPE i, + lv_next_pos TYPE i. + + r_pwd_hash = i_pwd_hash. + + DO 14 TIMES. + lv_curr_pos = 15. + lv_next_pos = 16. + + DO 15 TIMES. + GET BIT lv_curr_pos OF r_pwd_hash INTO lv_bit. + SET BIT lv_next_pos OF r_pwd_hash TO lv_bit. + SUBTRACT 1 FROM lv_curr_pos. + SUBTRACT 1 FROM lv_next_pos. + ENDDO. + SET BIT 1 OF r_pwd_hash TO 0. + ENDDO. + +endmethod. + + + + + + + method SPLIT_FILE. + + DATA: lt_hlp TYPE TABLE OF text255, + ls_hlp TYPE text255. + + DATA: lf_ext(10) TYPE c, + lf_dot_ext(10) TYPE c. + DATA: lf_str TYPE text255, + lf_anz TYPE i, + lf_len TYPE i. +** --------------------------------------------------------------------- + + CLEAR: lt_hlp, + ep_file, + ep_extension, + ep_dotextension. + +** Split the whole file at '.' + SPLIT ip_file AT '.' INTO TABLE lt_hlp. + +** get the extenstion from the last line of table + DESCRIBE TABLE lt_hlp LINES lf_anz. + IF lf_anz <= 1. + ep_file = ip_file. + EXIT. + ENDIF. + + READ TABLE lt_hlp INTO ls_hlp INDEX lf_anz. + ep_extension = ls_hlp. + lf_ext = ls_hlp. + IF NOT lf_ext IS INITIAL. + CONCATENATE '.' lf_ext INTO lf_dot_ext. + ENDIF. + ep_dotextension = lf_dot_ext. + +** get only the filename + lf_len = strlen( ip_file ) - strlen( lf_dot_ext ). + IF lf_len > 0. + ep_file = ip_file(lf_len). + ENDIF. + +endmethod. + + + + + method STRUCTURE_CASE. + DATA: lt_comp_str TYPE abap_component_tab. + + CASE is_component-type->kind. + WHEN cl_abap_typedescr=>kind_elem. "E Elementary Type + INSERT is_component INTO TABLE xt_components. + WHEN cl_abap_typedescr=>kind_table. "T Table + INSERT is_component INTO TABLE xt_components. + WHEN cl_abap_typedescr=>kind_struct. "S Structure + lt_comp_str = structure_recursive( is_component = is_component ). + INSERT LINES OF lt_comp_str INTO TABLE xt_components. + WHEN OTHERS. "cl_abap_typedescr=>kind_ref or cl_abap_typedescr=>kind_class or cl_abap_typedescr=>kind_intf. +* We skip it. for now. + ENDCASE. +endmethod. + + + + + method STRUCTURE_RECURSIVE. + DATA: lo_struct TYPE REF TO cl_abap_structdescr, + lt_components TYPE abap_component_tab, + ls_components TYPE abap_componentdescr. + + REFRESH rt_components. + + lo_struct ?= is_component-type. + lt_components = lo_struct->get_components( ). + + LOOP AT lt_components INTO ls_components. + structure_case( EXPORTING is_component = ls_components + CHANGING xt_components = rt_components ) . + ENDLOOP. + +endmethod. + + + + + method TIME_TO_EXCEL_STRING. + DATA: lv_seconds_in_day TYPE i, + lv_day_fraction TYPE f, + lc_time_baseline TYPE t VALUE '000000', + lc_seconds_in_day TYPE i VALUE 86400. + + lv_seconds_in_day = ip_value - lc_time_baseline. + lv_day_fraction = lv_seconds_in_day / lc_seconds_in_day. + ep_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_day_fraction ). +endmethod. + + + + + + method UNESCAPE_STRING. + + CONSTANTS lcv_regex TYPE string VALUE `^'[^']` & `|` & " Beginning single ' OR + `[^']'$` & `|` & " Trailing single ' OR + `[^']'[^']`. " Single ' somewhere in between + + + DATA: lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + +*--------------------------------------------------------------------* +* This method is used to extract the "real" string from an escaped string. +* An escaped string can be identified by a beginning ' which must be +* accompanied by a trailing ' +* All '' in between beginning and trailing ' are treated as single ' +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* When allowing clike-input parameters we might encounter trailing +* "real" blanks . These are automatically eliminated when moving +* the input parameter to a string. +*--------------------------------------------------------------------* + ev_unescaped_string = iv_escaped. " Pass through if not escaped + + CHECK ev_unescaped_string IS NOT INITIAL. " Nothing to do if empty + CHECK ev_unescaped_string(1) = `'`. " Nothing to do if not escaped + +*--------------------------------------------------------------------* +* Remove leading and trailing ' +*--------------------------------------------------------------------* + REPLACE REGEX `^'(.*)'$` IN ev_unescaped_string WITH '$1'. + IF sy-subrc <> 0. + lv_errormessage = 'Input not properly escaped - &'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* Any remaining single ' should not be here +*--------------------------------------------------------------------* + FIND REGEX lcv_regex IN ev_unescaped_string. + IF sy-subrc = 0. + lv_errormessage = 'Input not properly escaped - &'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* Replace '' with ' +*--------------------------------------------------------------------* + REPLACE ALL OCCURRENCES OF `''` IN ev_unescaped_string WITH `'`. + + +endmethod. + + + + + + + + + + + + + + + + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + TYPES: BEGIN OF t_relationship, + id TYPE string, + type TYPE string, + target TYPE string, + END OF t_relationship. + +* + CLASS lcl_abap_zip_archive DEFINITION + INHERITING FROM lcl_zip_archive + CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS create + IMPORTING i_data TYPE xstring + RETURNING value(r_zip) TYPE REF TO lcl_zip_archive + RAISING zcx_excel. + METHODS read REDEFINITION. + PRIVATE SECTION. + DATA: abap_zip TYPE REF TO cl_abap_zip. + METHODS constructor IMPORTING i_data TYPE xstring + RAISING zcx_excel. + ENDCLASS. "lcl_abap_zip_archive DEFINITION + +* + CLASS lcl_alternate_zip_archive DEFINITION + INHERITING FROM lcl_zip_archive + CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS create + IMPORTING i_data TYPE xstring + i_alternate_zip_class TYPE seoclsname + RETURNING value(r_zip) TYPE REF TO lcl_zip_archive + RAISING zcx_excel. + METHODS read REDEFINITION. + PRIVATE SECTION. + DATA: alternate_zip TYPE REF TO object. + METHODS constructor + IMPORTING i_data TYPE xstring + i_alternate_zip_class TYPE seoclsname + RAISING zcx_excel. + ENDCLASS. "lcl_alternate_zip_archive DEFINITION + +* + CLASS lcl_abap_zip_archive IMPLEMENTATION. + METHOD create. + CREATE OBJECT r_zip TYPE lcl_abap_zip_archive + EXPORTING + i_data = i_data. + ENDMETHOD. "create + METHOD constructor. + DATA: lv_errormessage TYPE string. + super->constructor( ). + CREATE OBJECT abap_zip. + abap_zip->load( + EXPORTING + zip = i_data + EXCEPTIONS + zip_parse_error = 1 + OTHERS = 2 ). + IF sy-subrc <> 0. + lv_errormessage = 'ZIP parse error'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "constructor + METHOD read. + DATA: lv_errormessage TYPE string. + CALL METHOD abap_zip->get + EXPORTING + name = i_filename + IMPORTING + content = r_content + EXCEPTIONS + zip_index_error = 1 + zip_decompression_error = 2 + OTHERS = 3. + IF sy-subrc <> 0. + lv_errormessage = 'File not found in zip-archive'(003). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "read + ENDCLASS. "lcl_abap_zip_archive IMPLEMENTATION + +* + CLASS lcl_alternate_zip_archive IMPLEMENTATION. + METHOD create. + CREATE OBJECT r_zip TYPE lcl_alternate_zip_archive + EXPORTING + i_alternate_zip_class = i_alternate_zip_class + i_data = i_data. + ENDMETHOD. "create + METHOD constructor. + DATA: lv_errormessage TYPE string. + super->constructor( ). + CREATE OBJECT alternate_zip TYPE (i_alternate_zip_class). + TRY. + CALL METHOD alternate_zip->('LOAD') + EXPORTING + zip = i_data + EXCEPTIONS + zip_parse_error = 1 + OTHERS = 2. + CATCH cx_sy_dyn_call_illegal_method. + lv_errormessage = 'Method LOAD missing in alternative zipclass'. "#EC NOTEXT This is a workaround until class CL_ABAP_ZIP is fixed + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDTRY. + + IF sy-subrc <> 0. + lv_errormessage = 'ZIP parse error'(002). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "constructor + METHOD read. + DATA: lv_errormessage TYPE string. + TRY. + CALL METHOD alternate_zip->('GET') + EXPORTING + name = i_filename + IMPORTING + content = r_content " Contents + EXCEPTIONS + zip_index_error = 1 + zip_decompression_error = 2 + OTHERS = 3. + CATCH cx_sy_dyn_call_illegal_method. + lv_errormessage = 'Method GET missing in alternative zipclass'. "#EC NOTEXT This is a workaround until class CL_ABAP_ZIP is fixed + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDTRY. + IF sy-subrc <> 0. + lv_errormessage = 'File not found in zip-archive'(003). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDMETHOD. "read + ENDCLASS. "lcl_alternate_zip_archive IMPLEMENTATION + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + +* +class lcl_zip_archive definition abstract. + public section. + methods read abstract + importing i_filename type csequence + returning value(r_content) type xstring " Remember copy-on-write! + raising zcx_excel. +endclass. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + IXML + + + + + + METHOD zif_excel_reader~load. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Map Document Properties to ZCL_EXCEL +*--------------------------------------------------------------------* + + CONSTANTS: lcv_core_properties TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + lcv_office_document TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument'. + + DATA: lo_rels TYPE REF TO if_ixml_document, + lo_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship. + +*--------------------------------------------------------------------* +* §1 Create EXCEL-Object we want to return to caller + +* §2 We need to read the the file "\\_rels\.rels" because it tells +* us where in this folder structure the data for the workbook +* is located in the xlsx zip-archive +* +* The xlsx Zip-archive has generally the following folder structure: +* <root> | +* |--> _rels +* |--> doc_Props +* |--> xl | +* |--> _rels +* |--> theme +* |--> worksheets + +* §3 Extracting from this the path&file where the workbook is located +* Following is an example how this file could be set up +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> +* <Relationship Target="docProps/app.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Id="rId3"/> +* <Relationship Target="docProps/core.xml" Type="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties" Id="rId2"/> +* <Relationship Target="xl/workbook.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument" Id="rId1"/> +* </Relationships> +*--------------------------------------------------------------------* + + +*--------------------------------------------------------------------* +* §1 Create EXCEL-Object we want to return to caller +*--------------------------------------------------------------------* + CREATE OBJECT r_excel. + + zip = create_zip_archive( i_xlsx_binary = i_excel2007 + i_use_alternate_zip = i_use_alternate_zip ). + +*--------------------------------------------------------------------* +* §2 Get file in folderstructure +*--------------------------------------------------------------------* + lo_rels = get_ixml_from_zip_archive( '_rels/.rels' ). + +*--------------------------------------------------------------------* +* §3 Cycle through the Relationship Tags and use the ones we need +*--------------------------------------------------------------------* + lo_node ?= lo_rels->find_from_name( 'Relationship' ). "#EC NOTEXT + WHILE lo_node IS BOUND. + + fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_relationship ). + CASE ls_relationship-type. + + WHEN lcv_office_document. +*--------------------------------------------------------------------* +* Parse workbook - main part here +*--------------------------------------------------------------------* + load_workbook( iv_workbook_full_filename = ls_relationship-target + io_excel = r_excel ). + + WHEN lcv_core_properties. + " 2do§1 Map Document Properties to ZCL_EXCEL + + WHEN OTHERS. + + ENDCASE. + lo_node ?= lo_node->get_next( ). + + ENDWHILE. + + +ENDMETHOD. + + + METHOD zif_excel_reader~load_file. + + DATA: lv_excel_data TYPE xstring. + +*--------------------------------------------------------------------* +* Read file into binary string +*--------------------------------------------------------------------* + IF i_from_applserver = abap_true. + lv_excel_data = read_from_applserver( i_filename ). + ELSE. + lv_excel_data = read_from_local_file( i_filename ). + ENDIF. + +*--------------------------------------------------------------------* +* Parse Excel data into ZCL_EXCEL object from binary string +*--------------------------------------------------------------------* + r_excel = zif_excel_reader~load( i_excel2007 = lv_excel_data + i_use_alternate_zip = i_use_alternate_zip ). + +ENDMETHOD. + + + + + + + METHOD create_zip_archive. + CASE i_use_alternate_zip. + WHEN space. + e_zip = lcl_abap_zip_archive=>create( i_xlsx_binary ). + WHEN OTHERS. + e_zip = lcl_alternate_zip_archive=>create( i_data = i_xlsx_binary + i_alternate_zip_class = i_use_alternate_zip ). + ENDCASE. +ENDMETHOD. + + + + + method fill_struct_from_attributes. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-07 +* - ... +* changes: renaming variables to naming conventions +* aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + + data: lv_name type string, + lo_attributes type ref to if_ixml_named_node_map, + lo_attribute type ref to if_ixml_attribute, + lo_iterator type ref to if_ixml_node_iterator. + + field-symbols: <component> type any. + +*--------------------------------------------------------------------* +* The values of named attributes of a tag are being read and moved into corresponding +* fields of given structure +* Behaves like move-corresonding tag to structure + +* Example: +* <Relationship Target="docProps/app.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties" Id="rId3"/> +* Here the attributes are Target, Type and Id. Thus if the passed +* structure has fieldnames Id and Target these would be filled with +* "rId3" and "docProps/app.xml" respectively +*--------------------------------------------------------------------* + clear cp_structure. + + lo_attributes = ip_element->get_attributes( ). + lo_iterator = lo_attributes->create_iterator( ). + lo_attribute ?= lo_iterator->get_next( ). + while lo_attribute is bound. + + lv_name = lo_attribute->get_name( ). + translate lv_name to upper case. + assign component lv_name of structure cp_structure to <component>. + if sy-subrc = 0. + <component> = lo_attribute->get_value( ). + endif. + lo_attribute ?= lo_iterator->get_next( ). + + endwhile. + + +endmethod. + + + + + + METHOD get_from_zip_archive. + + ASSERT zip IS BOUND. " zip object has to exist at this point + + r_content = zip->read( i_filename ). + +ENDMETHOD. + + + + + + + METHOD get_ixml_from_zip_archive. + + DATA: lv_content TYPE xstring, + lo_ixml TYPE REF TO if_ixml, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_istream TYPE REF TO if_ixml_istream, + lo_parser TYPE REF TO if_ixml_parser. + +*--------------------------------------------------------------------* +* Load XML file from archive into an input stream, +* and parse that stream into an ixml object +*--------------------------------------------------------------------* + lv_content = me->get_from_zip_archive( i_filename ). + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_istream = lo_streamfactory->create_istream_xstring( lv_content ). + r_ixml = lo_ixml->create_document( ). + lo_parser = lo_ixml->create_parser( stream_factory = lo_streamfactory + istream = lo_istream + document = r_ixml ). + lo_parser->set_normalizing( is_normalizing ). + lo_parser->set_validating( mode = if_ixml_parser=>co_no_validation ). + lo_parser->parse( ). + +ENDMETHOD. + + + + + + method LOAD_DRAWING_ANCHOR. + + TYPES: BEGIN OF t_c_nv_pr, + name TYPE string, + id TYPE string, + END OF t_c_nv_pr. + + TYPES: BEGIN OF t_blip, + cstate TYPE string, + embed TYPE string, + END OF t_blip. + + TYPES: BEGIN OF t_chart, + id TYPE string, + END OF t_chart. + + TYPES: BEGIN OF t_ext, + cx TYPE string, + cy TYPE string, + END OF t_ext. + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1'. + CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. + + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + node TYPE REF TO if_ixml_element, + node2 TYPE REF TO if_ixml_element, + node3 TYPE REF TO if_ixml_element, + node4 TYPE REF TO if_ixml_element, + + ls_upper TYPE zexcel_drawing_location, + ls_lower TYPE zexcel_drawing_location, + ls_size TYPE zexcel_drawing_size, + ext TYPE t_ext, + lv_content TYPE xstring, + lv_relation_id TYPE string, + lv_title TYPE zexcel_sheet_title, + + cnvpr TYPE t_c_nv_pr, + blip TYPE t_blip, + chart TYPE t_chart, + drawing_type TYPE zexcel_drawing_type, + + rel_drawing TYPE t_rel_drawing. + + node ?= io_anchor_element->find_from_name( name = 'from' namespace = 'xdr' ). + CHECK node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'col' namespace = 'xdr' ). + ls_upper-col = node2->get_value( ). + node2 ?= node->find_from_name( name = 'row' namespace = 'xdr' ). + ls_upper-row = node2->get_value( ). + node2 ?= node->find_from_name( name = 'colOff' namespace = 'xdr' ). + ls_upper-col_offset = node2->get_value( ). + node2 ?= node->find_from_name( name = 'rowOff' namespace = 'xdr' ). + ls_upper-row_offset = node2->get_value( ). + + node ?= io_anchor_element->find_from_name( name = 'ext' namespace = 'xdr' ). + IF node IS INITIAL. + CLEAR ls_size. + ELSE. + me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = ext ). + ls_size-width = ext-cx. + ls_size-height = ext-cy. + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'to' namespace = 'xdr' ). + IF node IS INITIAL. + CLEAR ls_lower. + ELSE. + node2 ?= node->find_from_name( name = 'col' namespace = 'xdr' ). + ls_lower-col = node2->get_value( ). + node2 ?= node->find_from_name( name = 'row' namespace = 'xdr' ). + ls_lower-row = node2->get_value( ). + node2 ?= node->find_from_name( name = 'colOff' namespace = 'xdr' ). + ls_lower-col_offset = node2->get_value( ). + node2 ?= node->find_from_name( name = 'rowOff' namespace = 'xdr' ). + ls_lower-row_offset = node2->get_value( ). + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'pic' namespace = 'xdr' ). + IF node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'nvPicPr' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). + lv_title = cnvpr-name. + + node2 ?= node->find_from_name( name = 'blipFill' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'blip' namespace = 'a' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = blip ). + lv_relation_id = blip-embed. + + drawing_type = zcl_excel_drawing=>type_image. + ENDIF. + + node ?= io_anchor_element->find_from_name( name = 'graphicFrame' namespace = 'xdr' ). + IF node IS NOT INITIAL. + node2 ?= node->find_from_name( name = 'nvGraphicFramePr' namespace = 'xdr' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'cNvPr' namespace = 'xdr' ). + CHECK node3 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node3 CHANGING cp_structure = cnvpr ). + lv_title = cnvpr-name. + + node2 ?= node->find_from_name( name = 'graphic' namespace = 'a' ). + CHECK node2 IS NOT INITIAL. + node3 ?= node2->find_from_name( name = 'graphicData' namespace = 'a' ). + CHECK node3 IS NOT INITIAL. + node4 ?= node2->find_from_name( name = 'chart' namespace = 'c' ). + CHECK node4 IS NOT INITIAL. + me->fill_struct_from_attributes( EXPORTING ip_element = node4 CHANGING cp_structure = chart ). + lv_relation_id = chart-id. + + drawing_type = zcl_excel_drawing=>type_chart. + ENDIF. + + lo_drawing = io_worksheet->excel->add_new_drawing( + ip_type = drawing_type + ip_title = lv_title ). + io_worksheet->add_drawing( lo_drawing ). + + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + READ TABLE it_related_drawings INTO rel_drawing + WITH KEY id = lv_relation_id. + + lo_drawing->set_media( + EXPORTING + ip_media = rel_drawing-content + ip_media_type = rel_drawing-file_ext + ip_width = ls_size-width + ip_height = ls_size-height ). + + if drawing_type = zcl_excel_drawing=>type_chart. + "-------------Added by Alessandro Iannacci - Should load chart attributes + lo_drawing->load_chart_attributes( rel_drawing-content_xml ). + endif. + + endmethod. + + + + + method LOAD_SHARED_STRINGS. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Support partial formatting of strings in cells +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-11 +* - ... +* changes: renaming variables to naming conventions +* renaming variables to indicate what they are used for +* aligning code +* adding comments to explain what we are trying to achieve +* rewriting code for better readibility +*--------------------------------------------------------------------* + + + + DATA: + lo_shared_strings_xml TYPE REF TO if_ixml_document, + lo_node_si TYPE REF TO if_ixml_element, + lo_node_si_child TYPE REF TO if_ixml_element, + lo_node_r_child_t TYPE REF TO if_ixml_element, + lv_tag_name TYPE string, + lv_node_value TYPE string. + + FIELD-SYMBOLS: <lv_shared_string> LIKE LINE OF me->shared_strings. + +*--------------------------------------------------------------------* + +* §1 Parse shared strings file and get into internal table +* So far I have encountered 2 ways how a string can be represented in the shared strings file +* §1.1 - "simple" strings +* §1.2 - rich text formatted strings + +* Following is an example how this file could be set up; 2 strings in simple formatting, 3rd string rich textformatted + + +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <sst uniqueCount="6" count="6" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> +* <si> +* <t>This is a teststring 1</t> +* </si> +* <si> +* <t>This is a teststring 2</t> +* </si> +* <si> +* <r> +* <t>T</t> +* </r> +* <r> +* <rPr> +* <sz val="11"/> +* <color rgb="FFFF0000"/> +* <rFont val="Calibri"/> +* <family val="2"/> +* <scheme val="minor"/> +* </rPr> +* <t xml:space="preserve">his is a </t> +* </r> +* <r> +* <rPr> +* <sz val="11"/> +* <color theme="1"/> +* <rFont val="Calibri"/> +* <family val="2"/> +* <scheme val="minor"/> +* </rPr> +* <t>teststring 3</t> +* </r> +* </si> +* </sst> +*--------------------------------------------------------------------* + + lo_shared_strings_xml = me->get_ixml_from_zip_archive( i_filename = ip_path + is_normalizing = space ). " NO!!! normalizing - otherwise leading blanks will be omitted and that is not really desired for the stringtable + lo_node_si ?= lo_shared_strings_xml->find_from_name( 'si' ). + WHILE lo_node_si IS BOUND. + + APPEND INITIAL LINE TO me->shared_strings ASSIGNING <lv_shared_string>. " Each <si>-entry in the xml-file must lead to an entry in our stringtable + lo_node_si_child ?= lo_node_si->get_first_child( ). + IF lo_node_si_child IS BOUND. + lv_tag_name = lo_node_si_child->get_name( ). + IF lv_tag_name = 't'. +*--------------------------------------------------------------------* +* §1.1 - "simple" strings +* Example: see above +*--------------------------------------------------------------------* + <lv_shared_string> = lo_node_si_child->get_value( ). + ELSE. +*--------------------------------------------------------------------* +* §1.2 - rich text formatted strings +* it is sufficient to strip the <t>...</t> tag from each <r>-tag and concatenate these +* as long as rich text formatting is not supported (2do§1) ignore all info about formatting +* Example: see above +*--------------------------------------------------------------------* + WHILE lo_node_si_child IS BOUND. " actually these children of <si> are <r>-tags + + lo_node_r_child_t ?= lo_node_si_child->find_from_name( 't' ). " extract the <t>...</t> part of each <r>-tag + IF lo_node_r_child_t IS BOUND. + lv_node_value = lo_node_r_child_t->get_value( ). + CONCATENATE <lv_shared_string> lv_node_value INTO <lv_shared_string> RESPECTING BLANKS. + ENDIF. + + lo_node_si_child ?= lo_node_si_child->get_next( ). + + ENDWHILE. + ENDIF. + ENDIF. + + lo_node_si ?= lo_node_si->get_next( ). + ENDWHILE. + + endmethod. + + + + + + method LOAD_STYLES. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (wip ) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + TYPES: BEGIN OF lty_xf, + applyalignment TYPE string, + applyborder TYPE string, + applyfill TYPE string, + applyfont TYPE string, + applynumberformat TYPE string, + applyprotection TYPE string, + borderid TYPE string, + fillid TYPE string, + fontid TYPE string, + numfmtid TYPE string, + pivotbutton TYPE string, + quoteprefix TYPE string, + xfid TYPE string, + END OF lty_xf. + + TYPES: BEGIN OF lty_alignment, + horizontal TYPE string, + indent TYPE string, + justifylastline TYPE string, + readingorder TYPE string, + relativeindent TYPE string, + shrinktofit TYPE string, + textrotation TYPE string, + vertical TYPE string, + wraptext TYPE string, + END OF lty_alignment. + + TYPES: BEGIN OF lty_protection, + hidden TYPE string, + locked TYPE string, + END OF lty_protection. + + DATA: lo_styles_xml TYPE REF TO if_ixml_document, + lo_style TYPE REF TO zcl_excel_style, + + lt_num_formats TYPE t_num_formats, + lt_fills TYPE t_fills, + lt_borders TYPE t_borders, + lt_fonts TYPE t_fonts, + + ls_num_format TYPE t_num_format, + ls_fill TYPE REF TO zcl_excel_style_fill, + ls_cell_border TYPE REF TO zcl_excel_style_borders, + ls_font TYPE REF TO zcl_excel_style_font, + + lo_node_cellxfs TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf_alignment TYPE REF TO if_ixml_element, + lo_node_cellxfs_xf_protection TYPE REF TO if_ixml_element, + + lo_nodes_xf TYPE REF TO if_ixml_node_collection, + lo_iterator_cellxfs TYPE REF TO if_ixml_node_iterator, + + ls_xf TYPE lty_xf, + ls_alignment TYPE lty_alignment, + ls_protection TYPE lty_protection, + lv_index TYPE i. + +*--------------------------------------------------------------------* +* To build a complete style that fully describes how a cell looks like +* we need the various parts +* §1 - Numberformat +* §2 - Fillstyle +* §3 - Borders +* §4 - Font +* §5 - Alignment +* §6 - Protection + +* Following is an example how this part of a file could be set up +* ... +* parts with various formatinformation - see §1,§2,§3,§4 +* ... +* <cellXfs count="26"> +* <xf numFmtId="0" borderId="0" fillId="0" fontId="0" xfId="0"/> +* <xf numFmtId="0" borderId="0" fillId="2" fontId="0" xfId="0" applyFill="1"/> +* <xf numFmtId="0" borderId="1" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="2" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="3" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="4" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* <xf numFmtId="0" borderId="0" fillId="3" fontId="0" xfId="0" applyFill="1" applyBorder="1"/> +* ... +* </cellXfs> +*--------------------------------------------------------------------* + + lo_styles_xml = me->get_ixml_from_zip_archive( ip_path ). + +*--------------------------------------------------------------------* +* The styles are build up from +* §1 number formats +* §2 fill styles +* §3 border styles +* §4 fonts +* These need to be read before we can try to build up a complete +* style that describes the look of a cell +*--------------------------------------------------------------------* + lt_num_formats = load_style_num_formats( lo_styles_xml ). " §1 + lt_fills = load_style_fills( lo_styles_xml ). " §2 + lt_borders = load_style_borders( lo_styles_xml ). " §3 + lt_fonts = load_style_fonts( lo_styles_xml ). " §4 + +*--------------------------------------------------------------------* +* Now everything is prepared to build a "full" style +*--------------------------------------------------------------------* + lo_node_cellxfs = lo_styles_xml->find_from_name( name = 'cellXfs' ). + IF lo_node_cellxfs IS BOUND. + lo_nodes_xf = lo_node_cellxfs->get_elements_by_tag_name( name = 'xf' ). + lo_iterator_cellxfs = lo_nodes_xf->create_iterator( ). + lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). + WHILE lo_node_cellxfs_xf IS BOUND. + + lo_style = ip_excel->add_new_style( ). + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf + CHANGING + cp_structure = ls_xf ). +*--------------------------------------------------------------------* +* §2 fill style +*--------------------------------------------------------------------* + IF ls_xf-applyfill = '1' AND ls_xf-fillid IS NOT INITIAL. + lv_index = ls_xf-fillid + 1. + READ TABLE lt_fills INTO ls_fill INDEX lv_index. + IF sy-subrc = 0. + lo_style->fill = ls_fill. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §1 number format +*--------------------------------------------------------------------* + IF ls_xf-numfmtid IS NOT INITIAL. + READ TABLE lt_num_formats INTO ls_num_format WITH TABLE KEY id = ls_xf-numfmtid. + IF sy-subrc = 0. + lo_style->number_format = ls_num_format-format. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §3 border style +*--------------------------------------------------------------------* + IF ls_xf-applyborder = '1' AND ls_xf-borderid IS NOT INITIAL. + lv_index = ls_xf-borderid + 1. + READ TABLE lt_borders INTO ls_cell_border INDEX lv_index. + IF sy-subrc = 0. + lo_style->borders = ls_cell_border. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §4 font +*--------------------------------------------------------------------* + IF ls_xf-applyfont = '1' AND ls_xf-fontid IS NOT INITIAL. + lv_index = ls_xf-fontid + 1. + READ TABLE lt_fonts INTO ls_font INDEX lv_index. + IF sy-subrc = 0. + lo_style->font = ls_font. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §5 - Alignment +*--------------------------------------------------------------------* + lo_node_cellxfs_xf_alignment ?= lo_node_cellxfs_xf->find_from_name( 'alignment' ). + IF lo_node_cellxfs_xf_alignment IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf_alignment + CHANGING + cp_structure = ls_alignment ). + IF ls_alignment-horizontal IS NOT INITIAL. + lo_style->alignment->horizontal = ls_alignment-horizontal. + ENDIF. + + IF ls_alignment-vertical IS NOT INITIAL. + lo_style->alignment->vertical = ls_alignment-vertical. + ENDIF. + + IF ls_alignment-textrotation IS NOT INITIAL. + lo_style->alignment->textrotation = ls_alignment-textrotation. + ENDIF. + + IF ls_alignment-wraptext = '1' OR ls_alignment-wraptext = 'true'. + lo_style->alignment->wraptext = abap_true. + ENDIF. + + IF ls_alignment-shrinktofit = '1' OR ls_alignment-shrinktofit = 'true'. + lo_style->alignment->shrinktofit = abap_true. + ENDIF. + + IF ls_alignment-indent IS NOT INITIAL. + lo_style->alignment->indent = ls_alignment-indent. + ENDIF. + ENDIF. + +*--------------------------------------------------------------------* +* §6 - Protection +*--------------------------------------------------------------------* + lo_node_cellxfs_xf_protection ?= lo_node_cellxfs_xf->find_from_name( 'protection' ). + IF lo_node_cellxfs_xf_protection IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_cellxfs_xf_protection + CHANGING + cp_structure = ls_protection ). + IF ls_protection-locked = '1' OR ls_protection-locked = 'true'. + lo_style->protection->locked = zcl_excel_style_protection=>c_protection_locked. + ELSE. + lo_style->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. + ENDIF. + + IF ls_protection-hidden = '1' OR ls_protection-hidden = 'true'. + lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_hidden. + ELSE. + lo_style->protection->hidden = zcl_excel_style_protection=>c_protection_unhidden. + ENDIF. + + ENDIF. + + INSERT lo_style INTO TABLE me->styles. + + lo_node_cellxfs_xf ?= lo_iterator_cellxfs->get_next( ). + + ENDWHILE. + ENDIF. + + endmethod. + + + + + method LOAD_STYLE_BORDERS. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* renaming variables to indicate what they are used for +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + DATA: lo_node_border TYPE REF TO if_ixml_element, + lo_node_bordertype TYPE REF TO if_ixml_element, + lo_node_bordercolor TYPE REF TO if_ixml_element, + lo_cell_border TYPE REF TO zcl_excel_style_borders, + lo_border TYPE REF TO zcl_excel_style_border, + ls_color TYPE t_color. + +*--------------------------------------------------------------------* +* We need a table of used borderformats to build up our styles +* §1 A cell has 4 outer borders and 2 diagonal "borders" +* These borders can be formatted separately but the diagonal borders +* are always being formatted the same +* We'll parse through the <border>-tag for each of the bordertypes +* §2 and read the corresponding formatting information + +* Following is an example how this part of a file could be set up +* <border diagonalDown="1"> +* <left style="mediumDashDotDot"> +* <color rgb="FFFF0000"/> +* </left> +* <right/> +* <top style="thick"> +* <color rgb="FFFF0000"/> +* </top> +* <bottom style="thick"> +* <color rgb="FFFF0000"/> +* </bottom> +* <diagonal style="thick"> +* <color rgb="FFFF0000"/> +* </diagonal> +* </border> +*--------------------------------------------------------------------* + lo_node_border ?= ip_xml->find_from_name( 'border' ). + WHILE lo_node_border IS BOUND. + + CREATE OBJECT lo_cell_border. + +*--------------------------------------------------------------------* +* Diagonal borderlines are formatted the equally. Determine what kind of diagonal borders are present if any +*--------------------------------------------------------------------* +* DiagonalNone = 0 +* DiagonalUp = 1 +* DiagonalDown = 2 +* DiagonalBoth = 3 +*--------------------------------------------------------------------* + IF lo_node_border->get_attribute( 'diagonalDown' ) IS NOT INITIAL. + add zcl_excel_style_borders=>c_diagonal_down to lo_cell_border->diagonal_mode. + ENDIF. + + IF lo_node_border->get_attribute( 'diagonalUp' ) IS NOT INITIAL. + add zcl_excel_style_borders=>c_diagonal_up to lo_cell_border->diagonal_mode. + ENDIF. + + lo_node_bordertype ?= lo_node_border->get_first_child( ). + WHILE lo_node_bordertype IS BOUND. +*--------------------------------------------------------------------* +* §1 Determine what kind of border we are talking about +*--------------------------------------------------------------------* +* Up, down, left, right, diagonal +*--------------------------------------------------------------------* + CREATE OBJECT lo_border. + + CASE lo_node_bordertype->get_name( ). + + WHEN 'left'. + lo_cell_border->left = lo_border. + + WHEN 'right'. + lo_cell_border->right = lo_border. + + WHEN 'top'. + lo_cell_border->top = lo_border. + + WHEN 'bottom'. + lo_cell_border->down = lo_border. + + WHEN 'diagonal'. + lo_cell_border->diagonal = lo_border. + + ENDCASE. + +*--------------------------------------------------------------------* +* §2 Read the border-formatting +*--------------------------------------------------------------------* + lo_border->border_style = lo_node_bordertype->get_attribute( 'style' ). + lo_node_bordercolor ?= lo_node_bordertype->find_from_name( 'color' ). + IF lo_node_bordercolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_bordercolor + CHANGING + cp_structure = ls_color ). + + lo_border->border_color-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_border->border_color-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_border->border_color-theme = ls_color-theme. + ENDIF. + lo_border->border_color-tint = ls_color-tint. + ENDIF. + + lo_node_bordertype ?= lo_node_bordertype->get_next( ). + + ENDWHILE. + + INSERT lo_cell_border INTO TABLE ep_borders. + + lo_node_border ?= lo_node_border->get_next( ). + + ENDWHILE. + + + endmethod. + + + + + method LOAD_STYLE_FILLS. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Support gradientFill +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* commenting on problems/future enhancements/todos we already know of or should decide upon +* adding comments to explain what we are trying to achieve +* renaming variables to indicate what they are used for +*--------------------------------------------------------------------* + DATA: lv_value TYPE string, + lo_node_fill TYPE REF TO if_ixml_element, + lo_node_fill_child TYPE REF TO if_ixml_element, + lo_node_bgcolor TYPE REF TO if_ixml_element, + lo_node_fgcolor TYPE REF TO if_ixml_element, + lo_fill TYPE REF TO zcl_excel_style_fill, + ls_color TYPE t_color. + +*--------------------------------------------------------------------* +* We need a table of used fillformats to build up our styles + +* Following is an example how this part of a file could be set up +* <fill> +* <patternFill patternType="gray125"/> +* </fill> +* <fill> +* <patternFill patternType="solid"> +* <fgColor rgb="FFFFFF00"/> +* <bgColor indexed="64"/> +* </patternFill> +* </fill> +*--------------------------------------------------------------------* + + lo_node_fill ?= ip_xml->find_from_name( 'fill' ). + WHILE lo_node_fill IS BOUND. + + CREATE OBJECT lo_fill. + lo_node_fill_child ?= lo_node_fill->get_first_child( ). + lv_value = lo_node_fill_child->get_name( ). + CASE lv_value. + +*--------------------------------------------------------------------* +* Patternfill +*--------------------------------------------------------------------* + WHEN 'patternFill'. + lo_fill->filltype = lo_node_fill_child->get_attribute( 'patternType' ). +*--------------------------------------------------------------------* +* Patternfill - background color +*--------------------------------------------------------------------* + lo_node_bgcolor = lo_node_fill_child->find_from_name( 'bgColor' ). + IF lo_node_bgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_bgcolor + CHANGING + cp_structure = ls_color ). + + lo_fill->bgcolor-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_fill->bgcolor-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_fill->bgcolor-theme = ls_color-theme. + ENDIF. + lo_fill->bgcolor-tint = ls_color-tint. + ENDIF. + +*--------------------------------------------------------------------* +* Patternfill - foreground color +*--------------------------------------------------------------------* + lo_node_fgcolor = lo_node_fill->find_from_name( 'fgColor' ). + IF lo_node_fgcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node_fgcolor + CHANGING + cp_structure = ls_color ). + + lo_fill->fgcolor-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_fill->fgcolor-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_fill->fgcolor-theme = ls_color-theme. + ENDIF. + lo_fill->fgcolor-tint = ls_color-tint. + ENDIF. + + +*--------------------------------------------------------------------* +* gradientFill +*--------------------------------------------------------------------* + WHEN 'gradientFill'. + " 2do§1 Support gradientFill + + WHEN OTHERS. + + ENDCASE. + + + INSERT lo_fill INTO TABLE ep_fills. + + lo_node_fill ?= lo_node_fill->get_next( ). + + ENDWHILE. + + + endmethod. + + + + + method LOAD_STYLE_FONTS. + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* aligning code +* removing unused variables +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + DATA: lo_node_font TYPE REF TO if_ixml_element, + lo_node2 TYPE REF TO if_ixml_element, + lo_font TYPE REF TO zcl_excel_style_font, + ls_color TYPE t_color. + +*--------------------------------------------------------------------* +* We need a table of used fonts to build up our styles + +* Following is an example how this part of a file could be set up +* <font> +* <sz val="11"/> +* <color theme="1"/> +* <name val="Calibri"/> +* <family val="2"/> +* <scheme val="minor"/> +* </font> +*--------------------------------------------------------------------* + lo_node_font ?= ip_xml->find_from_name( 'font' ). + WHILE lo_node_font IS BOUND. + + CREATE OBJECT lo_font. +*--------------------------------------------------------------------* +* Bold +*--------------------------------------------------------------------* + IF lo_node_font->find_from_name( 'b' ) IS BOUND. + lo_font->bold = abap_true. + ENDIF. + +*--------------------------------------------------------------------* +* Italic +*--------------------------------------------------------------------* + IF lo_node_font->find_from_name( 'i' ) IS BOUND. + lo_font->italic = abap_true. + ENDIF. + +*--------------------------------------------------------------------* +* Underline +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'u' ). + IF lo_node2 IS BOUND. + lo_font->underline = abap_true. + lo_font->underline_mode = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* StrikeThrough +*--------------------------------------------------------------------* + IF lo_node_font->find_from_name( 'strike' ) IS BOUND. + lo_font->strikethrough = abap_true. + ENDIF. + +*--------------------------------------------------------------------* +* Fontsize +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'sz' ). + IF lo_node2 IS BOUND. + lo_font->size = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontname +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'name' ). + IF lo_node2 IS BOUND. + lo_font->name = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontfamily +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'family' ). + IF lo_node2 IS BOUND. + lo_font->family = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontscheme +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'scheme' ). + IF lo_node2 IS BOUND. + lo_font->scheme = lo_node2->get_attribute( 'val' ). + ENDIF. + +*--------------------------------------------------------------------* +* Fontcolor +*--------------------------------------------------------------------* + lo_node2 = lo_node_font->find_from_name( 'color' ). + IF lo_node2 IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_node2 + CHANGING + cp_structure = ls_color ). + lo_font->color-rgb = ls_color-rgb. + IF ls_color-indexed IS NOT INITIAL. + lo_font->color-indexed = ls_color-indexed. + ENDIF. + + IF ls_color-theme IS NOT INITIAL. + lo_font->color-theme = ls_color-theme. + ENDIF. + lo_font->color-tint = ls_color-tint. + ENDIF. + + INSERT lo_font INTO TABLE ep_fonts. + + lo_node_font ?= lo_node_font->get_next( ). + + ENDWHILE. + + + endmethod. + + + + + method LOAD_STYLE_NUM_FORMATS. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Explain gaps in predefined formats +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-25 +* - ... +* changes: renaming variables and types to naming conventions +* adding comments to explain what we are trying to achieve +* aligning code +*--------------------------------------------------------------------* + DATA: lo_node_numfmt TYPE REF TO if_ixml_element, + ls_num_format TYPE t_num_format. + +*--------------------------------------------------------------------* +* We need a table of used numberformats to build up our styles +* there are two kinds of numberformats +* §1 those that have been explicitly added by the createor of the excel-file +* §2 and built-in numberformats +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* §1 Get non-internal numberformats that are found in the file explicitly + +* Following is an example how this part of a file could be set up +* <numFmts count="1"> +* <numFmt formatCode="#,###,###,###,##0.00" numFmtId="164"/> +* </numFmts> +*--------------------------------------------------------------------* + lo_node_numfmt ?= ip_xml->find_from_name( 'numFmt' ). + WHILE lo_node_numfmt IS BOUND. + + CLEAR ls_num_format. + + CREATE OBJECT ls_num_format-format. + ls_num_format-format->format_code = lo_node_numfmt->get_attribute( 'formatCode' ). + ls_num_format-id = lo_node_numfmt->get_attribute( 'numFmtId' ). + INSERT ls_num_format INTO TABLE ep_num_formats. + + lo_node_numfmt ?= lo_node_numfmt->get_next( ). + + ENDWHILE. + + DEFINE predefined_format. + ls_num_format-id = &1. + create object ls_num_format-format. + ls_num_format-format->format_code = &2. + insert ls_num_format into table ep_num_formats. + END-OF-DEFINITION. + +*--------------------------------------------------------------------* +* §1 Get internal predefined numberformats +*--------------------------------------------------------------------* + predefined_format '1' '0'. + predefined_format '2' '0.00'. + predefined_format '3' '#,##0'. + predefined_format '4' '#,##0.00'. + predefined_format '5' '$#,##0_);($#,##0)'. + predefined_format '6' '$#,##0_);[Red]($#,##0)'. + predefined_format '7' '$#,##0.00_);($#,##0.00)'. + predefined_format '8' '$#,##0.00_);[Red]($#,##0.00)'. + predefined_format '9' '0%'. + predefined_format '10' '0.00%'. + predefined_format '11' '0.00E+00'. + predefined_format '12' '# ?/?'. + predefined_format '13' '# ??/??'. + predefined_format '14' 'm/d/yyyy'. + predefined_format '15' 'd-mmm-yy'. + predefined_format '16' 'd-mmm'. + predefined_format '17' 'mmm-yy'. + predefined_format '18' 'h:mm AM/PM'. + predefined_format '19' 'h:mm:ss AM/PM'. + predefined_format '20' 'h:mm'. + predefined_format '21' 'h:mm:ss'. + predefined_format '22' 'm/d/yyyy h:mm'. +* 2do§1 Why is there a gap in here? + + + + + + + + + + + + + + predefined_format '37' '#,##0_);(#,##0)'. + predefined_format '38' '#,##0_);[Red](#,##0)'. + predefined_format '39' '#,##0.00_);(#,##0.00)'. + predefined_format '40' '#,##0.00_);[Red](#,##0.00)'. +* 2do§1 Why is there a gap in here? + + + + predefined_format '45' 'mm:ss'. + predefined_format '46' '[h]:mm:ss'. + predefined_format '47' 'mm:ss.0'. + predefined_format '48' '##0.0E+0'. + predefined_format '49' '@'. +* 2do§1 Is 49 really the last predefined format? + + + endmethod. + + + + + + method LOAD_WORKBOOK. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Move macro-reading from zcl_excel_reader_xlsm to this class +* autodetect existance of macro/vba content +* Allow inputparameter to explicitly tell reader to ignore vba-content +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-10 +* - ... +* changes: renaming variables to naming conventions +* aligning code +* removing unused variables +* adding me-> where possible +* renaming variables to indicate what they are used for +* adding comments to explain what we are trying to achieve +* renaming i/o parameters: previous input-parameter ip_path holds a (full) filename and not a path --> rename to iv_workbook_full_filename +* ip_excel renamed while being at it --> rename to io_excel +*--------------------------------------------------------------------* +* issue #232 - Read worksheetstate hidden/veryHidden +* - Stefan Schmöcker, 2012-11-11 +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +* changes: correction in named ranges to correctly attach +* sheetlocal names/ranges to the correct sheet +*--------------------------------------------------------------------* +* issue#284 - Copied formulae ignored when reading excelfile +* - Stefan Schmöcker, 2013-08-02 +* changes: initialize area to hold referenced formulaedata +* after all worksheets have been read resolve formuae +*--------------------------------------------------------------------* + + CONSTANTS: lcv_shared_strings TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + lcv_worksheet TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + lcv_styles TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + lcv_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', "#EC NEEDED for future incorporation of XLSM-reader +*--------------------------------------------------------------------* +* #232: Read worksheetstate hidden/veryHidden - begin data declarations +*--------------------------------------------------------------------* + lcv_worksheet_state_hidden TYPE string VALUE 'hidden', + lcv_worksheet_state_veryhidden TYPE string VALUE 'veryHidden'. +*--------------------------------------------------------------------* +* #232: Read worksheetstate hidden/veryHidden - end data declarations +*--------------------------------------------------------------------* + + DATA: + lv_path TYPE string, + lv_filename TYPE chkfile, + lv_full_filename TYPE string, + + lo_rels_workbook TYPE REF TO if_ixml_document, + lt_worksheets TYPE STANDARD TABLE OF t_relationship WITH NON-UNIQUE DEFAULT KEY, + lo_workbook TYPE REF TO if_ixml_document, + lv_workbook_index TYPE i, + lv_worksheet_path TYPE string, + ls_sheet TYPE t_sheet, + + lo_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lv_worksheet_title TYPE zexcel_sheet_title, + lv_tabix TYPE sytabix, " #235 - repeat rows/cols. Needed to link defined name to correct worksheet + + ls_range TYPE t_range, + lv_range_value TYPE zexcel_range_value, +*--------------------------------------------------------------------* +* #229: Set active worksheet - begin data declarations +*--------------------------------------------------------------------* + lv_active_sheet_string TYPE string, + lv_zexcel_active_worksheet TYPE zexcel_active_worksheet, +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns - added autofilter support while changing this section + lo_autofilter TYPE REF TO zcl_excel_autofilter, + ls_area TYPE zexcel_s_autofilter_area, + lv_col_start_alpha TYPE zexcel_cell_column_alpha, + lv_col_end_alpha TYPE zexcel_cell_column_alpha, + lv_row_start TYPE zexcel_cell_row, + lv_row_end TYPE zexcel_cell_row , + lv_regex TYPE string, + lv_range_value_1 TYPE zexcel_range_value, + lv_range_value_2 TYPE zexcel_range_value. +*--------------------------------------------------------------------* +* #229: Set active worksheet - end data declarations +*--------------------------------------------------------------------* + FIELD-SYMBOLS: <worksheet> TYPE t_relationship. + + +*--------------------------------------------------------------------* + +* §1 Get the position of files related to this workbook +* Usually this will be <root>/xl/workbook.xml +* Thus the workbookroot will be <root>/xl/ +* The position of all related files will be given in file +* <workbookroot>/_rels/<workbookfilename>.rels and their positions +* be be given relative to the workbookroot + +* Following is an example how this file could be set up + +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <Relationships xmlns="http://schemas.openxmlformats.org/package/2006/relationships"> +* <Relationship Target="styles.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles" Id="rId6"/> +* <Relationship Target="theme/theme1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme" Id="rId5"/> +* <Relationship Target="worksheets/sheet1.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId1"/> +* <Relationship Target="worksheets/sheet2.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId2"/> +* <Relationship Target="worksheets/sheet3.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId3"/> +* <Relationship Target="worksheets/sheet4.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet" Id="rId4"/> +* <Relationship Target="sharedStrings.xml" Type="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings" Id="rId7"/> +* </Relationships> +* +* §2 Load data that is relevant to the complete workbook +* Currently supported is: +* §2.1 Shared strings - This holds all strings that are used in all worksheets +* §2.2 Styles - This holds all styles that are used in all worksheets +* §2.3 Worksheets - For each worksheet in the workbook one entry appears here to point to the file that holds the content of this worksheet +* §2.4 [Themes] - not supported +* §2.5 [VBA (Macro)] - supported in class zcl_excel_reader_xlsm but should be moved here and autodetect +* ... +* +* §3 Some information is held in the workbookfile as well +* §3.1 Names and order of of worksheets +* §3.2 Active worksheet +* §3.3 Defined names +* ... +* Following is an example how this file could be set up + +* <?xml version="1.0" encoding="UTF-8" standalone="true"?> +* <workbook xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> +* <fileVersion rupBuild="4506" lowestEdited="4" lastEdited="4" appName="xl"/> +* <workbookPr defaultThemeVersion="124226"/> +* <bookViews> +* <workbookView activeTab="1" windowHeight="8445" windowWidth="19035" yWindow="120" xWindow="120"/> +* </bookViews> +* <sheets> +* <sheet r:id="rId1" sheetId="1" name="Sheet1"/> +* <sheet r:id="rId2" sheetId="2" name="Sheet2"/> +* <sheet r:id="rId3" sheetId="3" name="Sheet3" state="hidden"/> +* <sheet r:id="rId4" sheetId="4" name="Sheet4"/> +* </sheets> +* <definedNames/> +* <calcPr calcId="125725"/> +* </workbook> +*--------------------------------------------------------------------* + + CLEAR me->mt_ref_formulae. " ins issue#284 + +*--------------------------------------------------------------------* +* §1 Get the position of files related to this workbook +* Entry into this method is with the filename of the workbook +*--------------------------------------------------------------------* + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = iv_workbook_full_filename + IMPORTING + stripped_name = lv_filename + file_path = lv_path. + + CONCATENATE lv_path '_rels/' lv_filename '.rels' + INTO lv_full_filename. + lo_rels_workbook = me->get_ixml_from_zip_archive( lv_full_filename ). + + lo_node ?= lo_rels_workbook->find_from_name( 'Relationship' ). "#EC NOTEXT + WHILE lo_node IS BOUND. + + me->fill_struct_from_attributes( EXPORTING ip_element = lo_node CHANGING cp_structure = ls_relationship ). + + CASE ls_relationship-type. + +*--------------------------------------------------------------------* +* §2.1 Shared strings - This holds all strings that are used in all worksheets +*--------------------------------------------------------------------* + WHEN lcv_shared_strings. + CONCATENATE lv_path ls_relationship-target + INTO lv_full_filename. + me->load_shared_strings( lv_full_filename ). + +*--------------------------------------------------------------------* +* §2.3 Worksheets +* For each worksheet in the workbook one entry appears here to point to the file that holds the content of this worksheet +* Shared strings and styles have to be present before we can start with creating the worksheets +* thus we only store this information for use when parsing the workbookfile for sheetinformations +*--------------------------------------------------------------------* + WHEN lcv_worksheet. + APPEND ls_relationship TO lt_worksheets. + +*--------------------------------------------------------------------* +* §2.2 Styles - This holds the styles that are used in all worksheets +*--------------------------------------------------------------------* + WHEN lcv_styles. + CONCATENATE lv_path ls_relationship-target + INTO lv_full_filename. + me->load_styles( ip_path = lv_full_filename + ip_excel = io_excel ). + + WHEN OTHERS. + + ENDCASE. + + lo_node ?= lo_node->get_next( ). + + ENDWHILE. + +*--------------------------------------------------------------------* +* §3 Some information held in the workbookfile +*--------------------------------------------------------------------* + lo_workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + +*--------------------------------------------------------------------* +* §3.1 Names and order of of worksheets +*--------------------------------------------------------------------* + lo_node ?= lo_workbook->find_from_name( 'sheet' ). + lv_workbook_index = 1. + WHILE lo_node IS BOUND. + + me->fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_sheet ). +*--------------------------------------------------------------------* +* Create new worksheet in workbook with correct name +*--------------------------------------------------------------------* + lv_worksheet_title = ls_sheet-name. + IF lv_workbook_index = 1. " First sheet has been added automatically by creating io_excel + lo_worksheet = io_excel->get_active_worksheet( ). + lo_worksheet->set_title( lv_worksheet_title ). + ELSE. + lo_worksheet = io_excel->add_new_worksheet( lv_worksheet_title ). + ENDIF. +*--------------------------------------------------------------------* +* #232 - Read worksheetstate hidden/veryHidden - begin of coding +* Set status hidden if necessary +*--------------------------------------------------------------------* + CASE ls_sheet-state. + + WHEN lcv_worksheet_state_hidden. + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_hidden. + + WHEN lcv_worksheet_state_veryhidden. + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_veryhidden. + + ENDCASE. +*--------------------------------------------------------------------* +* #232 - Read worksheetstate hidden/veryHidden - end of coding +*--------------------------------------------------------------------* +*--------------------------------------------------------------------* +* Load worksheetdata +*--------------------------------------------------------------------* + READ TABLE lt_worksheets ASSIGNING <worksheet> WITH KEY id = ls_sheet-id. + IF sy-subrc = 0. + <worksheet>-sheetid = ls_sheet-sheetid. "ins #235 - repeat rows/cols - needed to identify correct sheet + CONCATENATE lv_path <worksheet>-target + INTO lv_worksheet_path. + me->load_worksheet( ip_path = lv_worksheet_path + io_worksheet = lo_worksheet ). + <worksheet>-worksheet = lo_worksheet. + ENDIF. + + lo_node ?= lo_node->get_next( ). + ADD 1 TO lv_workbook_index. + + ENDWHILE. + SORT lt_worksheets BY sheetid. " needed for localSheetid -referencing + +*--------------------------------------------------------------------* +* #284: Set active worksheet - Resolve referenced formulae to +* explicit formulae those cells +*--------------------------------------------------------------------* + me->resolve_referenced_formulae( ). + " ins issue#284 +*--------------------------------------------------------------------* +* #229: Set active worksheet - begin coding +* §3.2 Active worksheet +*--------------------------------------------------------------------* + lv_zexcel_active_worksheet = 1. " First sheet = active sheet if nothing else specified. + lo_node ?= lo_workbook->find_from_name( 'workbookView' ). + IF lo_node IS BOUND. + lv_active_sheet_string = lo_node->get_attribute( 'activeTab' ). + TRY. + lv_zexcel_active_worksheet = lv_active_sheet_string + 1. " EXCEL numbers the sheets from 0 onwards --> index into worksheettable is increased by one + CATCH cx_sy_conversion_error. "#EC NO_HANDLER - error here --> just use the default 1st sheet + ENDTRY. + ENDIF. + io_excel->set_active_sheet_index( lv_zexcel_active_worksheet ). +*--------------------------------------------------------------------* +* #229: Set active worksheet - end coding +*--------------------------------------------------------------------* + + +*--------------------------------------------------------------------* +* §3.3 Defined names +* So far I have encountered these +* - named ranges - sheetlocal +* - named ranges - workbookglobal +* - autofilters - sheetlocal ( special range ) +* - repeat rows/cols - sheetlocal ( special range ) +* +*--------------------------------------------------------------------* + lo_node ?= lo_workbook->find_from_name( 'definedName' ). + WHILE lo_node IS BOUND. + + CLEAR lo_range. "ins issue #235 - repeat rows/cols + me->fill_struct_from_attributes( EXPORTING + ip_element = lo_node + CHANGING + cp_structure = ls_range ). + lv_range_value = lo_node->get_value( ). + + IF ls_range-localsheetid IS NOT INITIAL. " issue #163+ +* READ TABLE lt_worksheets ASSIGNING <worksheet> WITH KEY id = ls_range-localsheetid. "del issue #235 - repeat rows/cols " issue #163+ +* lo_range = <worksheet>-worksheet->add_new_range( ). "del issue #235 - repeat rows/cols " issue #163+ +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns - begin +*--------------------------------------------------------------------* + lv_tabix = ls_range-localsheetid + 1. + READ TABLE lt_worksheets ASSIGNING <worksheet> INDEX lv_tabix. + IF sy-subrc = 0. + CASE ls_range-name. + +*--------------------------------------------------------------------* +* insert autofilters +*--------------------------------------------------------------------* + WHEN zcl_excel_autofilters=>c_autofilter. + lo_autofilter = io_excel->add_new_autofilter( io_sheet = <worksheet>-worksheet ) . + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = ls_area-row_start ). + ls_area-col_start = zcl_excel_common=>convert_column2int( lv_col_start_alpha ). + ls_area-col_end = zcl_excel_common=>convert_column2int( lv_col_end_alpha ). + lo_autofilter->set_filter_area( is_area = ls_area ). + +*--------------------------------------------------------------------* +* repeat print rows/columns +*--------------------------------------------------------------------* + WHEN zif_excel_sheet_printsettings=>gcv_print_title_name. + lo_range = <worksheet>-worksheet->add_new_range( ). +*--------------------------------------------------------------------* +* This might be a temporary solution. Maybe ranges get be reworked +* to support areas consisting of multiple rectangles +* But for now just split the range into row and columnpart +*--------------------------------------------------------------------* + CLEAR:lv_range_value_1, + lv_range_value_2. + IF lv_range_value IS INITIAL. +* Empty --> nothing to do + ELSE. + IF lv_range_value(1) = `'`. " Escaped + lv_regex = `^('[^']*')+![^,]*,`. + ELSE. + lv_regex = `^[^!]*![^,]*,`. + ENDIF. +* Split into two ranges if necessary + FIND REGEX lv_regex IN lv_range_value MATCH LENGTH sy-fdpos. + IF sy-subrc = 0 AND sy-fdpos > 0. + lv_range_value_2 = lv_range_value+sy-fdpos. + SUBTRACT 1 FROM sy-fdpos. + lv_range_value_1 = lv_range_value(sy-fdpos). + ELSE. + lv_range_value_1 = lv_range_value. + ENDIF. + ENDIF. +* 1st range + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_1 + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). + IF lv_col_start_alpha IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha + iv_columns_to = lv_col_end_alpha ). + ENDIF. + IF lv_row_start IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start + iv_rows_to = lv_row_end ). + ENDIF. + +* 2nd range + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = lv_range_value_2 + IMPORTING e_column_start = lv_col_start_alpha + e_column_end = lv_col_end_alpha + e_row_start = lv_row_start + e_row_end = lv_row_end ). + IF lv_col_start_alpha IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = lv_col_start_alpha + iv_columns_to = lv_col_end_alpha ). + ENDIF. + IF lv_row_start IS NOT INITIAL. + <worksheet>-worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = lv_row_start + iv_rows_to = lv_row_end ). + ENDIF. + + WHEN OTHERS. + + ENDCASE. + ENDIF. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns - end +*--------------------------------------------------------------------* + ELSE. " issue #163+ + lo_range = io_excel->add_new_range( ). " issue #163+ + ENDIF. " issue #163+ +* lo_range = ip_excel->add_new_range( ). " issue #163- + IF lo_range IS BOUND. "ins issue #235 - repeat rows/cols + lo_range->name = ls_range-name. + lo_range->set_range_value( lv_range_value ). + ENDIF. "ins issue #235 - repeat rows/cols + lo_node ?= lo_node->get_next( ). + + ENDWHILE. + + endmethod. + + + + + + method LOAD_WORKSHEET. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Header/footer +* +* Please don't just delete these ToDos if they are not +* needed but leave a comment that states this +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, +* - ... +* changes: renaming variables to naming conventions +* aligning code (started) +* add a list of open ToDos here +* adding comments to explain what we are trying to achieve (started) +*--------------------------------------------------------------------* + TYPES: BEGIN OF lty_cell, + r TYPE string, + t TYPE string, + s TYPE string, + END OF lty_cell. + + TYPES: BEGIN OF lty_column, + min TYPE string, + max TYPE string, + width TYPE float, + customwidth TYPE string, + style TYPE string, + bestfit TYPE string, + collapsed TYPE string, + hidden TYPE string, + outlinelevel TYPE string, + END OF lty_column. + + TYPES: BEGIN OF lty_sheetview, + showgridlines TYPE zexcel_show_gridlines, + tabselected TYPE string, + zoomscalenormal TYPE string, + workbookviewid TYPE string, + showrowcolheaders TYPE string, + END OF lty_sheetview. + + TYPES: BEGIN OF lty_mergecell, + ref TYPE string, + END OF lty_mergecell. + + TYPES: BEGIN OF lty_row, + r TYPE string, + customheight TYPE string, + ht TYPE float, + spans TYPE string, + thickbot TYPE string, + customformat TYPE string, + thicktop TYPE string, + collapsed TYPE string, + hidden TYPE string, + outlinelevel TYPE string, + END OF lty_row. + + TYPES: BEGIN OF lty_page_setup, + id TYPE string, + orientation TYPE string, + scale TYPE string, + END OF lty_page_setup. + + TYPES: BEGIN OF lty_page_margins, + footer TYPE string, + header TYPE string, + bottom TYPE string, + top TYPE string, + right TYPE string, + left TYPE string, + END OF lty_page_margins. + + TYPES: BEGIN OF lty_sheetformatpr, + customheight TYPE string, + defaultrowheight TYPE string, + customwidth TYPE string, + defaultcolwidth TYPE string, + END OF lty_sheetformatpr. + + TYPES: BEGIN OF lty_headerfooter, + alignwithmargins TYPE string, + differentoddeven TYPE string, + END OF lty_headerfooter. + + TYPES: BEGIN OF lty_tabcolor, + rgb TYPE string, + theme TYPE string, + END OF lty_tabcolor. + + TYPES: BEGIN OF lty_datavalidation, + type TYPE zexcel_data_val_type, + allowblank TYPE flag, + showinputmessage TYPE flag, + showerrormessage TYPE flag, + showdropdown TYPE flag, + operator TYPE zexcel_data_val_operator, + formula1 TYPE zexcel_validation_formula1, + formula2 TYPE zexcel_validation_formula1, + sqref TYPE string, + cell_column TYPE zexcel_cell_column_alpha, + cell_column_to TYPE zexcel_cell_column_alpha, + cell_row TYPE zexcel_cell_row, + cell_row_to TYPE zexcel_cell_row, + error TYPE string, + errortitle TYPE string, + prompt TYPE string, + prompttitle TYPE string, + errorstyle TYPE zexcel_data_val_error_style, + END OF lty_datavalidation. + + + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1', + lc_rel_drawing TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + lc_rel_printer TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings'. + + DATA: lo_ixml_worksheet TYPE REF TO if_ixml_document, + lo_ixml_cells TYPE REF TO if_ixml_node_collection, + lo_ixml_iterator TYPE REF TO if_ixml_node_iterator, + lo_ixml_iterator2 TYPE REF TO if_ixml_node_iterator, + lo_ixml_row_elem TYPE REF TO if_ixml_element, + lo_ixml_cell_elem TYPE REF TO if_ixml_element, + ls_cell TYPE lty_cell, + lv_index TYPE i, + lo_ixml_value_elem TYPE REF TO if_ixml_element, + lo_ixml_formula_elem TYPE REF TO if_ixml_element, + lv_cell_value TYPE zexcel_cell_value, + lv_cell_formula TYPE zexcel_cell_formula, + lv_cell_column TYPE zexcel_cell_column_alpha, + lv_cell_row TYPE zexcel_cell_row, + lo_excel_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style, + + lo_ixml_imension_elem TYPE REF TO if_ixml_element, "#+234 + lv_dimension_range TYPE string, "#+234 + + lo_ixml_sheetview_elem TYPE REF TO if_ixml_element, + ls_sheetview TYPE lty_sheetview, + lo_ixml_pane_elem TYPE REF TO if_ixml_element, + ls_excel_pane TYPE zexcel_pane, + lv_pane_cell_row TYPE zexcel_cell_row, + lv_pane_cell_col_a TYPE zexcel_cell_column_alpha, + lv_pane_cell_col TYPE zexcel_cell_column, + + lo_ixml_mergecells TYPE REF TO if_ixml_node_collection, + lo_ixml_mergecell_elem TYPE REF TO if_ixml_element, + ls_mergecell TYPE lty_mergecell, + lv_merge_column_start TYPE zexcel_cell_column_alpha, + lv_merge_column_end TYPE zexcel_cell_column_alpha, + lv_merge_row_start TYPE zexcel_cell_row, + lv_merge_row_end TYPE zexcel_cell_row, + + lo_ixml_sheetformatpr_elem TYPE REF TO if_ixml_element, + ls_sheetformatpr TYPE lty_sheetformatpr, + lv_height TYPE float, + + lo_ixml_headerfooter_elem TYPE REF TO if_ixml_element, + ls_headerfooter TYPE lty_headerfooter, + ls_odd_header TYPE zexcel_s_worksheet_head_foot, + ls_odd_footer TYPE zexcel_s_worksheet_head_foot, + ls_even_header TYPE zexcel_s_worksheet_head_foot, + ls_even_footer TYPE zexcel_s_worksheet_head_foot, + lo_ixml_hf_value_elem TYPE REF TO if_ixml_element, + + lo_ixml_pagemargins_elem TYPE REF TO if_ixml_element, + ls_pagemargins TYPE lty_page_margins, + lo_ixml_pagesetup_elem TYPE REF TO if_ixml_element, + ls_pagesetup TYPE lty_page_setup, + + lo_ixml_columns TYPE REF TO if_ixml_node_collection, + lo_ixml_column_elem TYPE REF TO if_ixml_element, + ls_column TYPE lty_column, + lv_column_alpha TYPE zexcel_cell_column_alpha, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lv_outline_level TYPE int4, + + lo_ixml_tabcolor TYPE REF TO if_ixml_element, + ls_tabcolor TYPE lty_tabcolor, + ls_excel_s_tabcolor TYPE zexcel_s_tabcolor, + + lo_ixml_rows TYPE REF TO if_ixml_node_collection, + ls_row TYPE lty_row, + lv_max_col TYPE i, "for use with SPANS element +* lv_min_col TYPE i, "for use with SPANS element " not in use currently + lv_max_col_s TYPE char10, "for use with SPANS element + lv_min_col_s TYPE char10, "for use with SPANS element + lo_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, +*--- End of current code aligning --------------------------------------------------------------- + + lv_path TYPE string, + lo_ixml_node TYPE REF TO if_ixml_element, + ls_relationship TYPE t_relationship, + lo_ixml_rels_worksheet TYPE REF TO if_ixml_document, + lv_rels_worksheet_path TYPE string, + lv_stripped_name TYPE chkfile, + lv_dirname TYPE string, + + lo_ixml_datavalidations TYPE REF TO if_ixml_node_collection, + lo_ixml_datavalidation_elem TYPE REF TO if_ixml_element, + ls_datavalidation TYPE lty_datavalidation, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lv_datavalidation_range TYPE string, + lt_datavalidation_range TYPE TABLE OF string. + +*--------------------------------------------------------------------* +* §2 We need to read the the file "\\_rels\.rels" because it tells +* us where in this folder structure the data for the workbook +* is located in the xlsx zip-archive +* +* The xlsx Zip-archive has generally the following folder structure: +* <root> | +* |--> _rels +* |--> doc_Props +* |--> xl | +* |--> _rels +* |--> theme +* |--> worksheets +*--------------------------------------------------------------------* + + " Read Workbook Relationships + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = ip_path + IMPORTING + stripped_name = lv_stripped_name + file_path = lv_dirname. + CONCATENATE lv_dirname '_rels/' lv_stripped_name '.rels' + INTO lv_rels_worksheet_path. + TRY. " +#222 _rels/xxx.rels might not be present. If not found there can be no drawings --> just ignore this section + lo_ixml_rels_worksheet = me->get_ixml_from_zip_archive( lv_rels_worksheet_path ). + lo_ixml_node ?= lo_ixml_rels_worksheet->find_from_name( 'Relationship' ). + CATCH zcx_excel. "#EC NO_HANDLER +#222 + " +#222 No errorhandling necessary - node will be unbound if error occurs + ENDTRY. " +#222 + WHILE lo_ixml_node IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_node + CHANGING + cp_structure = ls_relationship ). + CONCATENATE lv_dirname ls_relationship-target INTO lv_path. + lv_path = resolve_path( lv_path ). + + CASE ls_relationship-type. + WHEN lc_rel_drawing. + " Read Drawings + me->load_worksheet_drawing( ip_path = lv_path + io_worksheet = io_worksheet ). + + WHEN lc_rel_printer. + " Read Printer settings + + WHEN OTHERS. + ENDCASE. + + lo_ixml_node ?= lo_ixml_node->get_next( ). + ENDWHILE. + + + lo_ixml_worksheet = me->get_ixml_from_zip_archive( ip_path ). + + + lo_ixml_tabcolor ?= lo_ixml_worksheet->find_from_name( 'tabColor' ). + IF lo_ixml_tabcolor IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_tabcolor + CHANGING + cp_structure = ls_tabcolor ). +* Theme not supported yet + IF ls_tabcolor-rgb IS NOT INITIAL. + ls_excel_s_tabcolor-rgb = ls_tabcolor-rgb. + io_worksheet->set_tabcolor( ls_excel_s_tabcolor ). + ENDIF. + ENDIF. + + lo_ixml_rows = lo_ixml_worksheet->get_elements_by_tag_name( name = 'row' ). + lo_ixml_iterator = lo_ixml_rows->create_iterator( ). + lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_row_elem IS BOUND. + + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_row_elem + CHANGING + cp_structure = ls_row ). + SPLIT ls_row-spans AT ':' INTO lv_min_col_s lv_max_col_s. + lv_index = lv_max_col_s. + IF lv_index > lv_max_col. + lv_max_col = lv_index. + ENDIF. + lv_cell_row = ls_row-r. + IF ls_row-customheight = '1' + OR ls_row-collapsed = lc_xml_attr_true + OR ls_row-collapsed = lc_xml_attr_true_int + OR ls_row-hidden = lc_xml_attr_true + OR ls_row-hidden = lc_xml_attr_true_int + OR ls_row-outlinelevel > '0'. + lo_row_dimension = io_worksheet->get_row_dimension( lv_cell_row ). + IF ls_row-customheight = '1'. + lo_row_dimension->set_row_height( ls_row-ht ). + ENDIF. + + IF ls_row-collapsed = lc_xml_attr_true + OR ls_row-collapsed = lc_xml_attr_true_int. + lo_row_dimension->set_collapsed( abap_true ). + ENDIF. + + IF ls_row-hidden = lc_xml_attr_true + OR ls_row-hidden = lc_xml_attr_true_int. + lo_row_dimension->set_visible( abap_false ). + ENDIF. + + IF ls_row-outlinelevel > ''. +* outline_level = condense( row-outlineLevel ). "For basis 7.02 and higher + CONDENSE ls_row-outlinelevel. + lv_outline_level = ls_row-outlinelevel. + IF lv_outline_level > 0. + lo_row_dimension->set_outline_level( lv_outline_level ). + ENDIF. + ENDIF. + ENDIF. + + lo_ixml_cells = lo_ixml_row_elem->get_elements_by_tag_name( name = 'c' ). + lo_ixml_iterator2 = lo_ixml_cells->create_iterator( ). + lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). + WHILE lo_ixml_cell_elem IS BOUND. + CLEAR: lv_cell_value, + lv_cell_formula, + lv_style_guid. + + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_cell_elem CHANGING cp_structure = ls_cell ). + + lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'v' ). + + CASE ls_cell-t. + WHEN 's'. " String values are stored as index in shared string table + lv_index = lo_ixml_value_elem->get_value( ) + 1. + READ TABLE shared_strings INTO lv_cell_value INDEX lv_index. + WHEN 'inlineStr'. " inlineStr values are kept in special node + lo_ixml_value_elem = lo_ixml_cell_elem->find_from_name( name = 'is' ). + IF lo_ixml_value_elem IS BOUND. + lv_cell_value = lo_ixml_value_elem->get_value( ). + ENDIF. + WHEN OTHERS. "other types are stored directly + IF lo_ixml_value_elem IS BOUND. + lv_cell_value = lo_ixml_value_elem->get_value( ). + ENDIF. + ENDCASE. + + CLEAR lv_style_guid. + "read style based on index + IF ls_cell-s IS NOT INITIAL. + lv_index = ls_cell-s + 1. + READ TABLE styles INTO lo_excel_style INDEX lv_index. + IF sy-subrc = 0. + lv_style_guid = lo_excel_style->get_guid( ). + ENDIF. + ENDIF. + + lo_ixml_formula_elem = lo_ixml_cell_elem->find_from_name( name = 'f' ). + IF lo_ixml_formula_elem IS BOUND. + lv_cell_formula = lo_ixml_formula_elem->get_value( ). +*--------------------------------------------------------------------* +* Begin of insertion issue#284 - Copied formulae not +*--------------------------------------------------------------------* + DATA: BEGIN OF ls_formula_attributes, + ref TYPE string, + si TYPE i, + t TYPE string, + END OF ls_formula_attributes, + ls_ref_formula TYPE ty_ref_formulae. + + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_formula_elem CHANGING cp_structure = ls_formula_attributes ). + IF ls_formula_attributes-t = 'shared'. + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_cell-r + IMPORTING + e_column = lv_cell_column + e_row = lv_cell_row ). + + TRY. + CLEAR ls_ref_formula. + ls_ref_formula-sheet = io_worksheet. + ls_ref_formula-row = lv_cell_row. + ls_ref_formula-column = zcl_excel_common=>convert_column2int( lv_cell_column ). + ls_ref_formula-si = ls_formula_attributes-si. + ls_ref_formula-ref = ls_formula_attributes-ref. + ls_ref_formula-formula = lv_cell_formula. + INSERT ls_ref_formula INTO TABLE me->mt_ref_formulae. + CATCH cx_root. + BREAK-POINT. + ENDTRY. + ENDIF. +*--------------------------------------------------------------------* +* End of insertion issue#284 - Copied formulae not +*--------------------------------------------------------------------* + ENDIF. + + IF lv_cell_value IS NOT INITIAL + OR lv_cell_formula IS NOT INITIAL + OR lv_style_guid IS NOT INITIAL. + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_cell-r + IMPORTING + e_column = lv_cell_column + e_row = lv_cell_row ). + io_worksheet->set_cell( ip_column = lv_cell_column " cell_elem Column + ip_row = lv_cell_row " cell_elem row_elem + ip_value = lv_cell_value " cell_elem Value + ip_formula = lv_cell_formula + ip_data_type = ls_cell-t + ip_style = lv_style_guid ). + ENDIF. + lo_ixml_cell_elem ?= lo_ixml_iterator2->get_next( ). + ENDWHILE. + lo_ixml_row_elem ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + +*--------------------------------------------------------------------* +*#234 - column width not read correctly - begin of coding +* reason - libre office doesn't use SPAN in row - definitions +*--------------------------------------------------------------------* + IF lv_max_col = 0. + lo_ixml_imension_elem = lo_ixml_worksheet->find_from_name( name = 'dimension' ). + IF lo_ixml_imension_elem IS BOUND. + lv_dimension_range = lo_ixml_imension_elem->get_attribute( 'ref' ). + IF lv_dimension_range CS ':'. + REPLACE REGEX '\D+\d+:(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column + ELSE. + REPLACE REGEX '(\D+)\d+' IN lv_dimension_range WITH '$1'. " Get max column + ENDIF. + lv_max_col = zcl_excel_common=>convert_column2int( lv_dimension_range ). + ENDIF. + ENDIF. +*--------------------------------------------------------------------* +*#234 - column width not read correctly - end of coding +*--------------------------------------------------------------------* + + "Get the customized column width + lo_ixml_columns = lo_ixml_worksheet->get_elements_by_tag_name( name = 'col' ). + lo_ixml_iterator = lo_ixml_columns->create_iterator( ). + lo_ixml_column_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_column_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_column_elem + CHANGING + cp_structure = ls_column ). + lo_ixml_column_elem ?= lo_ixml_iterator->get_next( ). + IF ls_column-customwidth = lc_xml_attr_true + OR ls_column-customwidth = lc_xml_attr_true_int + OR ls_column-bestfit = lc_xml_attr_true + OR ls_column-bestfit = lc_xml_attr_true_int + OR ls_column-collapsed = lc_xml_attr_true + OR ls_column-collapsed = lc_xml_attr_true_int + OR ls_column-hidden = lc_xml_attr_true + OR ls_column-hidden = lc_xml_attr_true_int + OR ls_column-outlinelevel > '' + OR ls_column-style > ''. + lv_index = ls_column-min. + WHILE lv_index <= ls_column-max AND lv_index <= lv_max_col. + + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_index ). + lo_column_dimension = io_worksheet->get_column_dimension( lv_column_alpha ). + + IF ls_column-customwidth = lc_xml_attr_true + OR ls_column-customwidth = lc_xml_attr_true_int + OR ls_column-width IS NOT INITIAL. "+#234 + lo_column_dimension->set_width( ls_column-width ). + ENDIF. + + IF ls_column-bestfit = lc_xml_attr_true + OR ls_column-bestfit = lc_xml_attr_true_int. + lo_column_dimension->set_auto_size( abap_true ). + ENDIF. + + IF ls_column-collapsed = lc_xml_attr_true + OR ls_column-collapsed = lc_xml_attr_true_int. + lo_column_dimension->set_collapsed( abap_true ). + ENDIF. + + IF ls_column-hidden = lc_xml_attr_true + OR ls_column-hidden = lc_xml_attr_true_int. + lo_column_dimension->set_visible( abap_false ). + ENDIF. + + IF ls_column-outlinelevel > ''. +* outline_level = condense( column-outlineLevel ). + CONDENSE ls_column-outlinelevel. + lv_outline_level = ls_column-outlinelevel. + IF lv_outline_level > 0. + lo_column_dimension->set_outline_level( lv_outline_level ). + ENDIF. + ENDIF. + + IF ls_column-style > ''. + sy-index = ls_column-style + 1. + READ TABLE styles INTO lo_excel_style INDEX sy-index. + DATA: dummy_zexcel_cell_style TYPE zexcel_cell_style. + dummy_zexcel_cell_style = lo_excel_style->get_guid( ). + lo_column_dimension->set_column_style_by_guid( dummy_zexcel_cell_style ). + ENDIF. + + ADD 1 TO lv_index. + ENDWHILE. + ENDIF. +* Fix 207 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 +* IF column-hidden = lc_xml_attr_true OR +* column-hidden = lc_xml_attr_true_int. +* index = column-min. +* WHILE index <= column-max. +* column_alpha = zcl_excel_common=>convert_column2alpha( index ). +* column_dimension = io_worksheet->get_column_dimension( column_alpha ). +* column_dimension->set_visible( abap_false ). +* ADD 1 TO index. +* ENDWHILE. +* ENDIF. + ENDWHILE. + + "Now we need to get information from the sheetView node + lo_ixml_sheetview_elem = lo_ixml_worksheet->find_from_name( name = 'sheetView' ). + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetview_elem CHANGING cp_structure = ls_sheetview ). + IF ls_sheetview-showgridlines IS INITIAL OR + ls_sheetview-showgridlines = lc_xml_attr_true OR + ls_sheetview-showgridlines = lc_xml_attr_true_int. + "If the attribute is not specified or set to true, we will show grid lines + ls_sheetview-showgridlines = abap_true. + ELSE. + ls_sheetview-showgridlines = abap_false. + ENDIF. + io_worksheet->set_show_gridlines( ls_sheetview-showgridlines ). + + + "Add merge cell information + lo_ixml_mergecells = lo_ixml_worksheet->get_elements_by_tag_name( name = 'mergeCell' ). + lo_ixml_iterator = lo_ixml_mergecells->create_iterator( ). + lo_ixml_mergecell_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_mergecell_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_mergecell_elem + CHANGING + cp_structure = ls_mergecell ). + zcl_excel_common=>convert_range2column_a_row( EXPORTING + i_range = ls_mergecell-ref + IMPORTING + e_column_start = lv_merge_column_start + e_column_end = lv_merge_column_end + e_row_start = lv_merge_row_start + e_row_end = lv_merge_row_end ). + lo_ixml_mergecell_elem ?= lo_ixml_iterator->get_next( ). + io_worksheet->set_merge( EXPORTING + ip_column_start = lv_merge_column_start + ip_column_end = lv_merge_column_end + ip_row = lv_merge_row_start + ip_row_to = lv_merge_row_end ). + ENDWHILE. + + " read sheet format properties + lo_ixml_sheetformatpr_elem = lo_ixml_worksheet->find_from_name( 'sheetFormatPr' ). + IF lo_ixml_sheetformatpr_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_sheetformatpr_elem CHANGING cp_structure = ls_sheetformatpr ). + IF ls_sheetformatpr-customheight = '1'. + lv_height = ls_sheetformatpr-defaultrowheight. + lo_row_dimension = io_worksheet->get_default_row_dimension( ). + lo_row_dimension->set_row_height( lv_height ). + ENDIF. + + " TODO... column + ENDIF. + + " Read in page margins + lo_ixml_pagemargins_elem = lo_ixml_worksheet->find_from_name( 'pageMargins' ). + IF lo_ixml_pagemargins_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_pagemargins_elem + CHANGING + cp_structure = ls_pagemargins ). + io_worksheet->sheet_setup->margin_bottom = ls_pagemargins-bottom. + io_worksheet->sheet_setup->margin_footer = ls_pagemargins-footer. + io_worksheet->sheet_setup->margin_header = ls_pagemargins-header. + io_worksheet->sheet_setup->margin_left = ls_pagemargins-left. + io_worksheet->sheet_setup->margin_right = ls_pagemargins-right. + io_worksheet->sheet_setup->margin_top = ls_pagemargins-top. + ENDIF. + + " Read in page setup + lo_ixml_pagesetup_elem = lo_ixml_worksheet->find_from_name( 'pageSetup' ). + IF lo_ixml_pagesetup_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_pagesetup_elem + CHANGING + cp_structure = ls_pagesetup ). + io_worksheet->sheet_setup->orientation = ls_pagesetup-orientation. + io_worksheet->sheet_setup->scale = ls_pagesetup-scale. + ENDIF. + + " Read header footer + lo_ixml_headerfooter_elem = lo_ixml_worksheet->find_from_name( 'headerFooter' ). + IF lo_ixml_headerfooter_elem IS NOT INITIAL. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_headerfooter_elem CHANGING cp_structure = ls_headerfooter ). + io_worksheet->sheet_setup->diff_oddeven_headerfooter = ls_headerfooter-differentoddeven. + + lo_ixml_hf_value_elem = lo_ixml_headerfooter_elem->find_from_name( 'oddFooter' ). + IF lo_ixml_hf_value_elem IS NOT INITIAL. + ls_odd_footer-left_value = lo_ixml_hf_value_elem->get_value( ). + ENDIF. + +* 2do§1 Header/footer + " TODO.. get the rest. + + io_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_odd_header + ip_odd_footer = ls_odd_footer + ip_even_header = ls_even_header + ip_even_footer = ls_even_footer ). + + ENDIF. + + " Start fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + " Read pane + lo_ixml_pane_elem = lo_ixml_sheetview_elem->find_from_name( name = 'pane' ). + IF lo_ixml_pane_elem IS BOUND. + fill_struct_from_attributes( EXPORTING ip_element = lo_ixml_pane_elem CHANGING cp_structure = ls_excel_pane ). + " Issue #194 + " Replace REGEX with method from the common class + zcl_excel_common=>convert_columnrow2column_a_row( EXPORTING + i_columnrow = ls_excel_pane-topleftcell + IMPORTING + e_column = lv_pane_cell_col_a " Cell Column + e_row = lv_pane_cell_row ). " Natural number + lv_pane_cell_col = zcl_excel_common=>convert_column2int( lv_pane_cell_col_a ). + SUBTRACT 1 FROM: lv_pane_cell_col, + lv_pane_cell_row. + IF lv_pane_cell_col > 0 + AND lv_pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row + ip_num_columns = lv_pane_cell_col ). + ELSEIF lv_pane_cell_row > 0. + io_worksheet->freeze_panes( ip_num_rows = lv_pane_cell_row ). + ELSE. + io_worksheet->freeze_panes( ip_num_columns = lv_pane_cell_col ). + ENDIF. + ENDIF. + " End fix 194 Read attributes HIDDEN, OUTLINELEVEL, COLLAPSED in ZCL_EXCEL_READER_2007 + + " Start fix 276 Read data validations + lo_ixml_datavalidations = lo_ixml_worksheet->get_elements_by_tag_name( name = 'dataValidation' ). + lo_ixml_iterator = lo_ixml_datavalidations->create_iterator( ). + lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). + WHILE lo_ixml_datavalidation_elem IS BOUND. + fill_struct_from_attributes( EXPORTING + ip_element = lo_ixml_datavalidation_elem + CHANGING + cp_structure = ls_datavalidation ). + clear lo_ixml_formula_elem. + lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula1' ). + if lo_ixml_formula_elem is bound. + ls_datavalidation-formula1 = lo_ixml_formula_elem->get_value( ). + endif. + clear lo_ixml_formula_elem. + lo_ixml_formula_elem = lo_ixml_datavalidation_elem->find_from_name( name = 'formula2' ). + if lo_ixml_formula_elem is bound. + ls_datavalidation-formula2 = lo_ixml_formula_elem->get_value( ). + endif. + SPLIT ls_datavalidation-sqref AT space INTO TABLE lt_datavalidation_range. + LOOP AT lt_datavalidation_range INTO lv_datavalidation_range. + zcl_excel_common=>convert_range2column_a_row( EXPORTING + i_range = lv_datavalidation_range + IMPORTING + e_column_start = ls_datavalidation-cell_column + e_column_end = ls_datavalidation-cell_column_to + e_row_start = ls_datavalidation-cell_row + e_row_end = ls_datavalidation-cell_row_to ). + lo_data_validation = io_worksheet->add_new_data_validation( ). + lo_data_validation->type = ls_datavalidation-type. + lo_data_validation->allowblank = ls_datavalidation-allowblank. + lo_data_validation->showinputmessage = ls_datavalidation-showinputmessage. + lo_data_validation->showerrormessage = ls_datavalidation-showerrormessage. + lo_data_validation->showdropdown = ls_datavalidation-showdropdown. + lo_data_validation->operator = ls_datavalidation-operator. + lo_data_validation->formula1 = ls_datavalidation-formula1. + lo_data_validation->formula2 = ls_datavalidation-formula2. + lo_data_validation->prompttitle = ls_datavalidation-prompttitle. + lo_data_validation->prompt = ls_datavalidation-prompt. + lo_data_validation->errortitle = ls_datavalidation-errortitle. + lo_data_validation->error = ls_datavalidation-error. + lo_data_validation->errorstyle = ls_datavalidation-errorstyle. + lo_data_validation->cell_row = ls_datavalidation-cell_row. + lo_data_validation->cell_row_to = ls_datavalidation-cell_row_to. + lo_data_validation->cell_column = ls_datavalidation-cell_column. + lo_data_validation->cell_column_to = ls_datavalidation-cell_column_to. + endloop. + lo_ixml_datavalidation_elem ?= lo_ixml_iterator->get_next( ). + ENDWHILE. + " End fix 276 Read data validations + + endmethod. + + + + + + method LOAD_WORKSHEET_DRAWING. + + TYPES: BEGIN OF t_c_nv_pr, + name TYPE string, + id TYPE string, + END OF t_c_nv_pr. + + TYPES: BEGIN OF t_blip, + cstate TYPE string, + embed TYPE string, + END OF t_blip. + + TYPES: BEGIN OF t_chart, + id TYPE string, + END OF t_chart. + + CONSTANTS: lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_true_int TYPE string VALUE '1'. + CONSTANTS: lc_rel_chart TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart', + lc_rel_image TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image'. + + DATA: drawing TYPE REF TO if_ixml_document, + anchors TYPE REF TO if_ixml_node_collection, + node TYPE REF TO if_ixml_element, + coll_length TYPE i, + iterator TYPE REF TO if_ixml_node_iterator, + anchor_elem TYPE REF TO if_ixml_element, + + relationship TYPE t_relationship, + rel_drawings TYPE t_rel_drawings, + rel_drawing TYPE t_rel_drawing, + rels_drawing TYPE REF TO if_ixml_document, + rels_drawing_path TYPE string, + stripped_name TYPE chkfile, + dirname TYPE string, + + path TYPE string, + path2 TYPE text255, + file_ext2 TYPE char10. + + " Read Workbook Relationships + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = ip_path + IMPORTING + stripped_name = stripped_name + file_path = dirname. + CONCATENATE dirname '_rels/' stripped_name '.rels' + INTO rels_drawing_path. + rels_drawing_path = resolve_path( rels_drawing_path ). + rels_drawing = me->get_ixml_from_zip_archive( rels_drawing_path ). + node ?= rels_drawing->find_from_name( 'Relationship' ). + WHILE node IS BOUND. + fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). + + rel_drawing-id = relationship-id. + + CONCATENATE dirname relationship-target INTO path. + path = resolve_path( path ). + rel_drawing-content = me->get_from_zip_archive( path ). "------------> This is for template usage + + path2 = path. + zcl_excel_common=>split_file( EXPORTING ip_file = path2 + IMPORTING ep_extension = file_ext2 ). + rel_drawing-file_ext = file_ext2. + + "-------------Added by Alessandro Iannacci - Should load graph xml + CASE relationship-type. + WHEN lc_rel_chart. + "Read chart xml + rel_drawing-content_xml = me->get_ixml_from_zip_archive( path ). + WHEN OTHERS. + ENDCASE. + "---------------------------- + + + APPEND rel_drawing TO rel_drawings. + + node ?= node->get_next( ). + ENDWHILE. + + drawing = me->get_ixml_from_zip_archive( ip_path ). + +* one-cell anchor ************** + anchors = drawing->get_elements_by_tag_name( name = 'oneCellAnchor' namespace = 'xdr' ). + coll_length = anchors->get_length( ). + iterator = anchors->create_iterator( ). + DO coll_length TIMES. + anchor_elem ?= iterator->get_next( ). + + CALL METHOD me->load_drawing_anchor + EXPORTING + io_anchor_element = anchor_elem + io_worksheet = io_worksheet + it_related_drawings = rel_drawings. + + ENDDO. + +* two-cell anchor ****************** + anchors = drawing->get_elements_by_tag_name( name = 'twoCellAnchor' namespace = 'xdr' ). + coll_length = anchors->get_length( ). + iterator = anchors->create_iterator( ). + DO coll_length TIMES. + anchor_elem ?= iterator->get_next( ). + + CALL METHOD me->load_drawing_anchor + EXPORTING + io_anchor_element = anchor_elem + io_worksheet = io_worksheet + it_related_drawings = rel_drawings. + + ENDDO. + + endmethod. + + + + + METHOD read_from_applserver. + + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_max_length_line TYPE i, + lv_actual_length_line TYPE i, + lv_errormessage TYPE string. + + MOVE i_filename TO lv_filename. + + DESCRIBE FIELD ls_binary_data LENGTH lv_max_length_line IN BYTE MODE. + OPEN DATASET lv_filename FOR INPUT IN BINARY MODE. + IF sy-subrc <> 0. + lv_errormessage = 'A problem occured when reading the file'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + WHILE sy-subrc = 0. + + READ DATASET lv_filename INTO ls_binary_data MAXIMUM LENGTH lv_max_length_line ACTUAL LENGTH lv_actual_length_line. + APPEND ls_binary_data TO lt_binary_data. + lv_filelength = lv_filelength + lv_actual_length_line. + + ENDWHILE. + CLOSE DATASET lv_filename. + +*--------------------------------------------------------------------* +* Binary data needs to be provided as XSTRING for further processing +*--------------------------------------------------------------------* + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filelength + IMPORTING + buffer = r_excel_data + TABLES + binary_tab = lt_binary_data. + ENDMETHOD. + + + + + METHOD read_from_local_file. + DATA: lv_filelength TYPE i, + lt_binary_data TYPE STANDARD TABLE OF x255 WITH NON-UNIQUE DEFAULT KEY, + ls_binary_data LIKE LINE OF lt_binary_data, + lv_filename TYPE string, + lv_errormessage TYPE string. + + MOVE i_filename TO lv_filename. + + cl_gui_frontend_services=>gui_upload( EXPORTING + filename = lv_filename + filetype = 'BIN' " We are basically working with zipped directories --> force binary read + IMPORTING + filelength = lv_filelength + CHANGING + data_tab = lt_binary_data + EXCEPTIONS + file_open_error = 1 + file_read_error = 2 + no_batch = 3 + gui_refuse_filetransfer = 4 + invalid_type = 5 + no_authority = 6 + unknown_error = 7 + bad_data_format = 8 + header_not_allowed = 9 + separator_not_allowed = 10 + header_too_long = 11 + unknown_dp_error = 12 + access_denied = 13 + dp_out_of_memory = 14 + disk_full = 15 + dp_timeout = 16 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19 ). + IF sy-subrc <> 0. + lv_errormessage = 'A problem occured when reading the file'(001). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* Binary data needs to be provided as XSTRING for further processing +*--------------------------------------------------------------------* + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_filelength + IMPORTING + buffer = r_excel_data + TABLES + binary_tab = lt_binary_data. + + ENDMETHOD. + + + + + method RESOLVE_PATH. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 Determine whether the replacement should be done +* iterative to allow /../../.. or something alike +* 2do§2 Determine whether /./ has to be supported as well +* 2do§3 Create unit-test for this method +* +* Please don't just delete these ToDos if they are not +* needed but leave a comment that states this +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-11 +* - ... +* changes: replaced previous coding by regular expression +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* §1 This routine will receive a path, that may have a relative pathname (/../) included somewhere +* The output should be a resolved path without relative references +* Example: Input xl/worksheets/../drawings/drawing1.xml +* Output xl/drawings/drawing1.xml +*--------------------------------------------------------------------* + + rp_result = ip_path. +*--------------------------------------------------------------------* +* §1 Remove relative pathnames +*--------------------------------------------------------------------* +* Regular expression [^/]*/\.\./ +* [^/]* --> any number of characters other than / +* followed by /\.\./ --> the sequence /../ +* ==> worksheets/../ will be found in the example +*--------------------------------------------------------------------* + REPLACE REGEX '[^/]*/\.\./' IN rp_result WITH ``. + + + endmethod. + + + method RESOLVE_REFERENCED_FORMULAE. + TYPES: BEGIN OF ty_referenced_cells, + sheet TYPE REF TO zcl_excel_worksheet, + si TYPE i, + row_from TYPE i, + row_to TYPE i, + col_from TYPE i, + col_to TYPE i, + formula TYPE string, + ref_cell TYPE char10, + END OF ty_referenced_cells. + + DATA: ls_ref_formula LIKE LINE OF me->mt_ref_formulae, + lts_referenced_cells TYPE SORTED TABLE OF ty_referenced_cells WITH NON-UNIQUE KEY sheet si row_from row_to col_from col_to, + ls_referenced_cell LIKE LINE OF lts_referenced_cells, + lv_col_from TYPE zexcel_cell_column_alpha, + lv_col_to TYPE zexcel_cell_column_alpha, + lv_resulting_formula TYPE string, + lv_current_cell TYPE char10. + + + me->mt_ref_formulae = me->mt_ref_formulae. + +*--------------------------------------------------------------------* +* Get referenced Cells, Build ranges for easy lookup +*--------------------------------------------------------------------* + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref <> space. + + CLEAR ls_referenced_cell. + ls_referenced_cell-sheet = ls_ref_formula-sheet. + ls_referenced_cell-si = ls_ref_formula-si. + ls_referenced_cell-formula = ls_ref_formula-formula. + + TRY. + zcl_excel_common=>convert_range2column_a_row( EXPORTING i_range = ls_ref_formula-ref + IMPORTING e_column_start = lv_col_from + e_column_end = lv_col_to + e_row_start = ls_referenced_cell-row_from + e_row_end = ls_referenced_cell-row_to ). + ls_referenced_cell-col_from = zcl_excel_common=>convert_column2int( lv_col_from ). + ls_referenced_cell-col_to = zcl_excel_common=>convert_column2int( lv_col_to ). + + + CLEAR ls_referenced_cell-ref_cell. + TRY. + ls_referenced_cell-ref_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). + ls_referenced_cell-ref_cell+3 = ls_ref_formula-row. + CONDENSE ls_referenced_cell-ref_cell NO-GAPS. + CATCH zcx_excel. + ENDTRY. + + INSERT ls_referenced_cell INTO TABLE lts_referenced_cells. + CATCH zcx_excel. + ENDTRY. + + ENDLOOP. + +* break x0009004. +*--------------------------------------------------------------------* +* For each referencing cell determine the referenced cell +* and resolve the formula +*--------------------------------------------------------------------* + LOOP AT me->mt_ref_formulae INTO ls_ref_formula WHERE ref = space. + + + CLEAR lv_current_cell. + TRY. + lv_current_cell(3) = zcl_excel_common=>convert_column2alpha( ls_ref_formula-column ). + lv_current_cell+3 = ls_ref_formula-row. + CONDENSE lv_current_cell NO-GAPS. + CATCH zcx_excel. + ENDTRY. + + LOOP AT lts_referenced_cells INTO ls_referenced_cell WHERE sheet = ls_ref_formula-sheet + AND si = ls_ref_formula-si + AND row_from <= ls_ref_formula-row + AND row_to >= ls_ref_formula-row + AND col_from <= ls_ref_formula-column + AND col_to >= ls_ref_formula-column. + + TRY. + + lv_resulting_formula = zcl_excel_common=>determine_resulting_formula( iv_reference_cell = ls_referenced_cell-ref_cell + iv_reference_formula = ls_referenced_cell-formula + iv_current_cell = lv_current_cell ). + + ls_referenced_cell-sheet->set_cell_formula( ip_column = ls_ref_formula-column + ip_row = ls_ref_formula-row + ip_formula = lv_resulting_formula ). + CATCH zcx_excel. + ENDTRY. + EXIT. + + ENDLOOP. + + ENDLOOP. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + METHOD load_vbaproject. + + DATA lv_content TYPE xstring. + + lv_content = me->get_from_zip_archive( ip_path ). + + ip_excel->zif_excel_book_vba_project~set_vbaproject( lv_content ). + + ENDMETHOD. + + + method LOAD_WORKBOOK. + super->load_workbook( EXPORTING iv_workbook_full_filename = iv_workbook_full_filename + io_excel = io_excel ). + + CONSTANTS: lc_vba_project TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject'. + + DATA: rels_workbook_path TYPE string, + rels_workbook TYPE REF TO if_ixml_document, + path TYPE string, + node TYPE REF TO if_ixml_element, + workbook TYPE REF TO if_ixml_document, + stripped_name TYPE chkfile, + dirname TYPE string, + relationship TYPE t_relationship, + fileversion TYPE t_fileversion, + workbookpr TYPE t_workbookpr. + + FIELD-SYMBOLS: <worksheet> TYPE t_relationship. + + CALL FUNCTION 'TRINT_SPLIT_FILE_AND_PATH' + EXPORTING + full_name = iv_workbook_full_filename + IMPORTING + stripped_name = stripped_name + file_path = dirname. + + " Read Workbook Relationships + CONCATENATE dirname '_rels/' stripped_name '.rels' + INTO rels_workbook_path. + + rels_workbook = me->get_ixml_from_zip_archive( rels_workbook_path ). + + node ?= rels_workbook->find_from_name( 'Relationship' ). + WHILE node IS BOUND. + me->fill_struct_from_attributes( EXPORTING ip_element = node CHANGING cp_structure = relationship ). + + CASE relationship-type. + WHEN lc_vba_project. + " Read VBA binary + CONCATENATE dirname relationship-target INTO path. + me->load_vbaproject( ip_path = path + ip_excel = io_excel ). + WHEN OTHERS. + ENDCASE. + + node ?= node->get_next( ). + ENDWHILE. + + " Read Workbook codeName + workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + node ?= workbook->find_from_name( 'fileVersion' ). + IF node IS BOUND. + + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = fileversion ). + + io_excel->zif_excel_book_vba_project~set_codename( fileversion-codename ). + ENDIF. + + " Read Workbook codeName + workbook = me->get_ixml_from_zip_archive( iv_workbook_full_filename ). + node ?= workbook->find_from_name( 'workbookPr' ). + IF node IS BOUND. + + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = workbookpr ). + + io_excel->zif_excel_book_vba_project~set_codename_pr( workbookpr-codename ). + ENDIF. + + endmethod. + + + method LOAD_WORKSHEET. + + super->load_worksheet( EXPORTING ip_path = ip_path + io_worksheet = io_worksheet ). + + DATA: path TYPE string, + node TYPE REF TO if_ixml_element, + worksheet TYPE REF TO if_ixml_document, + sheetpr TYPE t_sheetpr. + + +* " Read Workbook codeName +* workbook = me->get_ixml_from_zip_archive( ip_path ). +* node ?= workbook->find_from_name( 'fileVersion' ). +* IF node IS BOUND. +* +* fill_struct_from_attributes( EXPORTING ip_element = node +* CHANGING cp_structure = fileversion ). +* +* IO_WORKSHEET->zif_excel_book_vba_project~set_codename( fileversion-codename ). +* ENDIF. + + " Read Workbook codeName + worksheet = me->get_ixml_from_zip_archive( ip_path ). + node ?= worksheet->find_from_name( 'sheetPr' ). + IF node IS BOUND. + + fill_struct_from_attributes( EXPORTING ip_element = node + CHANGING cp_structure = sheetpr ). + + io_worksheet->zif_excel_sheet_vba_project~set_codename_pr( sheetpr-codename ). + ENDIF. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + METHOD is_security_enabled. + IF lockrevision EQ abap_true OR lockstructure EQ abap_true OR lockwindows EQ abap_true. + ep_security_enabled = abap_true. + ENDIF. +ENDMETHOD. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + orientation = me->c_orientation_default. + +* default margins + margin_bottom = '0.75'. + margin_footer = '0.3'. + margin_header = '0.3'. + margin_left = '0.7'. + margin_right = '0.7'. + margin_top = '0.75'. + +* clear page settings + CLEAR: black_and_white, + cell_comments, + copies, + draft, + errors, + first_page_number, + fit_to_page, + fit_to_height, + fit_to_width, + horizontal_dpi, + orientation, + page_order, + paper_height, + paper_size, + paper_width, + scale, + use_first_page_num, + use_printer_defaults, + vertical_dpi. + endmethod. + + + + + + + method GET_HEADER_FOOTER_STRING. +* ---------------------------------------------------------------------- + DATA: lc_marker_left(2) TYPE c VALUE '&L' + , lc_marker_right(2) TYPE c VALUE '&R' + , lc_marker_center(2) TYPE c VALUE '&C' + , lv_value TYPE string + . +* ---------------------------------------------------------------------- + IF ep_odd_header IS SUPPLIED. + + IF me->odd_header-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_odd_header. + ENDIF. + + IF me->odd_header-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'CENTER' ). + CONCATENATE ep_odd_header lc_marker_center lv_value INTO ep_odd_header. + ENDIF. + + IF me->odd_header-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_header ip_side = 'RIGHT' ). + CONCATENATE ep_odd_header lc_marker_right lv_value INTO ep_odd_header. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + IF ep_odd_footer IS SUPPLIED. + + IF me->odd_footer-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_odd_footer. + ENDIF. + + IF me->odd_footer-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'CENTER' ). + CONCATENATE ep_odd_footer lc_marker_center lv_value INTO ep_odd_footer. + ENDIF. + + IF me->odd_footer-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->odd_footer ip_side = 'RIGHT' ). + CONCATENATE ep_odd_footer lc_marker_right lv_value INTO ep_odd_footer. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + IF ep_even_header IS SUPPLIED. + + IF me->even_header-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_even_header. + ENDIF. + + IF me->even_header-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'CENTER' ). + CONCATENATE ep_even_header lc_marker_center lv_value INTO ep_even_header. + ENDIF. + + IF me->even_header-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_header ip_side = 'RIGHT' ). + CONCATENATE ep_even_header lc_marker_right lv_value INTO ep_even_header. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + IF ep_even_footer IS SUPPLIED. + + IF me->even_footer-left_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'LEFT' ). + CONCATENATE lc_marker_left lv_value INTO ep_even_footer. + ENDIF. + + IF me->even_footer-center_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'CENTER' ). + CONCATENATE ep_even_footer lc_marker_center lv_value INTO ep_even_footer. + ENDIF. + + IF me->even_footer-right_value IS NOT INITIAL. + lv_value = me->process_header_footer( ip_header = me->even_footer ip_side = 'RIGHT' ). + CONCATENATE ep_even_footer lc_marker_right lv_value INTO ep_even_footer. + ENDIF. + + ENDIF. +* ---------------------------------------------------------------------- + endmethod. + + + + + + method PROCESS_HEADER_FOOTER. + +* ---------------------------------------------------------------------- +* Only Basic font/text formatting possible: +* Bold (yes / no), Font Type, Font Size + + DATA: lv_fname(12) TYPE c + , lv_string TYPE string + . + + FIELD-SYMBOLS: <lv_value> TYPE string + , <ls_font> TYPE zexcel_s_style_font + . + +* ---------------------------------------------------------------------- + CONCATENATE ip_side '_VALUE' INTO lv_fname. + ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO <lv_value>. + + CONCATENATE ip_side '_FONT' INTO lv_fname. + ASSIGN COMPONENT lv_fname OF STRUCTURE ip_header TO <ls_font>. + + IF <ls_font> IS ASSIGNED AND <lv_value> IS ASSIGNED. + + IF <ls_font>-name IS NOT INITIAL. + CONCATENATE '&"' <ls_font>-name ',' INTO rv_processed_string. + ELSE. + rv_processed_string = '&"-,'. + ENDIF. + + IF <ls_font>-bold = abap_true. + CONCATENATE rv_processed_string 'Bold"' INTO rv_processed_string. + ELSE. + CONCATENATE rv_processed_string 'Standard"' INTO rv_processed_string. + ENDIF. + + IF <ls_font>-size IS NOT INITIAL. + lv_string = <ls_font>-size. + CONCATENATE rv_processed_string '&' lv_string INTO rv_processed_string. + ENDIF. + + CONCATENATE rv_processed_string <lv_value> INTO rv_processed_string. + + ENDIF. +* ---------------------------------------------------------------------- + + endmethod. + + + + + + + method SET_HEADER_FOOTER. + +* Only Basic font/text formatting possible: +* Bold (yes / no), Font Type, Font Size +* +* usefull placeholders, which can be used in header/footer value strings +* '&P' - page number +* '&N' - total number of pages +* '&D' - Date +* '&T' - Time +* '&F' - File Name +* '&Z' - Path +* '&A' - Sheet name +* new line via class constant CL_ABAP_CHAR_UTILITIES=>newline +* +* Example Value String 'page &P of &N' +* +* DO NOT USE &L , &C or &R which automatically created as position markers + + me->odd_header = ip_odd_header. + me->odd_footer = ip_odd_footer. + me->even_header = ip_even_header. + me->even_footer = ip_even_footer. + + IF me->even_header IS NOT INITIAL OR me->even_footer IS NOT INITIAL. + me->diff_oddeven_headerfooter = abap_true. + ENDIF. + + + endmethod. + + + + + + + + + + method SET_PAGE_MARGINS. + DATA: lv_coef TYPE f, + lv_unit TYPE string. + + lv_unit = ip_unit. + TRANSLATE lv_unit TO UPPER CASE. + + CASE lv_unit. + WHEN 'IN'. lv_coef = 1. + WHEN 'CM'. lv_coef = '0.393700787'. + WHEN 'MM'. lv_coef = '0.0393700787'. + ENDCASE. + + IF ip_bottom IS SUPPLIED. margin_bottom = lv_coef * ip_bottom. ENDIF. + IF ip_footer IS SUPPLIED. margin_footer = lv_coef * ip_footer. ENDIF. + IF ip_header IS SUPPLIED. margin_header = lv_coef * ip_header. ENDIF. + IF ip_left IS SUPPLIED. margin_left = lv_coef * ip_left. ENDIF. + IF ip_right IS SUPPLIED. margin_right = lv_coef * ip_right. ENDIF. + IF ip_top IS SUPPLIED. margin_top = lv_coef * ip_top. ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + method CONSTRUCTOR. + + + CREATE OBJECT font. + CREATE OBJECT fill. + CREATE OBJECT borders. + CREATE OBJECT alignment. + CREATE OBJECT number_format. + CREATE OBJECT protection. + +* Start of insertion # issue 139 - Dateretention of cellstyles + IF ip_guid IS NOT INITIAL. + me->guid = ip_guid. + ELSE. +* End of insertion # issue 139 - Dateretention of cellstyles + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = me->guid. +* Start of insertion # issue 139 - Dateretention of cellstyles + ENDIF. +* End of insertion # issue 139 - Dateretention of cellstyles + + endmethod. + + + + method GET_GUID. + + + ep_guid = me->guid. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + method ADD. + + + styles->add( ip_style ). + endmethod. + + + method CLEAR. + + + styles->clear( ). + endmethod. + + + method CONSTRUCTOR. + + + CREATE OBJECT styles. + endmethod. + + + + + method GET. + + + eo_style ?= styles->if_object_collection~get( ip_index ). + endmethod. + + + + method GET_ITERATOR. + + + eo_iterator ?= styles->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + + + is_empty = styles->if_object_collection~is_empty( ). + endmethod. + + + + + method REGISTER_NEW_STYLE. + + + me->add( io_style ). + ep_style_code = me->size( ) - 1. "style count starts from 0 + endmethod. + + + + method REMOVE. + + + styles->remove( ip_style ). + endmethod. + + + + method SIZE. + + + ep_size = styles->if_object_collection~size( ). + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + method ADD. + styles_conditional->add( ip_style_conditional ). + endmethod. + + + method CLEAR. + styles_conditional->clear( ). + endmethod. + + + method CONSTRUCTOR. + + CREATE OBJECT styles_conditional. + + endmethod. + + + + + method GET. + DATA lv_index TYPE i. + lv_index = ip_index. + eo_style_conditional ?= styles_conditional->if_object_collection~get( lv_index ). + endmethod. + + + + method GET_ITERATOR. + eo_iterator ?= styles_conditional->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + is_empty = styles_conditional->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + styles_conditional->remove( ip_style_conditional ). + endmethod. + + + + method SIZE. + ep_size = styles_conditional->if_object_collection~size( ). + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + horizontal = me->c_horizontal_general. + vertical = me->c_vertical_bottom. + wrapText = abap_false. + shrinkToFit = abap_false. + endmethod. + + + + method GET_STRUCTURE. + + es_alignment-horizontal = me->horizontal. + es_alignment-vertical = me->vertical. + es_alignment-textrotation = me->textrotation. + es_alignment-wraptext = me->wraptext. + es_alignment-shrinktofit = me->shrinktofit. + es_alignment-indent = me->indent. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + method CONSTRUCTOR. + border_style = zcl_excel_style_border=>c_border_none. + border_color-theme = zcl_excel_style_color=>c_theme_not_set. + border_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + method GET_STRUCTURE. +*initialize colors to 'not set' + es_fill-left_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-left_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-right_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-right_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-top_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-top_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-bottom_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-bottom_color-theme = zcl_excel_style_color=>c_theme_not_set. + es_fill-diagonal_color-indexed = zcl_excel_style_color=>c_indexed_not_set. + es_fill-diagonal_color-theme = zcl_excel_style_color=>c_theme_not_set. + +* Check if all borders is set otherwise check single border + IF me->allborders IS BOUND. + es_fill-left_color = me->allborders->border_color. + es_fill-left_style = me->allborders->border_style. + es_fill-right_color = me->allborders->border_color. + es_fill-right_style = me->allborders->border_style. + es_fill-top_color = me->allborders->border_color. + es_fill-top_style = me->allborders->border_style. + es_fill-bottom_color = me->allborders->border_color. + es_fill-bottom_style = me->allborders->border_style. + ELSE. + IF me->left IS BOUND. + es_fill-left_color = me->left->border_color. + es_fill-left_style = me->left->border_style. + ENDIF. + IF me->right IS BOUND. + es_fill-right_color = me->right->border_color. + es_fill-right_style = me->right->border_style. + ENDIF. + IF me->top IS BOUND. + es_fill-top_color = me->top->border_color. + es_fill-top_style = me->top->border_style. + ENDIF. + IF me->down IS BOUND. + es_fill-bottom_color = me->down->border_color. + es_fill-bottom_style = me->down->border_style. + ENDIF. + ENDIF. + +* Check if diagonal is set + IF me->diagonal IS BOUND. + es_fill-diagonal_color = me->diagonal->border_color. + es_fill-diagonal_style = me->diagonal->border_style. + CASE me->diagonal_mode. + WHEN 1. + es_fill-diagonalup = 1. + es_fill-diagonaldown = 0. + WHEN 2. + es_fill-diagonalup = 0. + es_fill-diagonaldown = 1. + WHEN 3. + es_fill-diagonalup = 1. + es_fill-diagonaldown = 1. + WHEN OTHERS. + es_fill-diagonalup = 0. + es_fill-diagonaldown = 0. + ENDCASE. + ENDIF. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method CREATE_NEW_ARGB. + + + CONCATENATE zcl_excel_style_color=>c_alpha ip_red ip_green ip_blu INTO ep_color_argb. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method GET_BOTTOM_ROW_INTEGER. + DATA: lv_table_lines TYPE i. + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + + IF settings-bottom_right_row IS NOT INITIAL. +* ev_row = zcl_excel_common=>convert_column2int( settings-bottom_right_row ). " del issue #246 + ev_row = settings-bottom_right_row . " ins issue #246 + EXIT. + ENDIF. + + ASSIGN table_data->* TO <fs_table>. + DESCRIBE TABLE <fs_table> LINES lv_table_lines. + IF lv_table_lines = 0. + lv_table_lines = 1. "table needs at least 1 data row + ENDIF. + + ev_row = settings-top_left_row + lv_table_lines. + + IF me->has_totals( ) = abap_true." ???? AND ip_include_totals_row = abap_true. + ADD 1 TO ev_row. + ENDIF. + endmethod. + + + + method GET_ID. + ov_id = id. + endmethod. + + + + method GET_NAME. + + IF me->name IS INITIAL. + me->name = zcl_excel_common=>number_to_excel_string( ip_value = me->id ). + CONCATENATE 'table' me->name INTO me->name. + ENDIF. + + ov_name = me->name. + endmethod. + + + + + method GET_REFERENCE. + DATA: lv_column TYPE zexcel_cell_column, + lv_table_lines TYPE i, + lv_right_column TYPE zexcel_cell_column_alpha, + ls_field_catalog TYPE zexcel_s_fieldcatalog, + lv_bottom_row TYPE zexcel_cell_row, + lv_top_row_string(10) TYPE c, + lv_bottom_row_string(10) TYPE c. + + FIELD-SYMBOLS: <fs_table> TYPE STANDARD TABLE. + +*column + lv_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). + lv_table_lines = 0. + LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. + ADD 1 TO lv_table_lines. + ENDLOOP. + lv_column = lv_column + lv_table_lines - 1. + lv_right_column = zcl_excel_common=>convert_column2alpha( lv_column ). + +*row + ASSIGN table_data->* TO <fs_table>. + DESCRIBE TABLE <fs_table> LINES lv_table_lines. + IF lv_table_lines = 0. + lv_table_lines = 1. "table needs at least 1 data row + ENDIF. + lv_bottom_row = settings-top_left_row + lv_table_lines . + + IF me->has_totals( ) = abap_true AND ip_include_totals_row = abap_true. + ADD 1 TO lv_bottom_row. + ENDIF. + + lv_top_row_string = zcl_excel_common=>number_to_excel_string( settings-top_left_row ). + lv_bottom_row_string = zcl_excel_common=>number_to_excel_string( lv_bottom_row ). + + CONCATENATE settings-top_left_column lv_top_row_string + ':' + lv_right_column lv_bottom_row_string INTO ov_reference. + + endmethod. + + + + + method GET_RIGHT_COLUMN_INTEGER. + DATA: lv_column TYPE zexcel_cell_column, + lv_table_lines TYPE i, + ls_field_catalog TYPE zexcel_s_fieldcatalog. + + IF settings-bottom_right_column IS NOT INITIAL. + ev_column = zcl_excel_common=>convert_column2int( settings-bottom_right_column ). + EXIT. + ENDIF. + + ev_column = zcl_excel_common=>convert_column2int( settings-top_left_column ). + LOOP AT fieldcat INTO ls_field_catalog WHERE dynpfld EQ abap_true. + ADD 1 TO ev_column. + ENDLOOP. + + endmethod. + + + + + + method GET_TOTALS_FORMULA. + CONSTANTS: lc_function_id_sum TYPE string VALUE '109', + lc_function_id_min TYPE string VALUE '105', + lc_function_id_max TYPE string VALUE '104', + lc_function_id_count TYPE string VALUE '103', + lc_function_id_average TYPE string VALUE '101'. + + DATA: lv_function_id TYPE string. + + CASE ip_function. + WHEN zcl_excel_table=>totals_function_sum. + lv_function_id = lc_function_id_sum. + + WHEN zcl_excel_table=>totals_function_min. + lv_function_id = lc_function_id_min. + + WHEN zcl_excel_table=>totals_function_max. + lv_function_id = lc_function_id_max. + + WHEN zcl_excel_table=>totals_function_count. + lv_function_id = lc_function_id_count. + + WHEN zcl_excel_table=>totals_function_average. + lv_function_id = lc_function_id_average. + + WHEN zcl_excel_table=>totals_function_custom. " issue #292 + RETURN. + + WHEN OTHERS. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid totals formula. See ZCL_ for possible values'. + ENDCASE. + + CONCATENATE 'SUBTOTAL(' lv_function_id ',[' ip_column '])' INTO ep_formula. + endmethod. + + + + method HAS_TOTALS. + DATA: ls_field_catalog TYPE zexcel_s_fieldcatalog. + + ep_result = abap_false. + + LOOP AT fieldcat INTO ls_field_catalog. + IF ls_field_catalog-totals_function IS NOT INITIAL. + ep_result = abap_true. + EXIT. + ENDIF. + ENDLOOP. + + endmethod. + + + + METHOD set_data. + + DATA lr_temp TYPE REF TO data. + + FIELD-SYMBOLS: <lt_table_temp> TYPE ANY TABLE, + <lt_table> TYPE ANY TABLE. + + GET REFERENCE OF ir_data INTO lr_temp. + ASSIGN lr_temp->* TO <lt_table_temp>. + CREATE DATA table_data LIKE <lt_table_temp>. + ASSIGN me->table_data->* TO <lt_table>. + <lt_table> = <lt_table_temp>. + +ENDMETHOD. + + + + method SET_ID. + id = iv_id. + endmethod. + + + + + + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + +*&---------------------------------------------------------------------* +*& Class (Implementation) C_OI_PROXY_ERROR +*&---------------------------------------------------------------------* +CLASS c_oi_proxy_error IMPLEMENTATION. + METHOD constructor. +* IMPORTING object_name TYPE c +* method_name TYPE c. + error_nr = ret_call_not_flushed. + me->i_oi_error~error_code = c_oi_errors=>ret_call_not_flushed. + me->i_oi_error~is_flushed = ' '. + me->i_oi_error~has_failed = 'X'. + me->i_oi_error~has_succeeded = ' '. + me->message_id = 'SOFFICEINTEGRATION'. + me->message_nr = '899'. + me->param1 = object_name. + me->param2 = method_name. + ENDMETHOD. "constructor + + METHOD i_oi_error~flush_error. + IF error_nr EQ 0. + me->i_oi_error~error_code = c_oi_errors=>ret_ok. + me->i_oi_error~is_flushed = 'X'. + me->i_oi_error~has_failed = ' '. + me->i_oi_error~has_succeeded = 'X'. + me->message_id = ''. + me->message_nr = '000'. + CALL METHOD c_oi_errors=>translate_proxy_error_code + EXPORTING + errorcode = error_nr + IMPORTING + retcode = me->i_oi_error~error_code. + ELSEIF error_nr EQ ret_call_not_flushed. + "call still not flushed + CALL METHOD c_oi_errors=>translate_proxy_error_code + EXPORTING + errorcode = error_nr + errorstring = me->param2 "method name + objectname = me->param1 + IMPORTING + retcode = me->i_oi_error~error_code. + ELSE. + me->i_oi_error~is_flushed = 'X'. + me->i_oi_error~has_succeeded = ' '. + me->i_oi_error~has_failed = 'X'. + CALL METHOD c_oi_errors=>translate_proxy_error_code + EXPORTING + errorcode = error_nr + errorstring = error_string + IMPORTING + retcode = me->i_oi_error~error_code. + CALL METHOD c_oi_errors=>get_message + IMPORTING + message_id = me->message_id + message_number = me->message_nr + param1 = me->param1 + param2 = me->param2 + param3 = me->param3 + param4 = me->param4. + ENDIF. + ENDMETHOD. "i_oi_error~flush_error + + METHOD i_oi_error~raise_message. +* IMPORTING type TYPE c. +* EXCEPTIONS message_raised flush_failed. + IF me->i_oi_error~has_succeeded IS INITIAL. + IF NOT me->i_oi_error~is_flushed IS INITIAL. + MESSAGE ID message_id TYPE type + NUMBER message_nr WITH param1 param2 param3 param4 + RAISING message_raised. + ELSE. + RAISE flush_failed. + ENDIF. + ENDIF. + ENDMETHOD. "i_oi_error~raise_message + + METHOD i_oi_error~get_message. +* EXPORTING message_id TYPE c +* message_number TYPE c +* param1 TYPE c +* param2 TYPE c +* param3 TYPE c +* param4 TYPE c. + param1 = me->param1. param2 = me->param2. + param3 = me->param3. param4 = me->param4. + + message_id = me->message_id. + message_number = me->message_nr. + ENDMETHOD. "i_oi_error~get_message +ENDCLASS. "C_OI_PROXY_ERROR + +*&---------------------------------------------------------------------* +*& Class (Implementation) CL_GRID_ACCESSION +*&---------------------------------------------------------------------* +CLASS lcl_gui_alv_grid IMPLEMENTATION. + + METHOD get_alv_attributes. + CREATE DATA et_table LIKE io_grid->mt_outtab. + et_table = io_grid->mt_outtab. + ENDMETHOD. "get_data + +ENDCLASS. "CL_GRID_ACCESSION + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature +TYPE-POOLS: sydes. +TYPE-POOLS: slis. +*--------------------------------------------------------------------* +* CLASS c_oi_proxy_error +*--------------------------------------------------------------------* +* use for method bind_ALV +*--------------------------------------------------------------------* +CLASS c_oi_proxy_error DEFINITION. + PUBLIC SECTION. + INTERFACES: i_oi_error. + DATA: error_nr TYPE i. + DATA: error_string TYPE sy-msgv1. + + METHODS: constructor IMPORTING object_name TYPE c + method_name TYPE c. + PRIVATE SECTION. + CONSTANTS: + ret_call_not_flushed TYPE i VALUE -999999. + + DATA: message_id TYPE sy-msgid, + message_nr TYPE sy-msgno, + param1 TYPE sy-msgv1, + param2 TYPE sy-msgv2, + param3 TYPE sy-msgv3, + param4 TYPE sy-msgv4. +ENDCLASS. "c_oi_proxy_error DEFINITION + +*--------------------------------------------------------------------* +* CLASS lcl_gui_alv_grid +*--------------------------------------------------------------------* +* to get protected attribute and method of cl_gui_alv_grid +* use for method bind_ALV +*--------------------------------------------------------------------* +CLASS lcl_gui_alv_grid DEFINITION INHERITING FROM cl_gui_alv_grid. + + PUBLIC SECTION. +* get ALV grid data + METHODS: get_alv_attributes + IMPORTING + io_grid TYPE REF TO cl_gui_alv_grid " ALV grid + EXPORTING + et_table TYPE REF TO data. " dta table + +ENDCLASS. "lcl_gui_alv_grid DEFINITION + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + ABAP + SLIS + SOI + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_COLUMNS. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + CLEAR: me->print_title_col_from, + me->print_title_col_to . + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~CLEAR_PRINT_REPEAT_ROWS. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + CLEAR: me->print_title_row_from, + me->print_title_row_to . + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_COLUMNS. + ev_columns_from = me->print_title_col_from. + ev_columns_to = me->print_title_col_to. + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~GET_PRINT_REPEAT_ROWS. + ev_rows_from = me->print_title_row_from. + ev_rows_to = me->print_title_row_to. + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_COLUMNS. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +*--------------------------------------------------------------------* + + DATA: lv_col_from_int TYPE i, + lv_col_to_int TYPE i, + lv_errormessage TYPE string. + + DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range. + + + lv_col_from_int = zcl_excel_common=>convert_column2int( iv_columns_from ). + lv_col_to_int = zcl_excel_common=>convert_column2int( iv_columns_to ). + +*--------------------------------------------------------------------* +* Check if valid range is supplied +*--------------------------------------------------------------------* + IF lv_col_from_int < 1. + lv_errormessage = 'Invalid range supplied for print-title repeatable columns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + IF lv_col_from_int > lv_col_to_int. + lv_errormessage = 'Invalid range supplied for print-title repeatable columns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + me->print_title_col_from = iv_columns_from. + me->print_title_col_to = iv_columns_to. + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + endmethod. + + + method ZIF_EXCEL_SHEET_PRINTSETTINGS~SET_PRINT_REPEAT_ROWS. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +*--------------------------------------------------------------------* + + DATA: lv_errormessage TYPE string. + + DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range. + + + +*--------------------------------------------------------------------* +* Check if valid range is supplied +*--------------------------------------------------------------------* + IF iv_rows_from < 1. + lv_errormessage = 'Invalid range supplied for print-title repeatable rowumns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + IF iv_rows_from > iv_rows_to. + lv_errormessage = 'Invalid range supplied for print-title repeatable rowumns'(401). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + +*--------------------------------------------------------------------* +* adjust internal representation +*--------------------------------------------------------------------* + me->print_title_row_from = iv_rows_from. + me->print_title_row_to = iv_rows_to. + + +*--------------------------------------------------------------------* +* adjust corresponding range +*--------------------------------------------------------------------* + me->print_title_set_range( ). + + + endmethod. + + + method ZIF_EXCEL_SHEET_PROPERTIES~GET_STYLE. + IF zif_excel_sheet_properties~style IS NOT INITIAL. + ep_style = zif_excel_sheet_properties~style. + ELSE. + ep_style = me->excel->get_default_style( ). + ENDIF. + endmethod. + + + method ZIF_EXCEL_SHEET_PROPERTIES~INITIALIZE. + + zif_excel_sheet_properties~show_zeros = zif_excel_sheet_properties=>c_showzero. + zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_on. + zif_excel_sheet_properties~summaryright = zif_excel_sheet_properties=>c_right_on. + +* inizialize zoomscale values + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale = 100. + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_normal = 100. + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_pagelayoutview = 100 . + ZIF_EXCEL_SHEET_PROPERTIES~zoomscale_sheetlayoutview = 100 . + endmethod. + + + method ZIF_EXCEL_SHEET_PROPERTIES~SET_STYLE. + zif_excel_sheet_properties~style = ip_style. + endmethod. + + + method ZIF_EXCEL_SHEET_PROTECTION~INITIALIZE. + + me->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_unprotected. + CLEAR me->zif_excel_sheet_protection~password. + me->zif_excel_sheet_protection~auto_filter = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~delete_columns = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~delete_rows = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~format_cells = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~format_columns = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~format_rows = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~insert_columns = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~insert_hyperlinks = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~insert_rows = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~objects = zif_excel_sheet_protection=>c_noactive. +* me->zif_excel_sheet_protection~password = zif_excel_sheet_protection=>c_noactive. "issue #68 + me->zif_excel_sheet_protection~pivot_tables = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~select_locked_cells = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~select_unlocked_cells = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_noactive. + me->zif_excel_sheet_protection~sort = zif_excel_sheet_protection=>c_noactive. + + endmethod. + + + method ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME. + me->zif_excel_sheet_vba_project~codename = ip_codename. + endmethod. + + + method ZIF_EXCEL_SHEET_VBA_PROJECT~SET_CODENAME_PR. + me->zif_excel_sheet_vba_project~codename_pr = ip_codename_pr. + endmethod. + + + + method ADD_DRAWING. + CASE ip_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. + drawings->include( ip_drawing ). + WHEN zcl_excel_drawing=>type_chart. + charts->include( ip_drawing ). + ENDCASE. + endmethod. + + + + method ADD_NEW_CONDITIONAL_STYLE. + + CREATE OBJECT eo_conditional_style. + conditional_styles->add( eo_conditional_style ). + endmethod. + + + + method ADD_NEW_DATA_VALIDATION. + + CREATE OBJECT eo_data_validation. + data_validations->add( eo_data_validation ). + endmethod. + + + + method ADD_NEW_RANGE. +* Create default blank range + CREATE OBJECT eo_range. + ranges->add( eo_range ). + endmethod. + + + + + + + + + method BIND_ALV. + data: lo_converter type ref to zcl_excel_converter. + + create object lo_converter. + + try. + lo_converter->convert( + exporting + io_alv = io_alv + it_table = it_table + i_row_int = i_top + i_column_int = i_left + i_table = abap_true + i_style_table = table_style + io_worksheet = me + changing + co_excel = excel ). + catch zcx_excel . + endtry. + + endmethod. + + + + + + + + + + + + + + + + + + + + + + method BIND_ALV_OLE2. +*--------------------------------------------------------------------* +* Method description: +* Method use to export a CL_GUI_ALV_GRID object to xlsx/xls file +* with list header and characteristics of ALV field catalog such as: +* + Total, group's subtotal +* + Quantity fields, amount fields (dependent fields) +* + No_out, no_zero, ... +* Technique use in method: +* SAP Desktop Office Integration (DOI) +*--------------------------------------------------------------------* + +* Data for session 0: DOI constructor +* ------------------------------------------ + + data: lo_control type ref to I_OI_CONTAINER_CONTROL. + data: lo_proxy type ref to I_OI_DOCUMENT_PROXY. + data: lo_spreadsheet type ref to I_OI_SPREADSHEET. + data: lo_error type ref to I_OI_ERROR. + data: lc_retcode type SOI_RET_STRING. + data: li_has type i. "Proxy has spreadsheet interface? + data: l_is_closed type i. + +* Data for session 1: Get LVC data from ALV object +* ------------------------------------------ + + data: l_has_activex, + l_doctype_excel_sheet(11) type c. + data: wa_DOC_HANDLE Type CNTL_HANDLE. + +* LVC + data: lt_fieldcat_lvc type LVC_T_FCAT. + data: wa_fieldcat_lvc type lvc_s_fcat. + data: lt_sort_lvc type LVC_T_SORT. + data: lt_filter_idx_lvc type LVC_T_FIDX. + data: lt_GROUPLEVELS_LVC type LVC_T_GRPL. + +* KKBLO + DATA: LT_FIELDCAT_KKBLO Type KKBLO_T_FIELDCAT. + DATA: LT_SORT_KKBLO Type KKBLO_T_SORTINFO. + DATA: LT_GROUPLEVELS_KKBLO Type KKBLO_T_GROUPLEVELS. + DATA: LT_FILTER_IDX_KKBLO Type KKBLO_T_SFINFO. + data: wa_listheader like line of it_listheader. + +* Subtotal + data: lt_collect00 type ref to data. + data: lt_collect01 type ref to data. + data: lt_collect02 type ref to data. + data: lt_collect03 type ref to data. + data: lt_collect04 type ref to data. + data: lt_collect05 type ref to data. + data: lt_collect06 type ref to data. + data: lt_collect07 type ref to data. + data: lt_collect08 type ref to data. + data: lt_collect09 type ref to data. + +* data table name + data: l_tabname type kkblo_tabname. + +* local object + data: lo_grid type ref to lcl_gui_alv_grid. + +* data table get from ALV + data: lt_alv type ref to data. + +* total / subtotal data + field-symbols: <f_collect00> type standard table. + field-symbols: <f_collect01> type standard table. + field-symbols: <f_collect02> type standard table. + field-symbols: <f_collect03> type standard table. + field-symbols: <f_collect04> type standard table. + field-symbols: <f_collect05> type standard table. + field-symbols: <f_collect06> type standard table. + field-symbols: <f_collect07> type standard table. + field-symbols: <f_collect08> type standard table. + field-symbols: <f_collect09> type standard table. + +* table before append subtotal lines + field-symbols: <f_alv_tab> type standard table. + +* data for session 2: sort, filter and calculate total/subtotal +* ------------------------------------------ + +* table to save index of subotal / total line in excel tanle +* this ideal to control index of subtotal / total line later +* for ex, when get subtotal / total line to format + types: begin of st_subtot_indexs, + index type i, + end of st_subtot_indexs. + data: lt_subtot_indexs type table of st_subtot_indexs. + data: wa_subtot_indexs like line of lt_subtot_indexs. + +* data table after append subtotal + data: lt_excel type ref to data. + + data: l_tabix type i. + data: l_save_index type i. + +* dyn subtotal table name + data: l_collect type string. + +* subtotal range, to format subtotal (and total) + data: subranges type soi_range_list. + data: subrangeitem type soi_range_item. + data: l_sub_index type i. + + +* table after append subtotal lines + field-symbols: <f_excel_tab> type standard table. + field-symbols: <f_excel_line> type any. + +* dyn subtotal tables + field-symbols: <f_collect_tab> type standard table. + field-symbols: <f_collect_line> type any. + + field-symbols: <f_filter_idx_line> like line of LT_FILTER_IDX_KKBLO. + field-symbols: <f_fieldcat_line> like line of LT_FIELDCAT_KKBLO. + field-symbols: <f_grouplevels_line> like line of LT_GROUPLEVELS_KKBLO. + field-symbols: <f_line> type any. + +* Data for session 3: map data to semantic table +* ------------------------------------------ + + types: begin of st_column_index, + fieldname type kkblo_fieldname, + tabname type kkblo_tabname, + col like sy-index, + end of st_column_index. + +* columns index + data: lt_column_index type table of st_column_index. + data: wa_column_index like line of lt_column_index. + +* table of dependent field ( currency and quantity unit field) + data: lt_fieldcat_depf type kkblo_t_fieldcat. + data: wa_fieldcat_depf type kkblo_fieldcat. + +* XXL interface: +* -XXL: contain exporting columns characteristic + data: lt_sema type table of gxxlt_s initial size 0. + data: wa_sema like line of lt_sema. + +* -XXL interface: header + data: lt_hkey type table of gxxlt_h initial size 0. + data: wa_hkey like line of lt_hkey. + +* -XXL interface: header keys + data: lt_vkey type table of gxxlt_v initial size 0. + data: wa_vkey like line of lt_vkey. + +* Number of H Keys: number of key columns + data: l_n_hrz_keys type i. +* Number of data columns in the list object: non-key columns no + data: l_n_att_cols type i. +* Number of V Keys: number of header row + data: l_n_vrt_keys type i. + +* curency to format amount + data: lt_tcurx type table of tcurx. + data: wa_tcurx like line of lt_tcurx. + data: l_def type flag. " currency / quantity flag + data: wa_t006 type t006. " decimal place of unit + + data: l_num type i. " table columns number + data: l_typ type c. " table type + data: wa type ref to data. + data: l_int type i. + data: l_counter type i. + + field-symbols: <f_excel_column> type any. + field-symbols: <f_fcat_column> type any. + +* Data for session 4: write to excel +* ------------------------------------------ + + data: data_starting_at type i value 1. + data: data_ending_at type i value -1. + data: sema_type type c. + + data l_error type ref to c_oi_proxy_error. + data count type i. + data datac type i. + data datareal type i. " exporting column number + data vkeycount type i. + data all type i. + data mit type i value 1. " index of recent row? + data li_col_pos type i value 1. " column position + data li_col_num type i. " table columns number + field-symbols: <line> type any. + field-symbols: <item> type any. + + data td type sydes_desc. + + data: typ. + data: ranges type soi_range_list. + data: rangeitem type soi_range_item. + data: contents type soi_generic_table. + data: contentsitem type soi_generic_item. + data: semaitem type gxxlt_s. + data: hkeyitem type gxxlt_h. + data: vkeyitem type gxxlt_v. + data: li_commentary_rows type i. "row number of title lines + 1 + data: lo_error_w type ref to i_oi_error. + data: l_retcode type soi_ret_string. + data: no_flush type c value 'X'. + data: li_head_top type i. "header rows position + +* Data for session 5: Save and clode document +* ------------------------------------------ + + data: li_document_size type i. + data: ls_path type RLGRAP-FILENAME. + +* MACRO: Close_document +*------------------------------------------- + + DEFINE close_document. + clear: l_is_closed. + IF lo_proxy is not initial. + +* check proxy detroyed adi + + call method lo_proxy->is_destroyed + IMPORTING + ret_value = l_is_closed. + +* if dun detroyed yet: close -> release proxy + + IF l_is_closed is initial. + call method lo_proxy->close_document +* EXPORTING +* do_save = do_save + IMPORTING + error = lo_error + retcode = lc_retcode. + ENDIF. + + call method lo_proxy->release_document + IMPORTING + error = lo_error + retcode = lC_retcode. + + else. + lc_retcode = c_oi_errors=>ret_document_not_open. + ENDIF. + +* Detroy control container + + IF lo_control is not initial. + CALL METHOD lo_control->destroy_control. + ENDIF. + + clear: + lo_spreadsheet, + lo_proxy, + lo_control. + +* free local + + clear: l_is_closed. + + END-OF-DEFINITION. + +* Macro to catch DOI error +*------------------------------------------- + + DEFINE error_doi. + if lc_retcode ne c_oi_errors=>ret_ok. + close_document. + call method lo_error->raise_message + EXPORTING + type = 'E'. + clear: lo_error. + endif. + END-OF-DEFINITION. + +*--------------------------------------------------------------------* +* SESSION 0: DOI CONSTRUCTOR +*--------------------------------------------------------------------* + +* check active windown + + call function 'GUI_HAS_ACTIVEX' + IMPORTING + return = l_has_activex. + + if l_has_activex is initial. + raise MISS_GUIDE. + endif. + +* Get Container Object of Screen + + call method c_oi_container_control_creator=>get_container_control + IMPORTING + control = lo_control + retcode = lC_retcode. + + error_doi. + +* Initialize Container control + + CALL METHOD lo_control->init_control + EXPORTING + parent = CL_GUI_CONTAINER=>DEFAULT_SCREEN + r3_application_name = '' + inplace_enabled = 'X' + no_flush = 'X' + register_on_close_event = 'X' + register_on_custom_event = 'X' + IMPORTING + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + +* Get Proxy Document: +* check exist of document proxy, if exist -> close first + + if not lo_proxy is initial. + close_document. + endif. + + IF i_xls is not initial. +* xls format, doctype = soi_doctype_excel97_sheet + l_doctype_excel_sheet = 'Excel.Sheet.8'. + else. +* xlsx format, doctype = soi_doctype_excel_sheet + l_doctype_excel_sheet = 'Excel.Sheet'. + ENDIF. + + CALL METHOD lo_control->get_document_proxy + EXPORTING + document_type = l_doctype_excel_sheet + register_container = 'X' + IMPORTING + document_proxy = lo_proxy + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + + IF I_DOCUMENT_URL is initial. + +* create new excel document + + call method lo_proxy->create_document + EXPORTING + create_view_data = 'X' + open_inplace = 'X' + no_flush = 'X' + IMPORTING + ERROR = lO_ERROR + retcode = lc_retcode. + + error_doi. + + else. + +* Read excel template for i_DOCUMENT_URL +* this excel template can be store in local or server + + CALL METHOD lo_proxy->open_document + EXPORTING + document_url = i_document_url + open_inplace = 'X' + no_flush = 'X' + IMPORTING + error = lo_error + retcode = lc_retcode. + + error_doi. + + endif. + +* Check Spreadsheet Interface of Document Proxy + + CALL METHOD lo_proxy->has_spreadsheet_interface + IMPORTING + is_available = li_has + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + +* create Spreadsheet object + + CHECK li_has IS NOT INITIAL. + + CALL METHOD lo_proxy->get_spreadsheet_interface + IMPORTING + sheet_interface = lo_spreadsheet + error = lO_ERROR + retcode = lc_retcode. + + error_doi. + +*--------------------------------------------------------------------* +* SESSION 1: GET LVC DATA FROM ALV OBJECT +*--------------------------------------------------------------------* + +* data table + + create object lo_grid + EXPORTING + i_parent = CL_GUI_CONTAINER=>SCREEN0. + + call method lo_grid->get_alv_attributes + EXPORTING + io_grid = io_alv + IMPORTING + Et_table = lt_alv. + + assign lt_alv->* to <f_alv_tab>. + +* fieldcat + + CALL METHOD iO_alv->GET_FRONTEND_FIELDCATALOG + IMPORTING + ET_FIELDCATALOG = lt_fieldcat_LVC. + +* table name + + loop at lt_fieldcat_LVC into wa_fieldcat_lvc + where not tabname is initial. + l_tabname = wa_fieldcat_lvc-tabname. + exit. + endloop. + + if sy-subrc ne 0. + l_tabname = '1'. + endif. + clear: wa_fieldcat_lvc. + +* sort table + + CALL METHOD IO_ALV->GET_SORT_CRITERIA + IMPORTING + ET_SORT = lt_sort_lvc. + + +* filter index + + CALL METHOD IO_ALV->GET_FILTERED_ENTRIES + IMPORTING + ET_FILTERED_ENTRIES = lt_filter_idx_lvc. + +* group level + subtotal + + CALL METHOD IO_ALV->GET_SUBTOTALS + IMPORTING + EP_COLLECT00 = lt_collect00 + EP_COLLECT01 = lt_collect01 + EP_COLLECT02 = lt_collect02 + EP_COLLECT03 = lt_collect03 + EP_COLLECT04 = lt_collect04 + EP_COLLECT05 = lt_collect05 + EP_COLLECT06 = lt_collect06 + EP_COLLECT07 = lt_collect07 + EP_COLLECT08 = lt_collect08 + EP_COLLECT09 = lt_collect09 + ET_GROUPLEVELS = lt_GROUPLEVELS_LVC. + + assign lt_collect00->* to <f_collect00>. + assign lt_collect01->* to <f_collect01>. + assign lt_collect02->* to <f_collect02>. + assign lt_collect03->* to <f_collect03>. + assign lt_collect04->* to <f_collect04>. + assign lt_collect05->* to <f_collect05>. + assign lt_collect06->* to <f_collect06>. + assign lt_collect07->* to <f_collect07>. + assign lt_collect08->* to <f_collect08>. + assign lt_collect09->* to <f_collect09>. + +* transfer to KKBLO struct + + CALL FUNCTION 'LVC_TRANSFER_TO_KKBLO' + EXPORTING + IT_FIELDCAT_LVC = lt_fieldcat_lvc + IT_SORT_LVC = lt_sort_lvc + IT_FILTER_INDEX_LVC = lt_filter_idx_lvc + IT_GROUPLEVELS_LVC = lt_grouplevels_lvc + IMPORTING + ET_FIELDCAT_KKBLO = lt_fieldcat_kkblo + ET_SORT_KKBLO = lt_sort_kkblo + ET_FILTERED_ENTRIES_KKBLO = lt_filter_idx_kkblo + ET_GROUPLEVELS_KKBLO = lt_grouplevels_kkblo + TABLES + IT_DATA = <f_alv_tab> + EXCEPTIONS + IT_DATA_MISSING = 1 + IT_FIELDCAT_LVC_MISSING = 2 + OTHERS = 3. + IF SY-SUBRC <> 0. + raise ex_transfer_KKBLO_ERROR. + ENDIF. + + clear: + wa_fieldcat_lvc, + lt_fieldcat_lvc, + lt_sort_lvc, + lt_filter_idx_lvc, + lt_GROUPLEVELS_LVC. + + clear: + lo_grid. + + +*--------------------------------------------------------------------* +* SESSION 2: SORT, FILTER AND CALCULATE TOTAL / SUBTOTAL +*--------------------------------------------------------------------* + +* append subtotal & total line + + create data lt_excel like <f_ALV_TAB>. + assign lt_excel->* to <f_excel_tab>. + + loop at <f_alv_tab> assigning <f_line>. + l_save_index = sy-tabix. + +* filter base on filter index table + + read table LT_FILTER_IDX_KKBLO assigning <f_filter_idx_line> + with key index = l_save_index + binary search. + if sy-subrc ne 0. + append <f_line> to <f_excel_tab>. + endif. + +* append subtotal lines + + read table LT_GROUPLEVELS_KKBLO assigning <f_grouplevels_line> + with key index_to = l_save_index + binary search. + if sy-subrc = 0. + l_tabix = sy-tabix. + do. + if <f_grouplevels_line>-subtot eq 'X' and + <f_grouplevels_line>-hide_level is initial and + <f_grouplevels_line>-cindex_from ne 0. + +* dynamic append subtotal line to excel table base on grouplevel table +* ex <f_GROUPLEVELS_line>-level = 1 +* then <f_collect_tab> = '<F_COLLECT01>' + + l_collect = <f_grouplevels_line>-level. + condense l_collect. + concatenate '<F_COLLECT0' + l_collect '>' +* '->*' + into l_collect. + + assign (l_collect) to <f_collect_tab>. + +* incase there're more than 1 total line of group, at the same level +* for example: subtotal of multi currency + + LOOP AT <f_collect_tab> assigning <f_collect_line>. + IF sy-tabix between <f_grouplevels_line>-cindex_from + and <f_grouplevels_line>-cindex_to. + + + append <f_collect_line> to <f_excel_tab>. + +* save subtotal lines index + + wa_subtot_indexs-index = sy-tabix. + append wa_subtot_indexs to lt_subtot_indexs. + +* append sub total ranges table for format later + + add 1 to l_sub_index. + subrangeitem-name = l_sub_index. + condense subrangeitem-name. + concatenate 'SUBTOT' + subrangeitem-name + into subrangeitem-name. + + subrangeitem-rows = wa_subtot_indexs-index. + subrangeitem-columns = 1. " start col + append subrangeitem to subranges. + clear: subrangeitem. + + ENDIF. + ENDLOOP. + unassign: <f_collect_tab>. + unassign: <f_collect_line>. + clear: l_collect. + endif. + +* check next subtotal level of group + + unassign: <f_grouplevels_line>. + add 1 to l_tabix. + + read table LT_GROUPLEVELS_KKBLO assigning <f_grouplevels_line> + index l_tabix. + if sy-subrc ne 0 + or <f_grouplevels_line>-index_to ne l_save_index. + exit. + endif. + + unassign: + <f_collect_tab>, + <f_collect_line>. + + enddo. + endif. + + clear: + l_tabix, + l_save_index. + + unassign: + <f_filter_idx_line>, + <f_grouplevels_line>. + + endloop. + +* free local data + + unassign: + <f_line>, + <f_collect_tab>, + <f_collect_line>, + <f_fieldcat_line>. + +* append grand total line + + IF <f_collect00> is assigned. + assign <f_collect00> to <f_collect_tab>. + if <f_collect_tab> is not initial. + LOOP AT <f_collect_tab> assigning <f_collect_line>. + + append <f_collect_line> to <f_excel_tab>. + +* save total line index + + wa_subtot_indexs-index = sy-tabix. + append wa_subtot_indexs to lt_subtot_indexs. + +* append grand total range (to format) + + add 1 to l_sub_index. + subrangeitem-name = l_sub_index. + condense subrangeitem-name. + concatenate 'TOTAL' + subrangeitem-name + into subrangeitem-name. + + subrangeitem-rows = wa_subtot_indexs-index. + subrangeitem-columns = 1. " start col + append subrangeitem to subranges. + ENDLOOP. + endif. + ENDIF. + + clear: + subrangeitem, + LT_SORT_KKBLO, + <f_collect00>, + <f_collect01>, + <f_collect02>, + <f_collect03>, + <f_collect04>, + <f_collect05>, + <f_collect06>, + <f_collect07>, + <f_collect08>, + <f_collect09>. + + unassign: + <f_collect00>, + <f_collect01>, + <f_collect02>, + <f_collect03>, + <f_collect04>, + <f_collect05>, + <f_collect06>, + <f_collect07>, + <f_collect08>, + <f_collect09>, + <f_collect_tab>, + <f_collect_line>. + +*--------------------------------------------------------------------* +* SESSION 3: MAP DATA TO SEMANTIC TABLE +*--------------------------------------------------------------------* + +* get dependent field field: currency and quantity + + create data wa like line of <f_excel_tab>. + assign wa->* to <f_excel_line>. + + describe field <f_excel_line> type l_typ components l_num. + + do l_num times. + l_save_index = sy-index. + assign component l_save_index of structure <f_excel_line> + to <f_excel_column>. + if sy-subrc ne 0. + message e059(0k) with 'FATAL ERROR' raising fatal_error. + endif. + + loop at LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + where tabname = l_tabname. + assign component <f_fieldcat_line>-fieldname + of structure <f_excel_line> to <f_fcat_column>. + + describe distance between <f_excel_column> and <f_fcat_column> + into l_int in byte mode. + +* append column index +* this columns index is of table, not fieldcat + + if l_int = 0. + wa_column_index-fieldname = <f_fieldcat_line>-fieldname. + wa_column_index-tabname = <f_fieldcat_line>-tabname. + wa_column_index-col = l_save_index. + append wa_column_index to lt_column_index. + endif. + +* append dependent fields (currency and quantity unit) + + if <f_fieldcat_line>-cfieldname is not initial. + clear wa_fieldcat_depf. + wa_fieldcat_depf-fieldname = <f_fieldcat_line>-cfieldname. + wa_fieldcat_depf-tabname = <f_fieldcat_line>-ctabname. + collect wa_fieldcat_depf into lt_fieldcat_depf. + endif. + + if <f_fieldcat_line>-qfieldname is not initial. + clear wa_fieldcat_depf. + wa_fieldcat_depf-fieldname = <f_fieldcat_line>-qfieldname. + wa_fieldcat_depf-tabname = <f_fieldcat_line>-qtabname. + collect wa_fieldcat_depf into lt_fieldcat_depf. + endif. + +* rewrite field data type + + if <f_fieldcat_line>-inttype = 'X' + and <f_fieldcat_line>-datatype(3) = 'INT'. + <f_fieldcat_line>-inttype = 'I'. + endif. + + endloop. + + clear: l_save_index. + unassign: <f_fieldcat_line>. + + enddo. + +* build semantic tables + + l_n_hrz_keys = 1. + +* Get keyfigures + + loop at LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + where tabname = l_tabname + and tech ne 'X' + and no_out ne 'X'. + + clear wa_sema. + clear wa_hkey. + +* Units belong to keyfigures -> display as str + + read table lt_fieldcat_depf into wa_fieldcat_depf with key + fieldname = <f_fieldcat_line>-fieldname + tabname = <f_fieldcat_line>-tabname. + + if sy-subrc = 0. + wa_sema-col_typ = 'STR'. + wa_sema-col_ops = 'DFT'. + +* Keyfigures + + else. + case <f_fieldcat_line>-datatype. + when 'QUAN'. + wa_sema-col_typ = 'N03'. + + if <f_fieldcat_line>-no_sum ne 'X'. + wa_sema-col_ops = 'ADD'. + else. + wa_sema-col_ops = 'NOP'. " no dependent field + endif. + + when 'DATS'. + wa_sema-col_typ = 'DAT'. + wa_sema-col_ops = 'NOP'. + + when 'CHAR' OR 'UNIT' OR 'CUKY'. " Added fieldformats UNIT and CUKY - dd. 26-10-2012 Wouter Heuvelmans + wa_sema-col_typ = 'STR'. + wa_sema-col_ops = 'DFT'. " dependent field + +* incase numeric, ex '00120' -> display as '12' + + when 'NUMC'. + wa_sema-col_typ = 'STR'. + wa_sema-col_ops = 'DFT'. + + when others. + wa_sema-col_typ = 'NUM'. + + if <f_fieldcat_line>-no_sum ne 'X'. + wa_sema-col_ops = 'ADD'. + else. + wa_sema-col_ops = 'NOP'. + endif. + endcase. + endif. + + l_counter = l_counter + 1. + l_n_att_cols = l_n_att_cols + 1. + + wa_sema-col_no = l_counter. + + read table lt_column_index into wa_column_index with key + fieldname = <f_fieldcat_line>-fieldname + tabname = <f_fieldcat_line>-tabname. + + if sy-subrc = 0. + wa_sema-col_src = wa_column_index-col. + else. + raise fatal_error. + endif. + +* columns index of ref currency field in table + + if not <f_fieldcat_line>-cfieldname is initial. + read table lt_column_index into wa_column_index with key + fieldname = <f_fieldcat_line>-cfieldname + tabname = <f_fieldcat_line>-ctabname. + + if sy-subrc = 0. + wa_sema-col_cur = wa_column_index-col. + endif. + +* quantities fields +* treat as currency when display on excel + + elseif not <f_fieldcat_line>-qfieldname is initial. + read table lt_column_index into wa_column_index with key + fieldname = <f_fieldcat_line>-qfieldname + tabname = <f_fieldcat_line>-qtabname. + if sy-subrc = 0. + wa_sema-col_cur = wa_column_index-col. + endif. + + endif. + +* Treat of fixed currency in the fieldcatalog for column + + data: l_num_help(2) type n. + + if not <f_fieldcat_line>-currency is initial. + + select * from tcurx into table lt_tcurx. + sort lt_tcurx. + read table lt_tcurx into wa_tcurx + with key currkey = <f_fieldcat_line>-currency. + if sy-subrc = 0. + l_num_help = wa_tcurx-currdec. + concatenate 'N' l_num_help into wa_sema-col_typ. + wa_sema-col_cur = sy-tabix * ( -1 ). + endif. + + endif. + + wa_hkey-col_no = l_n_att_cols. + wa_hkey-row_no = l_n_hrz_keys. + wa_hkey-col_name = <f_fieldcat_line>-reptext. + append wa_hkey to lt_hkey. + append wa_sema to lt_sema. + + endloop. + +* free local data + + clear: + lt_column_index, + wa_column_index, + lt_fieldcat_depf, + wa_fieldcat_depf, + lt_tcurx, + wa_tcurx, + l_num, + l_typ, + wa, + l_int, + l_counter. + + unassign: + <f_fieldcat_line>, + <f_excel_line>, + <f_excel_column>, + <f_fcat_column>. + +*--------------------------------------------------------------------* +* SESSION 4: WRITE TO EXCEL +*--------------------------------------------------------------------* + + clear: wa_tcurx. + refresh: lt_tcurx. + +* if spreadsheet dun have proxy yet + + if li_has is initial. + l_retcode = c_oi_errors=>ret_interface_not_supported. + call method c_oi_errors=>create_error_for_retcode + EXPORTING + retcode = l_retcode + no_flush = no_flush + IMPORTING + error = lo_error_w. + exit. + endif. + + create object l_error + EXPORTING + object_name = 'OLE_DOCUMENT_PROXY' + method_name = 'get_ranges_names'. + + call method c_oi_errors=>add_error + EXPORTING + error = l_error. + + + describe table lt_sema lines datareal. + describe table <f_excel_tab> lines datac. + describe table lt_vkey lines vkeycount. + + if datac = 0. + raise inv_data_range. + endif. + + + if vkeycount ne l_n_vrt_keys. + raise dim_mismatch_vkey. + endif. + + all = l_n_vrt_keys + l_n_att_cols. + + if datareal ne all. + raise dim_mismatch_sema. + endif. + + data: decimal type c. + +* get decimal separator format ('.', ',', ...) in Office config + + call method lo_proxy->get_application_property + EXPORTING + property_name = 'INTERNATIONAL' + subproperty_name = 'DECIMAL_SEPARATOR' + CHANGING + retvalue = decimal. + + data: wa_usr type usr01. + select * from usr01 into wa_usr where bname = sy-uname. + endselect. + + data: comma_elim(4) type c. + data: help6 type i. + field-symbols <g> type any. + data search_item(4) value ' #'. + + concatenate ',' decimal '.' decimal into comma_elim. + + data help type i. " table (with subtotal) line number + + help = datac. + + data: rowmax type i value 1. " header row number + data: columnmax type i value 0. " header columns number + + loop at lt_hkey into hkeyitem. + if hkeyitem-col_no > columnmax. + columnmax = hkeyitem-col_no. + endif. + + if hkeyitem-row_no > rowmax. + rowmax = hkeyitem-row_no. + endif. + endloop. + + data: hkeycolumns type i. " header columns no + + hkeycolumns = columnmax. + + if hkeycolumns < l_n_att_cols. + hkeycolumns = l_n_att_cols. + endif. + + columnmax = 0. + + loop at lt_vkey into vkeyitem. + if vkeyitem-col_no > columnmax. + columnmax = vkeyitem-col_no. + endif. + endloop. + + data overflow type i value 1. + data testname(10) type c. + data temp2 type i. " 1st item row position in excel + data realmit type i value 1. + data realoverflow type i value 1. " row index in content + + call method lo_spreadsheet->screen_update + EXPORTING + updating = ''. + + call method lo_spreadsheet->load_lib. + + data: str(40) type c. " range names of columns range (w/o col header) + data: rows type i. " row postion of 1st item line in ecxel + +* calculate row position of data table + + describe table iT_LISTHEADER lines li_commentary_rows. + +* if grid had title, add 1 empy line between title and table + + if li_commentary_rows ne 0. + add 1 to li_commentary_rows. + endif. + +* add top position of block data + + li_commentary_rows = li_commentary_rows + i_top - 1. + +* write header (commentary rows) + + data: li_commentary_row_index type i value 1. + data: li_content_index type i value 1. + data: ls_index(10) type c. + data ls_commentary_range(40) type c value 'TITLE'. + data: li_font_bold type i. + data: li_font_italic type i. + data: li_font_size type i. + + loop at iT_LISTHEADER into wa_listheader. + li_commentary_row_index = i_top + li_content_index - 1. + ls_index = li_content_index. + condense ls_index. + concatenate ls_commentary_range(5) ls_index + into ls_commentary_range. + condense ls_commentary_range. + +* insert title range + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = ls_commentary_range + top = li_commentary_row_index + left = i_left + rows = 1 + columns = 1 + no_flush = no_flush. + +* format range + + case wa_listheader-typ. + when 'H'. "title + li_font_size = 16. + li_font_bold = 1. + li_font_italic = -1. + when 'S'. "subtile + li_font_size = -1. + li_font_bold = 1. + li_font_italic = -1. + when others. "'A' comment + li_font_size = -1. + li_font_bold = -1. + li_font_italic = 1. + endcase. + + call method lo_spreadsheet->set_font + EXPORTING + rangename = ls_commentary_range + family = '' + size = li_font_size + bold = li_font_bold + italic = li_font_italic + align = 0 + no_flush = no_flush. + +* title: range content + + rangeitem-name = ls_commentary_range. + rangeitem-columns = 1. + rangeitem-rows = 1. + append rangeitem to ranges. + + contentsitem-row = li_content_index. + contentsitem-column = 1. + concatenate wa_listheader-key + wa_listheader-info + into contentsitem-value + separated by space. + condense contentsitem-value. + append contentsitem to contents. + + add 1 to li_content_index. + + clear: + rangeitem, + contentsitem, + ls_index. + + endloop. + +* set range data title + + call method lo_spreadsheet->set_ranges_data + EXPORTING + ranges = ranges + contents = contents + no_flush = no_flush. + + refresh: + ranges, + contents. + + rows = rowmax + li_commentary_rows + 1. + + all = wa_usr-datfm. + all = all + 3. + + loop at lt_sema into semaitem. + if semaitem-col_typ = 'DAT' or semaitem-col_typ = 'MON' or + semaitem-col_typ = 'N00' or semaitem-col_typ = 'N01' or + semaitem-col_typ = 'N01' or semaitem-col_typ = 'N02' or + semaitem-col_typ = 'N03' or semaitem-col_typ = 'PCT' or + semaitem-col_typ = 'STR' or semaitem-col_typ = 'NUM'. + clear str. + str = semaitem-col_no. + condense str. + concatenate 'DATA' str into str. + mit = semaitem-col_no. + li_col_pos = semaitem-col_no + i_left - 1. + +* range from data1 to data(n), for each columns of table + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = str + top = rows + left = li_col_pos + rows = help + columns = 1 + no_flush = no_flush. + + data dec type i value -1. + data typeinfo type sydes_typeinfo. + loop at <f_excel_tab> assigning <line>. + assign component semaitem-col_no of structure <line> to <item>. + describe field <item> into td. + read table td-types index 1 into typeinfo. + if typeinfo-type = 'P'. + dec = typeinfo-decimals. + elseif typeinfo-type = 'I'. + dec = 0. + endif. + + describe field <line> type typ components count. + mit = 1. + do count times. + if mit = semaitem-col_src. + assign component sy-index of structure <line> to <item>. + describe field <item> into td. + read table td-types index 1 into typeinfo. + if typeinfo-type = 'P'. + dec = typeinfo-decimals. + endif. + exit. + endif. + mit = mit + 1. + enddo. + exit. + endloop. + +* format for each columns of table (w/o columns headers) + + if semaitem-col_typ = 'DAT'. + if semaitem-col_no > vkeycount. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = all + no_flush = no_flush. + else. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 0 + no_flush = no_flush. + endif. + elseif semaitem-col_typ = 'STR'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 0 + no_flush = no_flush. + elseif semaitem-col_typ = 'MON'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 10 + no_flush = no_flush. + elseif semaitem-col_typ = 'N00'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 0 + no_flush = no_flush. + elseif semaitem-col_typ = 'N01'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 1 + no_flush = no_flush. + elseif semaitem-col_typ = 'N02'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 2 + no_flush = no_flush. + elseif semaitem-col_typ = 'N03'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 3 + no_flush = no_flush. + elseif semaitem-col_typ = 'N04'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 4 + no_flush = no_flush. + elseif semaitem-col_typ = 'NUM'. + if dec eq -1. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = 2 + no_flush = no_flush. + else. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 1 + decimals = dec + no_flush = no_flush. + endif. + elseif semaitem-col_typ = 'PCT'. + call method lo_spreadsheet->set_format + EXPORTING + rangename = str + currency = '' + typ = 3 + decimals = 0 + no_flush = no_flush. + endif. + + endif. + endloop. + +* get item contents for set_range_data method +* get currency cell also + + mit = 1. + + data: currcells type soi_cell_table. + data: curritem type soi_cell_item. + + curritem-rows = 1. + curritem-columns = 1. + curritem-front = -1. + curritem-back = -1. + curritem-font = ''. + curritem-size = -1. + curritem-bold = -1. + curritem-italic = -1. + curritem-align = -1. + curritem-frametyp = -1. + curritem-framecolor = -1. + curritem-currency = ''. + curritem-number = 1. + curritem-input = -1. + + data: conv_exit(10) type c. + data: const type i. + +* Change for Correction request +* Initial 10000 lines are missing in Excel Export +* if there are only 2 columns in exported List object. + + if datareal gt 2. + const = 20000 / datareal. + else. + const = 20000 / ( datareal + 2 ). + endif. + + data: lines type i. + data: innerlines type i. + data: counter type i. + data: curritem2 like curritem. + data: curritem3 like curritem. + data: length type i. + data: found. + +* append content table (for method set_range_content) + + loop at <f_excel_tab> assigning <line>. + +* save line index to compare with lt_subtot_indexs, +* to discover line is a subtotal / totale line or not +* ex use to set 'dun display zero in subtotal / total line' + + l_save_index = sy-tabix. + + do datareal times. + read table lt_sema into semaitem with key col_no = sy-index. + if semaitem-col_src ne 0. + assign component semaitem-col_src + of structure <line> to <item>. + else. + assign component sy-index + of structure <line> to <item>. + endif. + + contentsitem-row = realoverflow. + + if sy-subrc = 0. + move semaitem-col_ops to search_item(3). + search 'ADD#CNT#MIN#MAX#AVG#NOP#DFT#' + for search_item. + if sy-subrc ne 0. + raise error_in_sema. + endif. + move semaitem-col_typ to search_item(3). + search 'NUM#N00#N01#N02#N03#N04#PCT#DAT#MON#STR#' + for search_item. + if sy-subrc ne 0. + raise error_in_sema. + endif. + contentsitem-column = sy-index. + if semaitem-col_typ eq 'DAT' or semaitem-col_typ eq 'MON'. + if semaitem-col_no > vkeycount. + + " Hinweis 512418 + " EXCEL bezieht Datumsangaben + " auf den 31.12.1899, behandelt + " aber 1900 als ein Schaltjahr + " d.h. ab 1.3.1900 korrekt + " 1.3.1900 als Zahl = 61 + + data: genesis type d value '18991230'. + data: number_of_days type p. +* change for date in char format & sema_type = X + data: temp_date type d. + + if not <item> is initial and not <item> co ' ' and not + <item> co '0'. +* change for date in char format & sema_type = X starts + if sema_type = 'X'. + describe field <item> type typ. + if typ = 'C'. + temp_date = <item>. + number_of_days = temp_date - genesis. + else. + number_of_days = <item> - genesis. + endif. + else. + number_of_days = <item> - genesis. + endif. +* change for date in char format & sema_type = X ends + if number_of_days < 61. + number_of_days = number_of_days - 1. + endif. + + set country 'DE'. + write number_of_days to contentsitem-value + no-grouping + left-justified. + set country space. + translate contentsitem-value using comma_elim. + else. + clear contentsitem-value. + endif. + else. + move <item> to contentsitem-value. + endif. + elseif semaitem-col_typ eq 'NUM' or + semaitem-col_typ eq 'N00' or + semaitem-col_typ eq 'N01' or + semaitem-col_typ eq 'N02' or + semaitem-col_typ eq 'N03' or + semaitem-col_typ eq 'N04' or + semaitem-col_typ eq 'PCT'. + set country 'DE'. + describe field <item> type typ. + + if semaitem-col_cur is initial. + if typ ne 'F'. + write <item> to contentsitem-value no-grouping + no-sign decimals 14. + else. + write <item> to contentsitem-value no-grouping + no-sign. + endif. + else. +* Treat of fixed curreny for column >>Y9CK007319 + if semaitem-col_cur < 0. + semaitem-col_cur = semaitem-col_cur * ( -1 ). + select * from tcurx into table lt_tcurx. + sort lt_tcurx. + read table lt_tcurx into + wa_tcurx index semaitem-col_cur. + if sy-subrc = 0. + if typ ne 'F'. + write <item> to contentsitem-value no-grouping + currency wa_tcurx-currkey no-sign decimals 14. + else. + write <item> to contentsitem-value no-grouping + currency wa_tcurx-currkey no-sign. + endif. + endif. + else. + assign component semaitem-col_cur + of structure <line> to <g>. +* mit = index of recent row + curritem-top = rowmax + mit + li_commentary_rows. + + li_col_pos = sy-index + i_left - 1. + curritem-left = li_col_pos. + +* if filed is quantity field (qfieldname ne space) +* or amount field (cfieldname ne space), then format decimal place +* corresponding with config + + clear: l_def. + read table LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + with key tabname = l_tabname + tech = space + no_out = space + col_pos = semaitem-col_no. + IF sy-subrc = 0. + IF <f_fieldcat_line>-cfieldname is not initial. + l_def = 'C'. + else."if <f_fieldcat_line>-qfieldname is not initial. + l_def = 'Q'. + ENDIF. + ENDIF. + +* if field is amount field +* exporting of amount field base on currency decimal table: TCURX + IF l_def = 'C'. "field is amount field + select single * from tcurx into wa_tcurx + where currkey = <g>. +* if amount ref to un-know currency -> default decimal = 2 + if sy-subrc eq 0. + curritem-decimals = wa_tcurx-currdec. + else. + curritem-decimals = 2. + endif. + + append curritem to currcells. + if typ ne 'F'. + write <item> to contentsitem-value + currency <g> + no-sign no-grouping. + else. + write <item> to contentsitem-value + decimals 14 currency <g> + no-sign no-grouping. + endif. + +* if field is quantity field +* exporting of quantity field base on quantity decimal table: T006 + + else."if l_def = 'Q'. " field is quantity field + clear: wa_t006. + select single * from t006 into wa_t006 + where MSEHI = <g>. +* if quantity ref to un-know unit-> default decimal = 2 + if sy-subrc eq 0. + curritem-decimals = wa_t006-decan. + else. + curritem-decimals = 2. + endif. + append curritem to currcells. + + write <item> to contentsitem-value + unit <g> + no-sign no-grouping. + condense contentsitem-value. + + ENDIF. + + endif. "Y9CK007319 + endif. + condense contentsitem-value. + +* add function fieldcat-no zero display + + loop at LT_FIELDCAT_KKBLO assigning <f_fieldcat_line> + where tabname = l_tabname + and tech ne 'X' + and no_out ne 'X'. + if <f_fieldcat_line>-col_pos = semaitem-col_no. + if <f_fieldcat_line>-no_zero = 'X'. + if <item> = '0'. + clear: contentsitem-value. + endif. + +* dun display zero in total/subtotal line too + + else. + clear: wa_subtot_indexs. + read table lt_subtot_indexs into wa_subtot_indexs + with key index = l_save_index. + IF sy-subrc = 0. + if <item> = '0'. + clear: contentsitem-value. + endif. + ENDIF. + endif. + endif. + endloop. + unassign: <f_fieldcat_line>. + + if <item> lt 0. + search contentsitem-value for 'E'. + if sy-fdpos eq 0. + +* bring negative sign to front of amount + + translate contentsitem-value using '- '. + condense contentsitem-value no-gaps. + concatenate '-' contentsitem-value + into contentsitem-value. + else. + concatenate '-' contentsitem-value + into contentsitem-value. + endif. + endif. + set country space. +* Hier wird nur die korrekte Kommaseparatierung gemacht, wenn die +* Zeichen einer +* Zahl enthalten sind. Das ist f#ƒÂ#r Timestamps, die auch ":" enthalten. +* F#ƒÂ#r die +* darf keine Kommaseparierung stattfinden. +* Changing for correction request - Y6BK041073 + if contentsitem-value co '0123456789.,-+E '. + translate contentsitem-value using comma_elim. + endif. + else. + clear contentsitem-value. + +* if type is not numeric -> dun display with zero + + write <item> to contentsitem-value no-zero. + + shift contentsitem-value left deleting leading space. + + endif. + append contentsitem to contents. + endif. + enddo. + + realmit = realmit + 1. + realoverflow = realoverflow + 1. + + mit = mit + 1. +* overflow = current row index in content table + overflow = overflow + 1. + endloop. + + unassign: <f_fieldcat_line>. + +* set item range for set_range_data method + + testname = mit / const. + condense testname. + + concatenate 'TEST' testname into testname. + + realoverflow = realoverflow - 1. + realmit = realmit - 1. + help = realoverflow. + + rangeitem-name = testname. + rangeitem-columns = datareal. + rangeitem-rows = help. + append rangeitem to ranges. + +* insert item range dim + + temp2 = rowmax + 1 + li_commentary_rows + realmit - realoverflow. + +* items data + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = testname + top = temp2 + left = i_left + rows = help + columns = datareal + no_flush = no_flush. + +* get columns header contents for set_range_data method +* export columns header only if no columns header option = space + + data: rowcount type i. + data: columncount type i. + + if i_columns_header = 'X'. + +* append columns header to contents: hkey + + rowcount = 1. + do rowmax times. + columncount = 1. + do hkeycolumns times. + loop at lt_hkey into hkeyitem where col_no = columncount + and row_no = rowcount. + endloop. + if sy-subrc = 0. + str = hkeyitem-col_name. + contentsitem-value = hkeyitem-col_name. + else. + contentsitem-value = str. + endif. + contentsitem-column = columncount. + contentsitem-row = rowcount. + append contentsitem to contents. + columncount = columncount + 1. + enddo. + rowcount = rowcount + 1. + enddo. + +* incase columns header in multiline + + data: rowmaxtemp type i. + if rowmax > 1. + rowmaxtemp = rowmax - 1. + rowcount = 1. + do rowmaxtemp times. + columncount = 1. + do columnmax times. + contentsitem-column = columncount. + contentsitem-row = rowcount. + contentsitem-value = ''. + append contentsitem to contents. + columncount = columncount + 1. + enddo. + rowcount = rowcount + 1. + enddo. + endif. + +* append columns header to contents: vkey + + columncount = 1. + do columnmax times. + loop at lt_vkey into vkeyitem where col_no = columncount. + endloop. + contentsitem-value = vkeyitem-col_name. + contentsitem-row = rowmax. + contentsitem-column = columncount. + append contentsitem to contents. + columncount = columncount + 1. + enddo. +*--------------------------------------------------------------------* +* set header range for method set_range_data +* insert header keys range dim + + li_head_top = li_commentary_rows + 1. + li_col_pos = i_left. + +* insert range headers + + if hkeycolumns ne 0. + rangeitem-name = 'TESTHKEY'. + rangeitem-rows = rowmax. + rangeitem-columns = hkeycolumns. + append rangeitem to ranges. + clear: rangeitem. + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = 'TESTHKEY' + top = li_head_top + left = li_col_pos + rows = rowmax + columns = hkeycolumns + no_flush = no_flush. + endif. + endif. + +* format for columns header + total + subtotal +* ------------------------------------------ + + help = rowmax + realmit. " table + header lines + + data: item type colxxl_t. + data: lt_format type soi_format_table. + data: wa_format like line of lt_format. + data: wa_format_temp like line of lt_format. + + field-symbols: <f_source> type any. + field-symbols: <f_des> type any. + +* columns header format + + wa_format-front = -1. + wa_format-back = 15. "grey + wa_format-font = space. + wa_format-size = -1. + wa_format-bold = 1. + wa_format-align = 0. + wa_format-frametyp = -1. + wa_format-framecolor = -1. + +* get column header format from input record +* -> map input format + + if i_columns_header = 'X'. + wa_format-name = 'TESTHKEY'. + if i_format_col_header is not initial. + describe field i_format_col_header type l_typ components + li_col_num. + do li_col_num times. + if sy-index ne 1. " dun map range name + assign component sy-index of structure i_format_col_header + to <f_source>. + if <f_source> is not initial. + assign component sy-index of structure wa_format to <f_des>. + <f_des> = <f_source>. + unassign: <f_des>. + endif. + unassign: <f_source>. + endif. + enddo. + + clear: li_col_num. + endif. + + append wa_format to lt_format. + endif. + +* Zusammenfassen der Spalten mit gleicher Nachkommastellenzahl +* collect vertical cells (col) with the same number of decimal places +* to increase perfomance in currency cell format + + describe table currcells lines lines. + lines = lines - 1. + do lines times. + describe table currcells lines innerlines. + innerlines = innerlines - 1. + sort currcells by left top. + clear found. + do innerlines times. + read table currcells index sy-index into curritem. + counter = sy-index + 1. + read table currcells index counter into curritem2. + if curritem-left eq curritem2-left. + length = curritem-top + curritem-rows. + if length eq curritem2-top. + if curritem-decimals eq curritem2-decimals. + move curritem to curritem3. + curritem3-rows = curritem3-rows + curritem2-rows. + curritem-left = -1. + modify currcells index sy-index from curritem. + curritem2-left = -1. + modify currcells index counter from curritem2. + append curritem3 to currcells. + found = 'X'. + endif. + endif. + endif. + enddo. + if found is initial. + exit. + endif. + delete currcells where left = -1. + enddo. + +* Zusammenfassen der Zeilen mit gleicher Nachkommastellenzahl +* collect horizontal cells (row) with the same number of decimal places +* to increase perfomance in currency cell format + + describe table currcells lines lines. + lines = lines - 1. + do lines times. + describe table currcells lines innerlines. + innerlines = innerlines - 1. + sort currcells by top left. + clear found. + do innerlines times. + read table currcells index sy-index into curritem. + counter = sy-index + 1. + read table currcells index counter into curritem2. + if curritem-top eq curritem2-top and curritem-rows eq + curritem2-rows. + length = curritem-left + curritem-columns. + if length eq curritem2-left. + if curritem-decimals eq curritem2-decimals. + move curritem to curritem3. + curritem3-columns = curritem3-columns + curritem2-columns. + curritem-left = -1. + modify currcells index sy-index from curritem. + curritem2-left = -1. + modify currcells index counter from curritem2. + append curritem3 to currcells. + found = 'X'. + endif. + endif. + endif. + enddo. + if found is initial. + exit. + endif. + delete currcells where left = -1. + enddo. +* Ende der Zusammenfassung + + +* item data: format for currency cell, corresponding with currency + + call method lo_spreadsheet->cell_format + EXPORTING + cells = currcells + no_flush = no_flush. + +* item data: write item table content + + call method lo_spreadsheet->set_ranges_data + EXPORTING + ranges = ranges + contents = contents + no_flush = no_flush. + +* whole table range to format all table + + if i_columns_header = 'X'. + li_head_top = li_commentary_rows + 1. + else. + li_head_top = li_commentary_rows + 2. + help = help - 1. + endif. + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = 'WHOLE_TABLE' + top = li_head_top + left = i_left + rows = help + columns = datareal + no_flush = no_flush. + +* columns width auto fix +* this parameter = space in case use with exist template + + IF i_columns_autofit = 'X'. + call method lo_spreadsheet->fit_widest + EXPORTING + name = 'WHOLE_TABLE' + no_flush = no_flush. + ENDIF. + +* frame +* The parameter has 8 bits +*0 Left margin +*1 Top marginT +*2 Bottom margin +*3 Right margin +*4 Horizontal line +*5 Vertical line +*6 Thinness +*7 Thickness +* here 127 = 1111111 6-5-4-3-2-1 mean Thin-ver-hor-right-bot-top-left + +* ( final DOI method call, set no_flush = space +* equal to call method CL_GUI_CFW=>FLUSH ) + + call method lo_spreadsheet->set_frame + EXPORTING + rangename = 'WHOLE_TABLE' + typ = 127 + color = 1 + no_flush = space + IMPORTING + error = lo_error + retcode = lc_retcode. + + error_doi. + +* reformat subtotal / total line after format wholw table + + loop at subranges into subrangeitem. + l_sub_index = subrangeitem-rows + li_commentary_rows + rowmax. + + call method lo_spreadsheet->insert_range_dim + EXPORTING + name = subrangeitem-name + left = i_left + top = l_sub_index + rows = 1 + columns = datareal + no_flush = no_flush. + + wa_format-name = subrangeitem-name. + +* default format: +* - clolor: subtotal = light yellow, subtotal = yellow +* - frame: box + + IF subrangeitem-name(3) = 'SUB'. + wa_format-back = 36. "subtotal line + wa_format_temp = i_format_subtotal. + else. + wa_format-back = 27. "total line + wa_format_temp = i_format_total. + endif. + wa_format-FRAMETYP = 79. + wa_format-FRAMEcolor = 1. + wa_format-number = -1. + wa_format-align = -1. + +* get subtoal + total format from intput parameter +* overwrite default format + + if wa_format_temp is not initial. + describe field wa_format_temp type l_typ components li_col_num. + do li_col_num times. + if sy-index ne 1. " dun map range name + assign component sy-index of structure wa_format_temp + to <f_source>. + if <f_source> is not initial. + assign component sy-index of structure wa_format to <f_des>. + <f_des> = <f_source>. + unassign: <f_des>. + endif. + unassign: <f_source>. + endif. + enddo. + + clear: li_col_num. + endif. + + append wa_format to lt_format. + clear: wa_format-name. + clear: l_sub_index. + clear: wa_format_temp. + + endloop. + + if lt_format[] is not initial. + call method lo_spreadsheet->set_ranges_format + EXPORTING + formattable = lt_format + no_flush = no_flush. + refresh: lt_format. + endif. +*--------------------------------------------------------------------* + call method lo_spreadsheet->screen_update + EXPORTING + updating = 'X'. + + call method c_oi_errors=>flush_errors. + + lo_error_w = l_error. + lc_retcode = lo_error_w->error_code. + +** catch no_flush -> led to dump ( optional ) +* go_error = l_error. +* gc_retcode = go_error->error_code. +* error_doi. + + clear: + lt_sema, + wa_sema, + lt_hkey, + wa_hkey, + lt_vkey, + wa_vkey, + l_n_hrz_keys, + l_n_att_cols, + l_n_vrt_keys, + count, + datac, + datareal, + vkeycount, + all, + mit, + li_col_pos, + li_col_num, + ranges, + rangeitem, + contents, + contentsitem, + semaitem, + hkeyitem, + vkeyitem, + li_commentary_rows, + l_retcode, + li_head_top, + <f_excel_tab>. + + clear: + lo_error_w. + + unassign: + <line>, + <item>, + <f_excel_tab>. + +*--------------------------------------------------------------------* +* SESSION 5: SAVE AND CLOSE FILE +*--------------------------------------------------------------------* + +* ex of save path: 'FILE://C:\temp\test.xlsx' + concatenate 'FILE://' I_save_path + into ls_path. + + call method lo_proxy->save_document_to_url + EXPORTING + no_flush = 'X' + url = ls_path + IMPORTING + error = lo_error + retcode = lc_retcode + CHANGING + document_size = li_document_size. + + error_doi. + +* if save successfully -> raise successful message +* message i499(sy) with 'Document is Exported to ' p_path. + message i499(sy) with 'Data has been exported successfully'. + + clear: + ls_path, + li_document_size. + + close_document. + endmethod. + + + + + + + + method BIND_TABLE. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (wi p) 2012-12-01 +* - ... +* aligning code +* message made to support multilinguality +*--------------------------------------------------------------------* +* issue #237 - Check if overlapping areas exist +* - Alessandro Iannacci 2012-12-01 +* changes: - Added raise if overlaps are detected +*--------------------------------------------------------------------* + + CONSTANTS: + lc_top_left_column TYPE zexcel_cell_column_alpha VALUE 'B', + lc_top_left_row TYPE zexcel_cell_row VALUE 3. + + DATA: + lv_row_int TYPE zexcel_cell_row, + lv_first_row TYPE zexcel_cell_row, + lv_last_row TYPE zexcel_cell_row, + lv_column_int TYPE zexcel_cell_column, + lv_column_alpha TYPE zexcel_cell_column_alpha, + lt_field_catalog TYPE zexcel_t_fieldcatalog, + lv_id TYPE i, + lv_rows TYPE i, + lv_formula TYPE string, + ls_settings TYPE zexcel_s_table_settings, + lo_table TYPE REF TO zcl_excel_table, + lt_column_name_buffer TYPE SORTED TABLE OF string WITH UNIQUE KEY table_line, + lv_value TYPE string, + lv_value_lowercase TYPE string, + lv_syindex TYPE char3, + lv_errormessage TYPE string, "ins issue #237 + + lv_columns TYPE i, + lt_columns TYPE zexcel_t_fieldcatalog, + lv_maxcol TYPE i, + lv_maxrow TYPE i, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_curtable TYPE REF TO zcl_excel_table. + + FIELD-SYMBOLS: + <ls_field_catalog> TYPE zexcel_s_fieldcatalog, + <ls_field_catalog_custom> TYPE zexcel_s_fieldcatalog, + <fs_table_line> TYPE ANY, + <fs_fldval> TYPE ANY. + + ls_settings = is_table_settings. + + IF ls_settings-top_left_column IS INITIAL. + ls_settings-top_left_column = lc_top_left_column. + ENDIF. + + IF ls_settings-table_style IS INITIAL. + ls_settings-table_style = zcl_excel_table=>builtinstyle_medium2. + ENDIF. + + IF ls_settings-top_left_row IS INITIAL. + ls_settings-top_left_row = lc_top_left_row. + ENDIF. + + IF it_field_catalog IS NOT SUPPLIED. + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = ip_table ). + ELSE. + lt_field_catalog = it_field_catalog. + ENDIF. + + SORT lt_field_catalog BY position. + +*--------------------------------------------------------------------* +* issue #237 Check if overlapping areas exist Start +*--------------------------------------------------------------------* + "Get the number of columns for the current table + lt_columns = lt_field_catalog. + DELETE lt_columns WHERE dynpfld NE abap_true. + DESCRIBE TABLE lt_columns LINES lv_columns. + + "Calculate the top left row of the current table + lv_column_int = zcl_excel_common=>convert_column2int( ls_settings-top_left_column ). + lv_row_int = ls_settings-top_left_row. + + "Get number of row for the current table + DESCRIBE TABLE ip_table LINES lv_rows. + + "Calculate the bottom right row for the current table + lv_maxcol = lv_column_int + lv_columns - 1. + lv_maxrow = lv_row_int + lv_rows - 1. + ls_settings-bottom_right_column = zcl_excel_common=>convert_column2alpha( lv_maxcol ). + ls_settings-bottom_right_row = lv_maxrow. + + lv_column_int = zcl_excel_common=>convert_column2int( ls_settings-top_left_column ). + + lo_iterator = me->tables->if_object_collection~get_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + + lo_curtable ?= lo_iterator->if_object_collection_iterator~get_next( ). + IF ( ( ls_settings-top_left_row GE lo_curtable->settings-top_left_row AND ls_settings-top_left_row LE lo_curtable->settings-bottom_right_row ) + OR + ( ls_settings-bottom_right_row GE lo_curtable->settings-top_left_row AND ls_settings-bottom_right_row LE lo_curtable->settings-bottom_right_row ) + ) + AND + ( ( lv_column_int GE zcl_excel_common=>convert_column2int( lo_curtable->settings-top_left_column ) AND lv_column_int LE zcl_excel_common=>convert_column2int( lo_curtable->settings-bottom_right_column ) ) + OR + ( lv_maxcol GE zcl_excel_common=>convert_column2int( lo_curtable->settings-top_left_column ) AND lv_maxcol LE zcl_excel_common=>convert_column2int( lo_curtable->settings-bottom_right_column ) ) + ). + lv_errormessage = 'Table overlaps with previously bound table and will not be added to worksheet.'(400). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + ENDWHILE. +*--------------------------------------------------------------------* +* issue #237 Check if overlapping areas exist End +*--------------------------------------------------------------------* + + CREATE OBJECT lo_table. + lo_table->settings = ls_settings. + lo_table->set_data( ir_data = ip_table ). + lv_id = me->excel->get_next_table_id( ). + lo_table->set_id( iv_id = lv_id ). +* lo_table->fieldcat = lt_field_catalog[]. + + me->tables->add( lo_table ). + +* It is better to loop column by column (only visible column) + LOOP AT lt_field_catalog ASSIGNING <ls_field_catalog> WHERE dynpfld EQ abap_true. + + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column_int ). + + " Due restrinction of new table object we cannot have two column with the same name + " Check if a column with the same name exists, if exists add a counter + " If no medium description is provided we try to use small or long +* lv_value = <ls_field_catalog>-scrtext_m. + IF <ls_field_catalog>-scrtext_m IS NOT INITIAL. + lv_value = <ls_field_catalog>-scrtext_m. + <ls_field_catalog>-scrtext_l = lv_value. + ELSEIF <ls_field_catalog>-scrtext_s IS NOT INITIAL. + lv_value = <ls_field_catalog>-scrtext_s. + <ls_field_catalog>-scrtext_l = lv_value. + ELSEIF <ls_field_catalog>-scrtext_l IS NOT INITIAL. + lv_value = <ls_field_catalog>-scrtext_l. + ELSE. + lv_value = 'Column'. " default value as Excel does + <ls_field_catalog>-scrtext_l = lv_value. + ENDIF. + WHILE 1 = 1. + lv_value_lowercase = lv_value. + TRANSLATE lv_value_lowercase TO LOWER CASE. + READ TABLE lt_column_name_buffer TRANSPORTING NO FIELDS WITH KEY table_line = lv_value_lowercase BINARY SEARCH. + IF sy-subrc <> 0. + <ls_field_catalog>-scrtext_l = lv_value. + INSERT lv_value_lowercase INTO TABLE lt_column_name_buffer. + EXIT. + ELSE. + lv_syindex = sy-index. + CONCATENATE <ls_field_catalog>-scrtext_l lv_syindex INTO lv_value. + ENDIF. + + ENDWHILE. + " First of all write column header + IF <ls_field_catalog>-style_header IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = lv_value + ip_style = <ls_field_catalog>-style_header ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = lv_value ). + ENDIF. + + ADD 1 TO lv_row_int. + LOOP AT ip_table ASSIGNING <fs_table_line>. + + ASSIGN COMPONENT <ls_field_catalog>-fieldname OF STRUCTURE <fs_table_line> TO <fs_fldval>. + " issue #290 Add formula support in table + IF <ls_field_catalog>-formula EQ abap_true. + IF <ls_field_catalog>-style IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = <fs_fldval> + ip_style = <ls_field_catalog>-style ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = <fs_fldval> ). + ENDIF. + ELSE. + IF <ls_field_catalog>-style IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = <fs_fldval> + ip_style = <ls_field_catalog>-style ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = <fs_fldval> ). + ENDIF. + ENDIF. + ADD 1 TO lv_row_int. + + ENDLOOP. + IF sy-subrc <> 0. "create empty row if table has no data + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = space ). + ADD 1 TO lv_row_int. + ENDIF. + +*--------------------------------------------------------------------* + " totals +*--------------------------------------------------------------------* + IF <ls_field_catalog>-totals_function IS NOT INITIAL. + lv_formula = lo_table->get_totals_formula( ip_column = <ls_field_catalog>-scrtext_l ip_function = <ls_field_catalog>-totals_function ). + IF <ls_field_catalog>-style_total IS NOT INITIAL. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = lv_formula + ip_style = <ls_field_catalog>-style_total ). + ELSE. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_formula = lv_formula ). + ENDIF. + ENDIF. + + lv_row_int = ls_settings-top_left_row. + ADD 1 TO lv_column_int. + +*--------------------------------------------------------------------* + " conditional formatting +*--------------------------------------------------------------------* + IF <ls_field_catalog>-cond_style IS NOT INITIAL. + lv_first_row = ls_settings-top_left_row + 1. " +1 to exclude header + lv_last_row = ls_settings-top_left_row + lv_rows. + <ls_field_catalog>-cond_style->set_range( ip_start_column = lv_column_alpha + ip_start_row = lv_first_row + ip_stop_column = lv_column_alpha + ip_stop_row = lv_last_row ). + ENDIF. + + ENDLOOP. + +*--------------------------------------------------------------------* + " Set field catalog +*--------------------------------------------------------------------* + lo_table->fieldcat = lt_field_catalog[]. + + es_table_settings = ls_settings. + es_table_settings-bottom_right_column = lv_column_alpha. + " >> Issue #291 + IF ip_table IS INITIAL. + es_table_settings-bottom_right_row = ls_settings-top_left_row + 2. "Last rows + ELSE. + es_table_settings-bottom_right_row = ls_settings-top_left_row + lv_rows + 1. "Last rows + ENDIF. + " << Issue #291 + + endmethod. + + + + + + + *--------------------------------------------------------------------* +* issue #293 - Roberto Bianco +* - Christian Assig 2014-03-14 +* +* changes: - Calculate widths using SAPscript font metrics +* (transaction SE73) +* - Calculate the width of dates +* - Add additional width for auto filter buttons +* - Add cell padding to simulate Excel behavior +*--------------------------------------------------------------------* +METHOD calculate_cell_width. + + CONSTANTS: + lc_default_font_name TYPE zexcel_style_font_name VALUE 'Calibri', "#EC NOTEXT + lc_default_font_height TYPE tdfontsize VALUE '110', + lc_excel_cell_padding TYPE float VALUE '0.75'. + + DATA: ld_cell_value TYPE zexcel_cell_value, + ld_current_character TYPE c LENGTH 1, + ld_style_guid TYPE zexcel_cell_style, + ls_stylemapping TYPE zexcel_s_stylemapping, + lo_table_object TYPE REF TO object, + lo_table TYPE REF TO zcl_excel_table, + ld_table_top_left_column TYPE zexcel_cell_column, + ld_table_bottom_right_column TYPE zexcel_cell_column, + ld_flag_contains_auto_filter TYPE abap_bool VALUE abap_false, + ld_flag_bold TYPE abap_bool VALUE abap_false, + ld_flag_italic TYPE abap_bool VALUE abap_false, + ld_date TYPE d, + ld_date_char TYPE c LENGTH 50, + ld_font_height TYPE tdfontsize VALUE lc_default_font_height, + lt_itcfc TYPE STANDARD TABLE OF itcfc, + ld_offset TYPE i, + ld_length TYPE i, + ld_uccp TYPE i, + ls_font_metric TYPE mty_s_font_metric, + ld_width_from_font_metrics TYPE i, + ld_font_family TYPE itcfh-tdfamily, + ld_font_name TYPE zexcel_style_font_name VALUE lc_default_font_name, + lt_font_families LIKE STANDARD TABLE OF ld_font_family, + ls_font_cache TYPE mty_s_font_cache. + + FIELD-SYMBOLS: <ls_font_cache> TYPE mty_s_font_cache, + <ls_font_metric> TYPE mty_s_font_metric, + <ls_itcfc> TYPE itcfc. + + " Determine cell content and cell style + me->get_cell( EXPORTING ip_column = ip_column + ip_row = ip_row + IMPORTING ep_value = ld_cell_value + ep_guid = ld_style_guid ). + + " ABAP2XLSX uses tables to define areas containing headers and + " auto-filters. Find out if the current cell is in the header + " of one of these tables. + LOOP AT me->tables->collection INTO lo_table_object. + " Downcast: OBJECT -> ZCL_EXCEL_TABLE + lo_table ?= lo_table_object. + + " Convert column letters to corresponding integer values + ld_table_top_left_column = + zcl_excel_common=>convert_column2int( + lo_table->settings-top_left_column ). + + ld_table_bottom_right_column = + zcl_excel_common=>convert_column2int( + lo_table->settings-bottom_right_column ). + + " Is the current cell part of the table header? + IF ip_column BETWEEN ld_table_top_left_column AND + ld_table_bottom_right_column AND + ip_row EQ lo_table->settings-top_left_row. + " Current cell is part of the table header + " -> Assume that an auto filter is present and that the font is + " bold + ld_flag_contains_auto_filter = abap_true. + ld_flag_bold = abap_true. + ENDIF. + ENDLOOP. + + " If a style GUID is present, read style attributes + IF ld_style_guid IS NOT INITIAL. + TRY. + " Read style attributes + ls_stylemapping = me->excel->get_style_to_guid( ld_style_guid ). + + " If the current cell contains the default date format, + " convert the cell value to a date and calculate its length + IF ls_stylemapping-complete_style-number_format-format_code = + zcl_excel_style_number_format=>c_format_date_std. + + " Convert excel date to ABAP date + ld_date = + zcl_excel_common=>excel_string_to_date( ld_cell_value ). + + " Format ABAP date using user's formatting settings + WRITE ld_date TO ld_date_char. + + " Remember the formatted date to calculate the cell size + ld_cell_value = ld_date_char. + + ENDIF. + + " Read the font size and convert it to the font height + " used by SAPscript (multiplication by 10) + IF ls_stylemapping-complete_stylex-font-size = abap_true. + ld_font_height = ls_stylemapping-complete_style-font-size * 10. + ENDIF. + + " If set, remember the font name + IF ls_stylemapping-complete_stylex-font-name = abap_true. + ld_font_name = ls_stylemapping-complete_style-font-name. + ENDIF. + + " If set, remember whether font is bold and italic. + IF ls_stylemapping-complete_stylex-font-bold = abap_true. + ld_flag_bold = ls_stylemapping-complete_style-font-bold. + ENDIF. + + IF ls_stylemapping-complete_stylex-font-italic = abap_true. + ld_flag_italic = ls_stylemapping-complete_style-font-italic. + ENDIF. + + CATCH zcx_excel ##NO_HANDLER. + " Style GUID is present, but style was not found + " Continue with default values + + ENDTRY. + ENDIF. + + " Check if the same font (font name and font attributes) was already + " used before + READ TABLE mth_font_cache + WITH TABLE KEY + font_name = ld_font_name + font_height = ld_font_height + flag_bold = ld_flag_bold + flag_italic = ld_flag_italic + ASSIGNING <ls_font_cache>. + + IF sy-subrc <> 0. + " Font is used for the first time + " Add the font to our local font cache + ls_font_cache-font_name = ld_font_name. + ls_font_cache-font_height = ld_font_height. + ls_font_cache-flag_bold = ld_flag_bold. + ls_font_cache-flag_italic = ld_flag_italic. + INSERT ls_font_cache INTO TABLE mth_font_cache + ASSIGNING <ls_font_cache>. + + " Determine the SAPscript font family name from the Excel + " font name + SELECT tdfamily + FROM tfo01 + INTO TABLE lt_font_families + UP TO 1 ROWS + WHERE tdtext = ld_font_name. + + " Check if a matching font family was found + " Fonts can be uploaded from TTF files using transaction SE73 + IF lines( lt_font_families ) > 0. + READ TABLE lt_font_families INDEX 1 INTO ld_font_family. + + " Load font metrics (returns a table with the size of each letter + " in the font) + CALL FUNCTION 'LOAD_FONT' + EXPORTING + family = ld_font_family + height = ld_font_height + printer = 'SWIN' + bold = ld_flag_bold + italic = ld_flag_italic + TABLES + metric = lt_itcfc + EXCEPTIONS + font_family = 1 + codepage = 2 + device_type = 3 + OTHERS = 4. + IF sy-subrc <> 0. + CLEAR lt_itcfc. + ENDIF. + + " For faster access, convert each character number to the actual + " character, and store the characters and their sizes in a hash + " table + LOOP AT lt_itcfc ASSIGNING <ls_itcfc>. + ld_uccp = <ls_itcfc>-cpcharno. + ls_font_metric-char = + cl_abap_conv_in_ce=>uccpi( ld_uccp ). + ls_font_metric-char_width = <ls_itcfc>-tdcwidths. + INSERT ls_font_metric + INTO TABLE <ls_font_cache>-th_font_metrics. + ENDLOOP. + + ENDIF. + ENDIF. + + " Calculate the cell width + " If available, use font metrics + IF lines( <ls_font_cache>-th_font_metrics ) = 0. + " Font metrics are not available + " -> Calculate the cell width using only the font size + ld_length = strlen( ld_cell_value ). + ep_width = ld_length * ld_font_height / lc_default_font_height + lc_excel_cell_padding. + + ELSE. + " Font metrics are available + + " Calculate the size of the text by adding the sizes of each + " letter + ld_length = strlen( ld_cell_value ). + DO ld_length TIMES. + " Subtract 1, because the first character is at offset 0 + ld_offset = sy-index - 1. + + " Read the current character from the cell value + ld_current_character = ld_cell_value+ld_offset(1). + + " Look up the size of the current letter + READ TABLE <ls_font_cache>-th_font_metrics + WITH TABLE KEY char = ld_current_character + ASSIGNING <ls_font_metric>. + IF sy-subrc = 0. + " The size of the letter is known + " -> Add the actual size of the letter + ADD <ls_font_metric>-char_width TO ld_width_from_font_metrics. + ELSE. + " The size of the letter is unknown + " -> Add the font height as the default letter size + ADD ld_font_height TO ld_width_from_font_metrics. + ENDIF. + ENDDO. + + " Add cell padding (Excel makes columns a bit wider than the space + " that is needed for the text itself) and convert unit + " (division by 100) + ep_width = ld_width_from_font_metrics / 100 + lc_excel_cell_padding. + ENDIF. + + " If the current cell contains an auto filter, make it a bit wider. + " The size used by the auto filter button does not depend on the font + " size. + IF ld_flag_contains_auto_filter = abap_true. + ADD 2 TO ep_width. + ENDIF. + +ENDMETHOD. + + + + method CALCULATE_COLUMN_WIDTHS. + TYPES: + BEGIN OF t_auto_size, + col_index TYPE int4, + width TYPE float, + END OF t_auto_size. + TYPES: tt_auto_size TYPE TABLE OF t_auto_size. + + DATA: column_dimensions TYPE zexcel_t_worksheet_columndime. + DATA: column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + + DATA: auto_size TYPE flag. + DATA: auto_sizes TYPE tt_auto_size. +* DATA: col_alpha TYPE zexcel_cell_column_alpha." issue #155 - less restrictive typing for ip_column + DATA: cell_value TYPE zexcel_cell_value. + DATA: cell_style TYPE REF TO zcl_excel_style. + DATA: count TYPE int4. + DATA: highest_row TYPE int4. + DATA: width TYPE float. + + FIELD-SYMBOLS: <column_dimension> LIKE LINE OF column_dimensions. + FIELD-SYMBOLS: <auto_size> LIKE LINE OF auto_sizes. + + column_dimensions[] = me->get_column_dimensions( ). + LOOP AT column_dimensions ASSIGNING <column_dimension>. + auto_size = <column_dimension>-column_dimension->get_auto_size( ). + IF auto_size = abap_true. + APPEND INITIAL LINE TO auto_sizes ASSIGNING <auto_size>. + <auto_size>-col_index = <column_dimension>-column_dimension->get_column_index( ). + <auto_size>-width = -1. + ENDIF. + ENDLOOP. + + " There is only something to do if there are some auto-size columns + IF NOT auto_sizes IS INITIAL. + highest_row = me->get_highest_row( ). + LOOP AT auto_sizes ASSIGNING <auto_size>. +* col_alpha = zcl_excel_common=>convert_column2alpha( <auto_size>-col_index )." issue #155 - less restrictive typing for ip_column + count = 1. + WHILE count <= highest_row. +* Do not check merged cells + IF is_cell_merged( + ip_column = <auto_size>-col_index + ip_row = count ) = abap_false. +* Start of change # issue 139 - Dateretention of cellstyles +* IF cell_style IS BOUND. +* CREATE OBJECT cell_style. +* ENDIF. +* me->get_cell( +* EXPORTING +* ip_column = col_alpha " Cell Column +* ip_row = count " Cell Row +* IMPORTING +* ep_value = cell_value " Cell Value +* ep_style = cell_style " Request Cell Style as well +* ). +* " For an easy start we just take the number of characters as the width +* width = strlen( cell_value ). +* " Addition to solve issue #120, contribution by Stefan Schm#ƒÂ#cker +* " Calculate width using Font Size and Font Type +* IF cell_style IS BOUND +* AND cell_style->font IS BOUND. +* width = cell_style->font->calculate_text_width( cell_value ). +* ENDIF. +* width = calculate_cell_width( ip_column = col_alpha " issue #155 - less restrictive typing for ip_column + width = calculate_cell_width( ip_column = <auto_size>-col_index " issue #155 - less restrictive typing for ip_column + ip_row = count ). +* End of change # issue 139 - Dateretention of cellstyles + IF width > <auto_size>-width. + <auto_size>-width = width. + ENDIF. + ENDIF. + count = count + 1. + ENDWHILE. +* column_dimension = me->get_column_dimension( col_alpha ). " issue #155 - less restrictive typing for ip_column + column_dimension = me->get_column_dimension( <auto_size>-col_index ). " issue #155 - less restrictive typing for ip_column + column_dimension->set_width( <auto_size>-width ). + ENDLOOP. + ENDIF. + + endmethod. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + METHOD change_cell_style. + " issue # 139 + DATA: stylemapping TYPE zexcel_s_stylemapping, + + complete_style TYPE zexcel_s_cstyle_complete, + complete_stylex TYPE zexcel_s_cstylex_complete, + + borderx TYPE zexcel_s_cstylex_border, + l_guid TYPE zexcel_cell_style. "issue # 177 + +* We have a lot of parameters. Use some macros to make the coding more structured + + DEFINE clear_initial_colorxfields. + if &1-rgb is initial. + clear &2-rgb. + endif. + if &1-indexed is initial. + clear &2-indexed. + endif. + if &1-theme is initial. + clear &2-theme. + endif. + if &1-tint is initial. + clear &2-tint. + endif. + END-OF-DEFINITION. + + DEFINE move_supplied_borders. + if ip_&1 is supplied. " only act if parameter was supplied + if ip_x&1 is supplied. " + borderx = ip_x&1. " use supplied x-parameter + else. + clear borderx with 'X'. +* clear in a way that would be expected to work easily + if ip_&1-border_style is initial. + clear borderx-border_style. + endif. + clear_initial_colorxfields ip_&1-border_color borderx-border_color. + endif. + move-corresponding ip_&1 to complete_style-&2. + move-corresponding borderx to complete_stylex-&2. + endif. + END-OF-DEFINITION. + +* First get current stylsettings + TRY. + me->get_cell( EXPORTING ip_column = ip_column " Cell Column + ip_row = ip_row " Cell Row + IMPORTING ep_guid = l_guid )." Cell Value ). "issue # 177 + + + stylemapping = me->excel->get_style_to_guid( l_guid ). "issue # 177 + complete_style = stylemapping-complete_style. + complete_stylex = stylemapping-complete_stylex. + CATCH zcx_excel. +* Error --> use submitted style + ENDTRY. + +* move_supplied_multistyles: complete. + IF ip_complete IS SUPPLIED. + IF ip_xcomplete IS NOT SUPPLIED. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Complete styleinfo has to be supplied with corresponding X-field'. + ENDIF. + MOVE-CORRESPONDING ip_complete TO complete_style. + MOVE-CORRESPONDING ip_xcomplete TO complete_stylex. + ENDIF. + + + + IF ip_font IS SUPPLIED. + DATA: fontx LIKE ip_xfont. + IF ip_xfont IS SUPPLIED. + fontx = ip_xfont. + ELSE. +* Only supplied values should be used - exception: Flags bold and italic strikethrough underline + MOVE 'X' TO: fontx-bold, + fontx-italic, + fontx-strikethrough, + fontx-underline_mode. + CLEAR fontx-color WITH 'X'. + clear_initial_colorxfields ip_font-color fontx-color. + IF ip_font-family IS NOT INITIAL. + fontx-family = 'X'. + ENDIF. + IF ip_font-name IS NOT INITIAL. + fontx-name = 'X'. + ENDIF. + IF ip_font-scheme IS NOT INITIAL. + fontx-scheme = 'X'. + ENDIF. + IF ip_font-size IS NOT INITIAL. + fontx-size = 'X'. + ENDIF. + IF ip_font-underline_mode IS NOT INITIAL. + fontx-underline_mode = 'X'. + ENDIF. + ENDIF. + MOVE-CORRESPONDING ip_font TO complete_style-font. + MOVE-CORRESPONDING fontx TO complete_stylex-font. +* Correction for undeline mode + ENDIF. + + IF ip_fill IS SUPPLIED. + DATA: fillx LIKE ip_xfill. + IF ip_xfill IS SUPPLIED. + fillx = ip_xfill. + ELSE. + CLEAR fillx WITH 'X'. + IF ip_fill-filltype IS INITIAL. + CLEAR fillx-filltype. + ENDIF. + clear_initial_colorxfields ip_fill-fgcolor fillx-fgcolor. + clear_initial_colorxfields ip_fill-bgcolor fillx-bgcolor. + + ENDIF. + MOVE-CORRESPONDING ip_fill TO complete_style-fill. + MOVE-CORRESPONDING fillx TO complete_stylex-fill. + ENDIF. + + + IF ip_borders IS SUPPLIED. + DATA: bordersx LIKE ip_xborders. + IF ip_xborders IS SUPPLIED. + bordersx = ip_xborders. + ELSE. + CLEAR bordersx WITH 'X'. + IF ip_borders-allborders-border_style IS INITIAL. + CLEAR bordersx-allborders-border_style. + ENDIF. + IF ip_borders-diagonal-border_style IS INITIAL. + CLEAR bordersx-diagonal-border_style. + ENDIF. + IF ip_borders-down-border_style IS INITIAL. + CLEAR bordersx-down-border_style. + ENDIF. + IF ip_borders-left-border_style IS INITIAL. + CLEAR bordersx-left-border_style. + ENDIF. + IF ip_borders-right-border_style IS INITIAL. + CLEAR bordersx-right-border_style. + ENDIF. + IF ip_borders-top-border_style IS INITIAL. + CLEAR bordersx-top-border_style. + ENDIF. + clear_initial_colorxfields ip_borders-allborders-border_color bordersx-allborders-border_color. + clear_initial_colorxfields ip_borders-diagonal-border_color bordersx-diagonal-border_color. + clear_initial_colorxfields ip_borders-down-border_color bordersx-down-border_color. + clear_initial_colorxfields ip_borders-left-border_color bordersx-left-border_color. + clear_initial_colorxfields ip_borders-right-border_color bordersx-right-border_color. + clear_initial_colorxfields ip_borders-top-border_color bordersx-top-border_color. + + ENDIF. + MOVE-CORRESPONDING ip_borders TO complete_style-borders. + MOVE-CORRESPONDING bordersx TO complete_stylex-borders. + ENDIF. + + IF ip_alignment IS SUPPLIED. + DATA: alignmentx LIKE ip_xalignment. + IF ip_xalignment IS SUPPLIED. + alignmentx = ip_xalignment. + ELSE. + CLEAR alignmentx WITH 'X'. + IF ip_alignment-horizontal IS INITIAL. + CLEAR alignmentx-horizontal. + ENDIF. + IF ip_alignment-vertical IS INITIAL. + CLEAR alignmentx-vertical. + ENDIF. + ENDIF. + MOVE-CORRESPONDING ip_alignment TO complete_style-alignment. + MOVE-CORRESPONDING alignmentx TO complete_stylex-alignment. + ENDIF. + + IF ip_protection IS SUPPLIED. + MOVE-CORRESPONDING ip_protection TO complete_style-protection. + IF ip_xprotection IS SUPPLIED. + MOVE-CORRESPONDING ip_xprotection TO complete_stylex-protection. + ELSE. + IF ip_protection-hidden IS NOT INITIAL. + complete_stylex-protection-hidden = 'X'. + ENDIF. + IF ip_protection-locked IS NOT INITIAL. + complete_stylex-protection-locked = 'X'. + ENDIF. + ENDIF. + ENDIF. + + + move_supplied_borders : borders_allborders borders-allborders, + borders_diagonal borders-diagonal , + borders_down borders-down , + borders_left borders-left , + borders_right borders-right , + borders_top borders-top . + + DEFINE move_supplied_singlestyles. + if ip_&1 is supplied. + complete_style-&2 = ip_&1. + complete_stylex-&2 = 'X'. + endif. + END-OF-DEFINITION. + + move_supplied_singlestyles: number_format_format_code number_format-format_code, + font_bold font-bold, + font_color font-color, + font_color_rgb font-color-rgb, + font_color_indexed font-color-indexed, + font_color_theme font-color-theme, + font_color_tint font-color-tint, + + font_family font-family, + font_italic font-italic, + font_name font-name, + font_scheme font-scheme, + font_size font-size, + font_strikethrough font-strikethrough, + font_underline font-underline, + font_underline_mode font-underline_mode, + fill_filltype fill-filltype, + fill_rotation fill-rotation, + fill_fgcolor fill-fgcolor, + fill_fgcolor_rgb fill-fgcolor-rgb, + fill_fgcolor_indexed fill-fgcolor-indexed, + fill_fgcolor_theme fill-fgcolor-theme, + fill_fgcolor_tint fill-fgcolor-tint, + + fill_bgcolor fill-bgcolor, + fill_bgcolor_rgb fill-bgcolor-rgb, + fill_bgcolor_indexed fill-bgcolor-indexed, + fill_bgcolor_theme fill-bgcolor-theme, + fill_bgcolor_tint fill-bgcolor-tint, + + borders_diagonal_mode borders-diagonal_mode, + alignment_horizontal alignment-horizontal, + alignment_vertical alignment-vertical, + alignment_textrotation alignment-textrotation, + alignment_wraptext alignment-wraptext, + alignment_shrinktofit alignment-shrinktofit, + alignment_indent alignment-indent, + protection_hidden protection-hidden, + protection_locked protection-locked, + + borders_allborders_style borders-allborders-border_style, + borders_allborders_color borders-allborders-border_color, + borders_allbo_color_rgb borders-allborders-border_color-rgb, + borders_allbo_color_indexed borders-allborders-border_color-indexed, + borders_allbo_color_theme borders-allborders-border_color-theme, + borders_allbo_color_tint borders-allborders-border_color-tint, + + borders_diagonal_style borders-diagonal-border_style, + borders_diagonal_color borders-diagonal-border_color, + borders_diagonal_color_rgb borders-diagonal-border_color-rgb, + borders_diagonal_color_inde borders-diagonal-border_color-indexed, + borders_diagonal_color_them borders-diagonal-border_color-theme, + borders_diagonal_color_tint borders-diagonal-border_color-tint, + + borders_down_style borders-down-border_style, + borders_down_color borders-down-border_color, + borders_down_color_rgb borders-down-border_color-rgb, + borders_down_color_indexed borders-down-border_color-indexed, + borders_down_color_theme borders-down-border_color-theme, + borders_down_color_tint borders-down-border_color-tint, + + borders_left_style borders-left-border_style, + borders_left_color borders-left-border_color, + borders_left_color_rgb borders-left-border_color-rgb, + borders_left_color_indexed borders-left-border_color-indexed, + borders_left_color_theme borders-left-border_color-theme, + borders_left_color_tint borders-left-border_color-tint, + + borders_right_style borders-right-border_style, + borders_right_color borders-right-border_color, + borders_right_color_rgb borders-right-border_color-rgb, + borders_right_color_indexed borders-right-border_color-indexed, + borders_right_color_theme borders-right-border_color-theme, + borders_right_color_tint borders-right-border_color-tint, + + borders_top_style borders-top-border_style, + borders_top_color borders-top-border_color, + borders_top_color_rgb borders-top-border_color-rgb, + borders_top_color_indexed borders-top-border_color-indexed, + borders_top_color_theme borders-top-border_color-theme, + borders_top_color_tint borders-top-border_color-tint. + + +* Now we have a completly filled styles. +* This can be used to get the guid +* Return guid if requested. Might be used if copy&paste of styles is requested + ep_guid = me->excel->get_static_cellstyle_guid( ip_cstyle_complete = complete_style + ip_cstylex_complete = complete_stylex ). + me->set_cell_style( ip_column = ip_column + ip_row = ip_row + ip_style = ep_guid ). + +ENDMETHOD. + + + + + + method CONSTRUCTOR. + DATA: lv_title TYPE zexcel_sheet_title. + + me->excel = ip_excel. + + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = me->guid. + + IF ip_title IS NOT INITIAL. + lv_title = ip_title. + ELSE. +* lv_title = me->guid. " del issue #154 - Names of worksheets + lv_title = me->generate_title( ). " ins issue #154 - Names of worksheets + ENDIF. + + me->set_title( ip_title = lv_title ). + + CREATE OBJECT sheet_setup. + CREATE OBJECT conditional_styles. + CREATE OBJECT data_validations. + CREATE OBJECT tables. + CREATE OBJECT ranges. " issue #163 + CREATE OBJECT drawings + EXPORTING + ip_type = zcl_excel_drawing=>type_image. + CREATE OBJECT charts + EXPORTING + ip_type = zcl_excel_drawing=>type_chart. + me->zif_excel_sheet_protection~initialize( ). + me->zif_excel_sheet_properties~initialize( ). + CREATE OBJECT hyperlinks. + +* initialize active cell coordinates + active_cell-cell_row = 1. + active_cell-cell_column = 1. + +* inizialize dimension range + lower_cell-cell_row = 1. + lower_cell-cell_column = 1. + upper_cell-cell_row = 1. + upper_cell-cell_column = 1. + + endmethod. + + + method DELETE_MERGE. + + DELETE sheet_content_merge INDEX 1. + DELETE sheet_content_merge INDEX 1. + + endmethod. + + + + + + method FREEZE_PANES. + data: lv_xsplit type i, + lv_ysplit type i. + + IF ip_num_columns IS NOT SUPPLIED AND ip_num_rows IS NOT SUPPLIED. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Pleas provide number of rows and/or columns to freeze'. + ENDIF. + + IF ip_num_columns IS SUPPLIED AND ip_num_columns <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Number of columns to freeze should be positive'. + ENDIF. + + IF ip_num_rows IS SUPPLIED AND ip_num_rows <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Number of rows to freeze should be positive'. + ENDIF. + + freeze_pane_cell_column = ip_num_columns + 1. + freeze_pane_cell_row = ip_num_rows + 1. + endmethod. + + + + method GENERATE_TITLE. + DATA: lo_worksheets_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + errormessage TYPE string. + + DATA: t_titles TYPE HASHED TABLE OF zexcel_sheet_title WITH UNIQUE KEY table_line, + title TYPE zexcel_sheet_title, + sheetnumber TYPE i. + +* Get list of currently used titles + lo_worksheets_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_worksheets_iterator->has_next( ) = abap_true. + lo_worksheet ?= lo_worksheets_iterator->get_next( ). + title = lo_worksheet->get_title( ). + INSERT title INTO TABLE t_titles. + ADD 1 TO sheetnumber. + ENDWHILE. + +* Now build sheetnumber. Increase counter until we hit a number that is not used so far + ADD 1 TO sheetnumber. " Start counting with next number + DO. + title = sheetnumber. + SHIFT title LEFT DELETING LEADING space. + CONCATENATE 'Sheet'(001) title INTO ep_title. + INSERT ep_title INTO TABLE t_titles. + IF sy-subrc = 0. " Title not used so far --> take it + EXIT. + ENDIF. + + ADD 1 TO sheetnumber. + ENDDO. + endmethod. + + + + + method GET_ACTIVE_CELL. + + DATA: lv_active_column TYPE zexcel_cell_column_alpha, + lv_active_row TYPE string. + + lv_active_column = zcl_excel_common=>convert_column2alpha( active_cell-cell_column ). + lv_active_row = active_cell-cell_row. + SHIFT lv_active_row RIGHT DELETING TRAILING space. + SHIFT lv_active_row LEFT DELETING LEADING space. + CONCATENATE lv_active_column lv_active_row INTO ep_active_cell. + + endmethod. + + + + + + + + + + method GET_CELL. + + DATA: lv_column TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + + READ TABLE sheet_content INTO ls_sheet_content WITH TABLE KEY cell_row = ip_row + cell_column = lv_column. + + ep_rc = sy-subrc. + ep_value = ls_sheet_content-cell_value. + ep_guid = ls_sheet_content-cell_style. " issue 139 - added this to be used for columnwidth calculation + + " Addition to solve issue #120, contribution by Stefan Schm#ƒÂ#cker + DATA: style_iterator TYPE REF TO cl_object_collection_iterator, + style TYPE REF TO zcl_excel_style. + IF ep_style IS REQUESTED. + style_iterator = me->excel->get_styles_iterator( ). + WHILE style_iterator->has_next( ) = 'X'. + style ?= style_iterator->get_next( ). + IF style->get_guid( ) = ls_sheet_content-cell_style. + ep_style = style. + EXIT. + ENDIF. + ENDWHILE. + ENDIF. + endmethod. + + + + + + method GET_COLUMN_DIMENSION. + FIELD-SYMBOLS: <fs_column_dimension> LIKE LINE OF column_dimensions. + DATA: lv_column_alpha TYPE zexcel_cell_column_alpha. " issue #155 - less restrictive typing for ip_column + + lv_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column )." issue #155 - less restrictive typing for ip_column + READ TABLE me->column_dimensions ASSIGNING <fs_column_dimension> + WITH KEY column = lv_column_alpha. " issue #155 - less restrictive typing for ip_column + + IF NOT <fs_column_dimension> IS ASSIGNED. + CREATE OBJECT r_column_dimension + EXPORTING + ip_index = lv_column_alpha " issue #155 - less restrictive typing for ip_column + ip_excel = me->excel " issue #157 - Allow style for columns + ip_worksheet = me. " issue #157 - Allow style for columns + APPEND INITIAL LINE TO me->column_dimensions ASSIGNING <fs_column_dimension>. + <fs_column_dimension>-column = lv_column_alpha. " issue #155 - less restrictive typing for ip_column + <fs_column_dimension>-column_dimension = r_column_dimension. + ELSE. + r_column_dimension = <fs_column_dimension>-column_dimension. + ENDIF. + + endmethod. + + + + method GET_COLUMN_DIMENSIONS. + r_column_dimension[] = me->column_dimensions[]. + endmethod. + + + + method GET_COND_STYLES_ITERATOR. + + eo_iterator = me->conditional_styles->get_iterator( ). + endmethod. + + + + method GET_DATA_VALIDATIONS_ITERATOR. + + eo_iterator = me->data_validations->get_iterator( ). + endmethod. + + + + method GET_DATA_VALIDATIONS_SIZE. + ep_size = me->data_validations->size( ). + endmethod. + + + + method GET_DEFAULT_COLUMN_DIMENSION. + IF me->default_column_dimension IS NOT BOUND. + CREATE OBJECT me->default_column_dimension + EXPORTING + ip_index = 'A' " ???? + ip_worksheet = me + ip_excel = me->excel. + ENDIF. + + r_column_dimension = me->default_column_dimension. + endmethod. + + + + method GET_DEFAULT_EXCEL_DATE_FORMAT. + CONSTANTS: c_lang_e TYPE lang VALUE 'E'. + + IF default_excel_date_format IS NOT INITIAL. + ep_default_excel_date_format = default_excel_date_format. + RETURN. + ENDIF. + + "try to get defaults + TRY. + cl_abap_datfm=>get_date_format_des( EXPORTING im_langu = c_lang_e + IMPORTING ex_dateformat = default_excel_date_format ). + CATCH cx_abap_datfm_format_unknown. + + ENDTRY. + + " and fallback to fixed format + IF default_excel_date_format IS INITIAL. + default_excel_date_format = zcl_excel_style_number_format=>c_format_date_ddmmyyyydot. + ENDIF. + + ep_default_excel_date_format = default_excel_date_format. + endmethod. + + + + method GET_DEFAULT_EXCEL_TIME_FORMAT. + DATA: l_timefm TYPE xutimefm. + + IF default_excel_time_format IS NOT INITIAL. + ep_default_excel_time_format = default_excel_time_format. + RETURN. + ENDIF. + +* Let's get default + l_timefm = cl_abap_timefm=>get_environment_timefm( ). + CASE l_timefm. + WHEN 0. +*0 24 Hour Format (Example: 12:05:10) + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time6. + WHEN 1. +*1 12 Hour Format (Example: 12:05:10 PM) + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN 2. +*2 12 Hour Format (Example: 12:05:10 pm) for now all the same. no chnage upper lower + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN 3. +*3 Hours from 0 to 11 (Example: 00:05:10 PM) for now all the same. no chnage upper lower + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN 4. +*4 Hours from 0 to 11 (Example: 00:05:10 pm) for now all the same. no chnage upper lower + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time2. + WHEN OTHERS. + " and fallback to fixed format + default_excel_time_format = zcl_excel_style_number_format=>c_format_date_time6. + ENDCASE. + + ep_default_excel_time_format = default_excel_time_format. + endmethod. + + + + method GET_DEFAULT_ROW_DIMENSION. + IF me->default_row_dimension IS NOT BOUND. + CREATE OBJECT me->default_row_dimension. + ENDIF. + + r_row_dimension = me->default_row_dimension. + endmethod. + + + + + method GET_DIMENSION_RANGE. + + me->update_dimension_range( ). + IF upper_cell EQ lower_cell. "only one cell + " Worksheet not filled +* IF upper_cell-cell_coords = '0'. + IF upper_cell-cell_coords IS INITIAL. + ep_dimension_range = 'A1'. + ELSE. + ep_dimension_range = upper_cell-cell_coords. + ENDIF. + ELSE. + CONCATENATE upper_cell-cell_coords ':' lower_cell-cell_coords INTO ep_dimension_range. + ENDIF. + + endmethod. + + + + + method GET_DRAWINGS. + + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + lo_iterator TYPE REF TO cl_object_collection_iterator. + + CASE ip_type. + WHEN zcl_excel_drawing=>type_image. + r_drawings = drawings. + WHEN zcl_excel_drawing=>type_chart. + r_drawings = charts. + WHEN space. + CREATE OBJECT r_drawings + EXPORTING + ip_type = ''. + + lo_iterator = drawings->get_iterator( ). + WHILE lo_iterator->has_next( ) = abap_true. + lo_drawing ?= lo_iterator->get_next( ). + r_drawings->include( lo_drawing ). + ENDWHILE. + lo_iterator = charts->get_iterator( ). + WHILE lo_iterator->has_next( ) = abap_true. + lo_drawing ?= lo_iterator->get_next( ). + r_drawings->include( lo_drawing ). + ENDWHILE. + WHEN OTHERS. + ENDCASE. + endmethod. + + + + + method GET_DRAWINGS_ITERATOR. + CASE ip_type. + WHEN zcl_excel_drawing=>type_image. + eo_iterator = drawings->get_iterator( ). + WHEN zcl_excel_drawing=>type_chart. + eo_iterator = charts->get_iterator( ). + ENDCASE. + endmethod. + + + + + method GET_FREEZE_CELL. + ep_row = me->freeze_pane_cell_row. + ep_column = me->freeze_pane_cell_column. + endmethod. + + + + method GET_GUID. + + ep_guid = me->guid. + + endmethod. + + + + + method GET_HIGHEST_COLUMN. + me->update_dimension_range( ). + r_highest_column = me->lower_cell-cell_column. + endmethod. + + + + + method GET_HIGHEST_ROW. + me->update_dimension_range( ). + r_highest_row = me->lower_cell-cell_row. + endmethod. + + + + method GET_HYPERLINKS_ITERATOR. + eo_iterator = hyperlinks->get_iterator( ). + endmethod. + + + + method GET_HYPERLINKS_SIZE. + ep_size = hyperlinks->size( ). + endmethod. + + + + + method GET_MERGE. + + DATA: lv_column_start TYPE string, + lv_column_end TYPE string, + lv_row TYPE string, + lv_index TYPE sy-tabix, + ls_sheet_content TYPE zexcel_s_cell_data, + range_from TYPE string, + range_to TYPE string, + lv_merge_range TYPE string, + lv_count TYPE string. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + DESCRIBE TABLE sheet_content_merge LINES lv_count. + + WHILE lv_count GT lv_index. +* LOOP AT sheet_content_merge ASSIGNING <fs_sheet_content>. + lv_index = lv_index + 1. + READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX lv_index. + lv_column_start = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). + lv_row = <fs_sheet_content>-cell_row. + SHIFT lv_column_start RIGHT DELETING TRAILING space. + SHIFT lv_column_start LEFT DELETING LEADING space. + SHIFT lv_row RIGHT DELETING TRAILING space. + SHIFT lv_row LEFT DELETING LEADING space. + CONCATENATE lv_column_start lv_row + INTO range_from. + + lv_index = lv_index + 1. + READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX lv_index. + lv_column_end = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). + lv_row = <fs_sheet_content>-cell_row. + SHIFT lv_column_end RIGHT DELETING TRAILING space. + SHIFT lv_column_end LEFT DELETING LEADING space. + SHIFT lv_row RIGHT DELETING TRAILING space. + SHIFT lv_row LEFT DELETING LEADING space. + CONCATENATE lv_column_end lv_row + INTO range_to. + + CONCATENATE range_from range_to INTO lv_merge_range + SEPARATED BY ':'. + APPEND lv_merge_range TO merge_range. + ENDWHILE. +* ENDLOOP. + +* READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX 1. +* IF sy-subrc EQ 0 AND <fs_sheet_content> IS ASSIGNED. +* lv_column_start = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). +* lv_row = <fs_sheet_content>-cell_row. +* SHIFT lv_column_start RIGHT DELETING TRAILING space. +* SHIFT lv_column_start LEFT DELETING LEADING space. +* SHIFT lv_row RIGHT DELETING TRAILING space. +* SHIFT lv_row LEFT DELETING LEADING space. +* CONCATENATE lv_column_start lv_row +* INTO range_from. +* ENDIF. +* READ TABLE sheet_content_merge ASSIGNING <fs_sheet_content> INDEX 2. +* IF sy-subrc EQ 0 AND <fs_sheet_content> IS ASSIGNED. +* lv_column_end = zcl_excel_common=>convert_column2alpha( <fs_sheet_content>-cell_column ). +* SHIFT lv_column_end RIGHT DELETING TRAILING space. +* SHIFT lv_column_end LEFT DELETING LEADING space. +* CONCATENATE lv_column_end lv_row +* INTO range_to. +* ENDIF. + +* IF range_from NE space AND range_to NE space. +* CONCATENATE range_from range_to INTO ep_merge_range +* SEPARATED BY ':'. +* ENDIF. + + endmethod. + + + + method GET_RANGES_ITERATOR. + + eo_iterator = me->ranges->get_iterator( ). + + endmethod. + + + + + method GET_ROW_DIMENSION. + FIELD-SYMBOLS: <fs_row_dimension> LIKE LINE OF row_dimensions. + + READ TABLE me->row_dimensions ASSIGNING <fs_row_dimension> + WITH KEY row = ip_row. + + IF NOT <fs_row_dimension> IS ASSIGNED. + CREATE OBJECT r_row_dimension + EXPORTING + ip_index = ip_row. + APPEND INITIAL LINE TO me->row_dimensions ASSIGNING <fs_row_dimension>. + <fs_row_dimension>-row = ip_row. + <fs_row_dimension>-row_dimension = r_row_dimension. + ELSE. + r_row_dimension = <fs_row_dimension>-row_dimension. + ENDIF. + + endmethod. + + + + method GET_ROW_DIMENSIONS. + r_row_dimension[] = me->row_dimensions[]. + endmethod. + + + + method GET_TABCOLOR. + ev_tabcolor = me->tabcolor. + endmethod. + + + + method GET_TABLES_ITERATOR. + eo_iterator = tables->if_object_collection~get_iterator( ). + endmethod. + + + + method GET_TABLES_SIZE. + ep_size = tables->if_object_collection~size( ). + endmethod. + + + + + method GET_TITLE. + DATA lv_value TYPE string. + IF ip_escaped EQ abap_true. + lv_value = me->title. + ep_title = zcl_excel_common=>escape_string( lv_value ). + ELSE. + ep_title = me->title. + ENDIF. + endmethod. + + + + + + method GET_VALUE_TYPE. + DATA: lo_addit TYPE REF TO cl_abap_elemdescr, + ls_dfies TYPE dfies, + l_function TYPE funcname, + l_value(50) TYPE c. + + ep_value = ip_value. + ep_value_type = cl_abap_typedescr=>typekind_string. " Thats our default if something goes wrong. + + TRY. + lo_addit ?= cl_abap_typedescr=>describe_by_data( ip_value ). + CATCH cx_sy_move_cast_error. + CLEAR lo_addit. + ENDTRY. + IF lo_addit IS BOUND. + lo_addit->get_ddic_field( RECEIVING p_flddescr = ls_dfies + EXCEPTIONS not_found = 1 + no_ddic_type = 2 + OTHERS = 3 ) . + IF sy-subrc = 0. + ep_value_type = ls_dfies-inttype. + + IF ls_dfies-convexit IS NOT INITIAL. +* We need to convert with output conversion function + CONCATENATE 'CONVERSION_EXIT_' ls_dfies-convexit '_OUTPUT' INTO l_function. + SELECT SINGLE funcname INTO l_function + FROM tfdir + WHERE funcname = l_function. + IF sy-subrc = 0. + CALL FUNCTION l_function + EXPORTING + input = ip_value + IMPORTING +* LONG_TEXT = + output = l_value +* SHORT_TEXT = + EXCEPTIONS + OTHERS = 1. + IF sy-subrc <> 0. +* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO +* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. + ELSE. + ep_value = l_value. + ENDIF. + ENDIF. + ENDIF. + ELSE. + ep_value_type = lo_addit->get_data_type_kind( ip_value ). + ENDIF. + ENDIF. + + endmethod. + + + + + + + method IS_CELL_MERGED. + DATA lt_merge_range TYPE string_table. + + FIELD-SYMBOLS <lv_merge_range> LIKE LINE OF lt_merge_range. + + + lt_merge_range = me->get_merge( ). + + LOOP AT lt_merge_range ASSIGNING <lv_merge_range>. + rp_is_merged = zcl_excel_common=>is_cell_in_range( + ip_column = ip_column + ip_row = ip_row + ip_range = <lv_merge_range> ). + IF rp_is_merged = abap_true. + EXIT. + ENDIF. + ENDLOOP. +endmethod. + + + method PRINT_TITLE_SET_RANGE. +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-02 +*--------------------------------------------------------------------* + + + DATA: lo_range_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range, + lv_repeat_range_sheetname TYPE string, + lv_repeat_range_col TYPE string, + lv_row_char_from TYPE char10, + lv_row_char_to TYPE char10, + lv_repeat_range_row TYPE string, + lv_repeat_range TYPE string. + + +*--------------------------------------------------------------------* +* Get range that represents printarea +* if non-existant, create it +*--------------------------------------------------------------------* + lo_range_iterator = me->get_ranges_iterator( ). + WHILE lo_range_iterator->has_next( ) = abap_true. + + lo_range ?= lo_range_iterator->get_next( ). + IF lo_range->name = zif_excel_sheet_printsettings=>gcv_print_title_name. + EXIT. " Found it + ENDIF. + CLEAR lo_range. + + ENDWHILE. + + + IF me->print_title_col_from IS INITIAL AND + me->print_title_row_from IS INITIAL. +*--------------------------------------------------------------------* +* No print titles are present, +*--------------------------------------------------------------------* + IF lo_range IS BOUND. + me->ranges->remove( lo_range ). + ENDIF. + ELSE. +*--------------------------------------------------------------------* +* Print titles are present, +*--------------------------------------------------------------------* + IF lo_range IS NOT BOUND. + lo_range = me->add_new_range( ). + lo_range->name = zif_excel_sheet_printsettings=>gcv_print_title_name. + ENDIF. + + lv_repeat_range_sheetname = me->get_title( ). + lv_repeat_range_sheetname = zcl_excel_common=>escape_string( lv_repeat_range_sheetname ). + +*--------------------------------------------------------------------* +* Repeat-columns +*--------------------------------------------------------------------* + IF me->print_title_col_from IS NOT INITIAL. + CONCATENATE lv_repeat_range_sheetname + '!$' me->print_title_col_from + ':$' me->print_title_col_to + INTO lv_repeat_range_col. + ENDIF. + +*--------------------------------------------------------------------* +* Repeat-rows +*--------------------------------------------------------------------* + IF me->print_title_row_from IS NOT INITIAL. + lv_row_char_from = me->print_title_row_from. + lv_row_char_to = me->print_title_row_to. + CONCATENATE '!$' lv_row_char_from + ':$' lv_row_char_to + INTO lv_repeat_range_row. + CONDENSE lv_repeat_range_row NO-GAPS. + CONCATENATE lv_repeat_range_sheetname + lv_repeat_range_row + INTO lv_repeat_range_row. + ENDIF. + +*--------------------------------------------------------------------* +* Concatenate repeat-rows and columns +*--------------------------------------------------------------------* + IF lv_repeat_range_col IS INITIAL. + lv_repeat_range = lv_repeat_range_row. + ELSEIF lv_repeat_range_row IS INITIAL. + lv_repeat_range = lv_repeat_range_col. + ELSE. + CONCATENATE lv_repeat_range_col lv_repeat_range_row + INTO lv_repeat_range SEPARATED BY ','. + ENDIF. + + + lo_range->set_range_value( lv_repeat_range ). + ENDIF. + + + + endmethod. + + + + + + + + + + + + method SET_CELL. + + DATA: lv_column TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data, + lv_row_alpha TYPE string, + lv_col_alpha TYPE zexcel_cell_column_alpha, + lv_value TYPE zexcel_cell_value, + lv_data_type TYPE zexcel_cell_data_type, + lv_value_type TYPE abap_typekind, + lo_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style, + lo_addit TYPE REF TO cl_abap_elemdescr, + lo_value TYPE REF TO data, + lo_value_new TYPE REF TO data. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data, + <fs_numeric> TYPE numeric, + <fs_date> TYPE d, + <fs_time> TYPE t, + <fs_value> TYPE simple. + + IF ip_value IS NOT SUPPLIED AND ip_formula IS NOT SUPPLIED. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Please provide the value or formula'. + ENDIF. + +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* lv_style_guid = ip_style. + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH TABLE KEY cell_row = ip_row " Changed to access via table key , Stefan Schmöcker, 2013-08-03 + cell_column = lv_column. + IF sy-subrc = 0. + IF ip_style IS INITIAL. + " If no style is provided as method-parameter and cell is found use cell's current style + lv_style_guid = <fs_sheet_content>-cell_style. + ELSE. + " Style provided as method-parameter --> use this + lv_style_guid = ip_style. + ENDIF. + ELSE. + " No cell found --> use supplied style even if empty + lv_style_guid = ip_style. + ENDIF. +* End of change issue #152 - don't touch exisiting style if only value is passed + + IF ip_value IS SUPPLIED. + "if data type is passed just write the value. Otherwise map abap type to excel and perform conversion + "IP_DATA_TYPE is passed by excel reader so source types are preserved +*First we get reference into local var. + CREATE DATA lo_value LIKE ip_value. + ASSIGN lo_value->* TO <fs_value>. + <fs_value> = ip_value. + IF ip_data_type IS SUPPLIED. + IF ip_abap_type IS NOT SUPPLIED. + get_value_type( EXPORTING ip_value = ip_value + IMPORTING ep_value = <fs_value> ) . + ENDIF. + lv_value = <fs_value>. + lv_data_type = ip_data_type. + ELSE. + IF ip_abap_type IS SUPPLIED. + lv_value_type = ip_abap_type. + ELSE. + get_value_type( EXPORTING ip_value = ip_value + IMPORTING ep_value = <fs_value> + ep_value_type = lv_value_type ). + ENDIF. + CASE lv_value_type. + WHEN cl_abap_typedescr=>typekind_int OR cl_abap_typedescr=>typekind_int1 OR cl_abap_typedescr=>typekind_int2. + lo_addit = cl_abap_elemdescr=>get_i( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_numeric>. + IF sy-subrc = 0. + <fs_numeric> = <fs_value>. + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ). + ENDIF. + + WHEN cl_abap_typedescr=>typekind_float OR cl_abap_typedescr=>typekind_packed. + lo_addit = cl_abap_elemdescr=>get_f( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_numeric>. + IF sy-subrc = 0. + <fs_numeric> = <fs_value>. + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = <fs_numeric> ). + ENDIF. + + WHEN cl_abap_typedescr=>typekind_char OR cl_abap_typedescr=>typekind_string OR cl_abap_typedescr=>typekind_num OR + cl_abap_typedescr=>typekind_hex. + lv_value = <fs_value>. + lv_data_type = 's'. + + WHEN cl_abap_typedescr=>typekind_date. + lo_addit = cl_abap_elemdescr=>get_d( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_date>. + IF sy-subrc = 0. + <fs_date> = <fs_value>. + lv_value = zcl_excel_common=>date_to_excel_string( ip_value = <fs_date> ) . + ENDIF. +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* Moved to end of routine - apply date-format even if other styleinformation is passed +* IF ip_style IS NOT SUPPLIED. "get default date format in case parameter is initial +* lo_style = excel->add_new_style( ). +* lo_style->number_format->format_code = get_default_excel_date_format( ). +* lv_style_guid = lo_style->get_guid( ). +* ENDIF. +* End of change issue #152 - don't touch exisiting style if only value is passed + + WHEN cl_abap_typedescr=>typekind_time. + lo_addit = cl_abap_elemdescr=>get_t( ). + CREATE DATA lo_value_new TYPE HANDLE lo_addit. + ASSIGN lo_value_new->* TO <fs_time>. + IF sy-subrc = 0. + <fs_time> = <fs_value>. + lv_value = zcl_excel_common=>time_to_excel_string( ip_value = <fs_time> ). + ENDIF. +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* Moved to end of routine - apply time-format even if other styleinformation is passed +* IF ip_style IS NOT SUPPLIED. "get default time format for user in case parameter is initial +* lo_style = excel->add_new_style( ). +* lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_date_time6. +* lv_style_guid = lo_style->get_guid( ). +* ENDIF. +* End of change issue #152 - don't touch exisiting style if only value is passed + + WHEN OTHERS. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Invalid data type of input value'. + ENDCASE. + ENDIF. + + ENDIF. + + IF ip_hyperlink IS BOUND. + ip_hyperlink->set_cell_reference( ip_column = ip_column + ip_row = ip_row ). + me->hyperlinks->add( ip_hyperlink ). + ENDIF. + +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* Read table moved up, so that current style may be evaluated +* lv_column = zcl_excel_common=>convert_column2int( ip_column ). + +* READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH KEY cell_row = ip_row +* cell_column = lv_column. +* +* IF sy-subrc EQ 0. + IF <fs_sheet_content> IS ASSIGNED. +* End of change issue #152 - don't touch exisiting style if only value is passed + <fs_sheet_content>-cell_value = lv_value. + <fs_sheet_content>-cell_formula = ip_formula. + <fs_sheet_content>-cell_style = lv_style_guid. + <fs_sheet_content>-data_type = lv_data_type. + ELSE. + ls_sheet_content-cell_row = ip_row. + ls_sheet_content-cell_column = lv_column. + ls_sheet_content-cell_value = lv_value. + ls_sheet_content-cell_formula = ip_formula. + ls_sheet_content-cell_style = lv_style_guid. + ls_sheet_content-data_type = lv_data_type. + lv_row_alpha = ip_row. +* SHIFT lv_row_alpha RIGHT DELETING TRAILING space."del #152 - replaced with condense - should be faster +* SHIFT lv_row_alpha LEFT DELETING LEADING space. "del #152 - replaced with condense - should be faster + CONDENSE lv_row_alpha NO-GAPS. "ins #152 - replaced 2 shifts - should be faster + lv_col_alpha = zcl_excel_common=>convert_column2alpha( ip_column ). " issue #155 - less restrictive typing for ip_column + CONCATENATE lv_col_alpha lv_row_alpha INTO ls_sheet_content-cell_coords. " issue #155 - less restrictive typing for ip_column + INSERT ls_sheet_content INTO TABLE sheet_content ASSIGNING <fs_sheet_content>. "ins #152 - Now <fs_sheet_content> always holds the data +* APPEND ls_sheet_content TO sheet_content. +* SORT sheet_content BY cell_row cell_column. + " me->update_dimension_range( ). + + ENDIF. + +* Begin of change issue #152 - don't touch exisiting style if only value is passed +* For Date- or Timefields change the formatcode if nothing is set yet +* Enhancement option: Check if existing formatcode is a date/ or timeformat +* If not, use default + DATA: lo_format_code_datetime TYPE zexcel_number_format. + DATA: stylemapping TYPE zexcel_s_stylemapping. + CASE lv_value_type. + WHEN cl_abap_typedescr=>typekind_date. + TRY. + stylemapping = me->excel->get_style_to_guid( <fs_sheet_content>-cell_style ). + CATCH zcx_excel . + ENDTRY. + IF stylemapping-complete_stylex-number_format-format_code IS INITIAL OR + stylemapping-complete_style-number_format-format_code IS INITIAL. + lo_format_code_datetime = zcl_excel_style_number_format=>c_format_date_std. + ELSE. + lo_format_code_datetime = stylemapping-complete_style-number_format-format_code. + ENDIF. + me->change_cell_style( ip_column = ip_column + ip_row = ip_row + ip_number_format_format_code = lo_format_code_datetime ). + + WHEN cl_abap_typedescr=>typekind_time. + TRY. + stylemapping = me->excel->get_style_to_guid( <fs_sheet_content>-cell_style ). + CATCH zcx_excel . + ENDTRY. + IF stylemapping-complete_stylex-number_format-format_code IS INITIAL OR + stylemapping-complete_style-number_format-format_code IS INITIAL. + lo_format_code_datetime = zcl_excel_style_number_format=>c_format_date_time6. + ELSE. + lo_format_code_datetime = stylemapping-complete_style-number_format-format_code. + ENDIF. + me->change_cell_style( ip_column = ip_column + ip_row = ip_row + ip_number_format_format_code = lo_format_code_datetime ). + + ENDCASE. +* End of change issue #152 - don't touch exisiting style if only value is passed + +* Fix issue #162 + lv_value = ip_value. + IF lv_value CS cl_abap_char_utilities=>cr_lf. + me->change_cell_style( ip_column = ip_column + ip_row = ip_row + ip_alignment_wraptext = abap_true ). + ENDIF. +* End of Fix issue #162 + + endmethod. + + + + + + + method SET_CELL_FORMULA. + DATA: + lv_column TYPE zexcel_cell_column, + ls_sheet_content LIKE LINE OF me->sheet_content. + + FIELD-SYMBOLS: + <sheet_content> LIKE LINE OF me->sheet_content. + +*--------------------------------------------------------------------* +* Get cell to set formula into +*--------------------------------------------------------------------* + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + READ TABLE me->sheet_content ASSIGNING <sheet_content> WITH TABLE KEY cell_row = ip_row + cell_column = lv_column. + IF sy-subrc <> 0. " Create new entry in sheet_content if necessary + CHECK ip_formula IS INITIAL. " no need to create new entry in sheet_content when no formula is passed + ls_sheet_content-cell_row = ip_row. + ls_sheet_content-cell_column = lv_column. + INSERT ls_sheet_content INTO TABLE me->sheet_content ASSIGNING <sheet_content>. + ENDIF. + +*--------------------------------------------------------------------* +* Fieldsymbol now holds the relevant cell +*--------------------------------------------------------------------* + <sheet_content>-cell_formula = ip_formula. + + + endmethod. + + + + + + + method SET_CELL_STYLE. + + DATA: lv_column TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data, + lv_row_alpha TYPE string, + lo_style TYPE REF TO zcl_excel_style, + lv_style_guid TYPE zexcel_cell_style. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + lv_style_guid = ip_style. + + lv_column = zcl_excel_common=>convert_column2int( ip_column ). + + READ TABLE sheet_content ASSIGNING <fs_sheet_content> WITH KEY cell_row = ip_row + cell_column = lv_column. + + IF sy-subrc EQ 0. + <fs_sheet_content>-cell_style = lv_style_guid. + ELSE. + set_cell( ip_column = ip_column ip_row = ip_row ip_value = '' ip_style = ip_style ). + ENDIF. + + endmethod. + + + + + + + method SET_COLUMN_WIDTH. + DATA: column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + DATA: width TYPE float. + + column_dimension = me->get_column_dimension( ip_column ). + +* if a fix size is supplied use this + IF ip_width_fix IS SUPPLIED. + TRY. + width = ip_width_fix. + IF width <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Please supply a positive number as column-width'. + ENDIF. + column_dimension->set_width( width ). + EXIT. + CATCH cx_sy_conversion_no_number. +* Strange stuff passed --> raise error + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret supplied input as number'. + ENDTRY. + ENDIF. + +* If we get down to here, we have to use whatever is found in autosize. + column_dimension->set_auto_size( ip_width_autosize ). + + + endmethod. + + + + + method SET_DEFAULT_EXCEL_DATE_FORMAT. + + IF ip_default_excel_date_format IS INITIAL. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Default date format cannot be blank'. + ENDIF. + + default_excel_date_format = ip_default_excel_date_format. + endmethod. + + + + + + + + method SET_MERGE. + + DATA: lv_column_start TYPE zexcel_cell_column, + lv_column_end TYPE zexcel_cell_column, + ls_sheet_content TYPE zexcel_s_cell_data, + lv_row_alpha TYPE string. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + + lv_column_start = zcl_excel_common=>convert_column2int( ip_column_start ). + lv_column_end = zcl_excel_common=>convert_column2int( ip_column_end ). + + ls_sheet_content-cell_row = ip_row. + ls_sheet_content-cell_column = lv_column_start. + lv_row_alpha = ip_row. + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_column_start lv_row_alpha INTO ls_sheet_content-cell_coords. + INSERT ls_sheet_content INTO TABLE sheet_content_merge. + + ls_sheet_content-cell_column = lv_column_end. + IF ip_row_to IS SUPPLIED. + ls_sheet_content-cell_row = ip_row_to. + lv_row_alpha = ip_row_to. + ELSE. + lv_row_alpha = ip_row. + ls_sheet_content-cell_row = ip_row. + ENDIF. + + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE ip_column_end lv_row_alpha INTO ls_sheet_content-cell_coords. + INSERT ls_sheet_content INTO TABLE sheet_content_merge. + + endmethod. + + + + method SET_PRINT_GRIDLINES. + me->print_gridlines = i_print_gridlines. + endmethod. + + + + + + method SET_ROW_HEIGHT. + DATA: row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + DATA: height TYPE float. + + row_dimension = me->get_row_dimension( ip_row ). + +* if a fix size is supplied use this + TRY. + height = ip_height_fix. + IF height <= 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Please supply a positive number as row-height'. + ENDIF. + row_dimension->set_row_height( height ). + EXIT. + CATCH cx_sy_conversion_no_number. +* Strange stuff passed --> raise error + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret supplied input as number'. + ENDTRY. + + + + endmethod. + + + + method SET_SHOW_GRIDLINES. + me->show_gridlines = i_show_gridlines. + endmethod. + + + + method SET_SHOW_ROWCOLHEADERS. + me->show_rowcolheaders = i_show_rowcolheaders. + endmethod. + + + + method SET_TABCOLOR. + me->tabcolor = iv_tabcolor. + endmethod. + + + + + + + + + + + + method SET_TABLE. + + DATA: lo_tabdescr TYPE REF TO cl_abap_structdescr, + lr_data TYPE REF TO data, + ls_newline TYPE REF TO data, + ls_header TYPE x030l, + lt_dfies TYPE ddfields, + lv_row_header TYPE zexcel_cell_row VALUE 2, + lv_col_header TYPE zexcel_cell_column_alpha VALUE 'B', + lv_row_int TYPE zexcel_cell_row, + lv_column_int TYPE zexcel_cell_column, + lv_column_alpha TYPE zexcel_cell_column_alpha, + lv_cell_value TYPE zexcel_cell_value. + + + FIELD-SYMBOLS: <fs_table_line> TYPE ANY, + <fs_fldval> TYPE ANY, + <fs_dfies> TYPE dfies, + <fs_cell_value> TYPE zexcel_cell_value. + + lv_column_int = zcl_excel_common=>convert_column2int( ip_top_left_column ). + lv_row_int = ip_top_left_row. + + CREATE DATA lr_data LIKE LINE OF ip_table. + + lo_tabdescr ?= cl_abap_structdescr=>describe_by_data_ref( lr_data ). + + ls_header = lo_tabdescr->get_ddic_header( ). + + lt_dfies = lo_tabdescr->get_ddic_field_list( ). + +* It is better to loop column by column + LOOP AT lt_dfies ASSIGNING <fs_dfies>. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column_int ). + + IF ip_no_header = abap_false. + " First of all write column header + lv_cell_value = <fs_dfies>-scrtext_m. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = lv_cell_value + ip_style = ip_hdr_style ). + IF ip_transpose = abap_true. + ADD 1 TO lv_column_int. + ELSE. + ADD 1 TO lv_row_int. + ENDIF. + ENDIF. + + LOOP AT ip_table ASSIGNING <fs_table_line>. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lv_column_int ). + ASSIGN COMPONENT <fs_dfies>-fieldname OF STRUCTURE <fs_table_line> TO <fs_fldval>. + MOVE <fs_fldval> TO lv_cell_value. + me->set_cell( ip_column = lv_column_alpha + ip_row = lv_row_int + ip_value = <fs_fldval> "lv_cell_value + ip_style = ip_body_style ). + IF ip_transpose = abap_true. + ADD 1 TO lv_column_int. + ELSE. + ADD 1 TO lv_row_int. + ENDIF. + ENDLOOP. + IF ip_transpose = abap_true. + lv_column_int = zcl_excel_common=>convert_column2int( ip_top_left_column ). + ADD 1 TO lv_row_int. + ELSE. + lv_row_int = ip_top_left_row. + ADD 1 TO lv_column_int. + ENDIF. + ENDLOOP. + + endmethod. + + + + + method SET_TITLE. +*--------------------------------------------------------------------* +* ToDos: +* 2do§1 The current coding for replacing a named ranges name +* after renaming a sheet should be checked if it is +* really working if sheetname should be escaped +*--------------------------------------------------------------------* + +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (wip ) 2012-12-08 +* - ... +* changes: aligning code +* message made to support multilinguality +*--------------------------------------------------------------------* +* issue#243 - ' is not allowed as first character in sheet title +* - Stefan Schmöcker, 2012-12-02 +* changes: added additional check for ' as first character +*--------------------------------------------------------------------* + DATA: lo_worksheets_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + errormessage TYPE string, + lv_rangesheetname_old TYPE string, + lv_rangesheetname_new TYPE string, + lo_ranges_iterator TYPE REF TO cl_object_collection_iterator, + lo_range TYPE REF TO zcl_excel_range, + lv_range_value TYPE zexcel_range_value, + lv_errormessage TYPE string. " Can't pass '...'(abc) to exception-class + + +*--------------------------------------------------------------------* +* Check whether title consists only of allowed characters +* Illegal characters are: / \ [ ] * ? : --> http://msdn.microsoft.com/en-us/library/ff837411.aspx +* Illegal characters not in documentation: ' as first character +*--------------------------------------------------------------------* + IF ip_title CA '/\[]*?:'. + lv_errormessage = 'Found illegal character in sheetname. List of forbidden characters: /\[]*?:'(402). + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + IF ip_title IS NOT INITIAL AND ip_title(1) = `'`. + lv_errormessage = 'Sheetname may not start with &'(403). " & used instead of ' to allow fallbacklanguage + REPLACE '&' IN lv_errormessage WITH `'`. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = lv_errormessage. + ENDIF. + + +*--------------------------------------------------------------------* +* Check whether title is unique in workbook +*--------------------------------------------------------------------* + lo_worksheets_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_worksheets_iterator->has_next( ) = 'X'. + + lo_worksheet ?= lo_worksheets_iterator->get_next( ). + CHECK me->guid <> lo_worksheet->get_guid( ). " Don't check against itself + IF ip_title = lo_worksheet->get_title( ). " Not unique --> raise exception + errormessage = 'Duplicate sheetname &'. + REPLACE '&' IN errormessage WITH ip_title. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = errormessage. + ENDIF. + + ENDWHILE. + +*--------------------------------------------------------------------* +* Remember old sheetname and rename sheet to desired name +*--------------------------------------------------------------------* + CONCATENATE me->title '!' INTO lv_rangesheetname_old. + me->title = ip_title. + +*--------------------------------------------------------------------* +* After changing this worksheet's title we have to adjust +* all ranges that are referring to this worksheet. +*--------------------------------------------------------------------* +* 2do§1 - Check if the following quickfix is solid +* I fear it isn't - but this implementation is better then +* nothing at all since it handles a supposed majority of cases +*--------------------------------------------------------------------* + CONCATENATE me->title '!' INTO lv_rangesheetname_new. + + lo_ranges_iterator = me->excel->get_ranges_iterator( ). + WHILE lo_ranges_iterator->has_next( ) = 'X'. + + lo_range ?= lo_ranges_iterator->get_next( ). + lv_range_value = lo_range->get_value( ). + REPLACE ALL OCCURRENCES OF lv_rangesheetname_old IN lv_range_value WITH lv_rangesheetname_new. + IF sy-subrc = 0. + lo_range->set_range_value( lv_range_value ). + ENDIF. + + ENDWHILE. + + + endmethod. + + + + method UPDATE_DIMENSION_RANGE. + + DATA: ls_sheet_content TYPE zexcel_s_cell_data, + lt_sheet_content TYPE zexcel_t_cell_data_unsorted, + lv_row_alpha TYPE string, + lv_column_alpha TYPE zexcel_cell_column_alpha. + + CHECK sheet_content IS NOT INITIAL. + +* update dimension range + lt_sheet_content = sheet_content. + "upper left corner + SORT lt_sheet_content BY cell_row. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + upper_cell-cell_row = ls_sheet_content-cell_row. + SORT lt_sheet_content BY cell_column. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + upper_cell-cell_column = ls_sheet_content-cell_column. + + lv_row_alpha = upper_cell-cell_row. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( upper_cell-cell_column ). + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE lv_column_alpha lv_row_alpha INTO upper_cell-cell_coords. + + "bottom right corner + SORT lt_sheet_content BY cell_row DESCENDING. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + lower_cell-cell_row = ls_sheet_content-cell_row. + SORT lt_sheet_content BY cell_column DESCENDING. + READ TABLE lt_sheet_content INDEX 1 INTO ls_sheet_content. + lower_cell-cell_column = ls_sheet_content-cell_column. + + lv_row_alpha = lower_cell-cell_row. + lv_column_alpha = zcl_excel_common=>convert_column2alpha( lower_cell-cell_column ). + SHIFT lv_row_alpha RIGHT DELETING TRAILING space. + SHIFT lv_row_alpha LEFT DELETING LEADING space. + CONCATENATE lv_column_alpha lv_row_alpha INTO lower_cell-cell_coords. + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + method ADD. + + worksheets->add( ip_worksheet ). + + endmethod. + + + method CLEAR. + + worksheets->clear( ). + + endmethod. + + + method CONSTRUCTOR. + + CREATE OBJECT worksheets. + + endmethod. + + + + + method GET. + + DATA lv_index TYPE i. + lv_index = ip_index. + eo_worksheet ?= worksheets->if_object_collection~get( lv_index ). + + endmethod. + + + + method GET_ITERATOR. + + eo_iterator ?= worksheets->if_object_collection~get_iterator( ). + + endmethod. + + + + method IS_EMPTY. + + is_empty = worksheets->if_object_collection~is_empty( ). + + endmethod. + + + + method REMOVE. + + worksheets->remove( ip_worksheet ). + + endmethod. + + + + method SIZE. + + ep_size = worksheets->if_object_collection~size( ). + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + + + + + + + method CONSTRUCTOR. + me->column_index = zcl_excel_common=>convert_column2int( ip_index ). + me->width = -1. + me->auto_size = abap_false. + me->visible = abap_true. + me->outline_level = 0. + me->collapsed = abap_false. + me->excel = ip_excel. "ins issue #157 - Allow Style for columns + me->worksheet = ip_worksheet. "ins issue #157 - Allow Style for columns + + " set default index to cellXf + me->xf_index = 0. + + endmethod. + + + + method GET_AUTO_SIZE. + r_auto_size = me->auto_size. + endmethod. + + + + method GET_COLLAPSED. + r_Collapsed = me->Collapsed. + endmethod. + + + + method GET_COLUMN_INDEX. + r_column_index = me->column_index. + endmethod. + + + + + method GET_COLUMN_STYLE_GUID. + IF me->style_guid IS NOT INITIAL. + ep_style_guid = me->style_guid. + ELSE. + ep_style_guid = me->worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. + endmethod. + + + + method GET_OUTLINE_LEVEL. + r_outline_level = me->outline_level. + endmethod. + + + + method GET_VISIBLE. + r_Visible = me->Visible. + endmethod. + + + + method GET_WIDTH. + r_WIDTH = me->WIDTH. + endmethod. + + + + method GET_XF_INDEX. + r_xf_index = me->xf_index. + endmethod. + + + + + method SET_AUTO_SIZE. + me->auto_size = ip_auto_size. + r_worksheet_columndime = me. + endmethod. + + + + + method SET_COLLAPSED. + me->Collapsed = ip_Collapsed. + r_worksheet_columndime = me. + endmethod. + + + + + method SET_COLUMN_INDEX. + me->column_index = zcl_excel_common=>convert_column2int( ip_index ). + r_worksheet_columndime = me. + endmethod. + + + + + method SET_COLUMN_STYLE_BY_GUID. + DATA: stylemapping TYPE zexcel_s_stylemapping. + + IF me->excel IS NOT BOUND. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Internal error - reference to ZCL_EXCEL not bound'. + ENDIF. + TRY. + stylemapping = me->excel->get_style_to_guid( ip_style_guid ). + me->style_guid = stylemapping-guid. + + CATCH zcx_excel . + EXIT. " leave as is in case of error + ENDTRY. + + endmethod. + + + + method SET_OUTLINE_LEVEL. + me->outline_level = ip_outline_level. + endmethod. + + + + + method SET_VISIBLE. + me->Visible = ip_Visible. + r_worksheet_columndime = me. + endmethod. + + + + + + method SET_WIDTH. + TRY. + me->width = ip_width. + r_worksheet_columndime = me. + CATCH cx_sy_conversion_no_number. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret width as number'. + ENDTRY. + endmethod. + + + + + method SET_XF_INDEX. + me->XF_INDEX = ip_XF_INDEX. + r_worksheet_columndime = me. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + + + + method CONSTRUCTOR. + " Initialise values + me->row_index = ip_index. + me->row_height = -1. + me->visible = abap_true. + me->outline_level = 0. + me->collapsed = abap_false. + + " set row dimension as unformatted by default + me->xf_index = 0. + endmethod. + + + + method GET_COLLAPSED. + r_collapsed = me->collapsed. + endmethod. + + + + method GET_OUTLINE_LEVEL. + r_outline_level = me->outline_level. + endmethod. + + + + method GET_ROW_HEIGHT. + r_row_height = me->row_height. + endmethod. + + + + method GET_ROW_INDEX. + r_row_index = me->row_index. + endmethod. + + + + method GET_VISIBLE. + r_visible = me->visible. + endmethod. + + + + method GET_XF_INDEX. + r_xf_index = me->xf_index. + endmethod. + + + + method SET_COLLAPSED. + me->collapsed = ip_collapsed. + endmethod. + + + + + method SET_OUTLINE_LEVEL. + IF ip_outline_level < 0 + OR ip_outline_level > 7. + + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Outline level must range between 0 and 7.'. + + ENDIF. + me->outline_level = ip_outline_level. + endmethod. + + + + + method SET_ROW_HEIGHT. + TRY. + me->row_height = ip_row_height. + CATCH cx_sy_conversion_no_number. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Unable to interpret ip_row_height as number'. + ENDTRY. + endmethod. + + + + method SET_ROW_INDEX. + me->row_index = ip_index. + endmethod. + + + + method SET_VISIBLE. + me->visible = ip_visible. + endmethod. + + + + method SET_XF_INDEX. + me->XF_INDEX = ip_XF_INDEX. + endmethod. + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + + + + + + + + + + + method ZIF_EXCEL_WRITER~WRITE_FILE. + me->excel = io_excel. + + ep_file = me->create( ). + endmethod. + + + + method CREATE. + +* Office 2007 file format is a cab of several xml files with extension .xlsx + + DATA: lo_zip TYPE REF TO cl_abap_zip, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_active_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_nested_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_drawings TYPE REF TO zcl_excel_drawings. + + DATA: lv_content TYPE xstring, + lv_active TYPE flag, + lv_xl_sheet TYPE string, + lv_xl_sheet_rels TYPE string, + lv_xl_drawing TYPE string, + lv_xl_drawing_rels TYPE string, + lv_syindex TYPE string, + lv_value TYPE string, + lv_drawing_index TYPE i. + +********************************************************************** +* Start of insertion # issue 139 - Dateretention of cellstyles + me->excel->add_static_styles( ). +* End of insertion # issue 139 - Dateretention of cellstyles + +********************************************************************** +* STEP 1: Create archive object file (ZIP) + CREATE OBJECT lo_zip. + +********************************************************************** +* STEP 2: Add [Content_Types].xml to zip + lv_content = me->create_content_types( ). + lo_zip->add( name = me->c_content_types + content = lv_content ). + +********************************************************************** +* STEP 3: Add _rels/.rels to zip + lv_content = me->create_relationships( ). + lo_zip->add( name = me->c_relationships + content = lv_content ). + +********************************************************************** +* STEP 4: Add docProps/app.xml to zip + lv_content = me->create_docprops_app( ). + lo_zip->add( name = me->c_docprops_app + content = lv_content ). + +********************************************************************** +* STEP 5: Add docProps/core.xml to zip + lv_content = me->create_docprops_core( ). + lo_zip->add( name = me->c_docprops_core + content = lv_content ). + +********************************************************************** +* STEP 6: Add xl/_rels/workbook.xml.rels to zip + lv_content = me->create_xl_relationships( ). + lo_zip->add( name = me->c_xl_relationships + content = lv_content ). + +********************************************************************** +* STEP 6: Add xl/_rels/workbook.xml.rels to zip + lv_content = me->create_xl_theme( ). + lo_zip->add( name = me->c_xl_theme + content = lv_content ). + +********************************************************************** +* STEP 7: Add xl/workbook.xml to zip + lv_content = me->create_xl_workbook( ). + lo_zip->add( name = me->c_xl_workbook + content = lv_content ). + +********************************************************************** +* STEP 8: Add xl/workbook.xml to zip +* lv_content = me->create_xl_styles_static( ). + lv_content = me->create_xl_styles( ). + lo_zip->add( name = me->c_xl_styles + content = lv_content ). + +********************************************************************** +* STEP 9: Add sharedStrings.xml to zip + lv_content = me->create_xl_sharedstrings( ). + lo_zip->add( name = me->c_xl_sharedstrings + content = lv_content ). + +********************************************************************** +* STEP 10: Add sheet#.xml and drawing#.xml to zip + lo_iterator = me->excel->get_worksheets_iterator( ). + lo_active_worksheet = me->excel->get_active_worksheet( ). + lv_drawing_index = 1. + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + IF lo_active_worksheet->get_guid( ) EQ lo_worksheet->get_guid( ). + lv_active = abap_true. + ELSE. + lv_active = abap_false. + ENDIF. + lv_content = me->create_xl_sheet( io_worksheet = lo_worksheet + iv_active = lv_active ). + lv_xl_sheet = me->c_xl_sheet. + MOVE sy-index TO lv_syindex. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet WITH lv_syindex. + lo_zip->add( name = lv_xl_sheet + content = lv_content ). + + lv_xl_sheet_rels = me->c_xl_sheet_rels. + lv_content = me->create_xl_sheet_rels( io_worksheet = lo_worksheet + iv_drawing_index = lv_drawing_index ). + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet_rels WITH lv_syindex. + lo_zip->add( name = lv_xl_sheet_rels + content = lv_content ). + + lo_nested_iterator = lo_worksheet->get_tables_iterator( ). + + WHILE lo_nested_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_nested_iterator->if_object_collection_iterator~get_next( ). + lv_content = me->create_xl_table( lo_table ). + + lv_value = lo_table->get_name( ). + CONCATENATE 'xl/tables/' lv_value '.xml' INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDWHILE. + +* Add drawings ********************************** + lo_drawings = lo_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + MOVE lv_drawing_index TO lv_syindex. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + + lv_content = me->create_xl_drawings( lo_worksheet ). + lv_xl_drawing = me->c_xl_drawings. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing WITH lv_syindex. + lo_zip->add( name = lv_xl_drawing + content = lv_content ). + + lv_content = me->create_xl_drawings_rels( lo_worksheet ). + lv_xl_drawing_rels = me->c_xl_drawings_rels. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_syindex. + lo_zip->add( name = lv_xl_drawing_rels + content = lv_content ). + ADD 1 TO lv_drawing_index. + ENDIF. + + ENDWHILE. + +********************************************************************** +* STEP 11: Add media + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_content = lo_drawing->get_media( ). + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/media/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDWHILE. + +********************************************************************** +* STEP 12: Add charts + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_content = lo_drawing->get_media( ). + + "-------------Added by Alessandro Iannacci - Only if template exist + IF lv_content IS NOT INITIAL AND me->excel->use_template EQ abap_true. + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/charts/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ELSE. "ADD CUSTOM CHART!!!! + lv_content = me->create_xl_charts( lo_drawing ). + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/charts/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDIF. + "------------------------------------------------- + ENDWHILE. + +********************************************************************** +* STEP 12: Create the final zip + ep_excel = lo_zip->save( ). + + endmethod. + + + + method CREATE_CONTENT_TYPES. + + +** Constant node name + DATA: lc_xml_node_types TYPE string VALUE 'Types', + lc_xml_node_override TYPE string VALUE 'Override', + lc_xml_node_default TYPE string VALUE 'Default', + " Node attributes + lc_xml_attr_partname TYPE string VALUE 'PartName', + lc_xml_attr_extension TYPE string VALUE 'Extension', + lc_xml_attr_contenttype TYPE string VALUE 'ContentType', + " Node namespace + lc_xml_node_types_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/content-types', + " Node extension + lc_xml_node_rels_ext TYPE string VALUE 'rels', + lc_xml_node_xml_ext TYPE string VALUE 'xml', + " Node partnumber + lc_xml_node_theme_pn TYPE string VALUE '/xl/theme/theme1.xml', + lc_xml_node_styles_pn TYPE string VALUE '/xl/styles.xml', + lc_xml_node_workb_pn TYPE string VALUE '/xl/workbook.xml', + lc_xml_node_props_pn TYPE string VALUE '/docProps/app.xml', + lc_xml_node_worksheet_pn TYPE string VALUE '/xl/worksheets/sheet#.xml', + lc_xml_node_strings_pn TYPE string VALUE '/xl/sharedStrings.xml', + lc_xml_node_core_pn TYPE string VALUE '/docProps/core.xml', + lc_xml_node_chart_pn TYPE string VALUE '/xl/charts/chart#.xml', + " Node contentType + lc_xml_node_theme_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.theme+xml', + lc_xml_node_styles_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml', + lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml', + lc_xml_node_rels_ct TYPE string VALUE 'application/vnd.openxmlformats-package.relationships+xml', + lc_xml_node_xml_ct TYPE string VALUE 'application/xml', + lc_xml_node_props_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.extended-properties+xml', + lc_xml_node_worksheet_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml', + lc_xml_node_strings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml', + lc_xml_node_core_ct TYPE string VALUE 'application/vnd.openxmlformats-package.core-properties+xml', + lc_xml_node_table_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml', + lc_xml_node_drawings_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawing+xml', + lc_xml_node_chart_ct TYPE string VALUE 'application/vnd.openxmlformats-officedocument.drawingml.chart+xml'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_nested_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table. + + DATA: lv_worksheets_num TYPE i, + lv_worksheets_numc TYPE numc3, + lv_xml_node_worksheet_pn TYPE string, + lv_xml_size TYPE i, + lv_value TYPE string, + lv_drawing_index TYPE i VALUE 1, + lv_index_str TYPE string. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'UTF-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node types + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_types + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_types_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + " rels node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_rels_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_rels_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " extension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_xml_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_xml_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Theme node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_theme_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_theme_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Styles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_styles_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_styles_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Workbook node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_workb_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_workb_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Properties node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_props_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_props_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Worksheet node + lv_worksheets_num = excel->get_worksheets_size( ). + DO lv_worksheets_num TIMES. + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + + MOVE sy-index TO lv_worksheets_numc. + SHIFT lv_worksheets_numc LEFT DELETING LEADING '0'. + lv_xml_node_worksheet_pn = lc_xml_node_worksheet_pn. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_worksheet_pn WITH lv_worksheets_numc. + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_xml_node_worksheet_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_worksheet_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDDO. + + lo_iterator = me->excel->get_worksheets_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lo_nested_iterator = lo_worksheet->get_tables_iterator( ). + + WHILE lo_nested_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_nested_iterator->if_object_collection_iterator~get_next( ). + + lv_value = lo_table->get_name( ). + CONCATENATE '/xl/tables/' lv_value '.xml' INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_table_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + + " Drawings + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + + lo_drawings = lo_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lv_index_str = lv_drawing_index. + CONDENSE lv_index_str NO-GAPS. + CONCATENATE '/' me->c_xl_drawings INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_drawings_ct ). + lo_element_root->append_child( new_child = lo_element ). + + ADD 1 TO lv_drawing_index. + ENDIF. + ENDWHILE. + + " media mimes + DATA: lo_drawing TYPE REF TO zcl_excel_drawing, + lt_media_type TYPE TABLE OF mimetypes-extension, + lv_media_type TYPE mimetypes-extension, + lv_mime_type TYPE mimetypes-type. + + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) = abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_media_type = lo_drawing->get_media_type( ). + COLLECT lv_media_type INTO lt_media_type. + ENDWHILE. + + LOOP AT lt_media_type INTO lv_media_type. + CALL FUNCTION 'SDOK_MIMETYPE_GET' + EXPORTING + extension = lv_media_type + IMPORTING + mimetype = lv_mime_type. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lv_value = lv_media_type. + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lv_value ). + lv_value = lv_mime_type. + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDLOOP. + + " Charts + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) = abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lv_index_str = lo_drawing->get_index( ). + CONDENSE lv_index_str. + lv_value = lc_xml_node_chart_pn. + REPLACE ALL OCCURRENCES OF '#' IN lv_value WITH lv_index_str. + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_chart_ct ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + + " Strings node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_strings_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_strings_ct ). + lo_element_root->append_child( new_child = lo_element ). + + " Strings node + lo_element = lo_document->create_simple_element( name = lc_xml_node_override + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_partname + value = lc_xml_node_core_pn ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_core_ct ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + method CREATE_DOCPROPS_APP. + + +** Constant node name + DATA: lc_xml_node_properties TYPE string VALUE 'Properties', + lc_xml_node_application TYPE string VALUE 'Application', + lc_xml_node_docsecurity TYPE string VALUE 'DocSecurity', + lc_xml_node_scalecrop TYPE string VALUE 'ScaleCrop', + lc_xml_node_headingpairs TYPE string VALUE 'HeadingPairs', + lc_xml_node_vector TYPE string VALUE 'vector', + lc_xml_node_variant TYPE string VALUE 'variant', + lc_xml_node_lpstr TYPE string VALUE 'lpstr', + lc_xml_node_i4 TYPE string VALUE 'i4', + lc_xml_node_titlesofparts TYPE string VALUE 'TitlesOfParts', + lc_xml_node_company TYPE string VALUE 'Company', + lc_xml_node_linksuptodate TYPE string VALUE 'LinksUpToDate', + lc_xml_node_shareddoc TYPE string VALUE 'SharedDoc', + lc_xml_node_hyperlinkschanged TYPE string VALUE 'HyperlinksChanged', + lc_xml_node_appversion TYPE string VALUE 'AppVersion', + " Namespace prefix + lc_vt_ns TYPE string VALUE 'vt', + lc_xml_node_props_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/extended-properties', + lc_xml_node_props_vt_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes', + " Node attributes + lc_xml_attr_size TYPE string VALUE 'size', + lc_xml_attr_basetype TYPE string VALUE 'baseType'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element_vector TYPE REF TO if_ixml_element, + lo_sub_element_variant TYPE REF TO if_ixml_element, + lo_sub_element_lpstr TYPE REF TO if_ixml_element, + lo_sub_element_i4 TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lv_value TYPE string. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node properties + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_properties + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_props_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:vt' + value = lc_xml_node_props_vt_ns ). + +********************************************************************** +* STEP 4: Create subnodes + " Application + lo_element = lo_document->create_simple_element( name = lc_xml_node_application + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~application. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " DocSecurity + lo_element = lo_document->create_simple_element( name = lc_xml_node_docsecurity + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~docsecurity. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " ScaleCrop + lo_element = lo_document->create_simple_element( name = lc_xml_node_scalecrop + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~scalecrop ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " HeadingPairs + lo_element = lo_document->create_simple_element( name = lc_xml_node_headingpairs + parent = lo_document ). + + + " * vector node + lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector + prefix = lc_vt_ns + parent = lo_document ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size + value = '2' ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype + value = lc_xml_node_variant ). + + " ** variant node + lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant + prefix = lc_vt_ns + parent = lo_document ). + + " *** lpstr node + lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_name( ). + lo_sub_element_lpstr->set_value( value = lv_value ). + lo_sub_element_variant->append_child( new_child = lo_sub_element_lpstr ). " lpstr node + + lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node + + " ** variant node + lo_sub_element_variant = lo_document->create_simple_element_ns( name = lc_xml_node_variant + prefix = lc_vt_ns + parent = lo_document ). + + " *** i4 node + lo_sub_element_i4 = lo_document->create_simple_element_ns( name = lc_xml_node_i4 + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_size( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_i4->set_value( value = lv_value ). + lo_sub_element_variant->append_child( new_child = lo_sub_element_i4 ). " lpstr node + + lo_sub_element_vector->append_child( new_child = lo_sub_element_variant ). " variant node + + lo_element->append_child( new_child = lo_sub_element_vector ). " vector node + + lo_element_root->append_child( new_child = lo_element ). " HeadingPairs + + + " TitlesOfParts + lo_element = lo_document->create_simple_element( name = lc_xml_node_titlesofparts + parent = lo_document ). + + + " * vector node + lo_sub_element_vector = lo_document->create_simple_element_ns( name = lc_xml_node_vector + prefix = lc_vt_ns + parent = lo_document ). + lv_value = excel->get_worksheets_size( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_size + value = lv_value ). + lo_sub_element_vector->set_attribute_ns( name = lc_xml_attr_basetype + value = lc_xml_node_lpstr ). + + lo_iterator = excel->get_worksheets_iterator( ). + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + " ** lpstr node + lo_sub_element_lpstr = lo_document->create_simple_element_ns( name = lc_xml_node_lpstr + prefix = lc_vt_ns + parent = lo_document ). + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_value = lo_worksheet->get_title( ). + lo_sub_element_lpstr->set_value( value = lv_value ). + lo_sub_element_vector->append_child( new_child = lo_sub_element_lpstr ). " lpstr node + ENDWHILE. + + lo_element->append_child( new_child = lo_sub_element_vector ). " vector node + + lo_element_root->append_child( new_child = lo_element ). " TitlesOfParts + + + + " Company + IF excel->zif_excel_book_properties~company IS NOT INITIAL. + lo_element = lo_document->create_simple_element( name = lc_xml_node_company + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~company. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + " LinksUpToDate + lo_element = lo_document->create_simple_element( name = lc_xml_node_linksuptodate + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~linksuptodate ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " SharedDoc + lo_element = lo_document->create_simple_element( name = lc_xml_node_shareddoc + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~shareddoc ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " HyperlinksChanged + lo_element = lo_document->create_simple_element( name = lc_xml_node_hyperlinkschanged + parent = lo_document ). + lv_value = me->flag2bool( excel->zif_excel_book_properties~hyperlinkschanged ). + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " AppVersion + lo_element = lo_document->create_simple_element( name = lc_xml_node_appversion + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~appversion. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + method CREATE_DOCPROPS_CORE. + + +** Constant node name + DATA: lc_xml_node_coreproperties TYPE string VALUE 'coreProperties', + lc_xml_node_creator TYPE string VALUE 'creator', + lc_xml_node_description TYPE string VALUE 'description', + lc_xml_node_lastmodifiedby TYPE string VALUE 'lastModifiedBy', + lc_xml_node_created TYPE string VALUE 'created', + lc_xml_node_modified TYPE string VALUE 'modified', + " Node attributes + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_target TYPE string VALUE 'dcterms:W3CDTF', + " Node namespace + lc_cp_ns TYPE string VALUE 'cp', + lc_dc_ns TYPE string VALUE 'dc', + lc_dcterms_ns TYPE string VALUE 'dcterms', +* lc_dcmitype_ns TYPE string VALUE 'dcmitype', + lc_xsi_ns TYPE string VALUE 'xsi', + lc_xml_node_cp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/metadata/core-properties', + lc_xml_node_dc_ns TYPE string VALUE 'http://purl.org/dc/elements/1.1/', + lc_xml_node_dcterms_ns TYPE string VALUE 'http://purl.org/dc/terms/', + lc_xml_node_dcmitype_ns TYPE string VALUE 'http://purl.org/dc/dcmitype/', + lc_xml_node_xsi_ns TYPE string VALUE 'http://www.w3.org/2001/XMLSchema-instance'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + + DATA: lv_value TYPE string, + lv_date TYPE sydatum, + lv_time TYPE syuzeit. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node coreProperties + lo_element_root = lo_document->create_simple_element_ns( name = lc_xml_node_coreproperties + prefix = lc_cp_ns + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:cp' + value = lc_xml_node_cp_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dc' + value = lc_xml_node_dc_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dcterms' + value = lc_xml_node_dcterms_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:dcmitype' + value = lc_xml_node_dcmitype_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:xsi' + value = lc_xml_node_xsi_ns ). + +********************************************************************** +* STEP 4: Create subnodes + " Creator node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_creator + prefix = lc_dc_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~creator. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Description node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_description + prefix = lc_dc_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~description. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " lastModifiedBy node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_lastmodifiedby + prefix = lc_cp_ns + parent = lo_document ). + lv_value = excel->zif_excel_book_properties~lastmodifiedby. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Created node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_created + prefix = lc_dcterms_ns + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + prefix = lc_xsi_ns + value = lc_xml_attr_target ). + + CONVERT TIME STAMP excel->zif_excel_book_properties~created TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. + CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. + REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. +* lv_value = excel->zif_excel_book_properties~created. +* lv_value = '2010-07-04T14:58:53Z'. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " Modified node + lo_element = lo_document->create_simple_element_ns( name = lc_xml_node_modified + prefix = lc_dcterms_ns + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + prefix = lc_xsi_ns + value = lc_xml_attr_target ). + CONVERT TIME STAMP excel->zif_excel_book_properties~modified TIME ZONE sy-zonlo INTO DATE lv_date TIME lv_time. + CONCATENATE lv_date lv_time INTO lv_value RESPECTING BLANKS. + REPLACE ALL OCCURRENCES OF REGEX '([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})' IN lv_value WITH '$1-$2-$3T$4:$5:$6Z'. +* lv_value = excel->zif_excel_book_properties~modified. +* lv_value = '2010-07-04T14:58:53Z'. + lo_element->set_value( value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + method CREATE_RELATIONSHIPS. + + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + " Node id + lc_xml_node_rId1_id TYPE string VALUE 'rId1', + lc_xml_node_rId2_id TYPE string VALUE 'rId2', + lc_xml_node_rId3_id TYPE string VALUE 'rId3', + " Node type + lc_xml_node_rId1_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument', + lc_xml_node_rId2_tp TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties', + lc_xml_node_rId3_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties', + " Node target + lc_xml_node_rId1_tg TYPE string VALUE 'xl/workbook.xml', + lc_xml_node_rId2_tg TYPE string VALUE 'docProps/core.xml', + lc_xml_node_rId3_tg TYPE string VALUE 'docProps/app.xml'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + " Theme node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rId3_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rId3_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rId3_tg ). + lo_element_root->append_child( new_child = lo_element ). + + " Styles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rId2_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rId2_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rId2_tg ). + lo_element_root->append_child( new_child = lo_element ). + + " rels node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lc_xml_node_rId1_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rId1_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rId1_tg ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + + method CREATE_XL_CHARTS. + + +** Constant node name + CONSTANTS: lc_xml_node_chartspace TYPE string VALUE 'c:chartSpace', + lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', + lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main', + lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + lc_xml_node_date1904 TYPE string VALUE 'c:date1904', + lc_xml_node_lang TYPE string VALUE 'c:lang', + lc_xml_node_roundedcorners TYPE string VALUE 'c:roundedCorners', + lc_xml_node_altcont TYPE string VALUE 'mc:AlternateContent', + lc_xml_node_altcont_ns_mc TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + lc_xml_node_choice TYPE string VALUE 'mc:Choice', + lc_xml_node_choice_ns_requires TYPE string VALUE 'c14', + lc_xml_node_choice_ns_c14 TYPE string VALUE 'http://schemas.microsoft.com/office/drawing/2007/8/2/chart', + lc_xml_node_style TYPE string VALUE 'c14:style', + lc_xml_node_fallback TYPE string VALUE 'mc:Fallback', + lc_xml_node_style2 TYPE string VALUE 'c:style', + + "---------------------------CHART + lc_xml_node_chart TYPE string VALUE 'c:chart', + lc_xml_node_autotitledeleted TYPE string VALUE 'c:autoTitleDeleted', + "plotArea + lc_xml_node_plotarea TYPE string VALUE 'c:plotArea', + lc_xml_node_layout TYPE string VALUE 'c:layout', + lc_xml_node_varycolors TYPE string VALUE 'c:varyColors', + lc_xml_node_ser TYPE string VALUE 'c:ser', + lc_xml_node_idx TYPE string VALUE 'c:idx', + lc_xml_node_order TYPE string VALUE 'c:order', + lc_xml_node_tx TYPE string VALUE 'c:tx', + lc_xml_node_v TYPE string VALUE 'c:v', + lc_xml_node_val TYPE string VALUE 'c:val', + lc_xml_node_cat TYPE string VALUE 'c:cat', + lc_xml_node_numref TYPE string VALUE 'c:numRef', + lc_xml_node_strref TYPE string VALUE 'c:strRef', + lc_xml_node_f TYPE string VALUE 'c:f', "this is the range + "note: numcache avoided + lc_xml_node_dlbls TYPE string VALUE 'c:dLbls', + lc_xml_node_showlegendkey TYPE string VALUE 'c:showLegendKey', + lc_xml_node_showval TYPE string VALUE 'c:showVal', + lc_xml_node_showcatname TYPE string VALUE 'c:showCatName', + lc_xml_node_showsername TYPE string VALUE 'c:showSerName', + lc_xml_node_showpercent TYPE string VALUE 'c:showPercent', + lc_xml_node_showbubblesize TYPE string VALUE 'c:showBubbleSize', + "plotArea->pie + lc_xml_node_piechart TYPE string VALUE 'c:pieChart', + lc_xml_node_showleaderlines TYPE string VALUE 'c:showLeaderLines', + lc_xml_node_firstsliceang TYPE string VALUE 'c:firstSliceAng', + "plotArea->line + lc_xml_node_linechart TYPE string VALUE 'c:lineChart', + lc_xml_node_symbol TYPE string VALUE 'c:symbol', + lc_xml_node_marker TYPE string VALUE 'c:marker', + lc_xml_node_smooth TYPE string VALUE 'c:smooth', + "plotArea->bar + lc_xml_node_invertifnegative TYPE string VALUE 'c:invertIfNegative', + lc_xml_node_barchart TYPE string VALUE 'c:barChart', + lc_xml_node_bardir TYPE string VALUE 'c:barDir', + lc_xml_node_gapwidth TYPE string VALUE 'c:gapWidth', + "plotArea->line + plotArea->bar + lc_xml_node_grouping TYPE string VALUE 'c:grouping', + lc_xml_node_axid TYPE string VALUE 'c:axId', + lc_xml_node_catax TYPE string VALUE 'c:catAx', + lc_xml_node_valax TYPE string VALUE 'c:valAx', + lc_xml_node_scaling TYPE string VALUE 'c:scaling', + lc_xml_node_orientation TYPE string VALUE 'c:orientation', + lc_xml_node_delete TYPE string VALUE 'c:delete', + lc_xml_node_axpos TYPE string VALUE 'c:axPos', + lc_xml_node_numfmt TYPE string VALUE 'c:numFmt', + lc_xml_node_majorgridlines TYPE string VALUE 'c:majorGridlines', + lc_xml_node_majortickmark TYPE string VALUE 'c:majorTickMark', + lc_xml_node_minortickmark TYPE string VALUE 'c:minorTickMark', + lc_xml_node_ticklblpos TYPE string VALUE 'c:tickLblPos', + lc_xml_node_crossax TYPE string VALUE 'c:crossAx', + lc_xml_node_crosses TYPE string VALUE 'c:crosses', + lc_xml_node_auto TYPE string VALUE 'c:auto', + lc_xml_node_lblalgn TYPE string VALUE 'c:lblAlgn', + lc_xml_node_lbloffset TYPE string VALUE 'c:lblOffset', + lc_xml_node_nomultilvllbl TYPE string VALUE 'c:noMultiLvlLbl', + lc_xml_node_crossbetween TYPE string VALUE 'c:crossBetween', + "legend + lc_xml_node_legend TYPE string VALUE 'c:legend', + "legend->pie + lc_xml_node_legendpos TYPE string VALUE 'c:legendPos', +* lc_xml_node_layout TYPE string VALUE 'c:layout', "already exist + lc_xml_node_overlay TYPE string VALUE 'c:overlay', + lc_xml_node_txpr TYPE string VALUE 'c:txPr', + lc_xml_node_bodypr TYPE string VALUE 'a:bodyPr', + lc_xml_node_lststyle TYPE string VALUE 'a:lstStyle', + lc_xml_node_p TYPE string VALUE 'a:p', + lc_xml_node_ppr TYPE string VALUE 'a:pPr', + lc_xml_node_defrpr TYPE string VALUE 'a:defRPr', + lc_xml_node_endpararpr TYPE string VALUE 'a:endParaRPr', + "legend->bar + legend->line + lc_xml_node_plotvisonly TYPE string VALUE 'c:plotVisOnly', + lc_xml_node_dispblanksas TYPE string VALUE 'c:dispBlanksAs', + lc_xml_node_showdlblsovermax TYPE string VALUE 'c:showDLblsOverMax', + "---------------------------END OF CHART + + lc_xml_node_printsettings TYPE string VALUE 'c:printSettings', + lc_xml_node_headerfooter TYPE string VALUE 'c:headerFooter', + lc_xml_node_pagemargins TYPE string VALUE 'c:pageMargins', + lc_xml_node_pagesetup TYPE string VALUE 'c:pageSetup'. + + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_cellanchor TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + DATA: lv_rel_id TYPE i. + + DATA lo_element TYPE REF TO if_ixml_element. + DATA lo_element2 TYPE REF TO if_ixml_element. + DATA lo_element3 TYPE REF TO if_ixml_element. + DATA lo_el_rootchart TYPE REF TO if_ixml_element. + DATA lo_element4 TYPE REF TO if_ixml_element. + DATA lo_element5 TYPE REF TO if_ixml_element. + DATA lo_element6 TYPE REF TO if_ixml_element. + DATA lo_element7 TYPE REF TO if_ixml_element. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_chartspace + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:c' + value = lc_xml_node_ns_c ). + lo_element_root->set_attribute_ns( name = 'xmlns:a' + value = lc_xml_node_ns_a ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + +********************************************************************** +* STEP 4: Create chart + + DATA lo_chartb TYPE REF TO zcl_excel_graph_bars. + DATA lo_chartp TYPE REF TO zcl_excel_graph_pie. + DATA lo_chartl TYPE REF TO zcl_excel_graph_line. + DATA lo_chart TYPE REF TO zcl_excel_graph. + + DATA ls_serie TYPE zcl_excel_graph=>s_series. + DATA ls_ax TYPE zcl_excel_graph_bars=>s_ax. + DATA lv_str TYPE string. + + "Identify chart type + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + lo_chartb ?= io_drawing->graph. + WHEN zcl_excel_drawing=>c_graph_pie. + lo_chartp ?= io_drawing->graph. + WHEN zcl_excel_drawing=>c_graph_line. + lo_chartl ?= io_drawing->graph. + WHEN OTHERS. + ENDCASE. + + + lo_chart = io_drawing->graph. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_date1904 + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_1904val ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_lang + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_langval ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_roundedcorners + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'val' + value = lo_chart->ns_roundedcornersval ). + + lo_element = lo_document->create_simple_element( name = lc_xml_node_altcont + parent = lo_element_root ). + lo_element->set_attribute_ns( name = 'xmlns:mc' + value = lc_xml_node_altcont_ns_mc ). + + "Choice + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_choice + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'Requires' + value = lc_xml_node_choice_ns_requires ). + lo_element2->set_attribute_ns( name = 'xmlns:c14' + value = lc_xml_node_choice_ns_c14 ). + + "C14:style + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chart->ns_c14styleval ). + + "Fallback + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_fallback + parent = lo_element ). + + "C:style + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_style2 + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chart->ns_styleval ). + + "---------------------------CHART + lo_element = lo_document->create_simple_element( name = lc_xml_node_chart + parent = lo_element_root ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_autotitledeleted + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_autotitledeletedval ). + + "plotArea + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotarea + parent = lo_element ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + "----bar + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_barchart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bardir + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_bardirval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_groupingval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_varycolorsval ). + + "series + LOOP AT lo_chartb->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_invertifnegative + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_serie-invertifnegative ). + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartb->ns_showbubblesizeval ). + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_gapwidth + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartb->ns_gapwidthval ). + + "axes + lo_el_rootchart = lo_element3. + LOOP AT lo_chartb->axes INTO ls_ax. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_el_rootchart ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + CASE ls_ax-type. + WHEN zcl_excel_graph_bars=>c_catax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-auto ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lblalgn ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lbloffset ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-nomultilvllbl ). + WHEN zcl_excel_graph_bars=>c_valax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossbetween ). + WHEN OTHERS. + ENDCASE. + ENDLOOP. + "endaxes + + WHEN zcl_excel_drawing=>c_graph_pie. + "----pie + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_piechart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartp->ns_varycolorsval ). + + "series + LOOP AT lo_chartp->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showbubblesizeval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showleaderlines + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartp->ns_showleaderlinesval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_firstsliceang + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartp->ns_firstsliceangval ). + WHEN zcl_excel_drawing=>c_graph_line. + "----line + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_linechart + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_grouping + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_groupingval ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_varycolors + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->ns_varycolorsval ). + + "series + LOOP AT lo_chartl->series INTO ls_serie. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ser + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_idx + parent = lo_element4 ). + IF ls_serie-idx IS NOT INITIAL. + lv_str = ls_serie-idx. + ELSE. + lv_str = sy-tabix - 1. + ENDIF. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_order + parent = lo_element4 ). + lv_str = ls_serie-order. + CONDENSE lv_str. + lo_element5->set_attribute_ns( name = 'val' + value = lv_str ). + IF ls_serie-sername IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_tx + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_element5 ). + lo_element6->set_value( value = ls_serie-sername ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_marker + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_symbol + parent = lo_element5 ). + lo_element6->set_attribute_ns( name = 'val' + value = ls_serie-symbol ). + IF ls_serie-lbl IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_cat + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_strref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-lbl ). + ENDIF. + IF ls_serie-ref IS NOT INITIAL. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_val + parent = lo_element4 ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_numref + parent = lo_element5 ). + lo_element7 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_element6 ). + lo_element7->set_value( value = ls_serie-ref ). + ENDIF. + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_smooth + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_serie-smooth ). + ENDLOOP. + "endseries + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_dlbls + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showlegendkey + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showlegendkeyval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showval + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showvalval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showcatname + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showcatnameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showsername + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showsernameval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showpercent + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showpercentval ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_showbubblesize + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = lo_chartl->ns_showbubblesizeval ). + + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_marker + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->NS_MARKERVAL ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_smooth + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = lo_chartl->NS_SMOOTHVAL ). + + "axes + lo_el_rootchart = lo_element3. + LOOP AT lo_chartl->axes INTO ls_ax. + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_el_rootchart ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + CASE ls_ax-type. + WHEN zcl_excel_graph_line=>c_catax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_catax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). +* lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt +* parent = lo_element3 ). +* lo_element4->set_attribute_ns( name = 'formatCode' +* value = ls_ax-formatcode ). +* lo_element4->set_attribute_ns( name = 'sourceLinked' +* value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_auto + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-auto ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lblalgn + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lblalgn ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lbloffset + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-lbloffset ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_nomultilvllbl + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-nomultilvllbl ). + WHEN zcl_excel_graph_line=>c_valax. + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_valax + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axid + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axid ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_scaling + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_orientation + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'val' + value = ls_ax-orientation ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_delete + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-delete ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_axpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-axpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majorgridlines + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'formatCode' + value = ls_ax-formatcode ). + lo_element4->set_attribute_ns( name = 'sourceLinked' + value = ls_ax-sourcelinked ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_majortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-majortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_minortickmark + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-minortickmark ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_ticklblpos + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-ticklblpos ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossax + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossax ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crosses + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crosses ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_crossbetween + parent = lo_element3 ). + lo_element4->set_attribute_ns( name = 'val' + value = ls_ax-crossbetween ). + WHEN OTHERS. + ENDCASE. + ENDLOOP. + "endaxes + + WHEN OTHERS. + ENDCASE. + + "legend + IF lo_chart->print_label EQ abap_true. + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_legend + parent = lo_element ). + CASE io_drawing->graph_type. + WHEN zcl_excel_drawing=>c_graph_bars. + "----bar + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartb->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartb->ns_overlayval ). + WHEN zcl_excel_drawing=>c_graph_line. + "----line + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartl->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartl->ns_overlayval ). + WHEN zcl_excel_drawing=>c_graph_pie. + "----pie + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_legendpos + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartp->ns_legendposval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_layout + parent = lo_element2 ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_overlay + parent = lo_element2 ). + lo_element3->set_attribute_ns( name = 'val' + value = lo_chartp->ns_overlayval ). + lo_element3 = lo_document->create_simple_element( name = lc_xml_node_txpr + parent = lo_element2 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_bodypr + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_lststyle + parent = lo_element3 ). + lo_element4 = lo_document->create_simple_element( name = lc_xml_node_p + parent = lo_element3 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_ppr + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'rtl' + value = lo_chartp->ns_pprrtl ). + lo_element6 = lo_document->create_simple_element( name = lc_xml_node_defrpr + parent = lo_element5 ). + lo_element5 = lo_document->create_simple_element( name = lc_xml_node_endpararpr + parent = lo_element4 ). + lo_element5->set_attribute_ns( name = 'lang' + value = lo_chartp->ns_endpararprlang ). + WHEN OTHERS. + ENDCASE. + ENDIF. + + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_plotvisonly + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_plotvisonlyval ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_dispblanksas + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_dispblanksasval ). + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_showdlblsovermax + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'val' + value = lo_chart->ns_showdlblsovermaxval ). + "---------------------------END OF CHART + + "printSettings + lo_element = lo_document->create_simple_element( name = lc_xml_node_printsettings + parent = lo_element_root ). + "headerFooter + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_headerfooter + parent = lo_element ). + "pageMargins + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagemargins + parent = lo_element ). + lo_element2->set_attribute_ns( name = 'b' + value = lo_chart->pagemargins-b ). + lo_element2->set_attribute_ns( name = 'l' + value = lo_chart->pagemargins-l ). + lo_element2->set_attribute_ns( name = 'r' + value = lo_chart->pagemargins-r ). + lo_element2->set_attribute_ns( name = 't' + value = lo_chart->pagemargins-t ). + lo_element2->set_attribute_ns( name = 'header' + value = lo_chart->pagemargins-header ). + lo_element2->set_attribute_ns( name = 'footer' + value = lo_chart->pagemargins-footer ). + "pageSetup + lo_element2 = lo_document->create_simple_element( name = lc_xml_node_pagesetup + parent = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + + method CREATE_XL_DRAWINGS. + + +** Constant node name + CONSTANTS: lc_xml_node_wsdr TYPE string VALUE 'xdr:wsDr', + lc_xml_node_ns_xdr TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing', + lc_xml_node_ns_a TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/main'. + + CONSTANTS: lc_on TYPE string VALUE '1', + lc_off TYPE string VALUE '0'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_cellanchor TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawings TYPE REF TO zcl_excel_drawings, + lo_drawing TYPE REF TO zcl_excel_drawing. + DATA: lv_rel_id TYPE i. + + + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_wsdr + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns:xdr' + value = lc_xml_node_ns_xdr ). + lo_element_root->set_attribute_ns( name = 'xmlns:a' + value = lc_xml_node_ns_a ). + +********************************************************************** +* STEP 4: Create drawings + + CLEAR: lv_rel_id. + + lo_drawings = io_worksheet->get_drawings( ). + + lo_iterator = lo_drawings->get_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + ADD 1 TO lv_rel_id. + lo_element_cellanchor = me->create_xl_drawing_anchor( + io_drawing = lo_drawing + io_document = lo_document + ip_index = lv_rel_id ). + + lo_element_root->append_child( new_child = lo_element_cellanchor ). + + ENDWHILE. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + + method CREATE_XL_DRAWINGS_RELS. + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_image_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/image', + lc_xml_node_rid_chart_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_drawings TYPE REF TO zcl_excel_drawings, + lo_drawing TYPE REF TO zcl_excel_drawing. + + DATA: lv_value TYPE string, + lv_counter TYPE i. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + " Add sheet Relationship nodes here + lv_counter = 0. + lo_drawings = io_worksheet->get_drawings( ). + lo_iterator = lo_drawings->get_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_counter. + + lv_value = lv_counter. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + + lv_value = lo_drawing->get_media_name( ). + CASE lo_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. + CONCATENATE '../media/' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_image_tp ). + + WHEN zcl_excel_drawing=>type_chart. + CONCATENATE '../charts/' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_chart_tp ). + + ENDCASE. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + + + + method CREATE_XL_DRAWING_ANCHOR. + +** Constant node name + CONSTANTS: lc_xml_node_onecellanchor TYPE string VALUE 'xdr:oneCellAnchor', + lc_xml_node_twocellanchor TYPE string VALUE 'xdr:twoCellAnchor', + lc_xml_node_from TYPE string VALUE 'xdr:from', + lc_xml_node_to TYPE string VALUE 'xdr:to', + lc_xml_node_pic TYPE string VALUE 'xdr:pic', + lc_xml_node_ext TYPE string VALUE 'xdr:ext', + lc_xml_node_clientdata TYPE string VALUE 'xdr:clientData', + + lc_xml_node_col TYPE string VALUE 'xdr:col', + lc_xml_node_coloff TYPE string VALUE 'xdr:colOff', + lc_xml_node_row TYPE string VALUE 'xdr:row', + lc_xml_node_rowoff TYPE string VALUE 'xdr:rowOff', + + lc_xml_node_nvpicpr TYPE string VALUE 'xdr:nvPicPr', + lc_xml_node_cnvpr TYPE string VALUE 'xdr:cNvPr', + lc_xml_node_cnvpicpr TYPE string VALUE 'xdr:cNvPicPr', + lc_xml_node_piclocks TYPE string VALUE 'a:picLocks', + + lc_xml_node_sppr TYPE string VALUE 'xdr:spPr', + lc_xml_node_apgeom TYPE string VALUE 'a:prstGeom', + lc_xml_node_aavlst TYPE string VALUE 'a:avLst', + + lc_xml_node_graphicframe TYPE string VALUE 'xdr:graphicFrame', + lc_xml_node_nvgraphicframepr TYPE string VALUE 'xdr:nvGraphicFramePr', + lc_xml_node_cnvgraphicframepr TYPE string VALUE 'xdr:cNvGraphicFramePr', + lc_xml_node_graphicframelocks TYPE string VALUE 'a:graphicFrameLocks', + lc_xml_node_xfrm TYPE string VALUE 'xdr:xfrm', + lc_xml_node_aoff TYPE string VALUE 'a:off', + lc_xml_node_aext TYPE string VALUE 'a:ext', + lc_xml_node_agraphic TYPE string VALUE 'a:graphic', + lc_xml_node_agraphicdata TYPE string VALUE 'a:graphicData', + + lc_xml_node_ns_c TYPE string VALUE 'http://schemas.openxmlformats.org/drawingml/2006/chart', + lc_xml_node_cchart TYPE string VALUE 'c:chart', + + lc_xml_node_blipfill TYPE string VALUE 'xdr:blipFill', + lc_xml_node_ablip TYPE string VALUE 'a:blip', + lc_xml_node_astretch TYPE string VALUE 'a:stretch', + lc_xml_node_ns_r TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships'. + + + CONSTANTS: lc_on TYPE string VALUE '1', + lc_off TYPE string VALUE '0'. + + DATA: lo_element_graphicframe TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element2 TYPE REF TO if_ixml_element, + lo_element3 TYPE REF TO if_ixml_element, + lo_element_from TYPE REF TO if_ixml_element, + lo_element_to TYPE REF TO if_ixml_element, + lo_element_ext TYPE REF TO if_ixml_element, + lo_element_pic TYPE REF TO if_ixml_element, + lo_element_clientdata TYPE REF TO if_ixml_element, + + ls_position TYPE zexcel_drawing_position, + + lv_col TYPE string, " zexcel_cell_column, + lv_row TYPE string, " zexcel_cell_row. + lv_col_offset TYPE string, + lv_row_offset TYPE string, + lv_value TYPE string. + + ls_position = io_drawing->get_position( ). + + IF ls_position-anchor = 'ONE'. + ep_anchor = io_document->create_simple_element( name = lc_xml_node_onecellanchor + parent = io_document ). + ELSE. + ep_anchor = io_document->create_simple_element( name = lc_xml_node_twocellanchor + parent = io_document ). + ENDIF. + +* from cell ****************************** + lo_element_from = io_document->create_simple_element( name = lc_xml_node_from + parent = io_document ). + + lv_col = ls_position-from-col. + lv_row = ls_position-from-row. + lv_col_offset = ls_position-from-col_offset. + lv_row_offset = ls_position-from-row_offset. + CONDENSE lv_col NO-GAPS. + CONDENSE lv_row NO-GAPS. + CONDENSE lv_col_offset NO-GAPS. + CONDENSE lv_row_offset NO-GAPS. + + lo_element = io_document->create_simple_element( name = lc_xml_node_col + parent = io_document ). + lo_element->set_value( value = lv_col ). + lo_element_from->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_coloff + parent = io_document ). + lo_element->set_value( value = lv_col_offset ). + lo_element_from->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_row + parent = io_document ). + lo_element->set_value( value = lv_row ). + lo_element_from->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_rowoff + parent = io_document ). + lo_element->set_value( value = lv_row_offset ). + lo_element_from->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_from ). + + IF ls_position-anchor = 'ONE'. + +* ext ****************************** + lo_element_ext = io_document->create_simple_element( name = lc_xml_node_ext + parent = io_document ). + + lv_value = io_drawing->get_width_emu_str( ). + lo_element_ext->set_attribute_ns( name = 'cx' + value = lv_value ). + lv_value = io_drawing->get_height_emu_str( ). + lo_element_ext->set_attribute_ns( name = 'cy' + value = lv_value ). + ep_anchor->append_child( new_child = lo_element_ext ). + + ELSEIF ls_position-anchor = 'TWO'. + +* to cell ****************************** + lo_element_to = io_document->create_simple_element( name = lc_xml_node_to + parent = io_document ). + + lv_col = ls_position-to-col. + lv_row = ls_position-to-row. + lv_col_offset = ls_position-to-col_offset. + lv_row_offset = ls_position-to-row_offset. + CONDENSE lv_col NO-GAPS. + CONDENSE lv_row NO-GAPS. + CONDENSE lv_col_offset NO-GAPS. + CONDENSE lv_row_offset NO-GAPS. + + lo_element = io_document->create_simple_element( name = lc_xml_node_col + parent = io_document ). + lo_element->set_value( value = lv_col ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_coloff + parent = io_document ). + lo_element->set_value( value = lv_col_offset ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_row + parent = io_document ). + lo_element->set_value( value = lv_row ). + lo_element_to->append_child( new_child = lo_element ). + + lo_element = io_document->create_simple_element( name = lc_xml_node_rowoff + parent = io_document ). + lo_element->set_value( value = lv_row_offset ). + lo_element_to->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_to ). + + ENDIF. + + CASE io_drawing->get_type( ). + WHEN zcl_excel_drawing=>type_image. +* pic ********************************** + lo_element_pic = io_document->create_simple_element( name = lc_xml_node_pic + parent = io_document ). +* nvPicPr + lo_element = io_document->create_simple_element( name = lc_xml_node_nvpicpr + parent = io_document ). +* cNvPr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr + parent = io_document ). + lv_value = sy-index. + CONDENSE lv_value. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lo_element2->set_attribute_ns( name = 'name' + value = io_drawing->title ). + lo_element->append_child( new_child = lo_element2 ). + +* cNvPicPr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpicpr + parent = io_document ). + +* picLocks + lo_element3 = io_document->create_simple_element( name = lc_xml_node_piclocks + parent = io_document ). + lo_element3->set_attribute_ns( name = 'noChangeAspect' + value = '1' ). + + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_pic->append_child( new_child = lo_element ). + +* blipFill + lv_value = ip_index. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = io_document->create_simple_element( name = lc_xml_node_blipfill + parent = io_document ). + lo_element2 = io_document->create_simple_element( name = lc_xml_node_ablip + parent = io_document ). + lo_element2->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + lo_element2->set_attribute_ns( name = 'r:embed' + value = lv_value ). + lo_element->append_child( new_child = lo_element2 ). + + lo_element2 = io_document->create_simple_element( name = lc_xml_node_astretch + parent = io_document ). + lo_element->append_child( new_child = lo_element2 ). + + lo_element_pic->append_child( new_child = lo_element ). + +* spPr + lo_element = io_document->create_simple_element( name = lc_xml_node_sppr + parent = io_document ). + + lo_element2 = io_document->create_simple_element( name = lc_xml_node_apgeom + parent = io_document ). + lo_element2->set_attribute_ns( name = 'prst' + value = 'rect' ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_aavlst + parent = io_document ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + + lo_element_pic->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_pic ). + WHEN zcl_excel_drawing=>type_chart. +* graphicFrame ********************************** + lo_element_graphicframe = io_document->create_simple_element( name = lc_xml_node_graphicframe + parent = io_document ). +* nvGraphicFramePr + lo_element = io_document->create_simple_element( name = lc_xml_node_nvgraphicframepr + parent = io_document ). +* cNvPr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvpr + parent = io_document ). + lv_value = sy-index. + CONDENSE lv_value. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lo_element2->set_attribute_ns( name = 'name' + value = io_drawing->title ). + lo_element->append_child( new_child = lo_element2 ). +* cNvGraphicFramePr + lo_element2 = io_document->create_simple_element( name = lc_xml_node_cnvgraphicframepr + parent = io_document ). + lo_element3 = io_document->create_simple_element( name = lc_xml_node_graphicframelocks + parent = io_document ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). + +* xfrm + lo_element = io_document->create_simple_element( name = lc_xml_node_xfrm + parent = io_document ). +* off + lo_element2 = io_document->create_simple_element( name = lc_xml_node_aoff + parent = io_document ). + lo_element2->set_attribute_ns( name = 'y' value = '0' ). + lo_element2->set_attribute_ns( name = 'x' value = '0' ). + lo_element->append_child( new_child = lo_element2 ). +* ext + lo_element2 = io_document->create_simple_element( name = lc_xml_node_aext + parent = io_document ). + lo_element2->set_attribute_ns( name = 'cy' value = '0' ). + lo_element2->set_attribute_ns( name = 'cx' value = '0' ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). + +* graphic + lo_element = io_document->create_simple_element( name = lc_xml_node_agraphic + parent = io_document ). +* graphicData + lo_element2 = io_document->create_simple_element( name = lc_xml_node_agraphicdata + parent = io_document ). + lo_element2->set_attribute_ns( name = 'uri' value = lc_xml_node_ns_c ). + +* chart + lo_element3 = io_document->create_simple_element( name = lc_xml_node_cchart + parent = io_document ). + + lo_element3->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_ns_r ). + lo_element3->set_attribute_ns( name = 'xmlns:c' + value = lc_xml_node_ns_c ). + + lv_value = ip_index. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element3->set_attribute_ns( name = 'r:id' + value = lv_value ). + lo_element2->append_child( new_child = lo_element3 ). + lo_element->append_child( new_child = lo_element2 ). + lo_element_graphicframe->append_child( new_child = lo_element ). + ep_anchor->append_child( new_child = lo_element_graphicframe ). + + ENDCASE. + +* client data *************************** + lo_element_clientdata = io_document->create_simple_element( name = lc_xml_node_clientdata + parent = io_document ). + ep_anchor->append_child( new_child = lo_element_clientdata ). + + endmethod. + + + + method CREATE_XL_RELATIONSHIPS. + + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#', + " Node type + lc_xml_node_rid_sheet_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet', + lc_xml_node_rid_theme_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme', + lc_xml_node_rid_styles_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles', + lc_xml_node_rid_shared_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings', + " Node target + lc_xml_node_ridx_tg TYPE string VALUE 'worksheets/sheet#.xml', + lc_xml_node_rid_shared_tg TYPE string VALUE 'sharedStrings.xml', + lc_xml_node_rid_styles_tg TYPE string VALUE 'styles.xml', + lc_xml_node_rid_theme_tg TYPE string VALUE 'theme/theme1.xml'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + + DATA: lv_xml_node_ridx_tg TYPE string, + lv_xml_node_ridx_id TYPE string, + lv_size TYPE i, + lv_syindex(3) TYPE c. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + lv_size = excel->get_worksheets_size( ). + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_size = lv_size + 2. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_styles_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_styles_tg ). + lo_element_root->append_child( new_child = lo_element ). + + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_size = lv_size - 1. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_theme_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_theme_tg ). + lo_element_root->append_child( new_child = lo_element ). + + lv_size = excel->get_worksheets_size( ). + + DO lv_size TIMES. + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + lv_xml_node_ridx_tg = lc_xml_node_ridx_tg. + lv_syindex = sy-index. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_tg WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_sheet_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_xml_node_ridx_tg ). + lo_element_root->append_child( new_child = lo_element ). + ENDDO. + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 3 TO lv_size. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_shared_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_shared_tg ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + method CREATE_XL_SHAREDSTRINGS. + + +** Constant node name + DATA: lc_xml_node_sst TYPE string VALUE 'sst', + lc_xml_node_si TYPE string VALUE 'si', + lc_xml_node_t TYPE string VALUE 't', + " Node attributes + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_uniquecount TYPE string VALUE 'uniqueCount', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, + ls_shared_string TYPE zexcel_s_shared_string, + lv_value TYPE string, + lv_count_str TYPE string, + lv_uniquecount_str TYPE string, + lv_sytabix TYPE sytabix, + lv_count TYPE i, + lv_uniquecount TYPE i. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data, + <fs_sheet_string> TYPE zexcel_s_shared_string. + +********************************************************************** +* STEP 1: Collect strings from each worksheet + lo_iterator = excel->get_worksheets_iterator( ). + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. + ENDWHILE. + + DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content + + DESCRIBE TABLE lt_cell_data LINES lv_count. + MOVE lv_count TO lv_count_str. + + SHIFT lv_count_str RIGHT DELETING TRAILING space. + SHIFT lv_count_str LEFT DELETING LEADING space. + + SORT lt_cell_data BY cell_value. + DELETE ADJACENT DUPLICATES FROM lt_cell_data COMPARING cell_value. + + DESCRIBE TABLE lt_cell_data LINES lv_uniquecount. + MOVE lv_uniquecount TO lv_uniquecount_str. + + SHIFT lv_uniquecount_str RIGHT DELETING TRAILING space. + SHIFT lv_uniquecount_str LEFT DELETING LEADING space. + + LOOP AT lt_cell_data ASSIGNING <fs_sheet_content>. + lv_sytabix = sy-tabix - 1. + MOVE lv_sytabix TO ls_shared_string-string_no. + MOVE <fs_sheet_content>-cell_value TO ls_shared_string-string_value. + MOVE <fs_sheet_content>-data_type TO ls_shared_string-string_type. + APPEND ls_shared_string TO shared_strings. + ENDLOOP. + + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_sst + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_count + value = lv_count_str ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_uniquecount + value = lv_uniquecount_str ). + +********************************************************************** +* STEP 4: Create subnode + LOOP AT shared_strings ASSIGNING <fs_sheet_string>. + lo_element = lo_document->create_simple_element( name = lc_xml_node_si + parent = lo_document ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_t + parent = lo_document ). + if <fs_sheet_string>-string_type EQ 's_leading_blanks'. + lo_sub_element->set_attribute( name = 'space' namespace = 'xml' value = 'preserve' ). + endif. + lo_sub_element->set_value( value = <fs_sheet_string>-string_value ). + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + ENDLOOP. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + + + + METHOD create_xl_sheet. +*--------------------------------------------------------------------* +* issue #330 - Adding ColorScale conditional formatting +* - Ivan Femia, 2014-08-25 +*--------------------------------------------------------------------* + + TYPES: BEGIN OF colors, + colorrgb TYPE zexcel_color, + END OF colors. + +*--------------------------------------------------------------------* +* issue #237 - Error writing column-style +* - Stefan Schmöcker, 2012-11-01 +*--------------------------------------------------------------------* + + TYPES: BEGIN OF cfvo, + value TYPE zexcel_conditional_value, + type TYPE zexcel_conditional_type, + END OF cfvo. + +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 1 - start +*--------------------------------------------------------------------* + TYPES: BEGIN OF lty_table_area, + left TYPE i, + right TYPE i, + top TYPE i, + bottom TYPE i, + END OF lty_table_area. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 1 - end +*--------------------------------------------------------------------* + + +** Constant node name + DATA: lc_xml_node_worksheet TYPE string VALUE 'worksheet', + lc_xml_node_sheetpr TYPE string VALUE 'sheetPr', + lc_xml_node_tabcolor TYPE string VALUE 'tabColor', + lc_xml_node_outlinepr TYPE string VALUE 'outlinePr', + lc_xml_node_dimension TYPE string VALUE 'dimension', + lc_xml_node_sheetviews TYPE string VALUE 'sheetViews', + lc_xml_node_sheetview TYPE string VALUE 'sheetView', + lc_xml_node_selection TYPE string VALUE 'selection', + lc_xml_node_pane TYPE string VALUE 'pane', + lc_xml_node_sheetformatpr TYPE string VALUE 'sheetFormatPr', + lc_xml_node_cols TYPE string VALUE 'cols', + lc_xml_node_col TYPE string VALUE 'col', + lc_xml_node_sheetdata TYPE string VALUE 'sheetData', + lc_xml_node_row TYPE string VALUE 'row', + lc_xml_node_c TYPE string VALUE 'c', + lc_xml_node_v TYPE string VALUE 'v', + lc_xml_node_f TYPE string VALUE 'f', + lc_xml_node_sheetprotection TYPE string VALUE 'sheetProtection', + lc_xml_node_pagemargins TYPE string VALUE 'pageMargins', + lc_xml_node_pagesetup TYPE string VALUE 'pageSetup', + lc_xml_node_pagesetuppr TYPE string VALUE 'pageSetUpPr', + lc_xml_node_condformatting TYPE string VALUE 'conditionalFormatting', + lc_xml_node_cfrule TYPE string VALUE 'cfRule', + lc_xml_node_color TYPE string VALUE 'color', " Databar by Albert Lladanosa + lc_xml_node_databar TYPE string VALUE 'dataBar', " Databar by Albert Lladanosa + lc_xml_node_colorscale TYPE string VALUE 'colorScale', + lc_xml_node_iconset TYPE string VALUE 'iconSet', + lc_xml_node_cfvo TYPE string VALUE 'cfvo', + lc_xml_node_formula TYPE string VALUE 'formula', + lc_xml_node_datavalidations TYPE string VALUE 'dataValidations', + lc_xml_node_datavalidation TYPE string VALUE 'dataValidation', + lc_xml_node_formula1 TYPE string VALUE 'formula1', + lc_xml_node_formula2 TYPE string VALUE 'formula2', + lc_xml_node_mergecell TYPE string VALUE 'mergeCell', + lc_xml_node_mergecells TYPE string VALUE 'mergeCells', + lc_xml_node_drawing TYPE string VALUE 'drawing', + lc_xml_node_headerfooter TYPE string VALUE 'headerFooter', + lc_xml_node_oddheader TYPE string VALUE 'oddHeader', + lc_xml_node_oddfooter TYPE string VALUE 'oddFooter', + lc_xml_node_evenheader TYPE string VALUE 'evenHeader', + lc_xml_node_evenfooter TYPE string VALUE 'evenFooter', + lc_xml_node_autofilter TYPE string VALUE 'autoFilter', + lc_xml_node_filtercolumn TYPE string VALUE 'filterColumn', + lc_xml_node_filters TYPE string VALUE 'filters', + lc_xml_node_filter TYPE string VALUE 'filter', + " Node attributes + lc_xml_attr_ref TYPE string VALUE 'ref', + lc_xml_attr_summarybelow TYPE string VALUE 'summaryBelow', + lc_xml_attr_summaryright TYPE string VALUE 'summaryRight', + lc_xml_attr_tabselected TYPE string VALUE 'tabSelected', + lc_xml_attr_showzeros TYPE string VALUE 'showZeros', + lc_xml_attr_zoomscale TYPE string VALUE 'zoomScale', + lc_xml_attr_zoomscalenormal TYPE string VALUE 'zoomScaleNormal', + lc_xml_attr_zoomscalepageview TYPE string VALUE 'zoomScalePageLayoutView', + lc_xml_attr_zoomscalesheetview TYPE string VALUE 'zoomScaleSheetLayoutView', + lc_xml_attr_workbookviewid TYPE string VALUE 'workbookViewId', + lc_xml_attr_showgridlines TYPE string VALUE 'showGridLines', + lc_xml_attr_gridlines TYPE string VALUE 'gridLines', + lc_xml_attr_showrowcolheaders TYPE string VALUE 'showRowColHeaders', + lc_xml_attr_activecell TYPE string VALUE 'activeCell', + lc_xml_attr_sqref TYPE string VALUE 'sqref', + lc_xml_attr_min TYPE string VALUE 'min', + lc_xml_attr_max TYPE string VALUE 'max', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_width TYPE string VALUE 'width', + lc_xml_attr_defaultwidth TYPE string VALUE '9.10', + lc_xml_attr_style TYPE string VALUE 'style', + lc_xml_attr_true TYPE string VALUE 'true', + lc_xml_attr_bestfit TYPE string VALUE 'bestFit', + lc_xml_attr_customheight TYPE string VALUE 'customHeight', + lc_xml_attr_customwidth TYPE string VALUE 'customWidth', + lc_xml_attr_collapsed TYPE string VALUE 'collapsed', + lc_xml_attr_defaultrowheight TYPE string VALUE 'defaultRowHeight', + lc_xml_attr_defaultcolwidth TYPE string VALUE 'defaultColWidth', + lc_xml_attr_outlinelevelrow TYPE string VALUE 'x14ac:outlineLevelRow', + lc_xml_attr_outlinelevelcol TYPE string VALUE 'x14ac:outlineLevelCol', + lc_xml_attr_outlinelevel TYPE string VALUE 'outlineLevel', + lc_xml_attr_r TYPE string VALUE 'r', + lc_xml_attr_s TYPE string VALUE 's', + lc_xml_attr_spans TYPE string VALUE 'spans', + lc_xml_attr_t TYPE string VALUE 't', + lc_xml_attr_password TYPE string VALUE 'password', + lc_xml_attr_sheet TYPE string VALUE 'sheet', + lc_xml_attr_objects TYPE string VALUE 'objects', + lc_xml_attr_scenarios TYPE string VALUE 'scenarios', + lc_xml_attr_autofilter TYPE string VALUE 'autoFilter', + lc_xml_attr_deletecolumns TYPE string VALUE 'deleteColumns', + lc_xml_attr_deleterows TYPE string VALUE 'deleteRows', + lc_xml_attr_formatcells TYPE string VALUE 'formatCells', + lc_xml_attr_formatcolumns TYPE string VALUE 'formatColumns', + lc_xml_attr_formatrows TYPE string VALUE 'formatRows', + lc_xml_attr_insertcolumns TYPE string VALUE 'insertColumns', + lc_xml_attr_inserthyperlinks TYPE string VALUE 'insertHyperlinks', + lc_xml_attr_insertrows TYPE string VALUE 'insertRows', + lc_xml_attr_pivottables TYPE string VALUE 'pivotTables', + lc_xml_attr_selectlockedcells TYPE string VALUE 'selectLockedCells', + lc_xml_attr_selectunlockedcell TYPE string VALUE 'selectUnlockedCells', + lc_xml_attr_sort TYPE string VALUE 'sort', + lc_xml_attr_left TYPE string VALUE 'left', + lc_xml_attr_right TYPE string VALUE 'right', + lc_xml_attr_top TYPE string VALUE 'top', + lc_xml_attr_bottom TYPE string VALUE 'bottom', + lc_xml_attr_header TYPE string VALUE 'header', + lc_xml_attr_footer TYPE string VALUE 'footer', + lc_xml_attr_type TYPE string VALUE 'type', + lc_xml_attr_iconset TYPE string VALUE 'iconSet', + lc_xml_attr_showvalue TYPE string VALUE 'showValue', + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_attr_dxfid TYPE string VALUE 'dxfId', + lc_xml_attr_priority TYPE string VALUE 'priority', + lc_xml_attr_operator TYPE string VALUE 'operator', + lc_xml_attr_allowblank TYPE string VALUE 'allowBlank', + lc_xml_attr_showinputmessage TYPE string VALUE 'showInputMessage', + lc_xml_attr_showerrormessage TYPE string VALUE 'showErrorMessage', + lc_xml_attr_errortitle TYPE string VALUE 'errorTitle', + lc_xml_attr_error TYPE string VALUE 'error', + lc_xml_attr_prompttitle TYPE string VALUE 'promptTitle', + lc_xml_attr_prompt TYPE string VALUE 'prompt', + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_blackandwhite TYPE string VALUE 'blackAndWhite', + lc_xml_attr_cellcomments TYPE string VALUE 'cellComments', + lc_xml_attr_copies TYPE string VALUE 'copies', + lc_xml_attr_draft TYPE string VALUE 'draft', + lc_xml_attr_errors TYPE string VALUE 'errors', + lc_xml_attr_firstpagenumber TYPE string VALUE 'firstPageNumber', + lc_xml_attr_fittopage TYPE string VALUE 'fitToPage', + lc_xml_attr_fittoheight TYPE string VALUE 'fitToHeight', + lc_xml_attr_fittowidth TYPE string VALUE 'fitToWidth', + lc_xml_attr_horizontaldpi TYPE string VALUE 'horizontalDpi', + lc_xml_attr_orientation TYPE string VALUE 'orientation', + lc_xml_attr_pageorder TYPE string VALUE 'pageOrder', + lc_xml_attr_paperheight TYPE string VALUE 'paperHeight', + lc_xml_attr_papersize TYPE string VALUE 'paperSize', + lc_xml_attr_paperwidth TYPE string VALUE 'paperWidth', + lc_xml_attr_scale TYPE string VALUE 'scale', + lc_xml_attr_usefirstpagenumber TYPE string VALUE 'useFirstPageNumber', + lc_xml_attr_useprinterdefaults TYPE string VALUE 'usePrinterDefaults', + lc_xml_attr_verticaldpi TYPE string VALUE 'verticalDpi', + lc_xml_attr_differentoddeven TYPE string VALUE 'differentOddEven', + lc_xml_attr_colid TYPE string VALUE 'colId', + lc_xml_attr_filtermode TYPE string VALUE 'filterMode', + lc_xml_attr_tabcolor_rgb TYPE string VALUE 'rgb', + lc_xml_attr_tabcolor_theme TYPE string VALUE 'theme', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + lc_xml_node_comp_ns TYPE string VALUE 'http://schemas.openxmlformats.org/markup-compatibility/2006', + lc_xml_node_comp_pref TYPE string VALUE 'x14ac', + lc_xml_node_ig_ns TYPE string VALUE 'http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element_2 TYPE REF TO if_ixml_element, + lo_element_3 TYPE REF TO if_ixml_element, + lo_element_4 TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_table TYPE REF TO zcl_excel_table, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, + default_col_dimension TYPE REF TO zcl_excel_worksheet_columndime, + default_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + + DATA: lv_value TYPE string, + lt_range_merge TYPE string_table, + lv_merge TYPE string, + lv_column_p TYPE zexcel_cell_column_alpha, + lv_column TYPE zexcel_cell_column, + lv_cell_value TYPE zexcel_cell_value, + lv_style_guid TYPE zexcel_cell_style, + lv_flag TYPE c, + ls_databar TYPE zexcel_conditional_databar, " Databar by Albert Lladanosa + ls_colorscale TYPE zexcel_conditional_colorscale, + ls_iconset TYPE zexcel_conditional_iconset, + ls_cellis TYPE zexcel_conditional_cellis, + ls_expression TYPE zexcel_conditional_expression, + lt_cfvo TYPE TABLE OF cfvo, + ls_cfvo TYPE cfvo, + lt_colors TYPE TABLE OF colors, + ls_colors TYPE colors, + lv_cell_row_s TYPE string, + ls_last_row TYPE zexcel_s_cell_data, + ls_style_mapping TYPE zexcel_s_styles_mapping, + lv_freeze_cell_row TYPE zexcel_cell_row, + lv_freeze_cell_column TYPE zexcel_cell_column, + lv_freeze_cell_column_alpha TYPE zexcel_cell_column_alpha, + column_dimensions TYPE zexcel_t_worksheet_columndime, + row_dimensions TYPE zexcel_t_worksheet_rowdimensio, + ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, + lv_relation_id TYPE i VALUE 0, + outline_level_row TYPE i VALUE 0, + outline_level_col TYPE i VALUE 0, + col_count TYPE int4, + merge_count TYPE int4, + write_current_row TYPE boolean, + lt_values TYPE zexcel_t_autofilter_values, + ls_values TYPE zexcel_s_autofilter_values, + lv_guid TYPE uuid, + lo_autofilters TYPE REF TO zcl_excel_autofilters, + lo_autofilter TYPE REF TO zcl_excel_autofilter, + l_autofilter_hidden TYPE flag, + ls_area TYPE zexcel_s_autofilter_area, + lv_ref TYPE string, + lv_style_index TYPE i. " issue #237 + + + FIELD-SYMBOLS: <ls_sheet_content> TYPE zexcel_s_cell_data, + <fs_range_merge> LIKE LINE OF lt_range_merge, + <column_dimension> TYPE zexcel_s_worksheet_columndime, + <row_dimension> TYPE zexcel_s_worksheet_rowdimensio. + +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 2 - start +*--------------------------------------------------------------------* + DATA: lt_table_areas TYPE SORTED TABLE OF lty_table_area WITH NON-UNIQUE KEY left right top bottom, + ls_table_area LIKE LINE OF lt_table_areas. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Declarations 2 - end +*--------------------------------------------------------------------* + + + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_worksheet + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_r_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:mc' + value = lc_xml_node_comp_ns ). + lo_element_root->set_attribute_ns( name = 'mc:Ignorable' + value = lc_xml_node_comp_pref ). + lo_element_root->set_attribute_ns( name = 'xmlns:x14ac' + value = lc_xml_node_ig_ns ). + + +********************************************************************** +* STEP 4: Create subnodes + " sheetPr + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetpr + parent = lo_document ). + " TODO tabColor + IF io_worksheet->tabcolor IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_tabcolor + parent = lo_element ). +* Theme not supported yet - start with RGB + lv_value = io_worksheet->tabcolor-rgb. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). + ENDIF. + + " outlinePr + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_outlinepr + parent = lo_document ). + + lv_value = io_worksheet->zif_excel_sheet_properties~summarybelow. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_summarybelow + value = lv_value ). + + lv_value = io_worksheet->zif_excel_sheet_properties~summaryright. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_summaryright + value = lv_value ). + + lo_element->append_child( new_child = lo_element_2 ). + + IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_pagesetuppr + parent = lo_document ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_fittopage + value = `1` ). + lo_element->append_child( new_child = lo_element_2 ). " pageSetupPr node + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). + + " dimension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_dimension + parent = lo_document ). + lv_value = io_worksheet->get_dimension_range( ). + lo_element->set_attribute_ns( name = lc_xml_attr_ref + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " sheetViews node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetviews + parent = lo_document ). + " sheetView node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_sheetview + parent = lo_document ). + IF io_worksheet->zif_excel_sheet_properties~show_zeros EQ abap_false. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showzeros + value = '0' ). + ENDIF. + IF iv_active = abap_true + OR io_worksheet->zif_excel_sheet_properties~selected EQ abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_tabselected + value = '0' ). + ENDIF. + " Zoom scale + IF io_worksheet->zif_excel_sheet_properties~zoomscale GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscale + value = lv_value ). + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_normal GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_normal LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_normal = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_normal. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalenormal + value = lv_value ). + ENDIF. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_pagelayoutview. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalepageview + value = lv_value ). + ENDIF. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview NE 0. + IF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview GT 400. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 400. + ELSEIF io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview LT 10. + io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview = 10. + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_properties~zoomscale_sheetlayoutview. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_zoomscalesheetview + value = lv_value ). + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_workbookviewid + value = '0' ). + " showGridLines attribute + IF io_worksheet->show_gridlines = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showgridlines + value = '0' ). + ENDIF. + + " showRowColHeaders attribute + IF io_worksheet->show_rowcolheaders = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders + value = '1' ). + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showrowcolheaders + value = '0' ). + ENDIF. + + + " freeze panes + io_worksheet->get_freeze_cell( IMPORTING ep_row = lv_freeze_cell_row + ep_column = lv_freeze_cell_column ). + + IF lv_freeze_cell_row IS NOT INITIAL AND lv_freeze_cell_column IS NOT INITIAL. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_pane + parent = lo_element_2 ). + + IF lv_freeze_cell_row > 1. + lv_value = lv_freeze_cell_row - 1. + CONDENSE lv_value. + lo_element_3->set_attribute_ns( name = 'ySplit' + value = lv_value ). + ENDIF. + + IF lv_freeze_cell_column > 1. + lv_value = lv_freeze_cell_column - 1. + CONDENSE lv_value. + lo_element_3->set_attribute_ns( name = 'xSplit' + value = lv_value ). + ENDIF. + + lv_freeze_cell_column_alpha = zcl_excel_common=>convert_column2alpha( ip_column = lv_freeze_cell_column ). + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_freeze_cell_row ). + CONCATENATE lv_freeze_cell_column_alpha lv_value INTO lv_value. + lo_element_3->set_attribute_ns( name = 'topLeftCell' + value = lv_value ). + + lo_element_3->set_attribute_ns( name = 'activePane' + value = 'bottomRight' ). + + lo_element_3->set_attribute_ns( name = 'state' + value = 'frozen' ). + + lo_element_2->append_child( new_child = lo_element_3 ). + ENDIF. + " selection node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_selection + parent = lo_document ). + lv_value = io_worksheet->get_active_cell( ). + lo_element_3->set_attribute_ns( name = lc_xml_attr_activecell + value = lv_value ). + + lo_element_3->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). + + lo_element_2->append_child( new_child = lo_element_3 ). " sheetView node + + lo_element->append_child( new_child = lo_element_2 ). " sheetView node + + lo_element_root->append_child( new_child = lo_element ). " sheetViews node + + + column_dimensions[] = io_worksheet->get_column_dimensions( ). + " Calculate col + IF NOT column_dimensions IS INITIAL. + io_worksheet->calculate_column_widths( ). + column_dimensions[] = io_worksheet->get_column_dimensions( ). + ENDIF. + row_dimensions[] = io_worksheet->get_row_dimensions( ). + " sheetFormatPr node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetformatpr + parent = lo_document ). + " defaultRowHeight + default_row_dimension = io_worksheet->get_default_row_dimension( ). + IF default_row_dimension IS BOUND. + IF default_row_dimension->get_row_height( ) >= 0. + lo_element->set_attribute_ns( name = lc_xml_attr_customheight + value = lc_xml_attr_true ). + lv_value = default_row_dimension->get_row_height( ). + ELSE. + lv_value = '12.75'. + ENDIF. + ELSE. + lv_value = '12.75'. + ENDIF. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_defaultrowheight + value = lv_value ). + " defaultColWidth + default_col_dimension = io_worksheet->get_default_column_dimension( ). + IF default_col_dimension IS BOUND. + IF default_col_dimension->get_width( ) >= 0. + lv_value = default_col_dimension->get_width( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_defaultcolwidth + value = lv_value ). + ENDIF. + ENDIF. + " outlineLevelRow + LOOP AT row_dimensions ASSIGNING <row_dimension>. + IF <row_dimension>-row_dimension->get_outline_level( ) > outline_level_row. + outline_level_row = <row_dimension>-row_dimension->get_outline_level( ). + ENDIF. + ENDLOOP. + lv_value = outline_level_row. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_outlinelevelrow + value = lv_value ). + " outlineLevelCol + LOOP AT column_dimensions ASSIGNING <column_dimension>. + IF <column_dimension>-column_dimension->get_outline_level( ) > outline_level_col. + outline_level_col = <column_dimension>-column_dimension->get_outline_level( ). + ENDIF. + ENDLOOP. + lv_value = outline_level_col. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_outlinelevelcol + value = lv_value ). +* lv_value = 0. +* SHIFT lv_value RIGHT DELETING TRAILING space. +* SHIFT lv_value LEFT DELETING LEADING space. +* lo_element->set_attribute_ns( name = lc_xml_attr_dydescent +* value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). " sheetFormatPr node + + IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL OR NOT column_dimensions IS INITIAL. + " cols node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cols + parent = lo_document ). + " This code have to be enhanced in order to manage also column style properties + " Now it is an out/out + IF NOT column_dimensions IS INITIAL. + LOOP AT column_dimensions ASSIGNING <column_dimension>. + " col node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col + parent = lo_document ). + lv_value = <column_dimension>-column_dimension->get_column_index( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_min + value = lv_value ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_max + value = lv_value ). + " Width + IF <column_dimension>-column_dimension->get_width( ) < 0. + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lc_xml_attr_defaultwidth ). + ELSE. + lv_value = <column_dimension>-column_dimension->get_width( ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lv_value ). + ENDIF. + " Column visibility + IF <column_dimension>-column_dimension->get_visible( ) = abap_false. + lo_element_2->set_attribute_ns( name = lc_xml_attr_hidden + value = lc_xml_attr_true ). + ENDIF. + " Auto size? + IF <column_dimension>-column_dimension->get_auto_size( ) = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_bestfit + value = lc_xml_attr_true ). + ENDIF. + " Custom width? + IF default_col_dimension IS BOUND. + IF <column_dimension>-column_dimension->get_width( ) + <> default_col_dimension->get_width( ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth + value = lc_xml_attr_true ). + + ENDIF. + ELSE. + lo_element_2->set_attribute_ns( name = lc_xml_attr_customwidth + value = lc_xml_attr_true ). + ENDIF. + " Collapsed + IF <column_dimension>-column_dimension->get_collapsed( ) = abap_true. + lo_element_2->set_attribute_ns( name = lc_xml_attr_collapsed + value = lc_xml_attr_true ). + ENDIF. + " outlineLevel + IF <column_dimension>-column_dimension->get_outline_level( ) > 0. + lv_value = <column_dimension>-column_dimension->get_outline_level( ). + + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_outlinelevel + value = lv_value ). + ENDIF. + " Style +* lv_value = <column_dimension>-column_dimension->get_xf_index( ). "del issue #157 - set column style + lv_style_guid = <column_dimension>-column_dimension->get_column_style_guid( ). "ins issue #157 - set column style +* lv_value = me->excel->get_style_index_in_styles( lv_style_guid ). "del issue #237 + CLEAR ls_style_mapping. + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. +* lv_style_index = ls_style_mapping-style. "del issue #295 +* IF lv_style_index > 0. "ins issue #237 - del issue #295 +* lv_value = lv_style_index - 1. "ins issue #237 - del issue #295 + IF sy-subrc = 0. "ins issue #295 + lv_value = ls_style_mapping-style. "ins issue #295 + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. "ins issue #237 + + lo_element->append_child( new_child = lo_element_2 ). " col node + ENDLOOP. +* ELSE. "del issue #157 - set sheet style ( add missing columns +* IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL. "del issue #157 - set sheet style ( add missing columns +* Begin of insertion issue #157 - set sheet style ( add missing columns + ENDIF. +* Always pass through this coding + IF io_worksheet->zif_excel_sheet_properties~get_style( ) IS NOT INITIAL. + DATA: lts_sorted_columns TYPE SORTED TABLE OF zexcel_cell_column WITH UNIQUE KEY table_line. + TYPES: BEGIN OF ty_missing_columns, + first_column TYPE zexcel_cell_column, + last_column TYPE zexcel_cell_column, + END OF ty_missing_columns. + DATA: t_missing_columns TYPE STANDARD TABLE OF ty_missing_columns WITH NON-UNIQUE DEFAULT KEY, + missing_column LIKE LINE OF t_missing_columns. + +* First collect columns that were already handled before. The rest has to be inserted now + LOOP AT column_dimensions ASSIGNING <column_dimension>. + lv_column = zcl_excel_common=>convert_column2int( <column_dimension>-column ). + INSERT lv_column INTO TABLE lts_sorted_columns. + ENDLOOP. + +* Now find all columns that were missing so far + missing_column-first_column = 1. + LOOP AT lts_sorted_columns INTO lv_column. + IF lv_column > missing_column-first_column. + missing_column-last_column = lv_column - 1. + APPEND missing_column TO t_missing_columns. + ENDIF. + missing_column-first_column = lv_column + 1. + ENDLOOP. + missing_column-last_column = zcl_excel_common=>c_excel_sheet_max_col. + APPEND missing_column TO t_missing_columns. +* Now apply stylesetting ( and other defaults - I copy it from above. Whoever programmed that seems to know what to do :o) + LOOP AT t_missing_columns INTO missing_column. +* End of insertion issue #157 - set column style + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_col + parent = lo_document ). +* lv_value = zcl_excel_common=>c_excel_sheet_min_col."del issue #157 - set sheet style ( add missing columns + lv_value = missing_column-first_column. "ins issue #157 - set sheet style ( add missing columns + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_min + value = lv_value ). +* lv_value = zcl_excel_common=>c_excel_sheet_max_col."del issue #157 - set sheet style ( add missing columns + lv_value = missing_column-last_column. "ins issue #157 - set sheet style ( add missing columns + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_max + value = lv_value ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_width + value = lc_xml_attr_defaultwidth ). + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. + lv_value = ls_style_mapping-style. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). " col node + ENDLOOP. "ins issue #157 - set sheet style ( add missing columns + + ENDIF. + lo_element_root->append_child( new_child = lo_element ). " cols node + ENDIF. + " sheetData node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetdata + parent = lo_document ). + " Get column count + col_count = io_worksheet->get_highest_column( ). + " Get autofilter + lv_guid = io_worksheet->get_guid( ) . + lo_autofilters = excel->get_autofilters_reference( ). + lo_autofilter = lo_autofilters->get( i_sheet_guid = lv_guid ) . + IF lo_autofilter IS BOUND. + lt_values = lo_autofilter->get_values( ) . + ls_area = lo_autofilter->get_filter_area( ) . + l_autofilter_hidden = abap_true. " First defautl is not showing + ENDIF. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 1 - start +*--------------------------------------------------------------------* +* Build table to hold all table-areas attached to this sheet + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_iterator->if_object_collection_iterator~get_next( ). + ls_table_area-left = zcl_excel_common=>convert_column2int( lo_table->settings-top_left_column ). + ls_table_area-right = lo_table->get_right_column_integer( ). + ls_table_area-top = lo_table->settings-top_left_row. + ls_table_area-bottom = lo_table->get_bottom_row_integer( ). + INSERT ls_table_area INTO TABLE lt_table_areas. + ENDWHILE. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 1 - end +*--------------------------------------------------------------------* + + LOOP AT io_worksheet->sheet_content ASSIGNING <ls_sheet_content>. + READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. + IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. + CLEAR l_autofilter_hidden. + ENDIF. + CLEAR ls_style_mapping. + IF ls_last_row-cell_row NE <ls_sheet_content>-cell_row. + IF lo_autofilter IS BOUND. + IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header + ls_area-row_end < ls_last_row-cell_row . + CLEAR l_autofilter_hidden. + ENDIF. + ELSE. + CLEAR l_autofilter_hidden. + ENDIF. + IF ls_last_row-cell_row IS NOT INITIAL. + " Row visibility of previos row. + IF row_dimension->get_visible( ) = abap_false OR + l_autofilter_hidden = abap_true. + lo_element_2->set_attribute_ns( name = 'hidden' value = 'true'). + ENDIF. + lo_element->append_child( new_child = lo_element_2 ). " row node + ENDIF. + " Add new row + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_row + parent = lo_document ). + " r + lv_value = <ls_sheet_content>-cell_row. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + + lo_element_2->set_attribute_ns( name = lc_xml_attr_r + value = lv_value ). + " Spans + lv_value = col_count. + CONCATENATE '1:' lv_value INTO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_spans + value = lv_value ). + row_dimension = io_worksheet->get_row_dimension( <ls_sheet_content>-cell_row ). + " Do we need the row dimension attributes? + IF row_dimension->get_row_height( ) >= 0 OR + row_dimension->get_collapsed( ) = abap_true OR + row_dimension->get_outline_level( ) > 0 OR + row_dimension->get_xf_index( ) <> 0 OR + l_autofilter_hidden = abap_true. + " Row dimensions + IF row_dimension->get_row_height( ) >= 0. + lo_element_2->set_attribute_ns( name = 'customHeight' value = '1'). + lv_value = row_dimension->get_row_height( ). + lo_element_2->set_attribute_ns( name = 'ht' value = lv_value ). + ENDIF. + " Collapsed + IF row_dimension->get_collapsed( ) = abap_true. + lo_element_2->set_attribute_ns( name = 'collapsed' value = 'true'). + ENDIF. + " Outline level + IF row_dimension->get_outline_level( ) > 0. + lv_value = row_dimension->get_outline_level( ). + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = 'outlineLevel' value = lv_value ). + ENDIF. + " Style + IF row_dimension->get_xf_index( ) <> 0. + lv_value = row_dimension->get_xf_index( ). + lo_element_2->set_attribute_ns( name = 's' value = lv_value ). + lo_element_2->set_attribute_ns( name = 'customFormat' value = '1'). + ENDIF. + ENDIF. + l_autofilter_hidden = abap_true. " First default is not showing + ENDIF. + + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_c + parent = lo_document ). + + lo_element_3->set_attribute_ns( name = lc_xml_attr_r + value = <ls_sheet_content>-cell_coords ). + +* begin of change issue #157 - allow column cellstyle +* if no cellstyle is set, look into column, then into sheet + IF <ls_sheet_content>-cell_style IS NOT INITIAL. + lv_style_guid = <ls_sheet_content>-cell_style. + ELSE. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 2 - start +*--------------------------------------------------------------------* +* Check if cell in any of the table areas + LOOP AT lt_table_areas TRANSPORTING NO FIELDS WHERE top <= <ls_sheet_content>-cell_row + AND bottom >= <ls_sheet_content>-cell_row + AND left <= <ls_sheet_content>-cell_column + AND right >= <ls_sheet_content>-cell_column. + EXIT. + ENDLOOP. + IF sy-subrc = 0. + CLEAR lv_style_guid. " No style --> EXCEL will use built-in-styles as declared in the tables-section + ELSE. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 2 - end +*--------------------------------------------------------------------* + lv_column_p = zcl_excel_common=>convert_column2alpha( <ls_sheet_content>-cell_column ). + READ TABLE column_dimensions WITH KEY column = lv_column_p ASSIGNING <column_dimension>. + IF sy-subrc = 0. + lv_style_guid = <column_dimension>-column_dimension->get_column_style_guid( ). + IF lv_style_guid IS INITIAL. + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. + ELSE. + lv_style_guid = io_worksheet->zif_excel_sheet_properties~get_style( ). + ENDIF. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 3 - start +*--------------------------------------------------------------------* + ENDIF. +*--------------------------------------------------------------------* +* issue #220 - If cell in tables-area don't use default from row or column or sheet - Coding 3 - end +*--------------------------------------------------------------------* + ENDIF. +* IF <ls_sheet_content>-cell_style IS NOT INITIAL. +* READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = <ls_sheet_content>-cell_style. + IF lv_style_guid IS NOT INITIAL. + READ TABLE styles_mapping INTO ls_style_mapping WITH KEY guid = lv_style_guid. +* end of change issue #157 - allow column cellstyles + lv_value = ls_style_mapping-style. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_3->set_attribute_ns( name = lc_xml_attr_s + value = lv_value ). + ENDIF. + + " For cells with formula ignore the value - Excel will calculate it + IF <ls_sheet_content>-cell_formula IS NOT INITIAL. + " fomula node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_f + parent = lo_document ). + lv_value = <ls_sheet_content>-cell_formula. + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " fomula node + ELSEIF <ls_sheet_content>-cell_value IS NOT INITIAL. "cell can have just style or formula + IF <ls_sheet_content>-data_type IS NOT INITIAL. + IF <ls_sheet_content>-data_type EQ 's_leading_blanks'. + lo_element_3->set_attribute_ns( name = lc_xml_attr_t + value = 's' ). + ELSE. + lo_element_3->set_attribute_ns( name = lc_xml_attr_t + value = <ls_sheet_content>-data_type ). + ENDIF. + ENDIF. + + " value node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_v + parent = lo_document ). + + IF <ls_sheet_content>-data_type EQ 's' or <ls_sheet_content>-data_type EQ 's_leading_blanks'. + lv_value = me->get_shared_string_index( <ls_sheet_content>-cell_value ). + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + ELSE. + lv_value = <ls_sheet_content>-cell_value. + CONDENSE lv_value. + lo_element_4->set_value( value = lv_value ). + ENDIF. + + lo_element_3->append_child( new_child = lo_element_4 ). " value node + ENDIF. + + lo_element_2->append_child( new_child = lo_element_3 ). " column node + ls_last_row = <ls_sheet_content>. + ENDLOOP. + IF sy-subrc = 0. + READ TABLE lt_values INTO ls_values WITH KEY column = ls_last_row-cell_column. + IF sy-subrc = 0 AND ls_values-value = ls_last_row-cell_value. + CLEAR l_autofilter_hidden. + ENDIF. + IF lo_autofilter IS BOUND. + IF ls_area-row_start >= ls_last_row-cell_row OR " One less for header + ls_area-row_end < ls_last_row-cell_row . + CLEAR l_autofilter_hidden. + ENDIF. + ELSE. + CLEAR l_autofilter_hidden. + ENDIF. + " Row visibility of previos row. + IF row_dimension->get_visible( ) = abap_false OR + l_autofilter_hidden = abap_true. + lo_element_2->set_attribute_ns( name = 'hidden' value = 'true'). + ENDIF. + lo_element->append_child( new_child = lo_element_2 ). " row node + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). " sheetData node + + IF lo_autofilter IS BOUND. +* Create node autofilter + lo_element = lo_document->create_simple_element( name = lc_xml_node_autofilter + parent = lo_document ). + lv_ref = lo_autofilter->get_filter_range( ) . + CONDENSE lv_ref NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_ref + value = lv_ref ). + lt_values = lo_autofilter->get_values( ) . + IF lt_values IS NOT INITIAL. +* If we filter we need to set the filter mode to 1. + lo_element_2 = lo_document->find_from_name( name = lc_xml_node_sheetpr ). + lo_element_2->set_attribute_ns( name = lc_xml_attr_filtermode + value = '1' ). +* Create node filtercolumn + CLEAR lv_column. + LOOP AT lt_values INTO ls_values. + IF ls_values-column <> lv_column. + IF lv_column IS NOT INITIAL. + lo_element_2->append_child( new_child = lo_element_3 ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_filtercolumn + parent = lo_element ). + lv_column = ls_values-column - lo_autofilter->filter_area-col_start. + lv_value = lv_column. + CONDENSE lv_value NO-GAPS. + lo_element_2->set_attribute_ns( name = lc_xml_attr_colid + value = lv_value ). + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_filters + parent = lo_element_2 ). + lv_column = ls_values-column. + ENDIF. + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_filter + parent = lo_element_3 ). + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = ls_values-value ). + lo_element_3->append_child( new_child = lo_element_4 ). " value node + ENDLOOP. + lo_element_2->append_child( new_child = lo_element_3 ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + IF io_worksheet->zif_excel_sheet_protection~protected EQ abap_true. + " sheetProtection node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheetprotection + parent = lo_document ). + MOVE io_worksheet->zif_excel_sheet_protection~password TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_password + value = lv_value ). + ENDIF. + lv_value = io_worksheet->zif_excel_sheet_protection~auto_filter. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_autofilter + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~delete_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_deletecolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~delete_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_deleterows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatcells + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatcolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~format_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_formatrows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_columns. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_insertcolumns + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_hyperlinks. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_inserthyperlinks + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~insert_rows. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_insertrows + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~objects. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_objects + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~pivot_tables. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_pivottables + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~scenarios. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_scenarios + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~select_locked_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_selectlockedcells + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~select_unlocked_cells. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_selectunlockedcell + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~sheet. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_sheet + value = lv_value ). + lv_value = io_worksheet->zif_excel_sheet_protection~sort. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_sort + value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + " Merged cells + lt_range_merge = io_worksheet->get_merge( ). + IF lt_range_merge IS NOT INITIAL. + lo_element = lo_document->create_simple_element( name = lc_xml_node_mergecells + parent = lo_document ). + DESCRIBE TABLE lt_range_merge LINES merge_count. + lv_value = merge_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + LOOP AT lt_range_merge ASSIGNING <fs_range_merge>. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_mergecell + parent = lo_document ). + + lo_element_2->set_attribute_ns( name = lc_xml_attr_ref + value = <fs_range_merge> ). + lo_element->append_child( new_child = lo_element_2 ). + lo_element_root->append_child( new_child = lo_element ). + io_worksheet->delete_merge( ). + ENDLOOP. + ENDIF. + + " Conditional formatting node + lo_iterator = io_worksheet->get_cond_styles_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style_conditional ?= lo_iterator->if_object_collection_iterator~get_next( ). + IF lo_style_conditional->rule IS INITIAL. + CONTINUE. + ENDIF. + lo_element = lo_document->create_simple_element( name = lc_xml_node_condformatting + parent = lo_document ). + lv_value = lo_style_conditional->get_dimension_range( ) . + lo_element->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). + + " cfRule node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_cfrule + parent = lo_document ). + lv_value = lo_style_conditional->rule. + lo_element_2->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = lo_style_conditional->priority. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_2->set_attribute_ns( name = lc_xml_attr_priority + value = lv_value ). + + CASE lo_style_conditional->rule. + " Start >> Databar by Albert Lladanosa + WHEN zcl_excel_style_conditional=>c_rule_databar. + + ls_databar = lo_style_conditional->mode_databar. + + CLEAR lt_cfvo. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_databar + parent = lo_document ). + + MOVE ls_databar-cfvo1_value TO ls_cfvo-value. + MOVE ls_databar-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + MOVE ls_databar-cfvo2_value TO ls_cfvo-value. + MOVE ls_databar-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + LOOP AT lt_cfvo INTO ls_cfvo. + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color + parent = lo_document ). + lv_value = ls_databar-colorrgb. + lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). + + lo_element_3->append_child( new_child = lo_element_4 ). " color node + + lo_element_2->append_child( new_child = lo_element_3 ). " databar node + " End << Databar by Albert Lladanosa + WHEN zcl_excel_style_conditional=>c_rule_colorscale. + + ls_colorscale = lo_style_conditional->mode_colorscale. + + CLEAR: lt_cfvo, lt_colors. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_colorscale + parent = lo_document ). + + MOVE ls_colorscale-cfvo1_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + MOVE ls_colorscale-cfvo2_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + MOVE ls_colorscale-cfvo3_value TO ls_cfvo-value. + MOVE ls_colorscale-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + + APPEND ls_colorscale-colorrgb1 TO lt_colors. + APPEND ls_colorscale-colorrgb2 TO lt_colors. + APPEND ls_colorscale-colorrgb3 TO lt_colors. + + LOOP AT lt_cfvo INTO ls_cfvo. + + IF ls_cfvo IS INITIAL. + CONTINUE. + ENDIF. + + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + LOOP AT lt_colors INTO ls_colors. + + IF ls_colors IS INITIAL. + CONTINUE. + ENDIF. + + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_color + parent = lo_document ). + lv_value = ls_colors-colorrgb. + lo_element_4->set_attribute_ns( name = lc_xml_attr_tabcolor_rgb + value = lv_value ). + + lo_element_3->append_child( new_child = lo_element_4 ). " color node + ENDLOOP. + + lo_element_2->append_child( new_child = lo_element_3 ). " databar node + WHEN zcl_excel_style_conditional=>c_rule_iconset. + + ls_iconset = lo_style_conditional->mode_iconset. + + CLEAR lt_cfvo. + " iconset node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_iconset + parent = lo_document ). + IF ls_iconset-iconset NE zcl_excel_style_conditional=>c_iconset_3trafficlights. + lv_value = ls_iconset-iconset. + lo_element_3->set_attribute_ns( name = lc_xml_attr_iconset + value = lv_value ). + ENDIF. + + " Set the showValue attribute + lv_value = ls_iconset-showvalue. + lo_element_3->set_attribute_ns( name = lc_xml_attr_showvalue + value = lv_value ). + + CASE ls_iconset-iconset. + WHEN zcl_excel_style_conditional=>c_iconset_3trafficlights2 OR + zcl_excel_style_conditional=>c_iconset_3arrows OR + zcl_excel_style_conditional=>c_iconset_3arrowsgray OR + zcl_excel_style_conditional=>c_iconset_3flags OR + zcl_excel_style_conditional=>c_iconset_3signs OR + zcl_excel_style_conditional=>c_iconset_3symbols OR + zcl_excel_style_conditional=>c_iconset_3symbols2 OR + zcl_excel_style_conditional=>c_iconset_3trafficlights OR + zcl_excel_style_conditional=>c_iconset_3trafficlights2. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN zcl_excel_style_conditional=>c_iconset_4arrows OR + zcl_excel_style_conditional=>c_iconset_4arrowsgray OR + zcl_excel_style_conditional=>c_iconset_4rating OR + zcl_excel_style_conditional=>c_iconset_4redtoblack OR + zcl_excel_style_conditional=>c_iconset_4trafficlights. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN zcl_excel_style_conditional=>c_iconset_5arrows OR + zcl_excel_style_conditional=>c_iconset_5arrowsgray OR + zcl_excel_style_conditional=>c_iconset_5quarters OR + zcl_excel_style_conditional=>c_iconset_5rating. + MOVE ls_iconset-cfvo1_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo1_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo2_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo2_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo3_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo3_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo4_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo4_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + MOVE ls_iconset-cfvo5_value TO ls_cfvo-value. + MOVE ls_iconset-cfvo5_type TO ls_cfvo-type. + APPEND ls_cfvo TO lt_cfvo. + WHEN OTHERS. + CLEAR lt_cfvo. + ENDCASE. + + LOOP AT lt_cfvo INTO ls_cfvo. + " cfvo node + lo_element_4 = lo_document->create_simple_element( name = lc_xml_node_cfvo + parent = lo_document ). + lv_value = ls_cfvo-type. + lo_element_4->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + lv_value = ls_cfvo-value. + lo_element_4->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_3->append_child( new_child = lo_element_4 ). " cfvo node + ENDLOOP. + + + lo_element_2->append_child( new_child = lo_element_3 ). " iconset node + WHEN zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis = lo_style_conditional->mode_cellis. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_cellis-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid + value = lv_value ). + lv_value = ls_cellis-operator. + lo_element_2->set_attribute_ns( name = lc_xml_attr_operator + value = lv_value ). + " formula node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula + parent = lo_document ). + lv_value = ls_cellis-formula. + lo_element_3->set_value( value = lv_value ). + lo_element_2->append_child( new_child = lo_element_3 ). " formula node + WHEN zcl_excel_style_conditional=>c_rule_expression. + ls_expression = lo_style_conditional->mode_expression. + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY guid = ls_expression-cell_style. + lv_value = ls_style_cond_mapping-dxf. + CONDENSE lv_value. + lo_element_2->set_attribute_ns( name = lc_xml_attr_dxfid + value = lv_value ). + " formula node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula + parent = lo_document ). + lv_value = ls_expression-formula. + lo_element_3->set_value( value = lv_value ). + lo_element_2->append_child( new_child = lo_element_3 ). " formula node + ENDCASE. + + lo_element->append_child( new_child = lo_element_2 ). " cfRule node + + lo_element_root->append_child( new_child = lo_element ). " Conditional formatting node + ENDWHILE. + + IF io_worksheet->get_data_validations_size( ) GT 0. + " dataValidations node + lo_element = lo_document->create_simple_element( name = lc_xml_node_datavalidations + parent = lo_document ). + " Conditional formatting node + lo_iterator = io_worksheet->get_data_validations_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_data_validation ?= lo_iterator->if_object_collection_iterator~get_next( ). + " dataValidation node + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_datavalidation + parent = lo_document ). + lv_value = lo_data_validation->type. + lo_element_2->set_attribute_ns( name = lc_xml_attr_type + value = lv_value ). + IF NOT lo_data_validation->operator IS INITIAL. + lv_value = lo_data_validation->operator. + lo_element_2->set_attribute_ns( name = lc_xml_attr_operator + value = lv_value ). + ENDIF. + IF lo_data_validation->allowblank EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_allowblank + value = lv_value ). + IF lo_data_validation->showinputmessage EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showinputmessage + value = lv_value ). + IF lo_data_validation->showerrormessage EQ abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_showerrormessage + value = lv_value ). + IF NOT lo_data_validation->errortitle IS INITIAL. + lv_value = lo_data_validation->errortitle. + lo_element_2->set_attribute_ns( name = lc_xml_attr_errortitle + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->error IS INITIAL. + lv_value = lo_data_validation->error. + lo_element_2->set_attribute_ns( name = lc_xml_attr_error + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->prompttitle IS INITIAL. + lv_value = lo_data_validation->prompttitle. + lo_element_2->set_attribute_ns( name = lc_xml_attr_prompttitle + value = lv_value ). + ENDIF. + IF NOT lo_data_validation->prompt IS INITIAL. + lv_value = lo_data_validation->prompt. + lo_element_2->set_attribute_ns( name = lc_xml_attr_prompt + value = lv_value ). + ENDIF. + lv_cell_row_s = lo_data_validation->cell_row. + CONDENSE lv_cell_row_s. + CONCATENATE lo_data_validation->cell_column lv_cell_row_s INTO lv_value. + IF lo_data_validation->cell_row_to IS NOT INITIAL. + lv_cell_row_s = lo_data_validation->cell_row_to. + CONDENSE lv_cell_row_s. + CONCATENATE lv_value ':' lo_data_validation->cell_column_to lv_cell_row_s INTO lv_value. + ENDIF. + lo_element_2->set_attribute_ns( name = lc_xml_attr_sqref + value = lv_value ). + " formula1 node + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula1 + parent = lo_document ). + lv_value = lo_data_validation->formula1. + lo_element_3->set_value( value = lv_value ). + + lo_element_2->append_child( new_child = lo_element_3 ). " formula1 node + " formula2 node + IF NOT lo_data_validation->formula2 IS INITIAL. + lo_element_3 = lo_document->create_simple_element( name = lc_xml_node_formula2 + parent = lo_document ). + lv_value = lo_data_validation->formula2. + lo_element_3->set_value( value = lv_value ). + + lo_element_2->append_child( new_child = lo_element_3 ). " formula2 node + ENDIF. + + lo_element->append_child( new_child = lo_element_2 ). " dataValidation node + ENDWHILE. + lo_element_root->append_child( new_child = lo_element ). " dataValidations node + ENDIF. + + " Hyperlinks + DATA: lv_hyperlinks_count TYPE i, + lo_link TYPE REF TO zcl_excel_hyperlink. + + lv_hyperlinks_count = io_worksheet->get_hyperlinks_size( ). + IF lv_hyperlinks_count > 0. + lo_element = lo_document->create_simple_element( name = 'hyperlinks' + parent = lo_document ). + + lo_iterator = io_worksheet->get_hyperlinks_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_link ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lo_element_2 = lo_document->create_simple_element( name = 'hyperlink' + parent = lo_element ). + + lv_value = lo_link->get_ref( ). + lo_element_2->set_attribute_ns( name = 'ref' + value = lv_value ). + + IF lo_link->is_internal( ) = abap_true. + lv_value = lo_link->get_url( ). + lo_element_2->set_attribute_ns( name = 'location' + value = lv_value ). + ELSE. + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element_2->set_attribute_ns( name = 'r:id' + value = lv_value ). + + ENDIF. + + lo_element->append_child( new_child = lo_element_2 ). + ENDWHILE. + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + + " PrintOptions + IF io_worksheet->print_gridlines = abap_true OR + io_worksheet->sheet_setup->vertical_centered = abap_true OR + io_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_element = lo_document->create_simple_element( name = 'printOptions' + parent = lo_document ). + + IF io_worksheet->print_gridlines = abap_true. + lo_element->set_attribute_ns( name = lc_xml_attr_gridlines + value = 'true' ). + ENDIF. + + IF io_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_element->set_attribute_ns( name = 'horizontalCentered' + value = 'true' ). + ENDIF. + + IF io_worksheet->sheet_setup->vertical_centered = abap_true. + lo_element->set_attribute_ns( name = 'verticalCentered' + value = 'true' ). + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + " pageMargins node + lo_element = lo_document->create_simple_element( name = lc_xml_node_pagemargins + parent = lo_document ). + + lv_value = io_worksheet->sheet_setup->margin_left. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_left + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_right. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_right + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_top. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_top + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_bottom. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_bottom + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_header. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_header + value = lv_value ). + lv_value = io_worksheet->sheet_setup->margin_footer. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_footer + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). " pageMargins node + +* pageSetup node + lo_element = lo_document->create_simple_element( name = lc_xml_node_pagesetup + parent = lo_document ). + + IF io_worksheet->sheet_setup->black_and_white IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_blackandwhite + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->cell_comments IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_cellcomments + value = io_worksheet->sheet_setup->cell_comments ). + ENDIF. + + IF io_worksheet->sheet_setup->copies IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->copies. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_copies + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->draft IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_draft + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->errors IS NOT INITIAL. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_errors + value = io_worksheet->sheet_setup->errors ). + ENDIF. + + IF io_worksheet->sheet_setup->first_page_number IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->first_page_number. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_firstpagenumber + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->fit_to_page IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->fit_to_height. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_fittoheight + value = lv_value ). + lv_value = io_worksheet->sheet_setup->fit_to_width. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_fittowidth + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->horizontal_dpi IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->horizontal_dpi. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_horizontaldpi + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->orientation IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->orientation. + lo_element->set_attribute_ns( name = lc_xml_attr_orientation + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->page_order IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_pageorder + value = io_worksheet->sheet_setup->page_order ). + ENDIF. + + IF io_worksheet->sheet_setup->paper_height IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_height. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_paperheight + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->paper_size IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_size. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_papersize + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->paper_width IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->paper_width. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_paperwidth + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->scale IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->scale. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_scale + value = lv_value ). + ENDIF. + + IF io_worksheet->sheet_setup->use_first_page_num IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_usefirstpagenumber + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->use_printer_defaults IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_useprinterdefaults + value = `1` ). + ENDIF. + + IF io_worksheet->sheet_setup->vertical_dpi IS NOT INITIAL. + lv_value = io_worksheet->sheet_setup->vertical_dpi. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_verticaldpi + value = lv_value ). + ENDIF. + + lo_element_root->append_child( new_child = lo_element ). " pageSetup node + +* { headerFooter necessary? > + IF io_worksheet->sheet_setup->odd_header IS NOT INITIAL + OR io_worksheet->sheet_setup->odd_footer IS NOT INITIAL + OR io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_headerfooter + parent = lo_document ). + + " Different header/footer for odd/even pages? + IF io_worksheet->sheet_setup->diff_oddeven_headerfooter = abap_true. + lo_element->set_attribute_ns( name = lc_xml_attr_differentoddeven + value = '1' ). + ENDIF. + + " OddHeader + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_header = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddheader + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " OddFooter + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_odd_footer = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_oddfooter + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " evenHeader + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_header = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenheader + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + " evenFooter + CLEAR: lv_value. + io_worksheet->sheet_setup->get_header_footer_string( IMPORTING ep_even_footer = lv_value ) . + IF lv_value IS NOT INITIAL. + lo_element_2 = lo_document->create_simple_element( name = lc_xml_node_evenfooter + parent = lo_document ). + lo_element_2->set_value( value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + ENDIF. + + + lo_element_root->append_child( new_child = lo_element ). " headerFooter + + ENDIF. + +* drawing + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + + lo_drawings = io_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lo_element = lo_document->create_simple_element( name = lc_xml_node_drawing + parent = lo_document ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute( name = 'r:id' + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + +* tables + DATA lv_table_count TYPE i. + + lv_table_count = io_worksheet->get_tables_size( ). + IF lv_table_count > 0. + lo_element = lo_document->create_simple_element( name = 'tableParts' + parent = lo_document ). + lv_value = lv_table_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = 'count' + value = lv_value ). + + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element_2 = lo_document->create_simple_element( name = 'tablePart' + parent = lo_element ). + lo_element_2->set_attribute_ns( name = 'r:id' + value = lv_value ). + lo_element->append_child( new_child = lo_element_2 ). + + ENDWHILE. + + lo_element_root->append_child( new_child = lo_element ). + + ENDIF. + + + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + +ENDMETHOD. + + + + + + method CREATE_XL_SHEET_RELS. + + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + lc_xml_attr_target_mode TYPE string VALUE 'TargetMode', + lc_xml_val_external TYPE string VALUE 'External', + " Node namespace + lc_xml_node_rels_ns TYPE string VALUE 'http://schemas.openxmlformats.org/package/2006/relationships', + lc_xml_node_rid_table_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/table', + lc_xml_node_rid_printer_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/printerSettings', + lc_xml_node_rid_drawing_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing', + lc_xml_node_rid_link_tp TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lo_link TYPE REF TO zcl_excel_hyperlink. + + DATA: lv_value TYPE string, + lv_relation_id TYPE i, + lv_index_str TYPE string. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_relationships + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_rels_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + " Add sheet Relationship nodes here + lv_relation_id = 0. + lo_iterator = io_worksheet->get_hyperlinks_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_link ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_link_tp ). + + lv_value = lo_link->get_url( ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_target_mode + value = lc_xml_val_external ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + +* drawing + DATA: lo_drawings TYPE REF TO zcl_excel_drawings. + + lo_drawings = io_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_drawing_tp ). + + lv_index_str = iv_drawing_index. + CONDENSE lv_index_str NO-GAPS. + MOVE me->c_xl_drawings TO lv_value. + REPLACE 'xl' WITH '..' INTO lv_value. + REPLACE '#' WITH lv_index_str INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + lo_iterator = io_worksheet->get_tables_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_iterator->if_object_collection_iterator~get_next( ). + ADD 1 TO lv_relation_id. + + lv_value = lv_relation_id. + CONDENSE lv_value. + CONCATENATE 'rId' lv_value INTO lv_value. + + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_table_tp ). + + lv_value = lo_table->get_name( ). + CONCATENATE '../tables/' lv_value '.xml' INTO lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDWHILE. + +* IF io_worksheet->get_print_settings( )->is_empty( ) = abap_false. +* ADD 1 TO lv_relation_id. +* lv_value = lv_relation_id. +* CONDENSE lv_value. +* CONCATENATE 'rId' lv_value INTO lv_value. +* +* lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship +* parent = lo_document ). +* lo_element->set_attribute_ns( name = lc_xml_attr_id +* value = lv_value ). +* lo_element->set_attribute_ns( name = lc_xml_attr_type +* value = lc_xml_node_rid_printer_tp ). +* +* lv_index_str = iv_printer_index. +* CONDENSE lv_index_str NO-GAPS. +* MOVE me->c_xl_printersettings TO lv_value. +* REPLACE 'xl' WITH '..' INTO lv_value. +* REPLACE '#' WITH lv_index_str INTO lv_value. +* lo_element->set_attribute_ns( name = lc_xml_attr_target +* value = lv_value ). +* +* lo_element_root->append_child( new_child = lo_element ). +* ENDIF. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + METHOD create_xl_styles. + + +** Constant node name + CONSTANTS: lc_xml_node_stylesheet TYPE string VALUE 'styleSheet', + " font + lc_xml_node_fonts TYPE string VALUE 'fonts', + lc_xml_node_font TYPE string VALUE 'font', + lc_xml_node_b TYPE string VALUE 'b', "bold + lc_xml_node_i TYPE string VALUE 'i', "italic + lc_xml_node_u TYPE string VALUE 'u', "underline + lc_xml_node_strike TYPE string VALUE 'strike', "strikethrough + lc_xml_node_sz TYPE string VALUE 'sz', + lc_xml_node_color TYPE string VALUE 'color', + lc_xml_node_name TYPE string VALUE 'name', + lc_xml_node_family TYPE string VALUE 'family', + lc_xml_node_scheme TYPE string VALUE 'scheme', + " fill + lc_xml_node_fills TYPE string VALUE 'fills', + lc_xml_node_fill TYPE string VALUE 'fill', + lc_xml_node_patternfill TYPE string VALUE 'patternFill', + lc_xml_node_fgcolor TYPE string VALUE 'fgColor', + lc_xml_node_bgcolor TYPE string VALUE 'bgColor', + lc_xml_node_gradientfill TYPE string VALUE 'gradientFill', + lc_xml_node_stop TYPE string VALUE 'stop', + " borders + lc_xml_node_borders TYPE string VALUE 'borders', + lc_xml_node_border TYPE string VALUE 'border', + lc_xml_node_left TYPE string VALUE 'left', + lc_xml_node_right TYPE string VALUE 'right', + lc_xml_node_top TYPE string VALUE 'top', + lc_xml_node_bottom TYPE string VALUE 'bottom', + lc_xml_node_diagonal TYPE string VALUE 'diagonal', + " numfmt + lc_xml_node_numfmts TYPE string VALUE 'numFmts', + lc_xml_node_numfmt TYPE string VALUE 'numFmt', + " Styles + lc_xml_node_cellstylexfs TYPE string VALUE 'cellStyleXfs', + lc_xml_node_xf TYPE string VALUE 'xf', + lc_xml_node_cellxfs TYPE string VALUE 'cellXfs', + lc_xml_node_cellstyles TYPE string VALUE 'cellStyles', + lc_xml_node_cellstyle TYPE string VALUE 'cellStyle', + lc_xml_node_dxfs TYPE string VALUE 'dxfs', + lc_xml_node_dxf TYPE string VALUE 'dxf', + lc_xml_node_tablestyles TYPE string VALUE 'tableStyles', + " Colors + lc_xml_node_colors TYPE string VALUE 'colors', + lc_xml_node_indexedcolors TYPE string VALUE 'indexedColors', + lc_xml_node_rgbcolor TYPE string VALUE 'rgbColor', + lc_xml_node_mrucolors TYPE string VALUE 'mruColors', + " Alignment + lc_xml_node_alignment TYPE string VALUE 'alignment', + " Protection + lc_xml_node_protection TYPE string VALUE 'protection', + " Node attributes + lc_xml_attr_count TYPE string VALUE 'count', + lc_xml_attr_val TYPE string VALUE 'val', + lc_xml_attr_theme TYPE string VALUE 'theme', + lc_xml_attr_rgb TYPE string VALUE 'rgb', + lc_xml_attr_indexed TYPE string VALUE 'indexed', + lc_xml_attr_tint TYPE string VALUE 'tint', + lc_xml_attr_style TYPE string VALUE 'style', + lc_xml_attr_position TYPE string VALUE 'position', + lc_xml_attr_degree TYPE string VALUE 'degree', + lc_xml_attr_patterntype TYPE string VALUE 'patternType', + lc_xml_attr_numfmtid TYPE string VALUE 'numFmtId', + lc_xml_attr_fontid TYPE string VALUE 'fontId', + lc_xml_attr_fillid TYPE string VALUE 'fillId', + lc_xml_attr_borderid TYPE string VALUE 'borderId', + lc_xml_attr_xfid TYPE string VALUE 'xfId', + lc_xml_attr_applynumberformat TYPE string VALUE 'applyNumberFormat', + lc_xml_attr_applyprotection TYPE string VALUE 'applyProtection', + lc_xml_attr_applyfont TYPE string VALUE 'applyFont', + lc_xml_attr_applyfill TYPE string VALUE 'applyFill', + lc_xml_attr_applyborder TYPE string VALUE 'applyBorder', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_builtinid TYPE string VALUE 'builtinId', + lc_xml_attr_defaulttablestyle TYPE string VALUE 'defaultTableStyle', + lc_xml_attr_defaultpivotstyle TYPE string VALUE 'defaultPivotStyle', + lc_xml_attr_applyalignment TYPE string VALUE 'applyAlignment', + lc_xml_attr_horizontal TYPE string VALUE 'horizontal', + lc_xml_attr_formatcode TYPE string VALUE 'formatCode', + lc_xml_attr_vertical TYPE string VALUE 'vertical', + lc_xml_attr_wraptext TYPE string VALUE 'wrapText', + lc_xml_attr_textrotation TYPE string VALUE 'textRotation', + lc_xml_attr_shrinktofit TYPE string VALUE 'shrinkToFit', + lc_xml_attr_indent TYPE string VALUE 'indent', + lc_xml_attr_locked TYPE string VALUE 'locked', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_diagonalup TYPE string VALUE 'diagonalUp', + lc_xml_attr_diagonaldown TYPE string VALUE 'diagonalDown', + " Node namespace + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element_fonts TYPE REF TO if_ixml_element, + lo_element_font TYPE REF TO if_ixml_element, + lo_element_fills TYPE REF TO if_ixml_element, + lo_element_fill TYPE REF TO if_ixml_element, + lo_element_borders TYPE REF TO if_ixml_element, + lo_element_border TYPE REF TO if_ixml_element, + lo_element_numfmts TYPE REF TO if_ixml_element, + lo_element_numfmt TYPE REF TO if_ixml_element, + lo_element_cellxfs TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + lo_sub_element_2 TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_iterator2 TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lo_style TYPE REF TO zcl_excel_style. + + + DATA: lt_fonts TYPE zexcel_t_style_font, + ls_font TYPE zexcel_s_style_font, + lt_fills TYPE zexcel_t_style_fill, + ls_fill TYPE zexcel_s_style_fill, + lt_borders TYPE zexcel_t_style_border, + ls_border TYPE zexcel_s_style_border, + lt_numfmts TYPE zexcel_t_style_numfmt, + ls_numfmt TYPE zexcel_s_style_numfmt, + lt_protections TYPE zexcel_t_style_protection, + ls_protection TYPE zexcel_s_style_protection, + lt_alignments TYPE zexcel_t_style_alignment, + ls_alignment TYPE zexcel_s_style_alignment, + lt_cellxfs TYPE zexcel_t_cellxfs, + ls_cellxfs TYPE zexcel_s_cellxfs, + ls_styles_mapping TYPE zexcel_s_styles_mapping, + ls_style_cond_mapping TYPE zexcel_s_styles_cond_mapping, + ls_cellis TYPE zexcel_conditional_cellis, + ls_expression TYPE zexcel_conditional_expression, + lt_colors TYPE zexcel_t_style_color_argb, + ls_color LIKE LINE OF lt_colors. + + DATA: lv_value TYPE string, + lv_dfx_count TYPE i, + lv_fonts_count TYPE i, + lv_fills_count TYPE i, + lv_borders_count TYPE i, + lv_cellxfs_count TYPE i, + lv_index TYPE i, + lv_align_flag TYPE c. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +*********************************************************************** +* STEP 3: Create main node relationships + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_stylesheet + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + +********************************************************************** +* STEP 4: Create subnodes + + lo_element_fonts = lo_document->create_simple_element( name = lc_xml_node_fonts + parent = lo_document ). + + lo_element_fills = lo_document->create_simple_element( name = lc_xml_node_fills + parent = lo_document ). + + lo_element_borders = lo_document->create_simple_element( name = lc_xml_node_borders + parent = lo_document ). + + lo_element_cellxfs = lo_document->create_simple_element( name = lc_xml_node_cellxfs + parent = lo_document ). + + lo_element_numfmts = lo_document->create_simple_element( name = lc_xml_node_numfmts + parent = lo_document ). + + +* Compress styles + lo_iterator = excel->get_styles_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style ?= lo_iterator->if_object_collection_iterator~get_next( ). + ls_font = lo_style->font->get_structure( ). + ls_fill = lo_style->fill->get_structure( ). + ls_border = lo_style->borders->get_structure( ). + ls_alignment = lo_style->alignment->get_structure( ). + ls_protection = lo_style->protection->get_structure( ). + ls_numfmt = lo_style->number_format->get_structure( ). + + CLEAR ls_cellxfs. + + +* Compress fonts + READ TABLE lt_fonts FROM ls_font TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-fontid = sy-tabix. + ELSE. + APPEND ls_font TO lt_fonts. + DESCRIBE TABLE lt_fonts LINES ls_cellxfs-fontid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-fontid. + +* Compress alignment + READ TABLE lt_alignments FROM ls_alignment TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-alignmentid = sy-tabix. + ELSE. + APPEND ls_alignment TO lt_alignments. + DESCRIBE TABLE lt_alignments LINES ls_cellxfs-alignmentid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-alignmentid. + +* Compress fills + READ TABLE lt_fills FROM ls_fill TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-fillid = sy-tabix. + ELSE. + APPEND ls_fill TO lt_fills. + DESCRIBE TABLE lt_fills LINES ls_cellxfs-fillid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-fillid. + +* Compress borders + READ TABLE lt_borders FROM ls_border TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-borderid = sy-tabix. + ELSE. + APPEND ls_border TO lt_borders. + DESCRIBE TABLE lt_borders LINES ls_cellxfs-borderid. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-borderid. + +* Compress protection + IF ls_protection-locked EQ c_on AND ls_protection-hidden EQ c_off. + ls_cellxfs-applyprotection = 0. + ELSE. + READ TABLE lt_protections FROM ls_protection TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-protectionid = sy-tabix. + ELSE. + APPEND ls_protection TO lt_protections. + DESCRIBE TABLE lt_protections LINES ls_cellxfs-protectionid. + ENDIF. + ls_cellxfs-applyprotection = 1. + ENDIF. + SUBTRACT 1 FROM ls_cellxfs-protectionid. + +* Compress number formats + + "----------- + IF ls_numfmt-numfmt NE zcl_excel_style_number_format=>c_format_date_std." and ls_numfmt-NUMFMT ne 'STD_NDEC'. " ALE Changes on going + "--- + IF ls_numfmt IS NOT INITIAL. + + READ TABLE lt_numfmts FROM ls_numfmt TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_cellxfs-numfmtid = sy-tabix. + ELSE. + APPEND ls_numfmt TO lt_numfmts. + DESCRIBE TABLE lt_numfmts LINES ls_cellxfs-numfmtid. + ENDIF. + ADD zcl_excel_common=>c_excel_numfmt_offset TO ls_cellxfs-numfmtid. " Add OXML offset for custom styles + ls_cellxfs-applynumberformat = 1. + ELSE. + ls_cellxfs-applynumberformat = 0. + ENDIF. + "----------- " ALE changes on going + ELSE. + ls_cellxfs-applynumberformat = 1. + IF ls_numfmt-numfmt EQ zcl_excel_style_number_format=>c_format_date_std. + ls_cellxfs-numfmtid = 14. +* elseif ls_numfmt-NUMFMT eq 'STD_NDEC'. +* ls_cellxfs-numfmtid = 2. + ENDIF. + ENDIF. + "--- + + IF ls_cellxfs-fontid NE 0. + ls_cellxfs-applyfont = 1. + ELSE. + ls_cellxfs-applyfont = 0. + ENDIF. + IF ls_cellxfs-alignmentid NE 0. + ls_cellxfs-applyalignment = 1. + ELSE. + ls_cellxfs-applyalignment = 0. + ENDIF. + IF ls_cellxfs-fillid NE 0. + ls_cellxfs-applyfill = 1. + ELSE. + ls_cellxfs-applyfill = 0. + ENDIF. + IF ls_cellxfs-borderid NE 0. + ls_cellxfs-applyborder = 1. + ELSE. + ls_cellxfs-applyborder = 0. + ENDIF. + +* Remap styles + READ TABLE lt_cellxfs FROM ls_cellxfs TRANSPORTING NO FIELDS. + IF sy-subrc EQ 0. + ls_styles_mapping-style = sy-tabix. + ELSE. + APPEND ls_cellxfs TO lt_cellxfs. + DESCRIBE TABLE lt_cellxfs LINES ls_styles_mapping-style. + ENDIF. + SUBTRACT 1 FROM ls_styles_mapping-style. + ls_styles_mapping-guid = lo_style->get_guid( ). + APPEND ls_styles_mapping TO me->styles_mapping. + ENDWHILE. + + " create numfmt elements + LOOP AT lt_numfmts INTO ls_numfmt. + lo_element_numfmt = lo_document->create_simple_element( name = lc_xml_node_numfmt + parent = lo_document ). + lv_value = sy-tabix + zcl_excel_common=>c_excel_numfmt_offset. + CONDENSE lv_value. + lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_numfmtid + value = lv_value ). + lv_value = ls_numfmt-numfmt. +* REPLACE ALL OCCURRENCES OF '.' IN lv_value WITH '\.'. + lo_element_numfmt->set_attribute_ns( name = lc_xml_attr_formatcode + value = lv_value ). + lo_element_numfmts->append_child( new_child = lo_element_numfmt ). + ENDLOOP. + + " create font elements + LOOP AT lt_fonts INTO ls_font. + lo_element_font = lo_document->create_simple_element( name = lc_xml_node_font + parent = lo_document ). + IF ls_font-bold EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_b + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-italic EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_i + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-underline EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_u + parent = lo_document ). + lv_value = ls_font-underline_mode. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + IF ls_font-strikethrough EQ abap_true. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_strike + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + "size + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_sz + parent = lo_document ). + lv_value = ls_font-size. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + "color + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_element_font + is_color = ls_font-color ). + + "name + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_name + parent = lo_document ). + lv_value = ls_font-name. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + "family + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_family + parent = lo_document ). + lv_value = ls_font-family. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + "scheme + IF ls_font-scheme IS NOT INITIAL. + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_scheme + parent = lo_document ). + lv_value = ls_font-scheme. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element ). + ENDIF. + lo_element_fonts->append_child( new_child = lo_element_font ). + ENDLOOP. + + " create fill elements + LOOP AT lt_fills INTO ls_fill. + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill + parent = lo_document ). + "pattern + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_patternfill + parent = lo_document ). + lv_value = ls_fill-filltype. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). + + IF ls_fill-fgcolor-rgb IS INITIAL AND + ls_fill-fgcolor-indexed EQ zcl_excel_style_color=>c_indexed_not_set AND + ls_fill-fgcolor-theme EQ zcl_excel_style_color=>c_theme_not_set AND + ls_fill-fgcolor-tint IS INITIAL AND ls_fill-bgcolor-indexed EQ zcl_excel_style_color=>c_indexed_sys_foreground. + + " bgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). + + ENDIF. + + lo_element_fill->append_child( new_child = lo_sub_element )."pattern + lo_element_fills->append_child( new_child = lo_element_fill ). + ENDLOOP. + + " create border elements + LOOP AT lt_borders INTO ls_border. + lo_element_border = lo_document->create_simple_element( name = lc_xml_node_border + parent = lo_document ). + + IF ls_border-diagonalup IS NOT INITIAL. + lv_value = ls_border-diagonalup. + CONDENSE lv_value. + lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonalup + value = lv_value ). + ENDIF. + + IF ls_border-diagonaldown IS NOT INITIAL. + lv_value = ls_border-diagonaldown. + CONDENSE lv_value. + lo_element_border->set_attribute_ns( name = lc_xml_attr_diagonaldown + value = lv_value ). + ENDIF. + + "left + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_left + parent = lo_document ). + IF ls_border-left_style IS NOT INITIAL. + lv_value = ls_border-left_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-left_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "right + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_right + parent = lo_document ). + IF ls_border-right_style IS NOT INITIAL. + lv_value = ls_border-right_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-right_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "top + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_top + parent = lo_document ). + IF ls_border-top_style IS NOT INITIAL. + lv_value = ls_border-top_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-top_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "bottom + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_bottom + parent = lo_document ). + IF ls_border-bottom_style IS NOT INITIAL. + lv_value = ls_border-bottom_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-bottom_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + + "diagonal + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_diagonal + parent = lo_document ). + IF ls_border-diagonal_style IS NOT INITIAL. + lv_value = ls_border-diagonal_style. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_style + value = lv_value ). + ENDIF. + + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element + is_color = ls_border-diagonal_color ). + + lo_element_border->append_child( new_child = lo_sub_element ). + lo_element_borders->append_child( new_child = lo_element_border ). + ENDLOOP. + + " update attribute "count" + DESCRIBE TABLE lt_fonts LINES lv_fonts_count. + MOVE lv_fonts_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_fonts->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_fills LINES lv_fills_count. + MOVE lv_fills_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_fills->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_borders LINES lv_borders_count. + MOVE lv_borders_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_borders->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + DESCRIBE TABLE lt_cellxfs LINES lv_cellxfs_count. + MOVE lv_cellxfs_count TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element_cellxfs->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + + " Append to root node + lo_element_root->append_child( new_child = lo_element_numfmts ). + lo_element_root->append_child( new_child = lo_element_fonts ). + lo_element_root->append_child( new_child = lo_element_fills ). + lo_element_root->append_child( new_child = lo_element_borders ). + + " cellstylexfs node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstylexfs + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '1' ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_xf + parent = lo_document ). + + lo_sub_element->set_attribute_ns( name = lc_xml_attr_numfmtid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_fontid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_fillid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_borderid + value = c_off ). + + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + + LOOP AT lt_cellxfs INTO ls_cellxfs. + lo_element = lo_document->create_simple_element( name = lc_xml_node_xf + parent = lo_document ). + MOVE ls_cellxfs-numfmtid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_numfmtid + value = lv_value ). + MOVE ls_cellxfs-fontid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_fontid + value = lv_value ). + MOVE ls_cellxfs-fillid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_fillid + value = lv_value ). + MOVE ls_cellxfs-borderid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_borderid + value = lv_value ). + MOVE ls_cellxfs-xfid TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_xfid + value = lv_value ). + IF ls_cellxfs-applynumberformat EQ 1. + MOVE ls_cellxfs-applynumberformat TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applynumberformat + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyfont EQ 1. + MOVE ls_cellxfs-applyfont TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyfont + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyfill EQ 1. + MOVE ls_cellxfs-applyfill TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyfill + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyborder EQ 1. + MOVE ls_cellxfs-applyborder TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyborder + value = lv_value ). + ENDIF. + IF ls_cellxfs-applyalignment EQ 1. " depends on each style not for all the sheet + MOVE ls_cellxfs-applyalignment TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_element->set_attribute_ns( name = lc_xml_attr_applyalignment + value = lv_value ). + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_alignment + parent = lo_document ). + ADD 1 TO ls_cellxfs-alignmentid. "Table index starts from 1 + READ TABLE lt_alignments INTO ls_alignment INDEX ls_cellxfs-alignmentid. + SUBTRACT 1 FROM ls_cellxfs-alignmentid. + IF ls_alignment-horizontal IS NOT INITIAL. + MOVE ls_alignment-horizontal TO lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_horizontal + value = lv_value ). + ENDIF. + IF ls_alignment-vertical IS NOT INITIAL. + MOVE ls_alignment-vertical TO lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_vertical + value = lv_value ). + ENDIF. + IF ls_alignment-wraptext EQ abap_true. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_wraptext + value = c_on ). + ENDIF. + IF ls_alignment-textrotation IS NOT INITIAL. + MOVE ls_alignment-textrotation TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_textrotation + value = lv_value ). + ENDIF. + IF ls_alignment-shrinktofit EQ abap_true. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_shrinktofit + value = c_on ). + ENDIF. + IF ls_alignment-indent IS NOT INITIAL. + MOVE ls_alignment-indent TO lv_value. + SHIFT lv_value RIGHT DELETING TRAILING space. + SHIFT lv_value LEFT DELETING LEADING space. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_indent + value = lv_value ). + ENDIF. + + lo_element->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_cellxfs-applyprotection EQ 1. + MOVE ls_cellxfs-applyprotection TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_applyprotection + value = lv_value ). + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_protection + parent = lo_document ). + ADD 1 TO ls_cellxfs-protectionid. "Table index starts from 1 + READ TABLE lt_protections INTO ls_protection INDEX ls_cellxfs-protectionid. + SUBTRACT 1 FROM ls_cellxfs-protectionid. + IF ls_protection-locked IS NOT INITIAL. + MOVE ls_protection-locked TO lv_value. + CONDENSE lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_locked + value = lv_value ). + ENDIF. + IF ls_protection-hidden IS NOT INITIAL. + MOVE ls_protection-hidden TO lv_value. + CONDENSE lv_value. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_hidden + value = lv_value ). + ENDIF. + lo_element->append_child( new_child = lo_sub_element_2 ). + ENDIF. + lo_element_cellxfs->append_child( new_child = lo_element ). + ENDLOOP. + + lo_element_root->append_child( new_child = lo_element_cellxfs ). + + " cellStyles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_cellstyles + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '1' ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_cellstyle + parent = lo_document ). + + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = 'Normal' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_xfid + value = c_off ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_builtinid + value = c_off ). + + lo_element->append_child( new_child = lo_sub_element ). + lo_element_root->append_child( new_child = lo_element ). + + " dxfs node + lo_element = lo_document->create_simple_element( name = lc_xml_node_dxfs + parent = lo_document ). + + lo_iterator = me->excel->get_worksheets_iterator( ). + " get sheets + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + " Conditional formatting styles into exch sheet + lo_iterator2 = lo_worksheet->get_cond_styles_iterator( ). + WHILE lo_iterator2->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style_conditional ?= lo_iterator2->if_object_collection_iterator~get_next( ). + CASE lo_style_conditional->rule. + WHEN zcl_excel_style_conditional=>c_rule_cellis. + "if style defined + ls_cellis = lo_style_conditional->mode_cellis. + IF ls_cellis-cell_style IS INITIAL. + CONTINUE. + ENDIF. + READ TABLE me->styles_mapping INTO ls_styles_mapping WITH KEY guid = ls_cellis-cell_style. + ADD 1 TO ls_styles_mapping-style. " the numbering starts from 0 + READ TABLE lt_cellxfs INTO ls_cellxfs INDEX ls_styles_mapping-style. + ADD 1 TO ls_cellxfs-fillid. " the numbering starts from 0 + + " Style already mapped? + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY style = ls_styles_mapping-style. + IF sy-subrc EQ 0. + ls_style_cond_mapping-guid = ls_cellis-cell_style. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ELSE. + ls_style_cond_mapping-guid = ls_cellis-cell_style. + ls_style_cond_mapping-style = ls_styles_mapping-style. + ls_style_cond_mapping-dxf = lv_dfx_count. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ADD 1 TO lv_dfx_count. + + " dxf node + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_dxf + parent = lo_document ). + + "Conditional formatting font style correction by Alessandro Iannacci START + lv_index = ls_cellxfs-fontid + 1. + READ TABLE lt_fonts INTO ls_font INDEX lv_index. + IF ls_font IS NOT INITIAL. + lo_element_font = lo_document->create_simple_element( name = lc_xml_node_font + parent = lo_document ). + IF ls_font-bold EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_b + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-italic EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_i + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-underline EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_u + parent = lo_document ). + lv_value = ls_font-underline_mode. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_val + value = lv_value ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + IF ls_font-strikethrough EQ abap_true. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_strike + parent = lo_document ). + lo_element_font->append_child( new_child = lo_sub_element_2 ). + ENDIF. + "color + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_element_font + is_color = ls_font-color ). + lo_sub_element->append_child( new_child = lo_element_font ). + ENDIF. + "---Conditional formatting font style correction by Alessandro Iannacci END + + + READ TABLE lt_fills INTO ls_fill INDEX ls_cellxfs-fillid. + IF ls_fill IS NOT INITIAL. + " fill properties + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill + parent = lo_document ). + "pattern + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_patternfill + parent = lo_document ). + lv_value = ls_fill-filltype. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). + + IF ls_fill-fgcolor-rgb IS INITIAL AND + ls_fill-fgcolor-indexed EQ zcl_excel_style_color=>c_indexed_not_set AND + ls_fill-fgcolor-theme EQ zcl_excel_style_color=>c_theme_not_set AND + ls_fill-fgcolor-tint IS INITIAL AND ls_fill-bgcolor-indexed EQ zcl_excel_style_color=>c_indexed_sys_foreground. + + " bgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). + + ENDIF. + + lo_element_fill->append_child( new_child = lo_sub_element_2 ). "pattern + + lo_sub_element->append_child( new_child = lo_element_fill ). + ENDIF. + ENDIF. + + lo_element->append_child( new_child = lo_sub_element ). + WHEN zcl_excel_style_conditional=>c_rule_expression. + "if style defined + ls_expression = lo_style_conditional->mode_expression. + IF ls_expression-cell_style IS INITIAL. + CONTINUE. + ENDIF. + READ TABLE me->styles_mapping INTO ls_styles_mapping WITH KEY guid = ls_expression-cell_style. + ADD 1 TO ls_styles_mapping-style. " the numbering starts from 0 + READ TABLE lt_cellxfs INTO ls_cellxfs INDEX ls_styles_mapping-style. + ADD 1 TO ls_cellxfs-fillid. " the numbering starts from 0 + + READ TABLE me->styles_cond_mapping INTO ls_style_cond_mapping WITH KEY style = ls_styles_mapping-style. + IF sy-subrc EQ 0. + ls_style_cond_mapping-guid = ls_expression-cell_style. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ELSE. + ls_style_cond_mapping-guid = ls_expression-cell_style. + ls_style_cond_mapping-style = ls_styles_mapping-style. + ls_style_cond_mapping-dxf = lv_dfx_count. + APPEND ls_style_cond_mapping TO me->styles_cond_mapping. + ADD 1 TO lv_dfx_count. + + " dxf node + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_dxf + parent = lo_document ). + + READ TABLE lt_fills INTO ls_fill INDEX ls_cellxfs-fillid. + IF ls_fill IS NOT INITIAL. + " fill properties + lo_element_fill = lo_document->create_simple_element( name = lc_xml_node_fill + parent = lo_document ). + "pattern + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_patternfill + parent = lo_document ). + lv_value = ls_fill-filltype. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_patterntype + value = lv_value ). + " fgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-fgcolor + iv_color_elem_name = lc_xml_node_fgcolor ). + + IF ls_fill-fgcolor-rgb IS INITIAL AND + ls_fill-fgcolor-indexed EQ zcl_excel_style_color=>c_indexed_not_set AND + ls_fill-fgcolor-theme EQ zcl_excel_style_color=>c_theme_not_set AND + ls_fill-fgcolor-tint IS INITIAL AND ls_fill-bgcolor-indexed EQ zcl_excel_style_color=>c_indexed_sys_foreground. + + " bgcolor + create_xl_styles_color_node( + io_document = lo_document + io_parent = lo_sub_element_2 + is_color = ls_fill-bgcolor + iv_color_elem_name = lc_xml_node_bgcolor ). + + ENDIF. + + lo_element_fill->append_child( new_child = lo_sub_element_2 ). "pattern + + lo_sub_element->append_child( new_child = lo_element_fill ). + ENDIF. + ENDIF. + + lo_element->append_child( new_child = lo_sub_element ). + WHEN OTHERS. + CONTINUE. + ENDCASE. + ENDWHILE. + ENDWHILE. + + lv_value = lv_dfx_count. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + + " tableStyles node + lo_element = lo_document->create_simple_element( name = lc_xml_node_tablestyles + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_count + value = '0' ). + lo_element->set_attribute_ns( name = lc_xml_attr_defaulttablestyle + value = zcl_excel_table=>builtinstyle_medium9 ). + lo_element->set_attribute_ns( name = lc_xml_attr_defaultpivotstyle + value = zcl_excel_table=>builtinstyle_pivot_light16 ). + lo_element_root->append_child( new_child = lo_element ). + + "write legacy color palette in case any indexed color was changed + IF excel->legacy_palette->is_modified( ) = abap_true. + lo_element = lo_document->create_simple_element( name = lc_xml_node_colors + parent = lo_document ). + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_indexedcolors + parent = lo_document ). + lo_element->append_child( new_child = lo_sub_element ). + + lt_colors = excel->legacy_palette->get_colors( ). + LOOP AT lt_colors INTO ls_color. + lo_sub_element_2 = lo_document->create_simple_element( name = lc_xml_node_rgbcolor + parent = lo_document ). + lv_value = ls_color. + lo_sub_element_2->set_attribute_ns( name = lc_xml_attr_rgb + value = lv_value ). + lo_sub_element->append_child( new_child = lo_sub_element_2 ). + ENDLOOP. + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + +ENDMETHOD. + + + + + + + METHOD create_xl_styles_color_node. + DATA: lo_sub_element TYPE REF TO if_ixml_element, + lv_value TYPE string. + + CONSTANTS: lc_xml_attr_theme TYPE string VALUE 'theme', + lc_xml_attr_rgb TYPE string VALUE 'rgb', + lc_xml_attr_indexed TYPE string VALUE 'indexed', + lc_xml_attr_tint TYPE string VALUE 'tint'. + + "add node only if at least one attribute is set + CHECK is_color-rgb IS NOT INITIAL OR + is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set OR + is_color-theme <> zcl_excel_style_color=>c_theme_not_set OR + is_color-tint IS NOT INITIAL. + + lo_sub_element = io_document->create_simple_element( + name = iv_color_elem_name + parent = io_parent ). + + IF is_color-rgb IS NOT INITIAL. + lv_value = is_color-rgb. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_rgb + value = lv_value ). + ENDIF. + + IF is_color-indexed <> zcl_excel_style_color=>c_indexed_not_set. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-indexed ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_indexed + value = lv_value ). + ENDIF. + + IF is_color-theme <> zcl_excel_style_color=>c_theme_not_set. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-theme ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_theme + value = lv_value ). + ENDIF. + + IF is_color-tint IS NOT INITIAL. + lv_value = zcl_excel_common=>number_to_excel_string( is_color-tint ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_tint + value = lv_value ). + ENDIF. + + io_parent->append_child( new_child = lo_sub_element ). +ENDMETHOD. + + + + + METHOD create_xl_table. + + DATA: lc_xml_node_table TYPE string VALUE 'table', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'id', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_display_name TYPE string VALUE 'displayName', + lc_xml_attr_ref TYPE string VALUE 'ref', + lc_xml_attr_totals TYPE string VALUE 'totalsRowShown', + " Node namespace + lc_xml_node_table_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element2 TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + + lv_table_name TYPE string, + lv_id TYPE i, + lv_match TYPE i, + lv_syindex TYPE char3, + lv_ref TYPE string, + lv_value TYPE string, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lv_num_columns TYPE i, + ls_fieldcat TYPE zexcel_s_fieldcatalog. + + +********************************************************************** +* STEP 1: Create xml + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node table + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_table + parent = lo_document ). + + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_table_ns ). + + lv_id = io_table->get_id( ). + lv_value = zcl_excel_common=>number_to_excel_string( ip_value = lv_id ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_id + value = lv_value ). + + FIND ALL OCCURRENCES OF REGEX '[^_a-zA-Z0-9]' IN io_table->settings-table_name IGNORING CASE MATCH COUNT lv_match. + IF io_table->settings-table_name IS NOT INITIAL AND lv_match EQ 0. + lv_table_name = io_table->settings-table_name. + ELSE. + lv_table_name = io_table->get_name( ). + ENDIF. + lo_element_root->set_attribute_ns( name = lc_xml_attr_name + value = lv_table_name ). + + lo_element_root->set_attribute_ns( name = lc_xml_attr_display_name + value = lv_table_name ). + + lv_ref = io_table->get_reference( ). + lo_element_root->set_attribute_ns( name = lc_xml_attr_ref + value = lv_ref ). + IF io_table->has_totals( ) = abap_true. + lo_element_root->set_attribute_ns( name = 'totalsRowCount' + value = '1' ). + ELSE. + lo_element_root->set_attribute_ns( name = lc_xml_attr_totals + value = '0' ). + ENDIF. + +********************************************************************** +* STEP 4: Create subnodes + + " autoFilter + IF io_table->settings-nofilters EQ abap_false. + lo_element = lo_document->create_simple_element( name = 'autoFilter' + parent = lo_document ). + + lv_ref = io_table->get_reference( ip_include_totals_row = abap_false ). + lo_element->set_attribute_ns( name = 'ref' + value = lv_ref ). + + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + "columns + lo_element = lo_document->create_simple_element( name = 'tableColumns' + parent = lo_document ). + +* lo_columns = io_table->get_columns( ). + LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. + ADD 1 TO lv_num_columns. + ENDLOOP. + + lv_value = lv_num_columns. + CONDENSE lv_value. + lo_element->set_attribute_ns( name = 'count' + value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). + + LOOP AT io_table->fieldcat INTO ls_fieldcat WHERE dynpfld = abap_true. + lo_element2 = lo_document->create_simple_element_ns( name = 'tableColumn' + parent = lo_element ). + + lv_value = ls_fieldcat-position. + SHIFT lv_value LEFT DELETING LEADING '0'. + lo_element2->set_attribute_ns( name = 'id' + value = lv_value ). + lv_value = ls_fieldcat-scrtext_l. + lo_element2->set_attribute_ns( name = 'name' + value = lv_value ). + + IF ls_fieldcat-totals_function IS NOT INITIAL. + lo_element2->set_attribute_ns( name = 'totalsRowFunction' + value = ls_fieldcat-totals_function ). + ENDIF. + + lo_element->append_child( new_child = lo_element2 ). + ENDLOOP. + + + lo_element = lo_document->create_simple_element( name = 'tableStyleInfo' + parent = lo_element_root ). + + lo_element->set_attribute_ns( name = 'name' + value = io_table->settings-table_style ). + + lo_element->set_attribute_ns( name = 'showFirstColumn' + value = '0' ). + + lo_element->set_attribute_ns( name = 'showLastColumn' + value = '0' ). + + IF io_table->settings-show_row_stripes = abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + + lo_element->set_attribute_ns( name = 'showRowStripes' + value = lv_value ). + + IF io_table->settings-show_column_stripes = abap_true. + lv_value = '1'. + ELSE. + lv_value = '0'. + ENDIF. + + lo_element->set_attribute_ns( name = 'showColumnStripes' + value = lv_value ). + + lo_element_root->append_child( new_child = lo_element ). +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + +ENDMETHOD. + + + + method CREATE_XL_THEME. + + +* @TODO * + + DATA: lv_xl_theme TYPE string, + lv_xl_theme_01 TYPE string, + lv_xl_theme_02 TYPE string, + lv_xl_theme_03 TYPE string, + lv_xl_theme_04 TYPE string, + lv_xl_theme_05 TYPE string, + lv_xl_theme_06 TYPE string, + lv_xl_theme_07 TYPE string, + lv_xl_theme_08 TYPE string, + lv_xl_theme_09 TYPE string, + lv_xl_theme_10 TYPE string, + lv_xl_theme_11 TYPE string, + lv_xl_theme_12 TYPE string, + lv_xl_theme_13 TYPE string, + lv_xl_theme_14 TYPE string, + lv_xl_theme_15 TYPE string, + lv_xl_theme_16 TYPE string, + lv_xl_theme_17 TYPE string, + lv_xl_theme_18 TYPE string, + lv_xl_theme_19 TYPE string, + lv_xl_theme_20 TYPE string, + lv_xl_theme_21 TYPE string, + lv_xl_theme_22 TYPE string, + lv_xl_theme_23 TYPE string, + lv_xl_theme_24 TYPE string, + lv_xl_theme_25 TYPE string, + lv_xl_theme_26 TYPE string, + lv_xl_theme_27 TYPE string, + lv_xl_theme_28 TYPE string, + lv_xl_theme_29 TYPE string, + lv_xl_theme_30 TYPE string, + lv_xl_theme_31 TYPE string, + lv_xl_theme_32 TYPE string. + + lv_xl_theme_01 = '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'. + lv_xl_theme_02 = '<a:theme xmlns:a="http://schemas.openxmlformats.org/drawingml/2006/main" name="Office Theme"><a:themeElements><a:clrScheme name="Office"><a:dk1><a:sysClr val="windowText" lastClr="000000"/></a:dk1><a:lt1><a:sysClr val="window" '. + lv_xl_theme_03 = 'lastClr="FFFFFF"/></a:lt1><a:dk2><a:srgbClr val="1F497D"/></a:dk2><a:lt2><a:srgbClr val="EEECE1"/></a:lt2><a:accent1><a:srgbClr val="4F81BD"/></a:accent1><a:accent2><a:srgbClr val="C0504D"/></a:accent2><a:accent3><a:srgbClr '. + lv_xl_theme_04 = 'val="9BBB59"/></a:accent3><a:accent4><a:srgbClr val="8064A2"/></a:accent4><a:accent5><a:srgbClr val="4BACC6"/></a:accent5><a:accent6><a:srgbClr val="F79646"/></a:accent6><a:hlink><a:srgbClr val="0000FF"/></a:hlink><a:folHlink>'. + lv_xl_theme_05 = '<a:srgbClr val="800080"/></a:folHlink></a:clrScheme><a:fontScheme name="Office"><a:majorFont><a:latin typeface="Cambria"/><a:ea typeface=""/><a:cs typeface=""/>'. + lv_xl_theme_06 = '<a:font script="Arab" typeface="Times New Roman"/><a:font script="Hebr" typeface="Times New Roman"/><a:font script="Thai" '. + lv_xl_theme_07 = 'typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="MoolBoran"/><a:font script="Knda" typeface="Tunga"/><a:font '. + lv_xl_theme_08 = 'script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font script="Tibt" '. + lv_xl_theme_09 = 'typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" '. + lv_xl_theme_10 = 'typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" '. + lv_xl_theme_11 = 'typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Times New Roman"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:majorFont><a:minorFont><a:latin typeface="Calibri"/><a:ea typeface=""/><a:cs typeface=""/>'. + lv_xl_theme_12 = '<a:font script="Arab" typeface="Arial"/><a:font script="Hebr" '. + lv_xl_theme_13 = 'typeface="Arial"/><a:font script="Thai" typeface="Tahoma"/><a:font script="Ethi" typeface="Nyala"/><a:font script="Beng" typeface="Vrinda"/><a:font script="Gujr" typeface="Shruti"/><a:font script="Khmr" typeface="DaunPenh"/><a:font '. + lv_xl_theme_14 = 'script="Knda" typeface="Tunga"/><a:font script="Guru" typeface="Raavi"/><a:font script="Cans" typeface="Euphemia"/><a:font script="Cher" typeface="Plantagenet Cherokee"/><a:font script="Yiii" typeface="Microsoft Yi Baiti"/><a:font '. + lv_xl_theme_15 = 'script="Tibt" typeface="Microsoft Himalaya"/><a:font script="Thaa" typeface="MV Boli"/><a:font script="Deva" typeface="Mangal"/><a:font script="Telu" typeface="Gautami"/><a:font script="Taml" typeface="Latha"/><a:font script="Syrc" '. + lv_xl_theme_16 = 'typeface="Estrangelo Edessa"/><a:font script="Orya" typeface="Kalinga"/><a:font script="Mlym" typeface="Kartika"/><a:font script="Laoo" typeface="DokChampa"/><a:font script="Sinh" typeface="Iskoola Pota"/><a:font script="Mong" '. + lv_xl_theme_17 = 'typeface="Mongolian Baiti"/><a:font script="Viet" typeface="Arial"/><a:font script="Uigh" typeface="Microsoft Uighur"/></a:minorFont></a:fontScheme><a:fmtScheme name="Office"><a:fillStyleLst><a:solidFill><a:schemeClr val="phClr"/>'. + lv_xl_theme_18 = '</a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="50000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="35000"><a:schemeClr val="phClr"><a:tint val="37000"/><a:satMod '. + lv_xl_theme_19 = 'val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:tint val="15000"/><a:satMod val="350000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="1"/></a:gradFill><a:gradFill rotWithShape="1">'. + lv_xl_theme_20 = '<a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:shade val="51000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs pos="80000"><a:schemeClr val="phClr"><a:shade val="93000"/><a:satMod val="130000"/></a:schemeClr></a:gs><a:gs '. + lv_xl_theme_21 = 'pos="100000"><a:schemeClr val="phClr"><a:shade val="94000"/><a:satMod val="135000"/></a:schemeClr></a:gs></a:gsLst><a:lin ang="16200000" scaled="0"/></a:gradFill></a:fillStyleLst><a:lnStyleLst><a:ln w="9525" cap="flat" cmpd="sng" '. + lv_xl_theme_22 = 'algn="ctr"><a:solidFill><a:schemeClr val="phClr"><a:shade val="95000"/><a:satMod val="105000"/></a:schemeClr></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="25400" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr '. + lv_xl_theme_23 = 'val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln><a:ln w="38100" cap="flat" cmpd="sng" algn="ctr"><a:solidFill><a:schemeClr val="phClr"/></a:solidFill><a:prstDash val="solid"/></a:ln></a:lnStyleLst><a:effectStyleLst>'. + lv_xl_theme_24 = '<a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" dist="20000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="38000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst>'. + lv_xl_theme_25 = '<a:outerShdw blurRad="40000" dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst></a:effectStyle><a:effectStyle><a:effectLst><a:outerShdw blurRad="40000" '. + lv_xl_theme_26 = 'dist="23000" dir="5400000" rotWithShape="0"><a:srgbClr val="000000"><a:alpha val="35000"/></a:srgbClr></a:outerShdw></a:effectLst><a:scene3d><a:camera prst="orthographicFront"><a:rot lat="0" lon="0" rev="0"/></a:camera><a:lightRig '. + lv_xl_theme_27 = 'rig="threePt" dir="t"><a:rot lat="0" lon="0" rev="1200000"/></a:lightRig></a:scene3d><a:sp3d><a:bevelT w="63500" h="25400"/></a:sp3d></a:effectStyle></a:effectStyleLst><a:bgFillStyleLst><a:solidFill><a:schemeClr val="phClr"/>'. + lv_xl_theme_28 = '</a:solidFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="40000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="40000"><a:schemeClr val="phClr"><a:tint val="45000"/><a:shade '. + lv_xl_theme_29 = 'val="99000"/><a:satMod val="350000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr val="phClr"><a:shade val="20000"/><a:satMod val="255000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" '. + lv_xl_theme_30 = 't="-80000" r="50000" b="180000"/></a:path></a:gradFill><a:gradFill rotWithShape="1"><a:gsLst><a:gs pos="0"><a:schemeClr val="phClr"><a:tint val="80000"/><a:satMod val="300000"/></a:schemeClr></a:gs><a:gs pos="100000"><a:schemeClr '. + lv_xl_theme_31 = 'val="phClr"><a:shade val="30000"/><a:satMod val="200000"/></a:schemeClr></a:gs></a:gsLst><a:path path="circle"><a:fillToRect l="50000" t="50000" r="50000" b="50000"/></a:path></a:gradFill></a:bgFillStyleLst></a:fmtScheme>'. + lv_xl_theme_32 = '</a:themeElements><a:objectDefaults/><a:extraClrSchemeLst/></a:theme>'. + + + CONCATENATE lv_xl_theme_01 lv_xl_theme_02 lv_xl_theme_03 lv_xl_theme_04 lv_xl_theme_05 lv_xl_theme_06 lv_xl_theme_07 lv_xl_theme_08 lv_xl_theme_09 lv_xl_theme_10 lv_xl_theme_11 lv_xl_theme_12 lv_xl_theme_13 lv_xl_theme_14 lv_xl_theme_15 + lv_xl_theme_16 lv_xl_theme_17 lv_xl_theme_18 lv_xl_theme_19 lv_xl_theme_20 lv_xl_theme_21 lv_xl_theme_22 lv_xl_theme_23 lv_xl_theme_24 lv_xl_theme_25 lv_xl_theme_26 lv_xl_theme_27 lv_xl_theme_28 lv_xl_theme_29 lv_xl_theme_30 + lv_xl_theme_31 lv_xl_theme_32 + INTO lv_xl_theme SEPARATED BY space. + + CALL FUNCTION 'SCMS_STRING_TO_XSTRING' + EXPORTING + text = lv_xl_theme + IMPORTING + buffer = ep_content. + + + endmethod. + + + + method CREATE_XL_WORKBOOK. +*--------------------------------------------------------------------* +* issue #230 - Pimp my Code +* - Stefan Schmöcker, (done) 2012-11-07 +* - ... +* changes: aligning code +* adding comments to explain what we are trying to achieve +*--------------------------------------------------------------------* +* issue#235 - repeat rows/columns +* - Stefan Schmöcker, 2012-12-01 +* changes: correction of pointer to localSheetId +*--------------------------------------------------------------------* + +** Constant node name + DATA: lc_xml_node_workbook TYPE string VALUE 'workbook', + lc_xml_node_fileversion TYPE string VALUE 'fileVersion', + lc_xml_node_workbookpr TYPE string VALUE 'workbookPr', + lc_xml_node_bookviews TYPE string VALUE 'bookViews', + lc_xml_node_workbookview TYPE string VALUE 'workbookView', + lc_xml_node_sheets TYPE string VALUE 'sheets', + lc_xml_node_sheet TYPE string VALUE 'sheet', + lc_xml_node_calcpr TYPE string VALUE 'calcPr', + lc_xml_node_workbookprotection TYPE string VALUE 'workbookProtection', + lc_xml_node_definednames TYPE string VALUE 'definedNames', + lc_xml_node_definedname TYPE string VALUE 'definedName', + " Node attributes + lc_xml_attr_appname TYPE string VALUE 'appName', + lc_xml_attr_lastedited TYPE string VALUE 'lastEdited', + lc_xml_attr_lowestedited TYPE string VALUE 'lowestEdited', + lc_xml_attr_rupbuild TYPE string VALUE 'rupBuild', + lc_xml_attr_themeversion TYPE string VALUE 'defaultThemeVersion', + lc_xml_attr_xwindow TYPE string VALUE 'xWindow', + lc_xml_attr_ywindow TYPE string VALUE 'yWindow', + lc_xml_attr_windowwidth TYPE string VALUE 'windowWidth', + lc_xml_attr_windowheight TYPE string VALUE 'windowHeight', + lc_xml_attr_activetab TYPE string VALUE 'activeTab', + lc_xml_attr_name TYPE string VALUE 'name', + lc_xml_attr_sheetid TYPE string VALUE 'sheetId', + lc_xml_attr_state TYPE string VALUE 'state', + lc_xml_attr_id TYPE string VALUE 'id', + lc_xml_attr_calcid TYPE string VALUE 'calcId', + lc_xml_attr_lockrevision TYPE string VALUE 'lockRevision', + lc_xml_attr_lockstructure TYPE string VALUE 'lockStructure', + lc_xml_attr_lockwindows TYPE string VALUE 'lockWindows', + lc_xml_attr_revisionspassword TYPE string VALUE 'revisionsPassword', + lc_xml_attr_workbookpassword TYPE string VALUE 'workbookPassword', + lc_xml_attr_hidden TYPE string VALUE 'hidden', + lc_xml_attr_localsheetid TYPE string VALUE 'localSheetId', + " Node namespace + lc_r_ns TYPE string VALUE 'r', + lc_xml_node_ns TYPE string VALUE 'http://schemas.openxmlformats.org/spreadsheetml/2006/main', + lc_xml_node_r_ns TYPE string VALUE 'http://schemas.openxmlformats.org/officeDocument/2006/relationships', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_element_root TYPE REF TO if_ixml_element, + lo_element TYPE REF TO if_ixml_element, + lo_element_range TYPE REF TO if_ixml_element, + lo_sub_element TYPE REF TO if_ixml_element, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_iterator_range TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_autofilters TYPE REF TO zcl_excel_autofilters, + lo_autofilter TYPE REF TO zcl_excel_autofilter. + + DATA: lv_xml_node_ridx_id TYPE string, + lv_value TYPE string, + lv_syindex TYPE string, + l_guid TYPE uuid, + lv_active_sheet TYPE zexcel_active_worksheet. + +********************************************************************** +* STEP 1: Create [Content_Types].xml into the root of the ZIP + lo_ixml = cl_ixml=>create( ). + +********************************************************************** +* STEP 2: Set document attributes + lo_encoding = lo_ixml->create_encoding( byte_order = if_ixml_encoding=>co_platform_endian + character_set = 'utf-8' ). + lo_document = lo_ixml->create_document( ). + lo_document->set_encoding( lo_encoding ). + lo_document->set_standalone( abap_true ). + +********************************************************************** +* STEP 3: Create main node + lo_element_root = lo_document->create_simple_element( name = lc_xml_node_workbook + parent = lo_document ). + lo_element_root->set_attribute_ns( name = 'xmlns' + value = lc_xml_node_ns ). + lo_element_root->set_attribute_ns( name = 'xmlns:r' + value = lc_xml_node_r_ns ). + +********************************************************************** +* STEP 4: Create subnode + " fileVersion node + lo_element = lo_document->create_simple_element( name = lc_xml_node_fileversion + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_appname + value = 'xl' ). + lo_element->set_attribute_ns( name = lc_xml_attr_lastedited + value = '4' ). + lo_element->set_attribute_ns( name = lc_xml_attr_lowestedited + value = '4' ). + lo_element->set_attribute_ns( name = lc_xml_attr_rupbuild + value = '4506' ). + lo_element_root->append_child( new_child = lo_element ). + + " fileVersion node + lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookpr + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_themeversion + value = '124226' ). + lo_element_root->append_child( new_child = lo_element ). + + " workbookProtection node + IF me->excel->zif_excel_book_protection~protected EQ abap_true. + lo_element = lo_document->create_simple_element( name = lc_xml_node_workbookprotection + parent = lo_document ). + MOVE me->excel->zif_excel_book_protection~workbookpassword TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_workbookpassword + value = lv_value ). + ENDIF. + MOVE me->excel->zif_excel_book_protection~revisionspassword TO lv_value. + IF lv_value IS NOT INITIAL. + lo_element->set_attribute_ns( name = lc_xml_attr_revisionspassword + value = lv_value ). + ENDIF. + MOVE me->excel->zif_excel_book_protection~lockrevision TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockrevision + value = lv_value ). + MOVE me->excel->zif_excel_book_protection~lockstructure TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockstructure + value = lv_value ). + MOVE me->excel->zif_excel_book_protection~lockwindows TO lv_value. + CONDENSE lv_value NO-GAPS. + lo_element->set_attribute_ns( name = lc_xml_attr_lockwindows + value = lv_value ). + lo_element_root->append_child( new_child = lo_element ). + ENDIF. + + " bookviews node + lo_element = lo_document->create_simple_element( name = lc_xml_node_bookviews + parent = lo_document ). + " bookview node + lo_sub_element = lo_document->create_simple_element( name = lc_xml_node_workbookview + parent = lo_document ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_xwindow + value = '120' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_ywindow + value = '120' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowwidth + value = '19035' ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_windowheight + value = '8445' ). + " Set Active Sheet + lv_active_sheet = excel->get_active_sheet_index( ). + IF lv_active_sheet > 1. + lv_active_sheet = lv_active_sheet - 1. + lv_value = lv_active_sheet. + CONDENSE lv_value. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_activetab + value = lv_value ). + ENDIF. + lo_element->append_child( new_child = lo_sub_element )." bookview node + lo_element_root->append_child( new_child = lo_element )." bookviews node + + " sheets node + lo_element = lo_document->create_simple_element( name = lc_xml_node_sheets + parent = lo_document ). + lo_iterator = excel->get_worksheets_iterator( ). + + " ranges node + lo_element_range = lo_document->create_simple_element( name = lc_xml_node_definednames " issue 163 + + parent = lo_document ). " issue 163 + + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + " sheet node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_sheet + parent = lo_document ). + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_syindex = sy-index. " question by Stefan Schmöcker 2012-12-02: sy-index seems to do the job - but is it proven to work or purely coincedence + lv_value = lo_worksheet->get_title( ). + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lo_sub_element->set_attribute_ns( name = lc_xml_attr_sheetid + value = lv_syindex ). + IF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_hidden. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_state + value = 'hidden' ). + ELSEIF lo_worksheet->zif_excel_sheet_properties~hidden EQ zif_excel_sheet_properties=>c_veryhidden. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_state + value = 'veryHidden' ). + ENDIF. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_id + prefix = lc_r_ns + value = lv_xml_node_ridx_id ). + lo_element->append_child( new_child = lo_sub_element ). " sheet node + + " issue 163 >>> + lo_iterator_range = lo_worksheet->get_ranges_iterator( ). + +*--------------------------------------------------------------------* +* Defined names sheetlocal: Ranges, Repeat rows and columns +*--------------------------------------------------------------------* + WHILE lo_iterator_range->if_object_collection_iterator~has_next( ) EQ abap_true. + " range node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lo_range ?= lo_iterator_range->if_object_collection_iterator~get_next( ). + lv_value = lo_range->name. + + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + +* lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid "del #235 Repeat rows/cols - EXCEL starts couting from zero +* value = lv_xml_node_ridx_id ). "del #235 Repeat rows/cols - and needs absolute referencing to localSheetId + lv_value = lv_syindex - 1. "ins #235 Repeat rows/cols + CONDENSE lv_value NO-GAPS. "ins #235 Repeat rows/cols + lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid + value = lv_value ). + + lv_value = lo_range->get_value( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node + + ENDWHILE. + " issue 163 <<< + + ENDWHILE. + lo_element_root->append_child( new_child = lo_element )." sheets node + + +*--------------------------------------------------------------------* +* Defined names workbookgolbal: Ranges +*--------------------------------------------------------------------* +* " ranges node +* lo_element = lo_document->create_simple_element( name = lc_xml_node_definednames " issue 163 - +* parent = lo_document ). " issue 163 - + lo_iterator = excel->get_ranges_iterator( ). + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + " range node + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lo_range ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_value = lo_range->name. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lv_value = lo_range->get_value( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node + + ENDWHILE. + +*--------------------------------------------------------------------* +* Defined names - Autofilters ( also sheetlocal ) +*--------------------------------------------------------------------* + lo_autofilters = excel->get_autofilters_reference( ). + IF lo_autofilters->is_empty( ) = abap_false. + lo_iterator = excel->get_worksheets_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + lv_syindex = sy-index - 1 . + l_guid = lo_worksheet->get_guid( ). + lo_autofilter = lo_autofilters->get( i_sheet_guid = l_guid ) . + IF lo_autofilter IS BOUND. + lo_sub_element = lo_document->create_simple_element_ns( name = lc_xml_node_definedname + parent = lo_document ). + lv_value = lo_autofilters->c_autofilter. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_name + value = lv_value ). + lv_value = lv_syindex. + CONDENSE lv_value NO-GAPS. + lo_sub_element->set_attribute_ns( name = lc_xml_attr_localsheetid + value = lv_value ). + lv_value = '1'. " Always hidden + lo_sub_element->set_attribute_ns( name = lc_xml_attr_hidden + value = lv_value ). + lv_value = lo_autofilter->get_filter_reference( ). + lo_sub_element->set_value( value = lv_value ). + lo_element_range->append_child( new_child = lo_sub_element ). " range node + ENDIF. + + ENDWHILE. + ENDIF. + lo_element_root->append_child( new_child = lo_element_range ). " ranges node + + + " calcPr node + lo_element = lo_document->create_simple_element( name = lc_xml_node_calcpr + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_calcid + value = '125725' ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 5: Create xstring stream + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + + + method FLAG2BOOL. + + + IF ip_flag EQ abap_true. + ep_boolean = 'true'. + ELSE. + ep_boolean = 'false'. + ENDIF. + endmethod. + + + + + method GET_SHARED_STRING_INDEX. + + + DATA ls_shared_string TYPE zexcel_s_shared_string. + + READ TABLE shared_strings INTO ls_shared_string WITH KEY string_value = ip_cell_value BINARY SEARCH. + ep_index = ls_shared_string-string_no. + + endmethod. + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + method ZIF_EXCEL_WRITER~WRITE_FILE. + me->excel = io_excel. + ep_file = me->create( ). + endmethod. + + + + method CREATE. + +* .csv format with ; delimiter + + ep_excel = me->CREATE_CSV( ). + + endmethod. + + + + method CREATE_CSV. + + TYPES: BEGIN OF lty_format, + cmpname TYPE SEOCMPNAME, + attvalue TYPE SEOVALUE, + END OF lty_format. + DATA: lt_format TYPE STANDARD TABLE OF lty_format, + ls_format LIKE LINE OF lt_format, + lv_date TYPE DATS, + lv_tmp TYPE string, + lv_time TYPE CHAR08. + + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + DATA: lt_cell_data TYPE zexcel_t_cell_data_unsorted, + lv_row TYPE sytabix, + lv_col TYPE sytabix, + lv_string TYPE string, + lc_value TYPE string, + lv_attrname TYPE SEOCMPNAME. + + DATA: ls_numfmt TYPE zexcel_s_style_numfmt, + lo_style TYPE REF TO zcl_excel_style. + + FIELD-SYMBOLS: <fs_sheet_content> TYPE zexcel_s_cell_data. + +* --- Retrieve supported cell format + REFRESH lt_format. + SELECT * INTO CORRESPONDING FIELDS OF TABLE lt_format + FROM seocompodf + WHERE clsname = 'ZCL_EXCEL_STYLE_NUMBER_FORMAT' + AND typtype = 1 + AND type = 'ZEXCEL_NUMBER_FORMAT'. + +* --- Retrieve SAP date format + CLEAR ls_format. + SELECT ddtext INTO ls_format-attvalue FROM dd07t WHERE domname = 'XUDATFM' + AND ddlanguage = sy-langu. + ls_format-cmpname = 'DATE'. + CONDENSE ls_format-attvalue. + CONCATENATE '''' ls_format-attvalue '''' INTO ls_format-attvalue. + APPEND ls_format TO lt_format. + ENDSELECT. + + + LOOP AT lt_format INTO ls_format. + TRANSLATE ls_format-attvalue TO UPPER CASE. + MODIFY lt_format FROM ls_format. + ENDLOOP. + + +* STEP 1: Collect strings from the first worksheet + lo_iterator = excel->get_worksheets_iterator( ). + data: current_worksheet_title type ZEXCEL_SHEET_TITLE. + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + + IF worksheet_name IS NOT INITIAL. + current_worksheet_title = lo_worksheet->get_title( ). + CHECK current_worksheet_title = worksheet_name. + ELSE. + IF worksheet_index IS INITIAL. + worksheet_index = 1. + ENDIF. + CHECK worksheet_index = sy-index. + ENDIF. + APPEND LINES OF lo_worksheet->sheet_content TO lt_cell_data. + EXIT. " Take first worksheet only + ENDWHILE. + + DELETE lt_cell_data WHERE cell_formula IS NOT INITIAL. " delete formula content + + SORT lt_cell_data BY cell_row + cell_column. + lv_row = 1. + lv_col = 1. + CLEAR lv_string. + LOOP AT lt_cell_data ASSIGNING <fs_sheet_content>. + +* --- Retrieve Cell Style format and data type + CLEAR ls_numfmt. + IF <fs_sheet_content>-data_type IS INITIAL AND <fs_sheet_content>-cell_style IS NOT INITIAL. + lo_iterator = excel->get_styles_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_style ?= lo_iterator->if_object_collection_iterator~get_next( ). + CHECK lo_style->get_guid( ) = <fs_sheet_content>-cell_style. + ls_numfmt = lo_style->number_format->get_structure( ). + EXIT. + ENDWHILE. + ENDIF. + IF <fs_sheet_content>-data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. + " determine data-type + CLEAR lv_attrname. + CONCATENATE '''' ls_numfmt-NUMFMT '''' INTO ls_numfmt-NUMFMT. + TRANSLATE ls_numfmt-numfmt TO UPPER CASE. + READ TABLE lt_format INTO ls_format WITH KEY attvalue = ls_numfmt-NUMFMT. + IF sy-subrc = 0. + lv_attrname = ls_format-cmpname. + ENDIF. + + IF lv_attrname IS NOT INITIAL. + FIND FIRST OCCURRENCE OF 'DATETIME' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'd'. + ELSE. + FIND FIRST OCCURRENCE OF 'TIME' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 't'. + ELSE. + FIND FIRST OCCURRENCE OF 'DATE' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'd'. + ELSE. + FIND FIRST OCCURRENCE OF 'CURRENCY' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'n'. + ELSE. + FIND FIRST OCCURRENCE OF 'NUMBER' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'n'. + ELSE. + FIND FIRST OCCURRENCE OF 'PERCENTAGE' IN lv_attrname. + IF sy-subrc = 0. + <fs_sheet_content>-data_type = 'n'. + ENDIF. " Purcentage + ENDIF. " Number + ENDIF. " Currency + ENDIF. " Date + ENDIF. " TIME + ENDIF. " DATETIME + ENDIF. " lv_attrname IS NOT INITIAL. + ENDIF. " <fs_sheet_content>-data_type IS INITIAL AND ls_numfmt IS NOT INITIAL. + +* --- Add empty rows + WHILE lv_row < <fs_sheet_content>-cell_row. +* CONCATENATE lv_string cl_abap_char_utilities=>newline INTO lv_string. +* CONCATENATE lv_string cl_abap_char_utilities=>cr_lf INTO lv_string. + CONCATENATE lv_string zcl_excel_writer_csv=>eol INTO lv_string. + lv_row = lv_row + 1. + lv_col = 1. + ENDWHILE. + +* --- Add empty columns + WHILE lv_col < <fs_sheet_content>-cell_column. +* CONCATENATE lv_string ';' INTO lv_string. + CONCATENATE lv_string zcl_excel_writer_csv=>delimiter INTO lv_string. + lv_col = lv_col + 1. + ENDWHILE. + +* ----- Use format to determine the data type and display format. + CASE <fs_sheet_content>-data_type. +* WHEN 'n' OR 'N'. +* lc_value = zcl_excel_common=>excel_number_to_string( ip_value = <fs_sheet_content>-cell_value ). + + WHEN 'd' OR 'D'. + lc_value = zcl_excel_common=>excel_string_to_date( ip_value = <fs_sheet_content>-cell_value ). + TRY. + lv_date = lc_value. + CALL FUNCTION 'CONVERT_DATE_TO_EXTERNAL' + EXPORTING + DATE_INTERNAL = lv_date + IMPORTING + DATE_EXTERNAL = lv_tmp + EXCEPTIONS + DATE_INTERNAL_IS_INVALID = 1 + OTHERS = 2 + . + IF SY-SUBRC = 0. + lc_value = lv_tmp. + ENDIF. + + CATCH CX_SY_CONVERSION_NO_NUMBER. + + ENDTRY. + + WHEN 't' OR 'T'. + lc_value = zcl_excel_common=>excel_string_to_time( ip_value = <fs_sheet_content>-cell_value ). + write lc_value to lv_time USING EDIT MASK '__:__:__'. + lc_value = lv_time. + WHEN OTHERS. + lc_value = <fs_sheet_content>-cell_value. + + ENDCASE. + +* REPLACE ALL OCCURRENCES OF '"' in lc_value with '""'. + CONCATENATE zcl_excel_writer_csv=>enclosure zcl_excel_writer_csv=>enclosure INTO lv_tmp. + CONDENSE lv_tmp. + REPLACE ALL OCCURRENCES OF zcl_excel_writer_csv=>enclosure in lc_value with lv_tmp. + +* FIND FIRST OCCURRENCE OF ';' IN lc_value. + FIND FIRST OCCURRENCE OF zcl_excel_writer_csv=>delimiter IN lc_value. + IF sy-subrc = 0. + CONCATENATE lv_string zcl_excel_writer_csv=>enclosure lc_value zcl_excel_writer_csv=>enclosure INTO lv_string. + ELSE. + CONCATENATE lv_string lc_value INTO lv_string. + ENDIF. + + ENDLOOP. " AT lt_cell_data + + CLEAR ep_content. + + CALL FUNCTION 'SCMS_STRING_TO_XSTRING' + EXPORTING + TEXT = lv_string +* MIMETYPE = ' ' +* ENCODING = + IMPORTING + BUFFER = ep_content + EXCEPTIONS + FAILED = 1 + OTHERS = 2 + . + + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX. + CLEAR WORKSHEET_NAME. + WORKSHEET_INDEX = i_active_worksheet. + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX_BY_NAME. + CLEAR WORKSHEET_INDEX. + WORKSHEET_NAME = i_worksheet_name. + endmethod. + + + + method SET_DELIMITER. + delimiter = ip_value. + endmethod. + + + + method SET_ENCLOSURE. + zcl_excel_writer_csv=>enclosure = ip_value. + endmethod. + + + + method SET_ENDOFLINE. + zcl_excel_writer_csv=>eol = ip_value. + endmethod. + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + method CREATE. + + +* Office 2007 file format is a cab of several xml files with extension .xlsx + + DATA: lo_zip TYPE REF TO cl_abap_zip, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_active_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_nested_iterator TYPE REF TO cl_object_collection_iterator, + lo_table TYPE REF TO zcl_excel_table, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_drawings TYPE REF TO zcl_excel_drawings. + + DATA: lv_content TYPE xstring, + lv_active TYPE flag, + lv_xl_sheet TYPE string, + lv_xl_sheet_rels TYPE string, + lv_xl_drawing TYPE string, + lv_xl_drawing_rels TYPE string, + lv_syindex TYPE string, + lv_value TYPE string, + lv_drawing_index TYPE i. + +********************************************************************** +* Start of insertion # issue 139 - Dateretention of cellstyles + me->excel->add_static_styles( ). +* End of insertion # issue 139 - Dateretention of cellstyles + +********************************************************************** +* STEP 1: Create archive object file (ZIP) + CREATE OBJECT lo_zip. + +********************************************************************** +* STEP 2: Add [Content_Types].xml to zip + lv_content = me->create_content_types( ). + lo_zip->add( name = me->c_content_types + content = lv_content ). + +********************************************************************** +* STEP 3: Add _rels/.rels to zip + lv_content = me->create_relationships( ). + lo_zip->add( name = me->c_relationships + content = lv_content ). + +********************************************************************** +* STEP 4: Add docProps/app.xml to zip + lv_content = me->create_docprops_app( ). + lo_zip->add( name = me->c_docprops_app + content = lv_content ). + +********************************************************************** +* STEP 5: Add docProps/core.xml to zip + lv_content = me->create_docprops_core( ). + lo_zip->add( name = me->c_docprops_core + content = lv_content ). + +********************************************************************** +* STEP 6: Add xl/_rels/workbook.xml.rels to zip + lv_content = me->create_xl_relationships( ). + lo_zip->add( name = me->c_xl_relationships + content = lv_content ). + +********************************************************************** +* STEP 6: Add xl/_rels/workbook.xml.rels to zip + lv_content = me->create_xl_theme( ). + lo_zip->add( name = me->c_xl_theme + content = lv_content ). + +********************************************************************** +* STEP 7: Add xl/workbook.xml to zip + lv_content = me->create_xl_workbook( ). + lo_zip->add( name = me->c_xl_workbook + content = lv_content ). + +********************************************************************** +* STEP 8: Add xl/workbook.xml to zip +* lv_content = me->create_xl_styles_static( ). + lv_content = me->create_xl_styles( ). + lo_zip->add( name = me->c_xl_styles + content = lv_content ). + +********************************************************************** +* STEP 9: Add sharedStrings.xml to zip + lv_content = me->create_xl_sharedstrings( ). + lo_zip->add( name = me->c_xl_sharedstrings + content = lv_content ). + +********************************************************************** +* STEP 10: Add sheet#.xml and drawing#.xml to zip + lo_iterator = me->excel->get_worksheets_iterator( ). + lo_active_worksheet = me->excel->get_active_worksheet( ). + lv_drawing_index = 1. + + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + IF lo_active_worksheet->get_guid( ) EQ lo_worksheet->get_guid( ). + lv_active = abap_true. + ELSE. + lv_active = abap_false. + ENDIF. + + lv_content = me->create_xl_sheet( io_worksheet = lo_worksheet + iv_active = lv_active ). + lv_xl_sheet = me->c_xl_sheet. + MOVE sy-index TO lv_syindex. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet WITH lv_syindex. + lo_zip->add( name = lv_xl_sheet + content = lv_content ). + + lv_xl_sheet_rels = me->c_xl_sheet_rels. + lv_content = me->create_xl_sheet_rels( io_worksheet = lo_worksheet + iv_drawing_index = lv_drawing_index ). + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_sheet_rels WITH lv_syindex. + lo_zip->add( name = lv_xl_sheet_rels + content = lv_content ). + + lo_nested_iterator = lo_worksheet->get_tables_iterator( ). + + WHILE lo_nested_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_table ?= lo_nested_iterator->if_object_collection_iterator~get_next( ). + lv_content = me->create_xl_table( lo_table ). + + lv_value = lo_table->get_name( ). + CONCATENATE 'xl/tables/' lv_value '.xml' INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDWHILE. + +* Add drawings ********************************** + lo_drawings = lo_worksheet->get_drawings( ). + IF lo_drawings->is_empty( ) = abap_false. + MOVE lv_drawing_index TO lv_syindex. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + + lv_content = me->create_xl_drawings( lo_worksheet ). + lv_xl_drawing = me->c_xl_drawings. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing WITH lv_syindex. + lo_zip->add( name = lv_xl_drawing + content = lv_content ). + + lv_content = me->create_xl_drawings_rels( lo_worksheet ). + lv_xl_drawing_rels = me->c_xl_drawings_rels. + REPLACE ALL OCCURRENCES OF '#' IN lv_xl_drawing_rels WITH lv_syindex. + lo_zip->add( name = lv_xl_drawing_rels + content = lv_content ). + ADD 1 TO lv_drawing_index. + ENDIF. + ENDWHILE. + +********************************************************************** +* STEP 11: Add media + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_image ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_content = lo_drawing->get_media( ). + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/media/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDWHILE. + +********************************************************************** +* STEP 12: Add charts + lo_iterator = me->excel->get_drawings_iterator( zcl_excel_drawing=>type_chart ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_drawing ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_content = lo_drawing->get_media( ). + lv_value = lo_drawing->get_media_name( ). + CONCATENATE 'xl/charts/' lv_value INTO lv_value. + lo_zip->add( name = lv_value + content = lv_content ). + ENDWHILE. + +********************************************************************** +* STEP 9: Add vbaProject.bin to zip + lo_zip->add( name = me->c_xl_vbaproject + content = me->excel->zif_excel_book_vba_project~vbaproject ). + +********************************************************************** +* STEP 12: Create the final zip + ep_excel = lo_zip->save( ). + + endmethod. + + + method CREATE_CONTENT_TYPES. +** Constant node name + DATA: lc_xml_node_workb_ct TYPE string VALUE 'application/vnd.ms-excel.sheet.macroEnabled.main+xml', + lc_xml_node_default TYPE string VALUE 'Default', + " Node attributes + lc_xml_attr_partname TYPE string VALUE 'PartName', + lc_xml_attr_extension TYPE string VALUE 'Extension', + lc_xml_attr_contenttype TYPE string VALUE 'ContentType', + lc_xml_attr_codename TYPE string VALUE 'codeName', + lc_xml_node_workb_pn TYPE string VALUE '/xl/workbook.xml', + lc_xml_node_bin_ext TYPE string VALUE 'bin', + lc_xml_node_bin_ct TYPE string VALUE 'application/vnd.ms-office.vbaProject'. + + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_collection TYPE REF TO if_ixml_node_collection, + lo_iterator TYPE REF TO if_ixml_node_iterator, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + + DATA: lv_subrc TYPE sysubrc, + lv_contenttype TYPE string, + lv_syindex(2) TYPE c. + +********************************************************************** +* STEP 3: Create standard contentType + ep_content = super->create_content_types( ). + +********************************************************************** +* STEP 2: modify XML adding the extension bin definition + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + lo_document ?= lo_document_xml->m_document. + lo_element_root = lo_document->if_ixml_node~get_first_child( ). + + " extension node + lo_element = lo_document->create_simple_element( name = lc_xml_node_default + parent = lo_document ). + lo_element->set_attribute_ns( name = lc_xml_attr_extension + value = lc_xml_node_bin_ext ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_bin_ct ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 3: modify XML changing the contentType of node Override /xl/workbook.xml + + lo_collection = lo_document->get_elements_by_tag_name( 'Override' ). + lo_iterator = lo_collection->create_iterator( ). + lo_element ?= lo_iterator->get_next( ). + WHILE lo_element IS BOUND. + lv_contenttype = lo_element->get_attribute_ns( lc_xml_attr_partname ). + IF lv_contenttype EQ lc_xml_node_workb_pn. + lo_element->remove_attribute_ns( lc_xml_attr_contenttype ). + lo_element->set_attribute_ns( name = lc_xml_attr_contenttype + value = lc_xml_node_workb_ct ). + EXIT. + ENDIF. + lo_element ?= lo_iterator->get_next( ). + ENDWHILE. + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + method CREATE_XL_RELATIONSHIPS. + +** Constant node name + DATA: lc_xml_node_relationships TYPE string VALUE 'Relationships', + lc_xml_node_relationship TYPE string VALUE 'Relationship', + " Node attributes + lc_xml_attr_id TYPE string VALUE 'Id', + lc_xml_attr_type TYPE string VALUE 'Type', + lc_xml_attr_target TYPE string VALUE 'Target', + " Node id + lc_xml_node_ridx_id TYPE string VALUE 'rId#', + " Node type + lc_xml_node_rid_vba_tp TYPE string VALUE 'http://schemas.microsoft.com/office/2006/relationships/vbaProject', + " Node target + lc_xml_node_rid_vba_tg TYPE string VALUE 'vbaProject.bin'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + + DATA: lv_xml_node_ridx_tg TYPE string, + lv_xml_node_ridx_id TYPE string, + lv_size TYPE i, + lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. + +********************************************************************** +* STEP 3: Create standard relationship + ep_content = super->create_xl_relationships( ). + +********************************************************************** +* STEP 2: modify XML adding the vbaProject relation + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + lo_document ?= lo_document_xml->m_document. + lo_element_root = lo_document->if_ixml_node~get_first_child( ). + + + lv_size = excel->get_worksheets_size( ). + + " Relationship node + lo_element = lo_document->create_simple_element( name = lc_xml_node_relationship + parent = lo_document ). + ADD 4 TO lv_size. + lv_syindex = lv_size. + SHIFT lv_syindex RIGHT DELETING TRAILING space. + SHIFT lv_syindex LEFT DELETING LEADING space. + lv_xml_node_ridx_id = lc_xml_node_ridx_id. + REPLACE ALL OCCURRENCES OF '#' IN lv_xml_node_ridx_id WITH lv_syindex. + lo_element->set_attribute_ns( name = lc_xml_attr_id + value = lv_xml_node_ridx_id ). + lo_element->set_attribute_ns( name = lc_xml_attr_type + value = lc_xml_node_rid_vba_tp ). + lo_element->set_attribute_ns( name = lc_xml_attr_target + value = lc_xml_node_rid_vba_tg ). + lo_element_root->append_child( new_child = lo_element ). + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + + endmethod. + + + method CREATE_XL_SHEET. + +** Constant node name + DATA: lc_xml_attr_codename TYPE string VALUE 'codeName'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_collection TYPE REF TO if_ixml_node_collection, + lo_iterator TYPE REF TO if_ixml_node_iterator, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + + DATA: lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. + +********************************************************************** +* STEP 3: Create standard relationship + ep_content = super->create_xl_sheet( io_worksheet = io_worksheet + iv_active = iv_active ). + +********************************************************************** +* STEP 2: modify XML adding the vbaProject relation + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + lo_document ?= lo_document_xml->m_document. + lo_element_root = lo_document->if_ixml_node~get_first_child( ). + +* lo_collection = lo_document->get_elements_by_tag_name( 'fileVersion' ). +* lo_iterator = lo_collection->create_iterator( ). +* lo_element ?= lo_iterator->get_next( ). +* WHILE lo_element IS BOUND. +* lo_element->set_attribute_ns( name = lc_xml_attr_codename +* value = me->excel->zif_excel_book_vba_project~codename ). +* lo_element ?= lo_iterator->get_next( ). +* ENDWHILE. + + lo_collection = lo_document->get_elements_by_tag_name( 'sheetPr' ). + lo_iterator = lo_collection->create_iterator( ). + lo_element ?= lo_iterator->get_next( ). + WHILE lo_element IS BOUND. + lo_element->set_attribute_ns( name = lc_xml_attr_codename + value = io_worksheet->zif_excel_sheet_vba_project~codename_pr ). + lo_element ?= lo_iterator->get_next( ). + ENDWHILE. + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + endmethod. + + + method CREATE_XL_WORKBOOK. + +** Constant node name + DATA: lc_xml_attr_codename TYPE string VALUE 'codeName'. + + DATA: lo_ixml TYPE REF TO if_ixml, + lo_document TYPE REF TO if_ixml_document, + lo_document_xml TYPE REF TO cl_xml_document, + lo_element_root TYPE REF TO if_ixml_node, + lo_element TYPE REF TO if_ixml_element, + lo_collection TYPE REF TO if_ixml_node_collection, + lo_iterator TYPE REF TO if_ixml_node_iterator, + lo_node TYPE REF TO if_ixml_node, + lo_encoding TYPE REF TO if_ixml_encoding, + lo_streamfactory TYPE REF TO if_ixml_stream_factory, + lo_ostream TYPE REF TO if_ixml_ostream, + lo_renderer TYPE REF TO if_ixml_renderer. + + DATA: lv_subrc TYPE sysubrc, + lv_syindex(2) TYPE c. + +********************************************************************** +* STEP 3: Create standard relationship + ep_content = super->create_xl_workbook( ). + +********************************************************************** +* STEP 2: modify XML adding the vbaProject relation + + CREATE OBJECT lo_document_xml. + lv_subrc = lo_document_xml->parse_xstring( ep_content ). + + lo_document ?= lo_document_xml->m_document. + lo_element_root = lo_document->if_ixml_node~get_first_child( ). + + lo_collection = lo_document->get_elements_by_tag_name( 'fileVersion' ). + lo_iterator = lo_collection->create_iterator( ). + lo_element ?= lo_iterator->get_next( ). + WHILE lo_element IS BOUND. + lo_element->set_attribute_ns( name = lc_xml_attr_codename + value = me->excel->zif_excel_book_vba_project~codename ). + lo_element ?= lo_iterator->get_next( ). + ENDWHILE. + + lo_collection = lo_document->get_elements_by_tag_name( 'workbookPr' ). + lo_iterator = lo_collection->create_iterator( ). + lo_element ?= lo_iterator->get_next( ). + WHILE lo_element IS BOUND. + lo_element->set_attribute_ns( name = lc_xml_attr_codename + value = me->excel->zif_excel_book_vba_project~codename_pr ). + lo_element ?= lo_iterator->get_next( ). + ENDWHILE. + +********************************************************************** +* STEP 3: Create xstring stream + CLEAR ep_content. + lo_ixml = cl_ixml=>create( ). + lo_streamfactory = lo_ixml->create_stream_factory( ). + lo_ostream = lo_streamfactory->create_ostream_xstring( string = ep_content ). + lo_renderer = lo_ixml->create_renderer( ostream = lo_ostream document = lo_document ). + lo_renderer->render( ). + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + + + + + + + + method IF_MESSAGE~GET_LONGTEXT. + + IF me->error IS NOT INITIAL + OR me->syst_at_raise IS NOT INITIAL. +*--------------------------------------------------------------------* +* If message was supplied explicitly use this as longtext as well +*--------------------------------------------------------------------* + result = me->get_text( ). + ELSE. +*--------------------------------------------------------------------* +* otherwise use standard method to derive text +*--------------------------------------------------------------------* + super->if_message~get_longtext( EXPORTING + preserve_newlines = preserve_newlines + RECEIVING + result = result ). + ENDIF. + endmethod. + + + method IF_MESSAGE~GET_TEXT. + + IF me->error IS NOT INITIAL. +*--------------------------------------------------------------------* +* If message was supplied explicitly use this +*--------------------------------------------------------------------* + result = me->error . + ELSEIF me->syst_at_raise IS NOT INITIAL. +*--------------------------------------------------------------------* +* If message was supplied by syst create messagetext now +*--------------------------------------------------------------------* + MESSAGE ID syst_at_raise-msgid TYPE syst_at_raise-msgty NUMBER syst_at_raise-msgno + WITH syst_at_raise-msgv1 syst_at_raise-msgv2 syst_at_raise-msgv3 syst_at_raise-msgv4 + INTO result. + ELSE. +*--------------------------------------------------------------------* +* otherwise use standard method to derive text +*--------------------------------------------------------------------* + CALL METHOD super->if_message~get_text + RECEIVING + result = result. + ENDIF. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + method ADD. + ranges->add( ip_range ). + endmethod. + + + method CLEAR. + ranges->clear( ). + endmethod. + + + method CONSTRUCTOR. + + + CREATE OBJECT ranges. + + endmethod. + + + + + method GET. + eo_range ?= ranges->if_object_collection~get( ip_index ). + endmethod. + + + + method GET_ITERATOR. + eo_iterator ?= ranges->if_object_collection~get_iterator( ). + endmethod. + + + + method IS_EMPTY. + is_empty = ranges->if_object_collection~is_empty( ). + endmethod. + + + + method REMOVE. + ranges->remove( ip_range ). + endmethod. + + + + method SIZE. + ep_size = ranges->if_object_collection~size( ). + endmethod. + + + + + + + *"* use this source file for the definition and implementation of +*"* local helper classes, interface definitions and type +*"* declarations + +* Signal "not found" +class lcx_not_found implementation. + method constructor. + super->constructor( textid = textid previous = previous ). + me->error = error. + endmethod. "constructor + method if_message~get_text. + result = error. + endmethod. "if_message~get_text +endclass. "lcx_not_found IMPLEMENTATION + *"* use this source file for any type of declarations (class +*"* definitions, interfaces or type declarations) you need for +*"* components in the private section + +* Signal for "Not found" +class lcx_not_found definition inheriting from cx_static_check. + public section. + data error type string. + methods constructor + importing error type string + textid type sotr_conc optional + previous type ref to cx_root optional. + methods if_message~get_text redefinition. +endclass. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + *"* use this source file for your ABAP unit test classes +class lcl_test definition deferred. +class zcl_excel_reader_huge_file definition local friends lcl_test. + +* +class lcl_test definition for testing " #AU Risk_Level Harmless + inheriting from cl_aunit_assert. " #AU Duration Short + + private section. + data: + out type ref to zcl_excel_reader_huge_file, " object under test + excel type ref to zcl_excel, + worksheet type ref to zcl_excel_worksheet. + methods: + setup, + test_number for testing, + test_shared_string for testing, + test_shared_string_missing for testing, + test_inline_string for testing, + test_empty_cells for testing, + test_boolean for testing, + test_style for testing, + test_style_missing for testing, + test_formula for testing, + test_read_shared_strings for testing, + test_skip_to_inexistent for testing, + get_reader importing iv_xml type string returning value(eo_reader) type ref to if_sxml_reader, + assert_value_equals importing iv_row type i default 1 iv_col type i default 1 iv_value type string, + assert_formula_equals importing iv_row type i default 1 iv_col type i default 1 iv_formula type string, + assert_style_equals importing iv_row type i default 1 iv_col type i default 1 iv_style type ZEXCEL_CELL_STYLE, + assert_datatype_equals importing iv_row type i default 1 iv_col type i default 1 iv_datatype type string. + +endclass. "lcl_test DEFINITION + +* +class lcl_test implementation. + +* + method test_number. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="n"><v>17</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `17` ). + assert_datatype_equals( `n` ). + endmethod. "test_shared_string + +* + method test_shared_string. + data lo_reader type ref to if_sxml_reader. + append `Test1` to out->shared_strings. + append `Test2` to out->shared_strings. + lo_reader = get_reader( + `<c r="A1" t="s"><v>1</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `Test2` ). + assert_datatype_equals( `s` ). + endmethod. "test_shared_string +* + method test_shared_string_missing. + + data: lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + append `Test` to out->shared_strings. + lo_reader = get_reader( + `<c r="A1" t="s"><v>1</v></c>` + ). + + try. + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + fail(`Index to non-existent shared string should give an error`). + catch lcx_not_found into lo_ex. + lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger + endtry. + + endmethod. +* + method test_inline_string. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="inlineStr"><is><t>Alpha</t></is></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `Alpha` ). + assert_datatype_equals( `inlineStr` ). + endmethod. "test_inline_string + +* + method test_boolean. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="b"><v>1</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_value_equals( `1` ). + assert_datatype_equals( `b` ). + endmethod. "test_boolean + +* + method test_formula. + data lo_reader type ref to if_sxml_reader. + lo_reader = get_reader( + `<c r="A1" t="n"><f>A2*A2</f></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + assert_formula_equals( `A2*A2` ). + assert_datatype_equals( `n` ). + endmethod. "test_formula + +* + method test_empty_cells. + +* There is no need to store an empty cell in the ABAP worksheet structure + + data: lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + append `` to out->shared_strings. + append `t` to out->shared_strings. + lo_reader = get_reader( + `<c r="A1" t="s"><v>0</v></c>` & + `<c r="A2" t="inlineStr"><is><t></t></is></c>` & + `<c r="A3" t="s"><v>1</v></c>` + ). + + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + + assert_value_equals( iv_row = 1 iv_col = 1 iv_value = `` ). + assert_value_equals( iv_row = 2 iv_col = 1 iv_value = `` ). + assert_value_equals( iv_row = 3 iv_col = 1 iv_value = `t` ). + + endmethod. + +* + method test_style. + data: + lo_reader type ref to if_sxml_reader, + lo_style type ref to zcl_excel_style, + lv_guid type ZEXCEL_CELL_STYLE. + create object lo_style. + append lo_style to out->styles. + lv_guid = lo_style->get_guid( ). + + lo_reader = get_reader( + `<c r="A1" s="0"><v>18</v></c>` + ). + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + + assert_style_equals( lv_guid ). + + endmethod. "test_style + +* + method test_style_missing. + + data: + lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + + lo_reader = get_reader( + `<c r="A1" s="0"><v>18</v></c>` + ). + + try. + out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ). + fail(`Reference to non-existent style should throw an lcx_not_found exception`). + catch lcx_not_found into lo_ex. + lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger + endtry. + + endmethod. "test_style + +* + method test_read_shared_strings. + data: lo_c2x type ref to cl_abap_conv_out_ce, + lv_xstring type xstring, + lo_reader type ref to if_sxml_reader, + lt_act type stringtab, + lt_exp type stringtab. + + lo_c2x = cl_abap_conv_out_ce=>create( ). + lo_c2x->convert( exporting data = `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>` + importing buffer = lv_xstring ). + lo_reader = cl_sxml_string_reader=>create( lv_xstring ). + append : + `` to lt_exp, + `Alpha` to lt_exp, + `Bravo` to lt_exp. + + lt_act = out->read_shared_strings( lo_reader ). + + assert_equals( act = lt_act + exp = lt_exp ). + + endmethod. + +* + method test_skip_to_inexistent. + data: lo_c2x type ref to cl_abap_conv_out_ce, + lv_xstring type xstring, + lo_reader type ref to if_sxml_reader, + lo_ex type ref to lcx_not_found, + lv_text type string. + + lo_c2x = cl_abap_conv_out_ce=>create( ). + lo_c2x->convert( exporting data = `<sst><si><t/></si><si><t>Alpha</t></si><si><t>Bravo</t></si></sst>` + importing buffer = lv_xstring ). + lo_reader = cl_sxml_string_reader=>create( lv_xstring ). + try. + out->skip_to( iv_element_name = `nonExistingElement` io_reader = lo_reader ). + fail(`Skipping to non-existing element must raise lcx_not_found exception`). + catch lcx_not_found into lo_ex. + lv_text = lo_ex->get_text( ). " May inspect exception text in debugger + endtry. + endmethod. + +* + method get_reader. + data: lv_full type string, + lo_c2x type ref to cl_abap_conv_out_ce, + lv_xstring type xstring. + concatenate `<root><sheetData><row>` iv_xml `</row></sheetData></root>` into lv_full. + lo_c2x = cl_abap_conv_out_ce=>create( ). + lo_c2x->convert( exporting data = lv_full + importing buffer = lv_xstring ). + eo_reader = cl_sxml_string_reader=>create( lv_xstring ). + endmethod. "get_reader +* + method assert_value_equals. + + constants: lc_empty_string type string value is initial. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data, + <lv_value> type string. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + if sy-subrc eq 0. + assign <ls_cell_data>-cell_value to <lv_value>. + else. + assign lc_empty_string to <lv_value>. + endif. + + assert_equals( act = <lv_value> + exp = iv_value ). + + endmethod. "assert_value_equals +** + method assert_formula_equals. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + assert_subrc( sy-subrc ). + + assert_equals( act = <ls_cell_data>-cell_formula + exp = iv_formula ). + + endmethod. "assert_formula_equals +* + method assert_style_equals. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + assert_subrc( sy-subrc ). + + assert_equals( act = <ls_cell_data>-cell_style + exp = iv_style ). + + endmethod. +* + method assert_datatype_equals. + + field-symbols: <ls_cell_data> type zexcel_s_cell_data. + + read table worksheet->sheet_content assigning <ls_cell_data> + with table key cell_row = iv_row cell_column = iv_col. + assert_subrc( sy-subrc ). + + assert_equals( act = <ls_cell_data>-data_type + exp = iv_datatype ). + + endmethod. "assert_datatype_equals + method setup. + create object out. + create object excel. + create object worksheet + exporting + ip_excel = excel. + endmethod. "setup +endclass. "lcl_test IMPLEMENTATION + + + + + + + + + + + + + + + + method FILL_CELL_FROM_ATTRIBUTES. + + while io_reader->node_type ne c_end_of_stream. + io_reader->next_attribute( ). + if io_reader->node_type ne c_attribute. + exit. + endif. + case io_reader->name. + when `t`. + es_cell-datatype = io_reader->value. + when `s`. + if io_reader->value is not initial. + es_cell-style = get_style( io_reader->value ). + endif. + when `r`. + es_cell-coord = get_cell_coord( io_reader->value ). + endcase. + endwhile. + +endmethod. + + + + + method GET_CELL_COORD. + + zcl_excel_common=>convert_columnrow2column_a_row( + exporting + i_columnrow = iv_coord + importing + e_column = es_coord-column + e_row = es_coord-row + ). + +endmethod. + + + + + + method GET_SHARED_STRING. + data: lv_tabix type i, + lv_error type string. + lv_tabix = iv_index + 1. + read table shared_strings into ev_value index lv_tabix. + if sy-subrc ne 0. + concatenate 'Entry ' iv_index ' not found in Shared String Table' into lv_error. + raise exception type lcx_not_found + exporting + error = lv_error. + endif. +endmethod. + + + + + + method GET_STYLE. + + data: lv_tabix type i, + lo_style type ref to zcl_excel_style, + lv_error type string. + + if gs_buffer_style-index ne iv_index. + lv_tabix = iv_index + 1. + read table styles into lo_style index lv_tabix. + if sy-subrc ne 0. + concatenate 'Entry ' iv_index ' not found in Style Table' into lv_error. + raise exception type lcx_not_found + exporting + error = lv_error. + else. + gs_buffer_style-index = iv_index. + gs_buffer_style-guid = lo_style->get_guid( ). + endif. + endif. + + ev_style_guid = gs_buffer_style-guid. + +endmethod. + + + + + + method GET_SXML_READER. + + data: lv_xml type xstring. + + lv_xml = get_from_zip_archive( iv_path ). + eo_reader = cl_sxml_string_reader=>create( lv_xml ). + +endmethod. + + + method LOAD_SHARED_STRINGS. + + data: lo_reader type ref to if_sxml_reader. + + lo_reader = get_sxml_reader( ip_path ). + + shared_strings = read_shared_strings( lo_reader ). + +endmethod. + + + method LOAD_WORKSHEET. + + data: lo_reader type ref to if_sxml_reader. + + lo_reader = get_sxml_reader( ip_path ). + + read_worksheet_data( io_reader = lo_reader + io_worksheet = io_worksheet ). + +endmethod. + + + + + method PUT_CELL_TO_WORKSHEET. + check is_cell-value is not initial + or is_cell-formula is not initial + or is_cell-style is not initial. + call method io_worksheet->set_cell + exporting + ip_column = is_cell-column + ip_row = is_cell-row + ip_value = is_cell-value + ip_formula = is_cell-formula + ip_data_type = is_cell-datatype + ip_style = is_cell-style. +endmethod. + + + + + method READ_SHARED_STRINGS. + + while io_reader->node_type ne c_end_of_stream. + io_reader->next_node( ). + if io_reader->node_type eq c_element_close and + io_reader->name eq `t`. + append io_reader->value to et_shared_strings. + endif. + endwhile. + +endmethod. + + + + + + method READ_WORKSHEET_DATA. + + data: ls_cell type t_cell. + +* Skip to <sheetData> element + skip_to( iv_element_name = `sheetData` io_reader = io_reader ). + +* Main loop: Evaluate the <c> elements and its children + while io_reader->node_type ne c_end_of_stream. + io_reader->next_node( ). + case io_reader->node_type. + when c_element_open. + if io_reader->name eq `c`. + ls_cell = fill_cell_from_attributes( io_reader ). + endif. + when c_node_value. + case io_reader->name. + when `f`. + ls_cell-formula = io_reader->value. + when `v`. + if ls_cell-datatype eq `s`. + ls_cell-value = get_shared_string( io_reader->value ). + else. + ls_cell-value = io_reader->value. + endif. + when `t` or `is`. + ls_cell-value = io_reader->value. + endcase. + when c_element_close. + case io_reader->name. + when `c`. + put_cell_to_worksheet( is_cell = ls_cell io_worksheet = io_worksheet ). + when `sheetData`. + exit. + endcase. + endcase. + endwhile. + +endmethod. + + + + + + method SKIP_TO. + + data: lv_error type string. + +* Skip forward to given element + while io_reader->name ne iv_element_name or + io_reader->node_type ne c_element_open. + io_reader->next_node( ). + if io_reader->node_type = c_end_of_stream. + concatenate 'XML error: Didn''t find element <' iv_element_name '>' into lv_error. + raise exception type lcx_not_found + exporting + error = lv_error. + endif. + endwhile. + + +endmethod. + + + + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + CLASS zcl_tc_excel DEFINITION DEFERRED. +CLASS zcl_excel DEFINITION LOCAL FRIENDS zcl_tc_excel. + +*----------------------------------------------------------------------* +* CLASS zcl_Tc_Excel DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_tc_excel DEFINITION FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS +. +*?<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0"> +*?<asx:values> +*?<TESTCLASS_OPTIONS> +*?<TEST_CLASS>zcl_Tc_Excel +*?</TEST_CLASS> +*?<TEST_MEMBER>f_Cut +*?</TEST_MEMBER> +*?<OBJECT_UNDER_TEST>ZCL_EXCEL +*?</OBJECT_UNDER_TEST> +*?<OBJECT_IS_LOCAL/> +*?<GENERATE_FIXTURE>X +*?</GENERATE_FIXTURE> +*?<GENERATE_CLASS_FIXTURE>X +*?</GENERATE_CLASS_FIXTURE> +*?<GENERATE_INVOCATION>X +*?</GENERATE_INVOCATION> +*?<GENERATE_ASSERT_EQUAL>X +*?</GENERATE_ASSERT_EQUAL> +*?</TESTCLASS_OPTIONS> +*?</asx:values> +*?</asx:abap> + PRIVATE SECTION. +* ================ + DATA: + f_cut TYPE REF TO zcl_excel. "class under test + + CLASS-METHODS: class_setup. + CLASS-METHODS: class_teardown. + METHODS: setup. + METHODS: teardown. + METHODS: create_empty_excel FOR TESTING. + +ENDCLASS. "zcl_Tc_Excel + + +*----------------------------------------------------------------------* +* CLASS zcl_Tc_Excel IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_tc_excel IMPLEMENTATION. +* ================================== + + METHOD class_setup. +* =================== + + + ENDMETHOD. "class_Setup + + + METHOD class_teardown. +* ====================== + + + ENDMETHOD. "class_Teardown + + + METHOD setup. +* ============= + + CREATE OBJECT f_cut. + ENDMETHOD. "setup + + + METHOD teardown. +* ================ + + + ENDMETHOD. "teardown + +*// START TEST METHODS + + METHOD create_empty_excel. +* ================================== + + DATA: lv_count TYPE i. + lv_count = f_cut->get_worksheets_size( ). + + cl_abap_unit_assert=>assert_equals( act = lv_count + exp = 1 + msg = 'Testing number of sheet' + level = if_aunit_constants=>tolerable ). + ENDMETHOD. "create_empty_excel + +*// END TEST METHODS + + +ENDCLASS. "zcl_Tc_Excel + + + + + + + + + + + + + + + METHOD zif_excel_book_properties~initialize. + DATA: lv_timestamp TYPE timestampl. + + me->zif_excel_book_properties~application = 'Microsoft Excel'. + me->zif_excel_book_properties~appversion = '12.0000'. + + GET TIME STAMP FIELD lv_timestamp. + me->zif_excel_book_properties~created = lv_timestamp. + me->zif_excel_book_properties~creator = sy-uname. + me->zif_excel_book_properties~description = zcl_excel=>version. + me->zif_excel_book_properties~modified = lv_timestamp. + me->zif_excel_book_properties~lastmodifiedby = sy-uname. +ENDMETHOD. + + + method ZIF_EXCEL_BOOK_PROTECTION~INITIALIZE. + me->zif_excel_book_protection~protected = zif_excel_book_protection=>c_unprotected. + me->zif_excel_book_protection~lockrevision = zif_excel_book_protection=>c_unlocked. + me->zif_excel_book_protection~lockstructure = zif_excel_book_protection=>c_unlocked. + me->zif_excel_book_protection~lockwindows = zif_excel_book_protection=>c_unlocked. + CLEAR me->zif_excel_book_protection~workbookpassword. + CLEAR me->zif_excel_book_protection~revisionspassword. + endmethod. + + + method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_CODENAME. + me->zif_excel_book_vba_project~codename = ip_codename. + endmethod. + + + method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_CODENAME_PR. + me->zif_excel_book_vba_project~codename_pr = ip_codename_pr. + endmethod. + + + method ZIF_EXCEL_BOOK_VBA_PROJECT~SET_VBAPROJECT. + me->zif_excel_book_vba_project~vbaproject = ip_vbaproject. + endmethod. + + + + + method ADD_NEW_AUTOFILTER. +* Check for autofilter reference: new or overwrite; only one per sheet + ro_autofilter = autofilters->add( io_sheet = io_sheet ) . + endmethod. + + + + + + method ADD_NEW_DRAWING. + DATA: lv_guid TYPE guid_16. +* Create default blank worksheet + CREATE OBJECT eo_drawing + EXPORTING + ip_type = ip_type + ip_title = ip_title. + + CASE ip_type. + WHEN 'image'. + drawings->add( eo_drawing ). + WHEN 'chart'. + charts->add( eo_drawing ). + ENDCASE. + endmethod. + + + + method ADD_NEW_RANGE. +* Create default blank range + CREATE OBJECT eo_range. + ranges->add( eo_range ). + endmethod. + + + + + method ADD_NEW_STYLE. +* Start of deletion # issue 139 - Dateretention of cellstyles +* CREATE OBJECT eo_style. +* styles->add( eo_style ). +* End of deletion # issue 139 - Dateretention of cellstyles +* Start of insertion # issue 139 - Dateretention of cellstyles +* Create default style + CREATE OBJECT eo_style + EXPORTING + ip_guid = ip_guid. + styles->add( eo_style ). + + DATA: style2 TYPE zexcel_s_stylemapping. +* Copy to new representations + style2 = stylemapping_dynamic_style( eo_style ). + INSERT style2 INTO TABLE t_stylemapping1. + INSERT style2 INTO TABLE t_stylemapping2. +* End of insertion # issue 139 - Dateretention of cellstyles + + endmethod. + + + + + + method ADD_NEW_WORKSHEET. + DATA: lv_guid TYPE guid_16. + +* Create default blank worksheet + CREATE OBJECT eo_worksheet + EXPORTING + ip_excel = me + ip_title = ip_title. + + worksheets->add( eo_worksheet ). + worksheets->active_worksheet = worksheets->size( ). + endmethod. + + + method ADD_STATIC_STYLES. + " # issue 139 +* sp#ƒÂ¤ter hier noch die Worksheets abklappern, welche Styles #ƒÂ#berhaupt noch ben#ƒÂ#tigt werden +* und nur diese dann auch hier zur Verf#ƒÂ#gung stellen +* Da muss ich noch mal nachfragen, ob die beiden ersten Styles, die scheinbar immer mit dem +* EXCEL-Objekt erzeugt werden evtl. immer ben#ƒÂ#tigt werden, egal ob verwendet oder nicht +* Aber als Start fange ich mal an einfach alle static styles der Reihe nach hinzuzuf#ƒÂ#gen + FIELD-SYMBOLS: <style1> LIKE LINE OF t_stylemapping1, + <style2> LIKE LINE OF t_stylemapping2. + DATA: style TYPE REF TO zcl_excel_style. + + LOOP AT me->t_stylemapping1 ASSIGNING <style1> WHERE added_to_iterator IS INITIAL. + READ TABLE me->t_stylemapping2 ASSIGNING <style2> WITH TABLE KEY guid = <style1>-guid. + CHECK sy-subrc = 0. " Should always be true since these tables are being filled parallel + + style = me->add_new_style( <style1>-guid ). + + zcl_excel_common=>recursive_struct_to_class( EXPORTING i_source = <style1>-complete_style + i_sourcex = <style1>-complete_stylex + CHANGING e_target = style ). + + ENDLOOP. + endmethod. + + + method CONSTRUCTOR. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style TYPE REF TO zcl_excel_style. + +* Inizialize instance objects + CREATE OBJECT security. + CREATE OBJECT worksheets. + CREATE OBJECT ranges. + CREATE OBJECT styles. + CREATE OBJECT drawings + EXPORTING + ip_type = zcl_excel_drawing=>type_image. + CREATE OBJECT charts + EXPORTING + ip_type = zcl_excel_drawing=>type_chart. + CREATE OBJECT legacy_palette. + CREATE OBJECT autofilters. + + me->zif_excel_book_protection~initialize( ). + me->zif_excel_book_properties~initialize( ). + + me->add_new_worksheet( ). + me->add_new_style( ). " Standard style + lo_style = me->add_new_style( ). " Standard style with fill gray125 + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_pattern_gray125. + + endmethod. + + + + method GET_ACTIVE_SHEET_INDEX. + r_active_worksheet = me->worksheets->active_worksheet. + endmethod. + + + + method GET_ACTIVE_WORKSHEET. + + eo_worksheet = me->worksheets->get( me->worksheets->active_worksheet ). + + endmethod. + + + + method GET_AUTOFILTERS_REFERENCE. + + ro_autofilters = autofilters. + + endmethod. + + + + method GET_DEFAULT_STYLE. + ep_style = me->default_style. + endmethod. + + + + + method GET_DRAWINGS_ITERATOR. + + CASE ip_type. + WHEN zcl_excel_drawing=>type_image. + eo_iterator = me->drawings->get_iterator( ). + WHEN zcl_excel_drawing=>type_chart. + eo_iterator = me->charts->get_iterator( ). + WHEN OTHERS. + ENDCASE. + + endmethod. + + + + method GET_NEXT_TABLE_ID. + DATA: lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_iterator TYPE REF TO cl_object_collection_iterator, + lv_tables_count TYPE i. + + lo_iterator = me->get_worksheets_iterator( ). + WHILE lo_iterator->if_object_collection_iterator~has_next( ) EQ abap_true. + lo_worksheet ?= lo_iterator->if_object_collection_iterator~get_next( ). + + lv_tables_count = lo_worksheet->get_tables_size( ). + ADD lv_tables_count TO ep_id. + + ENDWHILE. + + ADD 1 TO ep_id. + + endmethod. + + + + method GET_RANGES_ITERATOR. + + eo_iterator = me->ranges->get_iterator( ). + + endmethod. + + + + + + method GET_STATIC_CELLSTYLE_GUID. +" # issue 139 + DATA: style LIKE LINE OF me->t_stylemapping1. + + READ TABLE me->t_stylemapping1 INTO style + WITH TABLE KEY dynamic_style_guid = style-guid " no dynamic style --> look for initial guid here + complete_style = ip_cstyle_complete + complete_stylex = ip_cstylex_complete. + IF sy-subrc <> 0. + style-complete_style = ip_cstyle_complete. + style-complete_stylex = ip_cstylex_complete. + CALL FUNCTION 'GUID_CREATE' + IMPORTING + ev_guid_16 = style-guid. + INSERT style INTO TABLE me->t_stylemapping1. + INSERT style INTO TABLE me->t_stylemapping2. + + ENDIF. + + ep_guid = style-guid. + endmethod. + + + + method GET_STYLES_ITERATOR. + + eo_iterator = me->styles->get_iterator( ). + + endmethod. + + + + + + method GET_STYLE_INDEX_IN_STYLES. + DATA: index TYPE syindex. + DATA: lo_iterator TYPE REF TO cl_object_collection_iterator, + lo_style TYPE REF TO zcl_excel_style. + + CHECK ip_guid IS NOT INITIAL. + + + lo_iterator = me->get_styles_iterator( ). + WHILE lo_iterator->has_next( ) = 'X'. + ADD 1 TO index. + lo_style ?= lo_iterator->get_next( ). + IF lo_style->get_guid( ) = ip_guid. + ep_index = index. + EXIT. + ENDIF. + ENDWHILE. + + IF ep_index IS INITIAL. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'Index not found'. + else. + SUBTRACT 1 from ep_index. " In excel list starts with "0" + ENDIF. + endmethod. + + + + + + method GET_STYLE_TO_GUID. + " # issue 139 + + READ TABLE me->t_stylemapping2 INTO ep_stylemapping WITH TABLE KEY guid = ip_guid. + IF sy-subrc <> 0. + RAISE EXCEPTION TYPE zcx_excel + EXPORTING + error = 'GUID not found'. + ENDIF. + + IF ep_stylemapping-dynamic_style_guid IS NOT INITIAL. + zcl_excel_common=>recursive_class_to_struct( EXPORTING i_source = ep_stylemapping-cl_style + CHANGING e_target = ep_stylemapping-complete_style + e_targetx = ep_stylemapping-complete_stylex ). + ENDIF. + + + endmethod. + + + + method GET_WORKSHEETS_ITERATOR. + + eo_iterator = me->worksheets->get_iterator( ). + + endmethod. + + + + method GET_WORKSHEETS_NAME. + + ep_name = me->worksheets->name. + + endmethod. + + + + method GET_WORKSHEETS_SIZE. + + ep_size = me->worksheets->size( ). + + endmethod. + + + + + method GET_WORKSHEET_BY_NAME. + + DATA: lv_index TYPE zexcel_active_worksheet, + l_size TYPE i. + + l_size = get_worksheets_size( ). + + DO l_size TIMES. + lv_index = sy-index. + eo_worksheet = me->worksheets->get( lv_index ). + IF eo_worksheet->get_title( ) = ip_sheet_name. + RETURN. + ENDIF. + ENDDO. + + CLEAR eo_worksheet. + + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX. + me->worksheets->active_worksheet = i_active_worksheet. + endmethod. + + + + method SET_ACTIVE_SHEET_INDEX_BY_NAME. + + DATA: ws_it TYPE REF TO cl_object_collection_iterator, + ws TYPE REF TO zcl_excel_worksheet, + lv_title TYPE ZEXCEL_SHEET_TITLE, + count TYPE i VALUE 1. + + ws_it = me->worksheets->get_iterator( ). + + WHILE ws_it->if_object_collection_iterator~has_next( ) = abap_true. + ws ?= ws_it->if_object_collection_iterator~get_next( ). + lv_title = ws->get_title( ). + IF lv_title = i_worksheet_name. + me->worksheets->active_worksheet = count. + EXIT. + ENDIF. + count = count + 1. + ENDWHILE. + + endmethod. + + + + + method SET_DEFAULT_STYLE. + me->default_style = ip_style. + endmethod. + + + + + method STYLEMAPPING_DYNAMIC_STYLE. +" # issue 139 + eo_style2-dynamic_style_guid = ip_style->get_guid( ). + eo_style2-guid = eo_style2-dynamic_style_guid. + eo_style2-added_to_iterator = abap_true. + eo_style2-cl_style = ip_style. + +* don't care about attributes here, since this data may change +* dynamically + + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + + + + + method CONSTRUCTOR. + worksheet = io_sheet. + endmethod. + + + + method GET_FILTER_AREA. + + validate_area( ). + + rs_area = filter_area. + + endmethod. + + + + method GET_FILTER_RANGE. + DATA: l_row_start_c TYPE string, + l_row_end_c TYPE string, + l_col_start_c TYPE string, + l_col_end_c TYPE string, + l_value TYPE string. + + validate_area( ). + + l_row_end_c = filter_area-row_end. + CONDENSE l_row_end_c NO-GAPS. + + l_row_start_c = filter_area-row_start. + CONDENSE l_row_start_c NO-GAPS. + + l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . + l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . + + CONCATENATE l_col_start_c l_row_start_c ':' l_col_end_c l_row_end_c INTO r_range. + + endmethod. + + + + method GET_FILTER_REFERENCE. + DATA: l_row_start_c TYPE string, + l_row_end_c TYPE string, + l_col_start_c TYPE string, + l_col_end_c TYPE string, + l_value TYPE string. + + validate_area( ). + + l_row_end_c = filter_area-row_end. + CONDENSE l_row_end_c NO-GAPS. + + l_row_start_c = filter_area-row_start. + CONDENSE l_row_start_c NO-GAPS. + + l_col_start_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_start ) . + l_col_end_c = zcl_excel_common=>convert_column2alpha( ip_column = filter_area-col_end ) . + l_value = worksheet->get_title( ) . + + r_ref = zcl_excel_common=>escape_string( ip_value = l_value ). + + CONCATENATE r_ref '!$' l_col_start_c '$' l_row_start_c ':$' l_col_end_c '$' l_row_end_c INTO r_ref. + + endmethod. + + + + method GET_VALUES. + + rt_filter = values. + + endmethod. + + + + method SET_FILTER_AREA. + + filter_area = is_area. + + endmethod. + + + + + method SET_VALUE. + DATA: ls_values TYPE zexcel_s_autofilter_values. + +* Checks a re missing. + ls_values-column = i_column. + ls_values-value = i_value. + + INSERT ls_values INTO TABLE values. +* Now we need to be sure we don't get the same value again. + DELETE ADJACENT DUPLICATES FROM values COMPARING column value. + + endmethod. + + + + method SET_VALUES. + +* Checks are missing. + values = it_values. + DELETE ADJACENT DUPLICATES FROM values COMPARING column value. + + endmethod. + + + method VALIDATE_AREA. + DATA: l_col TYPE zexcel_cell_column, + l_row TYPE zexcel_cell_row. + + l_row = worksheet->get_highest_row( ) . + l_col = worksheet->get_highest_column( ) . + + IF filter_area IS INITIAL. + filter_area-row_start = 1. + filter_area-col_start = 1. + filter_area-row_end = l_row . + filter_area-col_end = l_col . + ENDIF. + + IF filter_area-row_start < 1. + filter_area-row_start = 1. + ENDIF. + IF filter_area-col_start < 1. + filter_area-col_start = 1. + ENDIF. + IF filter_area-row_end > l_row OR + filter_area-row_end < 1. + filter_area-row_end = l_row. + ENDIF. + IF filter_area-col_end > l_col OR + filter_area-col_end < 1. + filter_area-col_end = l_col. + ENDIF. + IF filter_area-row_start >= filter_area-row_end. + filter_area-row_start = filter_area-row_end - 1. + IF filter_area-row_start < 1. + filter_area-row_start = 1. + filter_area-row_end = 2. + ENDIF. + ENDIF. + IF filter_area-col_start > filter_area-col_end. + filter_area-col_start = filter_area-col_end. + ENDIF. + endmethod. + + + + *"* local class implementation for public class +*"* use this source file for the implementation part of +*"* local helper classes + *"* use this source file for any type declarations (class +*"* definitions, interfaces or data types) you need for method +*"* implementation or private method's signature +TYPES: BEGIN OF ts_objects, + sheet_guid TYPE uuid, + autofilter TYPE REF TO zcl_excel_autofilter, + END OF ts_objects, + + tt_objects TYPE HASHED TABLE OF ts_objects WITH UNIQUE KEY sheet_guid. + *"* use this source file for any macro definitions you need +*"* in the implementation part of the class + + ABAP + + + + + + method ADD. + DATA: ls_autofilters TYPE ts_objects, + l_guid TYPE uuid. + l_guid = io_sheet->get_guid( ) . + READ TABLE autofilters INTO ls_autofilters WITH TABLE KEY sheet_guid = l_guid. + IF sy-subrc = 0. + ro_autofilter = ls_autofilters-autofilter. + ELSE. + CREATE OBJECT ro_autofilter + EXPORTING + io_sheet = io_sheet. + ls_autofilters-autofilter = ro_autofilter. + ls_autofilters-sheet_guid = l_guid. + INSERT ls_autofilters INTO TABLE autofilters . + ENDIF. + endmethod. + + + method CLEAR. + + REFRESH autofilters. + + endmethod. + + + + + method GET. + + DATA: ls_autofilters TYPE ts_objects. + + READ TABLE autofilters INTO ls_autofilters WITH TABLE KEY sheet_guid = i_sheet_guid. + IF sy-subrc = 0. + ro_autofilter = ls_autofilters-autofilter. + ELSE. + CLEAR ro_autofilter. + ENDIF. + + endmethod. + + + + method IS_EMPTY. + IF autofilters IS INITIAL. + r_empty = abap_true. + ENDIF. + endmethod. + + + + method REMOVE. + DATA: ls_autofilters TYPE ts_objects. + + DELETE autofilters WHERE sheet_guid = i_sheet_guid. + + endmethod. + + + + method SIZE. + DESCRIBE TABLE autofilters LINES r_size. + endmethod. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lv_style_title_guid TYPE zexcel_cell_style, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_style_green TYPE REF TO zcl_excel_style, + lo_style_yellow TYPE REF TO zcl_excel_style, + lo_style_red TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lv_style_title_guid TYPE zexcel_cell_style, + lv_style_green_guid TYPE zexcel_cell_style, + lv_style_yellow_guid TYPE zexcel_cell_style, + lv_style_red_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis, + ls_key TYPE wwwdatatab. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + +* ls_key-relid = 'MI'. +* ls_key-objid = 'WBLOGO'. +* lo_drawing->set_media_www( ip_key = ls_key +* ip_width = 140 +* ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " defne conditional styles + lo_style_green = lo_excel->add_new_style( ). + lo_style_green->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_green->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. + lv_style_green_guid = lo_style_green->get_guid( ). + + lo_style_yellow = lo_excel->add_new_style( ). + lo_style_yellow->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_yellow->fill->bgcolor-rgb = zcl_excel_style_color=>c_yellow. + lv_style_yellow_guid = lo_style_yellow->get_guid( ). + + lo_style_red = lo_excel->add_new_style( ). + lo_style_red->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_red->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. + lv_style_red_guid = lo_style_red->get_guid( ). + + " add conditional formatting + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_green_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 1. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_yellow_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '0'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_red_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 3. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lo_style_green TYPE REF TO zcl_excel_style, + lo_style_yellow TYPE REF TO zcl_excel_style, + lo_style_red TYPE REF TO zcl_excel_style, + lo_drawing TYPE REF TO zcl_excel_drawing, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lv_style_title_guid TYPE zexcel_cell_style, + lv_style_green_guid TYPE zexcel_cell_style, + lv_style_yellow_guid TYPE zexcel_cell_style, + lv_style_red_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis, + ls_key TYPE wwwdatatab. + +DATA: lo_send_request TYPE REF TO cl_bcs, + lo_document TYPE REF TO cl_document_bcs, + lo_sender TYPE REF TO cl_sapuser_bcs, + lo_recipient TYPE REF TO cl_sapuser_bcs, + lo_recipient_i TYPE REF TO CL_CAM_ADDRESS_BCS. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lv_bytecount_c TYPE sood-objlen, + lt_file_tab TYPE solix_tab. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Is abap2xlsx simple' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Is abap2xlsx CooL' ). + + lo_worksheet->set_cell( ip_column = 'B' ip_row = 10 ip_value = 'Total score' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 10 ip_formula = 'SUM(C7:C8)' ). + + " add logo from SMWO + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 2 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'WBLOGO'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 140 + ip_height = 64 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " Add new sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for range + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 1 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 2 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 3 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 4 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 5 ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'Values'. + lo_range->set_value( ip_sheet_name = 'Values' + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 8 ). + + lo_excel->set_active_sheet_index( 1 ). + + " add data validation + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 7. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Select a value' ). + + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = 'Values'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Select a value' ). + + " add autosize (column width) + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " defne conditional styles + lo_style_green = lo_excel->add_new_style( ). + lo_style_green->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_green->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. + lv_style_green_guid = lo_style_green->get_guid( ). + + lo_style_yellow = lo_excel->add_new_style( ). + lo_style_yellow->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_yellow->fill->bgcolor-rgb = zcl_excel_style_color=>c_yellow. + lv_style_yellow_guid = lo_style_yellow->get_guid( ). + + lo_style_red = lo_excel->add_new_style( ). + lo_style_red->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_red->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. + lv_style_red_guid = lo_style_red->get_guid( ). + + " add conditional formatting + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_green_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 1. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '5'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_yellow_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '0'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_greaterthan. + ls_cellis-cell_style = lv_style_red_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 3. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 10 + ip_stop_column = 'C' + ip_stop_row = 10 ). + + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + lv_bytecount_c = lv_bytecount. + + " Send via email + lo_document = cl_document_bcs=>create_document( i_type = 'RAW' + i_subject = 'Demo TechEd' ). + + lo_document->add_attachment( i_attachment_type = 'EXT' + i_attachment_subject = 'abap2xlsx.xlsx' + i_attachment_size = lv_bytecount_c + i_att_content_hex = lt_file_tab ). + + lo_sender = cl_sapuser_bcs=>create( sy-uname ). + lo_recipient = cl_sapuser_bcs=>create( sy-uname ). +* lo_recipient_i = cl_cam_address_bcs=>create_internet_address( 'ivan.femia@techedge.it' ). + + lo_send_request = cl_bcs=>create_persistent( ). + lo_send_request->set_document( lo_document ). + lo_send_request->set_sender( lo_sender ). + lo_send_request->add_recipient( lo_recipient ). + lo_send_request->set_send_immediately( abap_true ). + lo_send_request->send( ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZABAP2XLSX_DEMO_SHOW +*&---------------------------------------------------------------------* +REPORT zabap2xlsx_demo_like_se83. + + +*----------------------------------------------------------------------* +* CLASS lcl_perform DEFINITION +*----------------------------------------------------------------------* +CLASS lcl_perform DEFINITION CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS: setup_objects, + collect_reports, + + handle_nav FOR EVENT double_click OF cl_gui_alv_grid + IMPORTING e_row. + + PRIVATE SECTION. + TYPES: BEGIN OF ty_reports, + progname TYPE reposrc-progname, + sort TYPE reposrc-progname, + filename TYPE string, + END OF ty_reports. + + CLASS-DATA: + lo_grid TYPE REF TO cl_gui_alv_grid, + lo_text TYPE REF TO cl_gui_textedit, + cl_document TYPE REF TO i_oi_document_proxy, + + t_reports TYPE STANDARD TABLE OF ty_reports WITH NON-UNIQUE DEFAULT KEY. + CLASS-DATA:error TYPE REF TO i_oi_error, + t_errors TYPE STANDARD TABLE OF REF TO i_oi_error WITH NON-UNIQUE DEFAULT KEY, + cl_control TYPE REF TO i_oi_container_control. "Office Dokument + +ENDCLASS. "lcl_perform DEFINITION + + +START-OF-SELECTION. + lcl_perform=>collect_reports( ). + lcl_perform=>setup_objects( ). + +END-OF-SELECTION. + + WRITE '.'. " Force output + + +*----------------------------------------------------------------------* +* CLASS lcl_perform IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_perform IMPLEMENTATION. + METHOD setup_objects. + DATA: lo_split TYPE REF TO cl_gui_splitter_container, + lo_container TYPE REF TO cl_gui_container. + + DATA: it_fieldcat TYPE lvc_t_fcat, + is_layout TYPE lvc_s_layo, + is_variant TYPE disvariant. + FIELD-SYMBOLS: <fc> LIKE LINE OF it_fieldcat. + + + CREATE OBJECT lo_split + EXPORTING + parent = cl_gui_container=>screen0 + rows = 1 + columns = 3 + no_autodef_progid_dynnr = 'X'. + lo_split->set_column_width( EXPORTING id = 1 + width = 20 ). + lo_split->set_column_width( EXPORTING id = 2 + width = 40 ). + +* Left: List of reports + lo_container = lo_split->get_container( row = 1 + column = 1 ). + + CREATE OBJECT lo_grid + EXPORTING + i_parent = lo_container. + SET HANDLER lcl_perform=>handle_nav FOR lo_grid. + + is_variant-report = sy-repid. + is_variant-handle = '0001'. + + is_layout-cwidth_opt = 'X'. + + APPEND INITIAL LINE TO it_fieldcat ASSIGNING <fc>. + <fc>-fieldname = 'PROGNAME'. + <fc>-tabname = 'REPOSRC'. + + APPEND INITIAL LINE TO it_fieldcat ASSIGNING <fc>. + <fc>-fieldname = 'SORT'. + <fc>-ref_field = 'PROGNAME'. + <fc>-ref_table = 'REPOSRC'. + + + lo_grid->set_table_for_first_display( EXPORTING + is_variant = is_variant + i_save = 'A' + is_layout = is_layout + CHANGING + it_outtab = t_reports + it_fieldcatalog = it_fieldcat + EXCEPTIONS + invalid_parameter_combination = 1 + program_error = 2 + too_many_lines = 3 + OTHERS = 4 ). + +* Middle: Text with coding + lo_container = lo_split->get_container( row = 1 + column = 2 ). + CREATE OBJECT lo_text + EXPORTING + parent = lo_container. + lo_text->set_readonly_mode( cl_gui_textedit=>true ). + lo_text->set_font_fixed( ). + + + +* right: DemoOutput + lo_container = lo_split->get_container( row = 1 + column = 3 ). + + c_oi_container_control_creator=>get_container_control( IMPORTING control = cl_control + error = error ). + APPEND error TO t_errors. + + cl_control->init_control( EXPORTING inplace_enabled = 'X' + no_flush = 'X' + r3_application_name = 'Demo Document Container' + parent = lo_container + IMPORTING error = error + EXCEPTIONS OTHERS = 2 ). + APPEND error TO t_errors. + + cl_control->get_document_proxy( EXPORTING document_type = 'Excel.Sheet' " EXCEL + no_flush = ' ' + IMPORTING document_proxy = cl_document + error = error ). + APPEND error TO t_errors. +* Errorhandling should be inserted here + + + ENDMETHOD. "setup_objects + + "collect_reports + METHOD collect_reports. + FIELD-SYMBOLS:<report> LIKE LINE OF t_reports. + DATA: t_source TYPE STANDARD TABLE OF text255 WITH NON-UNIQUE DEFAULT KEY. + +* Get all demoreports + SELECT progname + INTO CORRESPONDING FIELDS OF TABLE t_reports + FROM reposrc + WHERE progname LIKE 'ZDEMO_EXCEL%' + AND progname <> sy-repid + AND subc = '1'. + + LOOP AT t_reports ASSIGNING <report>. + +* Check if already switched to new outputoptions + READ REPORT <report>-progname INTO t_source. + IF sy-subrc = 0. + FIND 'INCLUDE zdemo_excel_outputopt_incl.' IN TABLE t_source IGNORING CASE. + ENDIF. + IF sy-subrc <> 0. + DELETE t_reports. + CONTINUE. + ENDIF. + + +* Build half-numeric sort + <report>-sort = <report>-progname. + REPLACE REGEX '(ZDEMO_EXCEL)(\d\d)\s*$' IN <report>-sort WITH '$1\0$2'. " REPLACE REGEX '(ZDEMO_EXCEL)([^][^])*$' IN <report>-sort WITH '$1$2'.REPLACE REGEX '(ZDEMO_EXCEL)([^][^])*$' IN <report>-sort WITH '$1$2'.REPLACE + + REPLACE REGEX '(ZDEMO_EXCEL)(\d)\s*$' IN <report>-sort WITH '$1\0\0$2'. + ENDLOOP. + SORT t_reports BY sort progname. + + ENDMETHOD. "collect_reports + + METHOD handle_nav. + CONSTANTS: filename TYPE text80 VALUE 'ZABAP2XLSX_DEMO_SHOW.xlsx'. + DATA: wa_report LIKE LINE OF t_reports, + t_source TYPE STANDARD TABLE OF text255, + t_rawdata TYPE solix_tab, + wa_rawdata LIKE LINE OF t_rawdata, + bytecount TYPE i, + length TYPE i, + add_selopt TYPE flag. + + + READ TABLE t_reports INTO wa_report INDEX e_row-index. + CHECK sy-subrc = 0. + +* Set new text into middle frame + READ REPORT wa_report-progname INTO t_source. + lo_text->set_text_as_r3table( EXPORTING table = t_source ). + + +* Unload old xls-file + cl_document->close_document( ). + +* Get the demo +* If additional parameters found on selection screen, start via selection screen , otherwise start w/o + CLEAR add_selopt. + FIND 'PARAMETERS' IN TABLE t_source. + IF sy-subrc = 0. + add_selopt = 'X'. + ELSE. + FIND 'SELECT-OPTIONS' IN TABLE t_source. + IF sy-subrc = 0. + add_selopt = 'X'. + ENDIF. + ENDIF. + IF add_selopt IS INITIAL. + SUBMIT (wa_report-progname) AND RETURN + WITH p_backfn = filename + WITH rb_back = 'X' + WITH rb_down = ' ' + WITH rb_send = ' ' + WITH rb_show = ' '. + ELSE. + SUBMIT (wa_report-progname) VIA SELECTION-SCREEN AND RETURN + WITH p_backfn = filename + WITH rb_back = 'X' + WITH rb_down = ' ' + WITH rb_send = ' ' + WITH rb_show = ' '. + ENDIF. + + OPEN DATASET filename FOR INPUT IN BINARY MODE. + IF sy-subrc = 0. + DO. + CLEAR wa_rawdata. + READ DATASET filename INTO wa_rawdata LENGTH length. + IF sy-subrc <> 0. + APPEND wa_rawdata TO t_rawdata. + ADD length TO bytecount. + EXIT. + ENDIF. + APPEND wa_rawdata TO t_rawdata. + ADD length TO bytecount. + ENDDO. + CLOSE DATASET filename. + ENDIF. + + cl_control->get_document_proxy( EXPORTING document_type = 'Excel.Sheet' " EXCEL + no_flush = ' ' + IMPORTING document_proxy = cl_document + error = error ). + + cl_document->open_document_from_table( EXPORTING document_size = bytecount + document_table = t_rawdata + open_inplace = 'X' ). + + ENDMETHOD. "handle_nav + +ENDCLASS. "lcl_perform IMPLEMENTATION + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZANGRY_BIRDS +*& Just for fun +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zangry_birds. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_border_light TYPE REF TO zcl_excel_style_border, + lo_style_color0 TYPE REF TO zcl_excel_style, + lo_style_color1 TYPE REF TO zcl_excel_style, + lo_style_color2 TYPE REF TO zcl_excel_style, + lo_style_color3 TYPE REF TO zcl_excel_style, + lo_style_color4 TYPE REF TO zcl_excel_style, + lo_style_color5 TYPE REF TO zcl_excel_style, + lo_style_color6 TYPE REF TO zcl_excel_style, + lo_style_color7 TYPE REF TO zcl_excel_style, + lo_style_credit TYPE REF TO zcl_excel_style, + lo_style_link TYPE REF TO zcl_excel_style, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. + +DATA: lv_style_color0_guid TYPE zexcel_cell_style, + lv_style_color1_guid TYPE zexcel_cell_style, + lv_style_color2_guid TYPE zexcel_cell_style, + lv_style_color3_guid TYPE zexcel_cell_style, + lv_style_color4_guid TYPE zexcel_cell_style, + lv_style_color5_guid TYPE zexcel_cell_style, + lv_style_color6_guid TYPE zexcel_cell_style, + lv_style_color7_guid TYPE zexcel_cell_style, + lv_style_credit_guid TYPE zexcel_cell_style, + lv_style_link_guid TYPE zexcel_cell_style, + lv_style TYPE zexcel_cell_style. + +DATA: lv_col_str TYPE zexcel_cell_column_alpha, + lv_row TYPE i, + lv_col TYPE i, + lt_mapper TYPE TABLE OF zexcel_cell_style, + ls_mapper TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'angry_birds.xlsx'. + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + " Creates active sheet + CREATE OBJECT lo_excel. + + CREATE OBJECT lo_border_light. + lo_border_light->border_color-rgb = zcl_excel_style_color=>c_white. + lo_border_light->border_style = zcl_excel_style_border=>c_border_thin. + + " Create color white + lo_style_color0 = lo_excel->add_new_style( ). + lo_style_color0->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color0->fill->fgcolor-rgb = 'FFFFFFFF'. + lo_style_color0->borders->allborders = lo_border_light. + lv_style_color0_guid = lo_style_color0->get_guid( ). + + " Create color black + lo_style_color1 = lo_excel->add_new_style( ). + lo_style_color1->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color1->fill->fgcolor-rgb = 'FF252525'. + lo_style_color1->borders->allborders = lo_border_light. + lv_style_color1_guid = lo_style_color1->get_guid( ). + + " Create color dark green + lo_style_color2 = lo_excel->add_new_style( ). + lo_style_color2->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color2->fill->fgcolor-rgb = 'FF75913A'. + lo_style_color2->borders->allborders = lo_border_light. + lv_style_color2_guid = lo_style_color2->get_guid( ). + + " Create color light green + lo_style_color3 = lo_excel->add_new_style( ). + lo_style_color3->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color3->fill->fgcolor-rgb = 'FF9DFB73'. + lo_style_color3->borders->allborders = lo_border_light. + lv_style_color3_guid = lo_style_color3->get_guid( ). + + " Create color green + lo_style_color4 = lo_excel->add_new_style( ). + lo_style_color4->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color4->fill->fgcolor-rgb = 'FF92CF56'. + lo_style_color4->borders->allborders = lo_border_light. + lv_style_color4_guid = lo_style_color4->get_guid( ). + + " Create color 2dark green + lo_style_color5 = lo_excel->add_new_style( ). + lo_style_color5->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color5->fill->fgcolor-rgb = 'FF506228'. + lo_style_color5->borders->allborders = lo_border_light. + lv_style_color5_guid = lo_style_color5->get_guid( ). + + " Create color yellow + lo_style_color6 = lo_excel->add_new_style( ). + lo_style_color6->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color6->fill->fgcolor-rgb = 'FFC3E224'. + lo_style_color6->borders->allborders = lo_border_light. + lv_style_color6_guid = lo_style_color6->get_guid( ). + + " Create color yellow + lo_style_color7 = lo_excel->add_new_style( ). + lo_style_color7->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_color7->fill->fgcolor-rgb = 'FFB3C14F'. + lo_style_color7->borders->allborders = lo_border_light. + lv_style_color7_guid = lo_style_color7->get_guid( ). + + " Credits + lo_style_credit = lo_excel->add_new_style( ). + lo_style_credit->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_credit->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lo_style_credit->font->size = 20. + lv_style_credit_guid = lo_style_credit->get_guid( ). + + " Link + lo_style_link = lo_excel->add_new_style( ). + lo_style_link->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_link->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. +* lo_style_link->font->size = 20. + lv_style_link_guid = lo_style_link->get_guid( ). + + " Create image map " line 2 + DO 30 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 3 + DO 28 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 4 + DO 27 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 5 + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 15 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 6 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 13 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 7 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 8 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 9 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 10 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 11 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 7 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 12 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 13 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 14 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 12 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 15 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 16 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 7 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 17 + DO 8 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 13 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 18 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 23 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 19 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 27 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 20 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 23 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 21 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 19 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 22 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 17 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 23 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 17 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 24 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 25 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 26 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color6_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 27 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color6_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 28 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color6_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 29 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 30 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 31 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color4_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 32 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color5_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 33 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 34 + DO 3 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 35 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 36 + DO 4 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 37 + DO 5 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color7_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 38 + DO 6 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 10 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 11 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 39 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 22 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 1 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 40 + DO 7 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 17 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 41 + DO 8 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 3 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 15 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 42 + DO 9 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 9 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 2 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 43 + DO 11 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 5 TIMES. APPEND lv_style_color3_guid TO lt_mapper. ENDDO. + DO 7 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 44 + DO 13 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 6 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + DO 4 TIMES. APPEND lv_style_color2_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 45 + DO 16 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 13 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + " line 46 + DO 18 TIMES. APPEND lv_style_color0_guid TO lt_mapper. ENDDO. + DO 8 TIMES. APPEND lv_style_color1_guid TO lt_mapper. ENDDO. + APPEND INITIAL LINE TO lt_mapper. " escape + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Angry Birds' ). + + lv_row = 1. + lv_col = 1. + + LOOP AT lt_mapper INTO ls_mapper. + lv_col_str = zcl_excel_common=>convert_column2alpha( lv_col ). + IF ls_mapper IS INITIAL. + lo_row_dimension = lo_worksheet->get_row_dimension( ip_row = lv_row ). + lo_row_dimension->set_row_height( ip_row_height = 8 ). + lv_col = 1. + lv_row = lv_row + 1. + CONTINUE. + ENDIF. + lo_worksheet->set_cell( ip_column = lv_col_str + ip_row = lv_row + ip_value = space + ip_style = ls_mapper ). + lv_col = lv_col + 1. + + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = lv_col_str ). + lo_column_dimension->set_width( ip_width = 2 ). + ENDLOOP. + + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_false ). + + lo_worksheet->set_cell( ip_column = 'AP' + ip_row = 15 + ip_value = 'Created with abap2xlsx' + ip_style = lv_style_credit_guid ). + + lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'http://www.abap2xlsx.org' ). + lo_worksheet->set_cell( ip_column = 'AP' + ip_row = 24 + ip_value = 'http://www.abap2xlsx.org' + ip_style = lv_style_link_guid + ip_hyperlink = lo_hyperlink ). + + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'AP' ). + lo_column_dimension->set_auto_size( ip_auto_size = abap_true ). + lo_worksheet->set_merge( ip_row = 15 ip_column_start = 'AP' ip_row_to = 22 ip_column_end = 'AR' ). + lo_worksheet->set_merge( ip_row = 24 ip_column_start = 'AP' ip_row_to = 26 ip_column_end = 'AR' ). + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + + + + + + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_CALENDAR +*& abap2xlsx Demo: Create Calendar with Pictures +*&---------------------------------------------------------------------* +*& This report creates a monthly calendar in the specified date range. +*& Each month is put on a seperate worksheet. The pictures for each +*& month can be specified in a tab delimited file called "Calendar.txt" +*& which is saved in the Export Directory. By default this is the SAP +*& Workdir. The file contains 3 fields: +*& +*& Month (with leading 0) +*& Image Filename +*& Image Description +*& URL for the Description +*& +*& The Images should be landscape JPEG's with a 3:2 ratio and min. +*& 450 pixel height. They must also be saved in the Export Directory. +*& In my tests I've discovered a limit of 20 MB in the +*& cl_gui_frontend_services=>gui_download method. So keep your images +*& smaller or chnage to a server export using OPEN DATASET. +*&---------------------------------------------------------------------* + +REPORT zdemo_calendar. + +TYPE-POOLS: abap. +CONSTANTS: gc_save_file_name TYPE string VALUE 'Calendar.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. +INCLUDE zdemo_calendar_classes. + +DATA: lv_workdir TYPE string. + +PARAMETERS: p_from TYPE dfrom DEFAULT '20130101', + p_to TYPE dto DEFAULT '20131231'. + +SELECTION-SCREEN BEGIN OF BLOCK orientation WITH FRAME TITLE orient. +PARAMETERS: p_portr TYPE flag RADIOBUTTON GROUP orie, + p_lands TYPE flag RADIOBUTTON GROUP orie DEFAULT 'X'. +SELECTION-SCREEN END OF BLOCK orientation. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + orient = 'Orientation'(000). + +START-OF-SELECTION. + + DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi, + hyperlink TYPE REF TO zcl_excel_hyperlink, + lo_drawing TYPE REF TO zcl_excel_drawing. + + DATA: lo_style_month TYPE REF TO zcl_excel_style, + lv_style_month_guid TYPE zexcel_cell_style. + DATA: lo_style_border TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lv_style_border_guid TYPE zexcel_cell_style. + DATA: lo_style_center TYPE REF TO zcl_excel_style, + lv_style_center_guid TYPE zexcel_cell_style. + + DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + + DATA: lv_full_path TYPE string, + image_descr_path TYPE string, + lv_file_separator TYPE c. + DATA: lv_content TYPE xstring, + width TYPE i, + lv_height TYPE i, + lv_from_row TYPE zexcel_cell_row. + + DATA: month TYPE i, + month_nr TYPE fcmnr, + count TYPE i VALUE 1, + title TYPE zexcel_sheet_title, + value TYPE string, + image_path TYPE string, + date_from TYPE datum, + date_to TYPE datum, + row TYPE zexcel_cell_row, + to_row TYPE zexcel_cell_row, + to_col TYPE zexcel_cell_column_alpha, + to_col_end TYPE zexcel_cell_column_alpha, + to_col_int TYPE i. + + DATA: month_names TYPE TABLE OF t247. + FIELD-SYMBOLS: <month_name> LIKE LINE OF month_names. + + TYPES: BEGIN OF tt_datatab, + month_nr TYPE fcmnr, + filename TYPE string, + descr TYPE string, + url TYPE string, + END OF tt_datatab. + + DATA: image_descriptions TYPE TABLE OF tt_datatab. + FIELD-SYMBOLS: <img_descr> LIKE LINE OF image_descriptions. + + CONSTANTS: lv_default_file_name TYPE string VALUE 'Calendar', "#EC NOTEXT + c_from_row_portrait TYPE zexcel_cell_row VALUE 28, + c_from_row_landscape TYPE zexcel_cell_row VALUE 38, + from_col TYPE zexcel_cell_column_alpha VALUE 'C', + c_height_portrait TYPE i VALUE 450, " Image Height in Portrait Mode + c_height_landscape TYPE i VALUE 670, " Image Height in Landscape Mode + c_factor TYPE f VALUE '1.5'. " Image Ratio, default 3:2 + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name '.xlsx' INTO lv_full_path. "#EC NOTEXT + + " Read Image Names for Month and Description + CONCATENATE p_path lv_file_separator lv_default_file_name '.txt' INTO image_descr_path. "#EC NOTEXT + cl_gui_frontend_services=>gui_upload( + EXPORTING + filename = image_descr_path " Name of file + filetype = 'ASC' " File Type (ASCII, Binary) + has_field_separator = 'X' + read_by_line = 'X' " File Written Line-By-Line to the Internal Table + CHANGING + data_tab = image_descriptions " Transfer table for file contents + EXCEPTIONS + file_open_error = 1 + file_read_error = 2 + no_batch = 3 + gui_refuse_filetransfer = 4 + invalid_type = 5 + no_authority = 6 + unknown_error = 7 + bad_data_format = 8 + header_not_allowed = 9 + separator_not_allowed = 10 + header_too_long = 11 + unknown_dp_error = 12 + access_denied = 13 + dp_out_of_memory = 14 + disk_full = 15 + dp_timeout = 16 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19 + ). + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create Styles + " Create an underline double style + lo_style_month = lo_excel->add_new_style( ). + " lo_style_month->font->underline = abap_true. + " lo_style_month->font->underline_mode = zcl_excel_style_font=>c_underline_single. + lo_style_month->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_month->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_month->font->family = zcl_excel_style_font=>c_family_roman. + lo_style_month->font->bold = abap_true. + lo_style_month->font->size = 36. + lv_style_month_guid = lo_style_month->get_guid( ). + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + "Create style with border + lo_style_border = lo_excel->add_new_style( ). + lo_style_border->borders->allborders = lo_border_dark. + lo_style_border->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_right. + lo_style_border->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top. + lv_style_border_guid = lo_style_border->get_guid( ). + "Create style alignment center + lo_style_center = lo_excel->add_new_style( ). + lo_style_center->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_center->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top. + lv_style_center_guid = lo_style_center->get_guid( ). + + " Get Month Names + CALL FUNCTION 'MONTH_NAMES_GET' + TABLES + month_names = month_names. + + zcl_date_calculation=>months_between_two_dates( + EXPORTING + i_date_from = p_from + i_date_to = p_to + i_incl_to = abap_true + IMPORTING + e_month = month + ). + + date_from = p_from. + + WHILE count <= month. + IF count = 1. + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + ELSE. + lo_worksheet = lo_excel->add_new_worksheet( ). + ENDIF. + + lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected. + + title = count. + value = count. + CONDENSE title. + CONDENSE value. + lo_worksheet->set_title( title ). + lo_worksheet->set_print_gridlines( abap_false ). + lo_worksheet->sheet_setup->paper_size = zcl_excel_sheet_setup=>c_papersize_a4. + lo_worksheet->sheet_setup->horizontal_centered = abap_true. + lo_worksheet->sheet_setup->vertical_centered = abap_true. + lo_col_dim = lo_worksheet->get_column_dimension( 'A' ). + lo_col_dim->set_width( '1.0' ). + lo_col_dim = lo_worksheet->get_column_dimension( 'B' ). + lo_col_dim->set_width( '2.0' ). + IF p_lands = abap_true. + lo_worksheet->sheet_setup->orientation = zcl_excel_sheet_setup=>c_orientation_landscape. + lv_height = c_height_landscape. + lv_from_row = c_from_row_landscape. + lo_worksheet->sheet_setup->margin_top = '0.10'. + lo_worksheet->sheet_setup->margin_left = '0.10'. + lo_worksheet->sheet_setup->margin_right = '0.10'. + lo_worksheet->sheet_setup->margin_bottom = '0.10'. + ELSE. + lo_col_dim = lo_worksheet->get_column_dimension( 'K' ). + lo_col_dim->set_width( '3.0' ). + lo_worksheet->sheet_setup->margin_top = '0.80'. + lo_worksheet->sheet_setup->margin_left = '0.55'. + lo_worksheet->sheet_setup->margin_right = '0.05'. + lo_worksheet->sheet_setup->margin_bottom = '0.30'. + lv_height = c_height_portrait. + lv_from_row = c_from_row_portrait. + ENDIF. + + " Add Month Name + month_nr = date_from+4(2). + IF p_portr = abap_true. + READ TABLE month_names WITH KEY mnr = month_nr ASSIGNING <month_name>. + CONCATENATE <month_name>-ltx ` ` date_from(4) INTO value. + row = lv_from_row - 2. + to_col = from_col. + ELSE. + row = lv_from_row - 1. + to_col_int = zcl_excel_common=>convert_column2int( from_col ) + 32. + to_col = zcl_excel_common=>convert_column2alpha( to_col_int ). + to_col_int = to_col_int + 1. + to_col_end = zcl_excel_common=>convert_column2alpha( to_col_int ). + CONCATENATE month_nr '/' date_from+2(2) INTO value. + to_row = row + 2. + lo_worksheet->set_merge( + EXPORTING + ip_column_start = to_col " Cell Column Start + ip_column_end = to_col_end " Cell Column End + ip_row = row " Cell Row + ip_row_to = to_row " Cell Row + ). + ENDIF. + lo_worksheet->set_cell( + EXPORTING + ip_column = to_col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = lv_style_month_guid + ). + +* to_col_int = zcl_excel_common=>convert_column2int( from_col ) + 7. +* to_col = zcl_excel_common=>convert_column2alpha( to_col_int ). +* +* lo_worksheet->set_merge( +* EXPORTING +* ip_column_start = from_col " Cell Column Start +* ip_column_end = to_col " Cell Column End +* ip_row = row " Cell Row +* ip_row_to = row " Cell Row +* ). + + " Add drawing from a XSTRING read from a file + UNASSIGN <img_descr>. + READ TABLE image_descriptions WITH KEY month_nr = month_nr ASSIGNING <img_descr>. + IF <img_descr> IS ASSIGNED. + value = <img_descr>-descr. + IF p_portr = abap_true. + row = lv_from_row - 3. + ELSE. + row = lv_from_row - 2. + ENDIF. + IF NOT <img_descr>-url IS INITIAL. + hyperlink = zcl_excel_hyperlink=>create_external_link( <img_descr>-url ). + lo_worksheet->set_cell( + EXPORTING + ip_column = from_col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_hyperlink = hyperlink + ). + ELSE. + lo_worksheet->set_cell( + EXPORTING + ip_column = from_col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ). + ENDIF. + lo_row_dim = lo_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '22.0' ). + + " In Landscape mode the row between the description and the + " dates should be not so high + IF p_lands = abap_true. + row = lv_from_row - 3. + lo_worksheet->set_cell( + EXPORTING + ip_column = from_col " Cell Column + ip_row = row " Cell Row + ip_value = ' ' " Cell Value + ). + lo_row_dim = lo_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '7.0' ). + row = lv_from_row - 1. + lo_row_dim = lo_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '5.0' ). + ENDIF. + + CONCATENATE p_path lv_file_separator <img_descr>-filename INTO image_path. + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 1 + ip_from_col = 'B' ). + + lv_content = zcl_helper=>load_image( image_path ). + width = lv_height * c_factor. + lo_drawing->set_media( ip_media = lv_content + ip_media_type = zcl_excel_drawing=>c_media_type_jpg + ip_width = width + ip_height = lv_height ). + lo_worksheet->add_drawing( lo_drawing ). + ENDIF. + + " Add Calendar + CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH' + EXPORTING + day_in = date_from + IMPORTING + last_day_of_month = date_to. + IF p_portr = abap_true. + zcl_helper=>add_calendar( + EXPORTING + i_date_from = date_from + i_date_to = date_to + i_from_row = lv_from_row + i_from_col = from_col + i_day_style = lv_style_border_guid + i_cw_style = lv_style_center_guid + CHANGING + c_worksheet = lo_worksheet + ). + ELSE. + zcl_helper=>add_calendar_landscape( + EXPORTING + i_date_from = date_from + i_date_to = date_to + i_from_row = lv_from_row + i_from_col = from_col + i_day_style = lv_style_border_guid + i_cw_style = lv_style_center_guid + CHANGING + c_worksheet = lo_worksheet + ). + ENDIF. + count = count + 1. + date_from = date_to + 1. + ENDWHILE. + + lo_excel->set_active_sheet_index_by_name( '1' ). +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Include ZDEMO_CALENDAR_CLASSES +*&---------------------------------------------------------------------* + +*&---------------------------------------------------------------------* +*& Class ZCL_DATE_CALCULATION +*&---------------------------------------------------------------------* +* Text +*----------------------------------------------------------------------* +CLASS zcl_date_calculation DEFINITION. + PUBLIC SECTION. + CLASS-METHODS: months_between_two_dates + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_incl_to TYPE flag + EXPORTING + e_month TYPE i. +ENDCLASS. "ZCL_DATE_CALCULATION + + +*----------------------------------------------------------------------* +* CLASS ZCL_DATE_CALCULATION IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_date_calculation IMPLEMENTATION. + METHOD months_between_two_dates. + DATA: date_to TYPE datum. + DATA: BEGIN OF datum_von, + jjjj(4) TYPE n, + mm(2) TYPE n, + tt(2) TYPE n, + END OF datum_von. + + DATA: BEGIN OF datum_bis, + jjjj(4) TYPE n, + mm(2) TYPE n, + tt(2) TYPE n, + END OF datum_bis. + + e_month = 0. + + CHECK NOT ( i_date_from IS INITIAL ) + AND NOT ( i_date_to IS INITIAL ). + + date_to = i_date_to. + IF i_incl_to = abap_true. + date_to = date_to + 1. + ENDIF. + + datum_von = i_date_from. + datum_bis = date_to. + + e_month = ( datum_bis-jjjj - datum_von-jjjj ) * 12 + + ( datum_bis-mm - datum_von-mm ). + ENDMETHOD. "MONTHS_BETWEEN_TWO_DATES +ENDCLASS. "ZCL_DATE_CALCULATION IMPLEMENTATION + +*----------------------------------------------------------------------* +* CLASS zcl_date_calculation_test DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_date_calculation_test DEFINITION FOR TESTING + " DURATION SHORT + " RISK LEVEL HARMLESS + "#AU Duration Medium + "#AU Risk_Level Harmless + . + PUBLIC SECTION. + METHODS: + months_between_two_dates FOR TESTING. +ENDCLASS. "zcl_date_calculation_test DEFINITION +*----------------------------------------------------------------------* +* CLASS zcl_date_calculation_test IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_date_calculation_test IMPLEMENTATION. + METHOD months_between_two_dates. + + DATA: date_from TYPE datum VALUE '20120101', + date_to TYPE datum VALUE '20121231'. + DATA: month TYPE i. + + zcl_date_calculation=>months_between_two_dates( + EXPORTING + i_date_from = date_from + i_date_to = date_to + i_incl_to = abap_true + IMPORTING + e_month = month + ). + + cl_aunit_assert=>assert_equals( + exp = 12 " Data Object with Expected Type + act = month " Data Object with Current Value + msg = 'Calculated date is wrong' " Message in Case of Error + ). + + ENDMETHOD. "months_between_two_dates +ENDCLASS. "zcl_date_calculation_test IMPLEMENTATION +*----------------------------------------------------------------------* +* CLASS zcl_helper DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_helper DEFINITION. + PUBLIC SECTION. + CLASS-METHODS: + load_image + IMPORTING + filename TYPE string + RETURNING value(r_image) TYPE xstring, + add_calendar + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + i_day_style TYPE zexcel_cell_style + i_cw_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet, + add_calendar_landscape + IMPORTING + i_date_from TYPE datum + i_date_to TYPE datum + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + i_day_style TYPE zexcel_cell_style + i_cw_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet, + add_a2x_footer + IMPORTING + i_from_row TYPE zexcel_cell_row + i_from_col TYPE zexcel_cell_column_alpha + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet, + add_calender_week + IMPORTING + i_date TYPE datum + i_row TYPE zexcel_cell_row + i_col TYPE zexcel_cell_column_alpha + i_style TYPE zexcel_cell_style + CHANGING + c_worksheet TYPE REF TO zcl_excel_worksheet. +ENDCLASS. "zcl_helper DEFINITION + +*----------------------------------------------------------------------* +* CLASS zcl_helper IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS zcl_helper IMPLEMENTATION. + METHOD load_image. + "Load samle image + DATA: lt_bin TYPE solix_tab, + lv_len TYPE i. + + CALL METHOD cl_gui_frontend_services=>gui_upload + EXPORTING + filename = filename + filetype = 'BIN' + IMPORTING + filelength = lv_len + CHANGING + data_tab = lt_bin + EXCEPTIONS + file_open_error = 1 + file_read_error = 2 + no_batch = 3 + gui_refuse_filetransfer = 4 + invalid_type = 5 + no_authority = 6 + unknown_error = 7 + bad_data_format = 8 + header_not_allowed = 9 + separator_not_allowed = 10 + header_too_long = 11 + unknown_dp_error = 12 + access_denied = 13 + dp_out_of_memory = 14 + disk_full = 15 + dp_timeout = 16 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_len + IMPORTING + buffer = r_image + TABLES + binary_tab = lt_bin + EXCEPTIONS + failed = 1 + OTHERS = 2. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + ENDMETHOD. "load_image + METHOD add_calendar. + DATA: day_names TYPE TABLE OF t246. + DATA: row TYPE zexcel_cell_row, + row_max TYPE i, + col_int TYPE zexcel_cell_column, + col_max TYPE i, + from_col_int TYPE zexcel_cell_column, + col TYPE zexcel_cell_column_alpha, + lr_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lr_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi. + DATA: lv_date TYPE datum, + value TYPE string, + weekday TYPE wotnr, + weekrow TYPE wotnr VALUE 1, + day TYPE i, + width TYPE f, + height TYPE f. + DATA: hyperlink TYPE REF TO zcl_excel_hyperlink. + + FIELD-SYMBOLS: <day_name> LIKE LINE OF day_names. + + lv_date = i_date_from. + from_col_int = zcl_excel_common=>convert_column2int( i_from_col ). + " Add description for Calendar Week + c_worksheet->set_cell( + EXPORTING + ip_column = i_from_col " Cell Column + ip_row = i_from_row " Cell Row + ip_value = 'CW'(001) " Cell Value + ip_style = i_cw_style + ). + + " Add Days + CALL FUNCTION 'DAY_NAMES_GET' + TABLES + day_names = day_names. + + LOOP AT day_names ASSIGNING <day_name>. + row = i_from_row. + col_int = from_col_int + <day_name>-wotnr. + col = zcl_excel_common=>convert_column2alpha( col_int ). + value = <day_name>-langt. + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_cw_style + ). + ENDLOOP. + + WHILE lv_date <= i_date_to. + day = lv_date+6(2). + CALL FUNCTION 'FIMA_X_DAY_IN_MONTH_COMPUTE' + EXPORTING + i_datum = lv_date + IMPORTING + e_wochentag_nr = weekday. + + row = i_from_row + weekrow. + col_int = from_col_int + weekday. + col = zcl_excel_common=>convert_column2alpha( col_int ). + + value = day. + CONDENSE value. + + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_day_style " Single-Character Indicator + ). + + IF weekday = 7. + " Add Calender Week + zcl_helper=>add_calender_week( + EXPORTING + i_date = lv_date + i_row = row + i_col = i_from_col + i_style = i_cw_style + CHANGING + c_worksheet = c_worksheet + ). + weekrow = weekrow + 1. + ENDIF. + lv_date = lv_date + 1. + ENDWHILE. + " Add Calender Week + zcl_helper=>add_calender_week( + EXPORTING + i_date = lv_date + i_row = row + i_col = i_from_col + i_style = i_cw_style + CHANGING + c_worksheet = c_worksheet + ). + " Add Created with abap2xlsx + row = row + 2. + zcl_helper=>add_a2x_footer( + EXPORTING + i_from_row = row + i_from_col = i_from_col + CHANGING + c_worksheet = c_worksheet + ). + col_int = from_col_int. + col_max = from_col_int + 7. + WHILE col_int <= col_max. + col = zcl_excel_common=>convert_column2alpha( col_int ). + IF sy-index = 1. + width = '5.0'. + ELSE. + width = '11.4'. + ENDIF. + lr_col_dim = c_worksheet->get_column_dimension( col ). + lr_col_dim->set_width( width ). + col_int = col_int + 1. + ENDWHILE. + row = i_from_row + 1. + row_max = i_from_row + 6. + WHILE row <= row_max. + height = 50. + lr_row_dim = c_worksheet->get_row_dimension( row ). + lr_row_dim->set_row_height( height ). + row = row + 1. + ENDWHILE. + ENDMETHOD. "add_calendar + METHOD add_a2x_footer. + DATA: value TYPE string, + hyperlink TYPE REF TO zcl_excel_hyperlink. + + value = 'Created with abap2xlsx. Find more information at http://abap2xlsx.org.'(002). + hyperlink = zcl_excel_hyperlink=>create_external_link( 'http://abap2xlsx.org' ). "#EC NOTEXT + c_worksheet->set_cell( + EXPORTING + ip_column = i_from_col " Cell Column + ip_row = i_from_row " Cell Row + ip_value = value " Cell Value + ip_hyperlink = hyperlink + ). + + ENDMETHOD. "add_a2x_footer + METHOD add_calendar_landscape. + DATA: day_names TYPE TABLE OF t246. + + DATA: lv_date TYPE datum, + day TYPE i, + value TYPE string, + weekday TYPE wotnr. + DATA: row TYPE zexcel_cell_row, + from_col_int TYPE zexcel_cell_column, + col_int TYPE zexcel_cell_column, + col TYPE zexcel_cell_column_alpha. + DATA: lo_col_dim TYPE REF TO zcl_excel_worksheet_columndime, + lo_row_dim TYPE REF TO zcl_excel_worksheet_rowdimensi. + + FIELD-SYMBOLS: <day_name> LIKE LINE OF day_names. + + lv_date = i_date_from. + " Add Days + CALL FUNCTION 'DAY_NAMES_GET' + TABLES + day_names = day_names. + + WHILE lv_date <= i_date_to. + day = lv_date+6(2). + CALL FUNCTION 'FIMA_X_DAY_IN_MONTH_COMPUTE' + EXPORTING + i_datum = lv_date + IMPORTING + e_wochentag_nr = weekday. + " Day name row + row = i_from_row. + col_int = from_col_int + day + 2. + col = zcl_excel_common=>convert_column2alpha( col_int ). + READ TABLE day_names ASSIGNING <day_name> + WITH KEY wotnr = weekday. + value = <day_name>-kurzt. + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_cw_style + ). + + " Day row + row = i_from_row + 1. + value = day. + CONDENSE value. + + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = value " Cell Value + ip_style = i_day_style " Single-Character Indicator + ). + " width + lo_col_dim = c_worksheet->get_column_dimension( col ). + lo_col_dim->set_width( '3.6' ). + + + lv_date = lv_date + 1. + ENDWHILE. + " Add ABAP2XLSX Footer + row = i_from_row + 2. + c_worksheet->set_cell( + EXPORTING + ip_column = col " Cell Column + ip_row = row " Cell Row + ip_value = ' ' " Cell Value + ). + lo_row_dim = c_worksheet->get_row_dimension( row ). + lo_row_dim->set_row_height( '5.0' ). + row = i_from_row + 3. + zcl_helper=>add_a2x_footer( + EXPORTING + i_from_row = row + i_from_col = i_from_col + CHANGING + c_worksheet = c_worksheet + ). + + " Set with for all 31 coulumns + WHILE day < 32. + day = day + 1. + col_int = from_col_int + day + 2. + col = zcl_excel_common=>convert_column2alpha( col_int ). + " width + lo_col_dim = c_worksheet->get_column_dimension( col ). + lo_col_dim->set_width( '3.6' ). + ENDWHILE. + ENDMETHOD. "ADD_CALENDAR_LANDSCAPE + + METHOD add_calender_week. + DATA: week TYPE kweek, + week_int TYPE i, + value TYPE string. + " Add Calender Week + CALL FUNCTION 'DATE_GET_WEEK' + EXPORTING + date = i_date " Date for which the week should be calculated + IMPORTING + week = week. " Week for date (format:YYYYWW) + value = week+4(2). + week_int = value. + value = week_int. + CONDENSE value. + c_worksheet->set_cell( + EXPORTING + ip_column = i_col " Cell Column + ip_row = i_row " Cell Row + ip_value = value " Cell Value + ip_style = i_style + ). + ENDMETHOD. "add_calender_week +ENDCLASS. "zcl_helper IMPLEMENTATION + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel. + +DATA: lv_workdir TYPE string, + lv_upfile TYPE string. + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = sy-lisel ). + CONCATENATE p_path sy-lisel '01_HelloWorld.xlsx' INTO lv_upfile. + + SUBMIT zdemo_excel1 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Hello world + SUBMIT zdemo_excel2 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Styles + SUBMIT zdemo_excel3 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: iTab binding + SUBMIT zdemo_excel4 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Multi sheets, page setup and sheet properties + SUBMIT zdemo_excel5 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Conditional formatting + SUBMIT zdemo_excel6 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Formulas + SUBMIT zdemo_excel7 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Conditional formatting + SUBMIT zdemo_excel8 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Ranges + SUBMIT zdemo_excel9 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Data validation + SUBMIT zdemo_excel10 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Bind table with field catalog + " zdemo_excel11 is not added because it has a selection screen and + " you also need to have business partners maintained in transaction BP + SUBMIT zdemo_excel12 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Column size + SUBMIT zdemo_excel13 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Merge cell + SUBMIT zdemo_excel14 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Alignment + SUBMIT zdemo_excel16 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Drawing + SUBMIT zdemo_excel17 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Lock sheet + SUBMIT zdemo_excel18 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Lock workbook + SUBMIT zdemo_excel19 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Set active sheet + " zdemo_excel20 is not added because it uses ALV and cannot be processed (OLE2) + SUBMIT zdemo_excel21 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Color Picker + SUBMIT zdemo_excel22 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Bind table with field catalog & sheet style + SUBMIT zdemo_excel23 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Multiple sheets with and w/o grid lines, print options + SUBMIT zdemo_excel24 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Multiple sheets with different default date formats + SUBMIT zdemo_excel25 AND RETURN. " abap2xlsx Demo: Create and xlsx on Application Server (could be executed in batch mode) + " zdemo_excel26 is not added because it uses ALV and cannot be processed (Native) + SUBMIT zdemo_excel27 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Conditional Formatting + SUBMIT zdemo_excel28 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: CSV writer + " SUBMIT zdemo_excel29 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Macro enabled workbook + SUBMIT zdemo_excel30 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: ABAP Cell data types + leading blanks string + SUBMIT zdemo_excel31 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Autosize Column with different Font sizes + " zdemo_excel32 is not added because it uses ALV and cannot be processed (Native) + SUBMIT zdemo_excel33 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Table autofilter + SUBMIT zdemo_excel34 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Static Styles Chess + SUBMIT zdemo_excel35 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Static Styles + SUBMIT zdemo_excel36 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Style applied to sheet, column and single cell + SUBMIT zdemo_excel37 WITH p_upfile = lv_upfile + WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Simplest call of the reader and writer - passthrough data + SUBMIT zdemo_excel38 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Show off integration of drawings ( here using the SAP-Icons ) + SUBMIT zdemo_excel39 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Charts + SUBMIT zdemo_excel40 WITH p_path = p_path AND RETURN. " abap2xlsx Demo: Demo Printsettings + " + " Reader/Writer Demo must always run at the end + " to make sure all documents where created + " + SUBMIT zdemo_excel15 WITH p_path = p_path AND RETURN. " Read Excel and write it back + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel1. + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +CONSTANTS: gc_save_file_name TYPE string VALUE '01_HelloWorld.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). +* lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = sy-datum ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = sy-uzeit ). + lo_hyperlink = zcl_excel_hyperlink=>create_external_link( iv_url = 'http://www.abap2xlsx.org' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 4 ip_value = 'Click here to visit abap2xlsx homepage' ip_hyperlink = lo_hyperlink ). + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + column_dimension->set_width( ip_width = 11 ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL10 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel10. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional2 TYPE REF TO zcl_excel_style_conditional, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings, + ls_iconset TYPE zexcel_conditional_iconset. + +CONSTANTS: gc_save_file_name TYPE string VALUE '10_iTabFieldCatalog.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + FIELD-SYMBOLS: <fs_field_catalog> TYPE zexcel_s_fieldcatalog. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Internal table' ). + + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_5arrows. + ls_iconset-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo1_value = '0'. + ls_iconset-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo2_value = '20'. + ls_iconset-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo3_value = '40'. + ls_iconset-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo4_value = '60'. + ls_iconset-cfvo5_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo5_value = '80'. + ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + "Conditional style + lo_style_conditional2 = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional2->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional2->mode_iconset = ls_iconset. + lo_style_conditional2->priority = 1. + + DATA lt_test TYPE TABLE OF sflight. + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_test ). + + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog>. + CASE <fs_field_catalog>-fieldname. + WHEN 'CARRID'. + <fs_field_catalog>-position = 3. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-totals_function = zcl_excel_table=>totals_function_count. + WHEN 'CONNID'. + <fs_field_catalog>-position = 4. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FLDATE'. + <fs_field_catalog>-position = 2. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'PRICE'. + <fs_field_catalog>-position = 1. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-totals_function = zcl_excel_table=>totals_function_sum. + <fs_field_catalog>-cond_style = lo_style_conditional2. + WHEN OTHERS. + <fs_field_catalog>-dynpfld = abap_false. + ENDCASE. + ENDLOOP. + + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium5. + + lo_worksheet->bind_table( ip_table = lt_test + is_table_settings = ls_table_settings + it_field_catalog = lt_field_catalog ). + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'D' ). "make date field a bit wider + column_dimension->set_width( ip_width = 13 ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL11 +*& Export Organisation and Contact Persons using ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel11. + +TYPE-POOLS: abap. + +DATA: central_search TYPE bapibus1006_central_search, + addressdata_search TYPE bapibus1006_addr_search, + others_search TYPE bapibus1006_other_data. +DATA: searchresult TYPE TABLE OF bapibus1006_bp_addr, + return TYPE TABLE OF bapiret2. +DATA: lines TYPE i. +FIELD-SYMBOLS: <searchresult_line> LIKE LINE OF searchresult. +DATA: centraldata TYPE bapibus1006_central, + centraldataperson TYPE bapibus1006_central_person, + centraldataorganization TYPE bapibus1006_central_organ. +DATA: addressdata TYPE bapibus1006_address. +DATA: relationships TYPE TABLE OF bapibus1006_relations. +FIELD-SYMBOLS: <relationship> LIKE LINE OF relationships. +DATA: relationship_centraldata TYPE bapibus1006002_central. +DATA: relationship_addresses TYPE TABLE OF bapibus1006002_addresses. +FIELD-SYMBOLS: <relationship_address> LIKE LINE OF relationship_addresses. + +DATA: lt_download TYPE TABLE OF zexcel_s_org_rel. +FIELD-SYMBOLS: <download> LIKE LINE OF lt_download. + +CONSTANTS: gc_save_file_name TYPE string VALUE '11_Export_Org_and_Contact.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +PARAMETERS: md TYPE flag RADIOBUTTON GROUP act. + +SELECTION-SCREEN BEGIN OF BLOCK a WITH FRAME TITLE text-00a. +PARAMETERS: partnerc TYPE bu_type DEFAULT 2, " Organizations + postlcod TYPE ad_pstcd1 DEFAULT '8334*', + country TYPE land1 DEFAULT 'DE', + maxsel TYPE bu_maxsel DEFAULT 100. +SELECTION-SCREEN END OF BLOCK a. + +PARAMETERS: rel TYPE flag RADIOBUTTON GROUP act DEFAULT 'X'. + +SELECTION-SCREEN BEGIN OF BLOCK b WITH FRAME TITLE text-00b. +PARAMETERS: reltyp TYPE bu_reltyp DEFAULT 'BUR011', + partner TYPE bu_partner DEFAULT '191'. +SELECTION-SCREEN END OF BLOCK b. + +START-OF-SELECTION. + IF md = abap_true. + " Read all Companies by Master Data + central_search-partnercategory = partnerc. + addressdata_search-postl_cod1 = postlcod. + addressdata_search-country = country. + others_search-maxsel = maxsel. + others_search-no_search_for_contactperson = 'X'. + + CALL FUNCTION 'BAPI_BUPA_SEARCH_2' + EXPORTING + centraldata = central_search + addressdata = addressdata_search + OTHERS = others_search + TABLES + searchresult = searchresult + return = return. + + SORT searchresult BY partner. + DELETE ADJACENT DUPLICATES FROM searchresult COMPARING partner. + ELSEIF rel = abap_true. + " Read by Relationship + SELECT but050~partner1 AS partner FROM but050 + INNER JOIN but000 ON but000~partner = but050~partner1 AND but000~type = '2' + INTO CORRESPONDING FIELDS OF TABLE searchresult + WHERE but050~partner2 = partner + AND but050~reltyp = reltyp. + ENDIF. + + DESCRIBE TABLE searchresult LINES lines. + WRITE: / 'Number of search results: ', lines. + + LOOP AT searchresult ASSIGNING <searchresult_line>. + " Read Details of Organization + CALL FUNCTION 'BAPI_BUPA_CENTRAL_GETDETAIL' + EXPORTING + businesspartner = <searchresult_line>-partner + IMPORTING + centraldataorganization = centraldataorganization. + " Read Standard Address of Organization + CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL' + EXPORTING + businesspartner = <searchresult_line>-partner + IMPORTING + addressdata = addressdata. + + " Add Organization to Download + APPEND INITIAL LINE TO lt_download ASSIGNING <download>. + " Fill Organization Partner Numbers + CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' + EXPORTING + businesspartner = <searchresult_line>-partner + IMPORTING + businesspartnerout = <download>-org_number + businesspartnerguidout = <download>-org_guid. + + MOVE-CORRESPONDING centraldataorganization TO <download>. + MOVE-CORRESPONDING addressdata TO <download>. + CLEAR: addressdata. + + " Read all Relationships + CLEAR: relationships. + CALL FUNCTION 'BAPI_BUPA_RELATIONSHIPS_GET' + EXPORTING + businesspartner = <searchresult_line>-partner + TABLES + relationships = relationships. + DELETE relationships WHERE relationshipcategory <> 'BUR001'. + LOOP AT relationships ASSIGNING <relationship>. + " Read details of Contact person + CALL FUNCTION 'BAPI_BUPA_CENTRAL_GETDETAIL' + EXPORTING + businesspartner = <relationship>-partner2 + IMPORTING + centraldata = centraldata + centraldataperson = centraldataperson. + " Read details of the Relationship + CALL FUNCTION 'BAPI_BUPR_CONTP_GETDETAIL' + EXPORTING + businesspartner = <relationship>-partner1 + contactperson = <relationship>-partner2 + IMPORTING + centraldata = relationship_centraldata. + " Read relationship address + CLEAR: relationship_addresses. + + CALL FUNCTION 'BAPI_BUPR_CONTP_ADDRESSES_GET' + EXPORTING + businesspartner = <relationship>-partner1 + contactperson = <relationship>-partner2 + TABLES + addresses = relationship_addresses. + + READ TABLE relationship_addresses + ASSIGNING <relationship_address> + WITH KEY standardaddress = 'X'. + + IF <relationship_address> IS ASSIGNED. + " Read Relationship Address + CLEAR addressdata. + CALL FUNCTION 'BAPI_BUPA_ADDRESS_GETDETAIL' + EXPORTING + businesspartner = <searchresult_line>-partner + addressguid = <relationship_address>-addressguid + IMPORTING + addressdata = addressdata. + + APPEND INITIAL LINE TO lt_download ASSIGNING <download>. + CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' + EXPORTING + businesspartner = <relationship>-partner1 + IMPORTING + businesspartnerout = <download>-org_number + businesspartnerguidout = <download>-org_guid. + + CALL FUNCTION 'BAPI_BUPA_GET_NUMBERS' + EXPORTING + businesspartner = <relationship>-partner2 + IMPORTING + businesspartnerout = <download>-contpers_number + businesspartnerguidout = <download>-contpers_guid. + + MOVE-CORRESPONDING centraldataorganization TO <download>. + MOVE-CORRESPONDING addressdata TO <download>. + MOVE-CORRESPONDING centraldataperson TO <download>. + MOVE-CORRESPONDING relationship_centraldata TO <download>. + + WRITE: / <relationship>-partner1, <relationship>-partner2. + WRITE: centraldataorganization-name1(20), centraldataorganization-name2(10). + WRITE: centraldataperson-firstname(15), centraldataperson-lastname(15). + WRITE: addressdata-street(25), addressdata-house_no, + addressdata-postl_cod1, addressdata-city(25). + ENDIF. + ENDLOOP. + + ENDLOOP. + + DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_body TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + + DATA: lv_style_body_even_guid TYPE zexcel_cell_style, + lv_style_body_green TYPE zexcel_cell_style. + + DATA: row TYPE zexcel_cell_row. + + DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + + DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings. + + DATA: column TYPE zexcel_cell_column, + column_alpha TYPE zexcel_cell_column_alpha, + value TYPE zexcel_cell_value. + + FIELD-SYMBOLS: <fs_field_catalog> TYPE zexcel_s_fieldcatalog. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + "Create style with border even + lo_style_body = lo_excel->add_new_style( ). + lo_style_body->fill->fgcolor-rgb = zcl_excel_style_color=>c_yellow. + lo_style_body->borders->allborders = lo_border_dark. + lv_style_body_even_guid = lo_style_body->get_guid( ). + "Create style with border and green fill + lo_style_body = lo_excel->add_new_style( ). + lo_style_body->fill->fgcolor-rgb = zcl_excel_style_color=>c_green. + lo_style_body->borders->allborders = lo_border_dark. + lv_style_body_green = lo_style_body->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Internal table' ). + + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_download ). + + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog>. + CASE <fs_field_catalog>-fieldname. + WHEN 'ORG_NUMBER'. + <fs_field_catalog>-position = 1. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'CONTPERS_NUMBER'. + <fs_field_catalog>-position = 2. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'NAME1'. + <fs_field_catalog>-position = 3. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'NAME2'. + <fs_field_catalog>-position = 4. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'STREET'. + <fs_field_catalog>-position = 5. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'HOUSE_NO'. + <fs_field_catalog>-position = 6. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'POSTL_COD1'. + <fs_field_catalog>-position = 7. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'CITY'. + <fs_field_catalog>-position = 8. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'COUNTRYISO'. + <fs_field_catalog>-position = 9. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FIRSTNAME'. + <fs_field_catalog>-position = 10. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'LASTNAME'. + <fs_field_catalog>-position = 11. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FUNCTIONNAME'. + <fs_field_catalog>-position = 12. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'DEPARTMENTNAME'. + <fs_field_catalog>-position = 13. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'TEL1_NUMBR'. + <fs_field_catalog>-position = 14. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'TEL1_EXT'. + <fs_field_catalog>-position = 15. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FAX_NUMBER'. + <fs_field_catalog>-position = 16. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'FAX_EXTENS'. + <fs_field_catalog>-position = 17. + <fs_field_catalog>-dynpfld = abap_true. + WHEN 'E_MAIL'. + <fs_field_catalog>-position = 18. + <fs_field_catalog>-dynpfld = abap_true. + WHEN OTHERS. + <fs_field_catalog>-dynpfld = abap_false. + ENDCASE. + ENDLOOP. + + ls_table_settings-top_left_column = 'A'. + ls_table_settings-top_left_row = '2'. + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium5. + + lo_worksheet->bind_table( ip_table = lt_download + is_table_settings = ls_table_settings + it_field_catalog = lt_field_catalog ). + LOOP AT lt_download ASSIGNING <download>. + row = sy-tabix + 2. + IF NOT <download>-org_number IS INITIAL + AND <download>-contpers_number IS INITIAL. + " Mark fields of Organization which can be changed green + lo_worksheet->set_cell_style( + ip_column = 'C' + ip_row = row + ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'D' + ip_row = row + ip_style = lv_style_body_green + ). +* CATCH zcx_excel. " Exceptions for ABAP2XLSX + ELSEIF NOT <download>-org_number IS INITIAL + AND NOT <download>-contpers_number IS INITIAL. + " Mark fields of Relationship which can be changed green + lo_worksheet->set_cell_style( + ip_column = 'L' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'M' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'N' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'O' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'P' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'Q' ip_row = row ip_style = lv_style_body_green + ). + lo_worksheet->set_cell_style( + ip_column = 'R' ip_row = row ip_style = lv_style_body_green + ). + ENDIF. + ENDLOOP. + " Add Fieldnames in first row and hide the row + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog> + WHERE position <> '' AND dynpfld = abap_true. + column = <fs_field_catalog>-position. + column_alpha = zcl_excel_common=>convert_column2alpha( column ). + value = <fs_field_catalog>-fieldname. + lo_worksheet->set_cell( ip_column = column_alpha + ip_row = 1 + ip_value = value + ip_style = lv_style_body_even_guid ). + ENDLOOP. + " Hide first row + row_dimension = lo_worksheet->get_row_dimension( 1 ). + row_dimension->set_visible( abap_false ). + + DATA: highest_column TYPE zexcel_cell_column, + count TYPE int4, + col_alpha TYPE zexcel_cell_column_alpha. + + highest_column = lo_worksheet->get_highest_column( ). + count = 1. + WHILE count <= highest_column. + col_alpha = zcl_excel_common=>convert_column2alpha( ip_column = count ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = col_alpha ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + count = count + 1. + ENDWHILE. +* " Set Column width manuall +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). +* column_dimension->set_width( ip_width = 11 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). +* column_dimension->set_width( ip_width = 11 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). +* column_dimension->set_width( ip_width = 35 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'E' ). +* column_dimension->set_width( ip_width = 18 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'F' ). +* column_dimension->set_width( ip_width = 5 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'G' ). +* column_dimension->set_width( ip_width = 6 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'H' ). +* column_dimension->set_width( ip_width = 12 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'I' ). +* column_dimension->set_width( ip_width = 3 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'J' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'K' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'L' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'M' ). +* column_dimension->set_width( ip_width = 13 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'N' ). +* column_dimension->set_width( ip_width = 12 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'O' ). +* column_dimension->set_width( ip_width = 9 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'P' ). +* column_dimension->set_width( ip_width = 12 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'Q' ). +* column_dimension->set_width( ip_width = 9 ). +* column_dimension = lo_worksheet->get_column_dimension( ip_column = 'R' ). +* column_dimension->set_width( ip_width = 40 ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL12 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel12. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: gc_save_file_name TYPE string VALUE '12_HideSizeOutlineRowsAndColumns.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world in AutoSize column' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Hello world in a column width size 50' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 4 ip_value = 'Hello world (hidden column)' ). + lo_worksheet->set_cell( ip_column = 'F' ip_row = 2 ip_value = 'Outline column level 0' ). + lo_worksheet->set_cell( ip_column = 'G' ip_row = 2 ip_value = 'Outline column level 1' ). + lo_worksheet->set_cell( ip_column = 'H' ip_row = 2 ip_value = 'Outline column level 2' ). + lo_worksheet->set_cell( ip_column = 'I' ip_row = 2 ip_value = 'Small' ). + + + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Hello world (hidden row)' ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = 5 ip_value = 'Hello world in a row height size 20' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = 'Outline row level 0' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 7 ip_value = 'Outline row level 1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Outline row level 2' ). + + lo_worksheet->zif_excel_sheet_properties~summarybelow = zif_excel_sheet_properties=>c_below_off. " By default is on + lo_worksheet->zif_excel_sheet_properties~summaryright = zif_excel_sheet_properties=>c_right_off. " By default is on + + " Column Settings + " Auto size + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'I' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + " Manual Width + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + column_dimension->set_width( ip_width = 50 ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'D' ). + column_dimension->set_visible( ip_visible = abap_false ). + " Implementation in the Writer is not working yet ===== TODO ===== + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'F' ). + column_dimension->set_outline_level( ip_outline_level = 0 ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'G' ). + column_dimension->set_outline_level( ip_outline_level = 1 ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'H' ). + column_dimension->set_outline_level( ip_outline_level = 2 ). + + row_dimension = lo_worksheet->get_row_dimension( ip_row = 1 ). + row_dimension->set_visible( ip_visible = abap_false ). + row_dimension = lo_worksheet->get_row_dimension( ip_row = 5 ). + row_dimension->set_row_height( ip_row_height = 20 ). + " Implementation in the Writer is not working yet ===== TODO ===== + row_dimension = lo_worksheet->get_row_dimension( ip_row = 6 ). + row_dimension->set_outline_level( ip_outline_level = 0 ). + row_dimension = lo_worksheet->get_row_dimension( ip_row = 7 ). + row_dimension->set_outline_level( ip_outline_level = 1 ). + row_dimension = lo_worksheet->get_row_dimension( ip_row = 8 ). + row_dimension->set_outline_level( ip_outline_level = 2 ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL13 +*& +*&---------------------------------------------------------------------* +*& Example by: Alvaro "Blag" Tejada Galindo. +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel13. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_style_bold_border_guid TYPE zexcel_cell_style, + lo_style_bold_border TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '13_MergedCells.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'sheet1' ). + + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + + lo_style_bold_border = lo_excel->add_new_style( ). + lo_style_bold_border->font->bold = abap_true. + lo_style_bold_border->font->italic = abap_false. + lo_style_bold_border->font->color-rgb = zcl_excel_style_color=>c_black. + lo_style_bold_border->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_bold_border->borders->allborders = lo_border_dark. + lv_style_bold_border_guid = lo_style_bold_border->get_guid( ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = 'Test' ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'B' ip_value = 'Banana' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'C' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'D' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'E' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'F' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'G' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'Apple' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'F' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'G' ip_value = '' ip_style = lv_style_bold_border_guid ). + + lo_worksheet->set_merge( ip_row = 4 ip_column_start = 'B' ip_column_end = 'G' ). + + " Test also if merge works when oher merged chells are empty + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Tomato' ). + lo_worksheet->set_merge( ip_row = 6 ip_column_start = 'B' ip_column_end = 'G' ). + + " Test the patch provided by Victor Alekhin to merge cells in one column + lo_worksheet->set_cell( ip_row = 8 ip_column = 'B' ip_value = 'Merge cells also over multiple rows by Victor Alekhin' ). + lo_worksheet->set_merge( ip_row = 8 ip_column_start = 'B' ip_column_end = 'G' ip_row_to = 10 ). + + " Test the patch provided by Alexander Budeyev with different column merges + lo_worksheet->set_cell( ip_row = 12 ip_column = 'B' ip_value = 'Merge cells with different merges by Alexander Budeyev' ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'B' ip_value = 'Test' ). + + lo_worksheet->set_cell( ip_row = 13 ip_column = 'D' ip_value = 'Banana' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'D' ip_value = '' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'E' ip_value = 'Apple' ip_style = lv_style_bold_border_guid ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'F' ip_value = '' ip_style = lv_style_bold_border_guid ). + + " Test merge (issue) + lo_worksheet->set_merge( ip_row = 13 ip_column_start = 'B' ip_column_end = 'C' ip_row_to = 15 ). + lo_worksheet->set_merge( ip_row = 13 ip_column_start = 'D' ip_column_end = 'D' ip_row_to = 14 ). + lo_worksheet->set_merge( ip_row = 13 ip_column_start = 'E' ip_column_end = 'F' ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL14 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel14. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_center TYPE REF TO zcl_excel_style, + lo_style_right TYPE REF TO zcl_excel_style, + lo_style_left TYPE REF TO zcl_excel_style, + lo_style_general TYPE REF TO zcl_excel_style, + lo_style_bottom TYPE REF TO zcl_excel_style, + lo_style_middle TYPE REF TO zcl_excel_style, + lo_style_top TYPE REF TO zcl_excel_style, + lo_style_justify TYPE REF TO zcl_excel_style, + lo_style_mixed TYPE REF TO zcl_excel_style, + lo_style_mixed_wrap TYPE REF TO zcl_excel_style, + lo_style_rotated TYPE REF TO zcl_excel_style, + lo_style_shrink TYPE REF TO zcl_excel_style, + lo_style_indent TYPE REF TO zcl_excel_style, + lv_style_center_guid TYPE zexcel_cell_style, + lv_style_right_guid TYPE zexcel_cell_style, + lv_style_left_guid TYPE zexcel_cell_style, + lv_style_general_guid TYPE zexcel_cell_style, + lv_style_bottom_guid TYPE zexcel_cell_style, + lv_style_middle_guid TYPE zexcel_cell_style, + lv_style_top_guid TYPE zexcel_cell_style, + lv_style_justify_guid TYPE zexcel_cell_style, + lv_style_mixed_guid TYPE zexcel_cell_style, + lv_style_mixed_wrap_guid TYPE zexcel_cell_style, + lv_style_rotated_guid TYPE zexcel_cell_style, + lv_style_shrink_guid TYPE zexcel_cell_style, + lv_style_indent_guid TYPE zexcel_cell_style. + +DATA: lo_row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi. + +CONSTANTS: gc_save_file_name TYPE string VALUE '14_Alignment.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'sheet1' ). + + "Center + lo_style_center = lo_excel->add_new_style( ). + lo_style_center->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lv_style_center_guid = lo_style_center->get_guid( ). + "Right + lo_style_right = lo_excel->add_new_style( ). + lo_style_right->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_right. + lv_style_right_guid = lo_style_right->get_guid( ). + "Left + lo_style_left = lo_excel->add_new_style( ). + lo_style_left->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_left. + lv_style_left_guid = lo_style_left->get_guid( ). + "General + lo_style_general = lo_excel->add_new_style( ). + lo_style_general->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_general. + lv_style_general_guid = lo_style_general->get_guid( ). + "Bottom + lo_style_bottom = lo_excel->add_new_style( ). + lo_style_bottom->alignment->vertical = zcl_excel_style_alignment=>c_vertical_bottom. + lv_style_bottom_guid = lo_style_bottom->get_guid( ). + "Middle + lo_style_middle = lo_excel->add_new_style( ). + lo_style_middle->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lv_style_middle_guid = lo_style_middle->get_guid( ). + "Top + lo_style_top = lo_excel->add_new_style( ). + lo_style_top->alignment->vertical = zcl_excel_style_alignment=>c_vertical_top. + lv_style_top_guid = lo_style_top->get_guid( ). + "Justify + lo_style_justify = lo_excel->add_new_style( ). + lo_style_justify->alignment->vertical = zcl_excel_style_alignment=>c_vertical_justify. + lv_style_justify_guid = lo_style_justify->get_guid( ). + + "Shrink + lo_style_shrink = lo_excel->add_new_style( ). + lo_style_shrink->alignment->shrinktofit = abap_true. + lv_style_shrink_guid = lo_style_shrink->get_guid( ). + + "Indent + lo_style_indent = lo_excel->add_new_style( ). + lo_style_indent->alignment->indent = 5. + lv_style_indent_guid = lo_style_indent->get_guid( ). + + "Middle / Centered / Wrap + lo_style_mixed_wrap = lo_excel->add_new_style( ). + lo_style_mixed_wrap->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_mixed_wrap->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lo_style_mixed_wrap->alignment->wraptext = abap_true. + lv_style_mixed_wrap_guid = lo_style_mixed_wrap->get_guid( ). + + "Middle / Centered / Wrap + lo_style_mixed = lo_excel->add_new_style( ). + lo_style_mixed->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_mixed->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lv_style_mixed_guid = lo_style_mixed->get_guid( ). + + "Center + lo_style_rotated = lo_excel->add_new_style( ). + lo_style_rotated->alignment->horizontal = zcl_excel_style_alignment=>c_horizontal_center. + lo_style_rotated->alignment->vertical = zcl_excel_style_alignment=>c_vertical_center. + lo_style_rotated->alignment->textrotation = 165. " -75° == 90° + 75° + lv_style_rotated_guid = lo_style_rotated->get_guid( ). + + + " Set row size for first 7 rows to 40 + DO 7 TIMES. + lo_row_dimension = lo_worksheet->get_row_dimension( sy-index ). + lo_row_dimension->set_row_height( 40 ). + ENDDO. + + "Horizontal alignment + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'Centered Text' ip_style = lv_style_center_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'B' ip_value = 'Right Text' ip_style = lv_style_right_guid ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Left Text' ip_style = lv_style_left_guid ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'B' ip_value = 'General Text' ip_style = lv_style_general_guid ). + + " Shrink & indent + lo_worksheet->set_cell( ip_row = 4 ip_column = 'F' ip_value = 'Text shrinked' ip_style = lv_style_shrink_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'F' ip_value = 'Text indented' ip_style = lv_style_indent_guid ). + + "Vertical alignment + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'Bottom Text' ip_style = lv_style_bottom_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 'Middle Text' ip_style = lv_style_middle_guid ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'D' ip_value = 'Top Text' ip_style = lv_style_top_guid ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'D' ip_value = 'Justify Text' ip_style = lv_style_justify_guid ). + + " Wrapped + lo_worksheet->set_cell( ip_row = 10 ip_column = 'B' + ip_value = 'This is a wrapped text centered in the middle' + ip_style = lv_style_mixed_wrap_guid ). + + " Rotated + lo_worksheet->set_cell( ip_row = 10 ip_column = 'D' + ip_value = 'This is a centered text rotated by -75°' + ip_style = lv_style_rotated_guid ). + + " forced line break + DATA: lv_value TYPE string. + CONCATENATE 'This is a wrapped text centered in the middle' cl_abap_char_utilities=>cr_lf + 'and a manuall line break.' INTO lv_value. + lo_worksheet->set_cell( ip_row = 11 ip_column = 'B' + ip_value = lv_value + ip_style = lv_style_mixed_guid ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL15 +*& +*&---------------------------------------------------------------------* +*& 2010-10-30, Gregor Wolf: +*& Added the functionality to ouput the read table content +*& 2011-12-19, Shahrin Shahrulzaman: +*& Added the functionality to have multiple input and output files +*&---------------------------------------------------------------------* + +REPORT zdemo_excel15. + +TYPE-POOLS: abap. + +TYPES: + BEGIN OF t_demo_excel15, + input TYPE string, + END OF t_demo_excel15. + +DATA: excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + reader TYPE REF TO zif_excel_reader. + +DATA: ex TYPE REF TO zcx_excel, + msg TYPE string. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_workdir TYPE string, + output_file_path TYPE string, + input_file_path TYPE string, + lv_file_separator TYPE c. + +DATA: worksheet TYPE REF TO zcl_excel_worksheet, + highest_column TYPE zexcel_cell_column, + highest_row TYPE int4, + column TYPE zexcel_cell_column VALUE 1, + col_str TYPE zexcel_cell_column_alpha, + row TYPE int4 VALUE 1, + value TYPE zexcel_cell_value. + +DATA: + lt_files TYPE TABLE OF t_demo_excel15. +FIELD-SYMBOLS: <wa_files> TYPE t_demo_excel15. + +PARAMETERS: p_path TYPE zexcel_export_dir, + p_noout TYPE xfeld DEFAULT abap_true. + + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '01_HelloWorld.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '02_Styles.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '03_iTab.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '04_Sheets.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '08_Range.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '13_MergedCells.xlsx'. + APPEND INITIAL LINE TO lt_files ASSIGNING <wa_files>. + <wa_files>-input = '31_AutosizeWithDifferentFontSizes.xlsx'. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + + LOOP AT lt_files ASSIGNING <wa_files>. + CONCATENATE p_path lv_file_separator <wa_files>-input INTO input_file_path. + CONCATENATE p_path lv_file_separator '15_' <wa_files>-input INTO output_file_path. + REPLACE '.xlsx' IN output_file_path WITH 'FromReader.xlsx'. + + TRY. + CREATE OBJECT reader TYPE zcl_excel_reader_2007. + excel = reader->load_file( input_file_path ). + + IF p_noout EQ abap_false. + worksheet = excel->get_active_worksheet( ). + highest_column = worksheet->get_highest_column( ). + highest_row = worksheet->get_highest_row( ). + + WRITE: 'Highest column: ', highest_column, 'Highest row: ', highest_row. + WRITE: /. + + WHILE row <= highest_row. + WHILE column <= highest_column. + col_str = zcl_excel_common=>convert_column2alpha( column ). + worksheet->get_cell( + EXPORTING + ip_column = col_str + ip_row = row + IMPORTING + ep_value = value + ). + WRITE: value. + column = column + 1. + ENDWHILE. + WRITE: /. + column = 1. + row = row + 1. + ENDWHILE. + ENDIF. + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = output_file_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + CATCH zcx_excel INTO ex. " Exceptions for ABAP2XLSX + msg = ex->get_text( ). + WRITE: / msg. + ENDTRY. + ENDLOOP. + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL16 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel16. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_drawing TYPE REF TO zcl_excel_drawing. + + +DATA: ls_io TYPE skwf_io. + +CONSTANTS: gc_save_file_name TYPE string VALUE '16_Drawings.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_objid TYPE sdok_docid DEFAULT '456694429165174BE10000000A1550C0', " Question mark in standard Web Dynpro WDT_QUIZ + p_class TYPE sdok_class DEFAULT 'M_IMAGE_P', + pobjtype TYPE skwf_ioty DEFAULT 'P'. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + "Load samle image + DATA: lt_bin TYPE solix_tab, + lv_len TYPE i, + lv_content TYPE xstring, + ls_key TYPE wwwdatatab. + + CALL METHOD cl_gui_frontend_services=>gui_upload + EXPORTING + filename = 'c:\Program Files\SAP\FrontEnd\SAPgui\wwi\graphics\W_bio.bmp' + filetype = 'BIN' + IMPORTING + filelength = lv_len + CHANGING + data_tab = lt_bin + EXCEPTIONS + file_open_error = 1 + file_read_error = 2 + no_batch = 3 + gui_refuse_filetransfer = 4 + invalid_type = 5 + no_authority = 6 + unknown_error = 7 + bad_data_format = 8 + header_not_allowed = 9 + separator_not_allowed = 10 + header_too_long = 11 + unknown_dp_error = 12 + access_denied = 13 + dp_out_of_memory = 14 + disk_full = 15 + dp_timeout = 16 + not_supported_by_gui = 17 + error_no_gui = 18 + OTHERS = 19. + IF sy-subrc <> 0. +* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno +* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + CALL FUNCTION 'SCMS_BINARY_TO_XSTRING' + EXPORTING + input_length = lv_len + IMPORTING + buffer = lv_content + TABLES + binary_tab = lt_bin + EXCEPTIONS + failed = 1 + OTHERS = 2. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Image from web repository (SMW0)' ). + + " create global drawing, set position and media from web repository + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 3 + ip_from_col = 'B' ). + + ls_key-relid = 'MI'. + ls_key-objid = 'SAPLOGO.GIF'. + lo_drawing->set_media_www( ip_key = ls_key + ip_width = 166 + ip_height = 75 ). + + " assign drawing to the worksheet + lo_worksheet->add_drawing( lo_drawing ). + + " another drawing from a XSTRING read from a file + lo_worksheet->set_cell( ip_column = 'B' ip_row = 8 ip_value = 'Image from a file (c:\Program Files\SAP\FrontEnd\SAPgui\wwi\graphics\W_bio.bmp)' ). + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 9 + ip_from_col = 'B' ). + lo_drawing->set_media( ip_media = lv_content + ip_media_type = zcl_excel_drawing=>c_media_type_bmp + ip_width = 83 + ip_height = 160 ). + + lo_worksheet->add_drawing( lo_drawing ). + + ls_io-objid = p_objid. + ls_io-class = p_class. + ls_io-objtype = pobjtype. + IF ls_io IS NOT INITIAL. + " another drawing from a XSTRING read from a file + lo_worksheet->set_cell( ip_column = 'B' ip_row = 18 ip_value = 'Mime repository (by default Question mark in standard Web Dynpro WDT_QUIZ)' ). + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = 19 + ip_from_col = 'B' ). + lo_drawing->set_media_mime( ip_io = ls_io + ip_width = 126 + ip_height = 145 ). + + lo_worksheet->add_drawing( lo_drawing ). + ENDIF. + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL26 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel29. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_excel_reader TYPE REF TO zif_excel_reader. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_filename TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +PARAMETERS: p_path TYPE zexcel_export_dir OBLIGATORY. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + + DATA: lt_filetable TYPE filetable, + lv_rc TYPE i. + + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + + CALL METHOD cl_gui_frontend_services=>file_open_dialog + EXPORTING + window_title = 'Select Macro-Enabled Workbook template' + default_extension = '*.xlsm' + file_filter = 'Excel Macro-Enabled Workbook (*.xlsm)|*.xlsm' + initial_directory = lv_workdir + CHANGING + file_table = lt_filetable + rc = lv_rc + EXCEPTIONS + file_open_dialog_failed = 1 + cntl_error = 2 + error_no_gui = 3 + not_supported_by_gui = 4 + OTHERS = 5. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + READ TABLE lt_filetable INTO lv_filename INDEX 1. + p_path = lv_filename. + +START-OF-SELECTION. + + lv_full_path = p_path. + + CREATE OBJECT lo_excel_reader TYPE zcl_excel_reader_xlsm. + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_xlsm. + lo_excel = lo_excel_reader->load_file( lv_full_path ). + lv_file = lo_excel_writer->write_file( lo_excel ). + REPLACE '.xlsm' IN lv_full_path WITH 'FromReader.xlsm'. + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL28 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel28. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_file_name TYPE string, + lv_file_path TYPE string, + lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE '28_HelloWorld.csv'. + +PARAMETERS: p_path TYPE string. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = p_path + CHANGING selected_folder = p_path ). + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = sy-datum ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = sy-uzeit ). + + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_width( 11 ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the second sheet' ). + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_csv. + zcl_excel_writer_csv=>set_delimiter( ip_value = cl_abap_char_utilities=>horizontal_tab ). + zcl_excel_writer_csv=>set_enclosure( ip_value = '''' ). + zcl_excel_writer_csv=>set_endofline( ip_value = cl_abap_char_utilities=>cr_lf ). + + zcl_excel_writer_csv=>set_active_sheet_index( i_active_worksheet = 2 ). +* zcl_excel_writer_csv=>set_active_sheet_index_by_name( I_WORKSHEET_NAME = 'Sheet2' ). + + lv_file = lo_excel_writer->write_file( lo_excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + REPLACE FIRST OCCURRENCE OF '.csv' IN lv_full_path WITH '_Sheet2.csv'. + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + +* zcl_excel_writer_csv=>set_active_sheet_index( i_active_worksheet = 2 ). + zcl_excel_writer_csv=>set_active_sheet_index_by_name( I_WORKSHEET_NAME = 'Sheet1' ). + lv_file = lo_excel_writer->write_file( lo_excel ). + REPLACE FIRST OCCURRENCE OF '_Sheet2.csv' IN lv_full_path WITH '_Sheet1.csv'. + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL27 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel27. + +CONSTANTS: c_fish TYPE string VALUE 'Fish'. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional, + lo_style_1 TYPE REF TO zcl_excel_style, + lo_style_2 TYPE REF TO zcl_excel_style, + lv_style_1_guid TYPE zexcel_cell_style, + lv_style_2_guid TYPE zexcel_cell_style, + ls_cellis TYPE zexcel_conditional_cellis. + + +DATA: lv_title TYPE zexcel_sheet_title. + +CONSTANTS: gc_save_file_name TYPE string VALUE '27_ConditionalFormatting.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + + " Creates active sheet + CREATE OBJECT lo_excel. + + lo_style_1 = lo_excel->add_new_style( ). + lo_style_1->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_1->fill->bgcolor-rgb = zcl_excel_style_color=>c_green. + lv_style_1_guid = lo_style_1->get_guid( ). + + lo_style_2 = lo_excel->add_new_style( ). + lo_style_2->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_2->fill->bgcolor-rgb = zcl_excel_style_color=>c_red. + lv_style_2_guid = lo_style_2->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lv_title = 'Data Validation'. + lo_worksheet->set_title( lv_title ). + " Set values for dropdown + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = c_fish ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 'Anchovy' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 'Carp' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 'Catfish' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 'Cod' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 'Eel' ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'A' ip_value = 'Haddock' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_fish. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 9 ). + + " 1st validation + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_fish. + lo_data_validation->cell_row = 2. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = 2 ip_column = 'C' ip_value = 'Select a value' ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '"Anchovy"'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_1_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 1. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 2 + ip_stop_column = 'C' + ip_stop_row = 2 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_cellis. + ls_cellis-formula = '"Carp"'. + ls_cellis-operator = zcl_excel_style_conditional=>c_operator_equal. + ls_cellis-cell_style = lv_style_2_guid. + lo_style_conditional->mode_cellis = ls_cellis. + lo_style_conditional->priority = 2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 2 + ip_stop_column = 'C' + ip_stop_row = 2 ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *--------------------------------------------------------------------* +* REPORT ZDEMO_EXCEL26 +* Demo for method zcl_excel_worksheet-bind_object: +* export data from ALV (CL_GUI_ALV_GRID) object or cl_salv_table object +* to Excel. +*--------------------------------------------------------------------* +report zdemo_excel26. + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +class lcl_handle_events definition. + public section. + methods: + on_user_command for event added_function of cl_salv_events + importing e_salv_function. +endclass. "lcl_handle_events DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +class lcl_handle_events implementation. + method on_user_command. + perform user_command." using e_salv_function text-i08. + endmethod. "on_user_command +endclass. "lcl_handle_events IMPLEMENTATION + +*--------------------------------------------------------------------* +* DATA DECLARATION +*--------------------------------------------------------------------* + +data: lo_excel type ref to zcl_excel, + lo_worksheet type ref to zcl_excel_worksheet, + lo_salv type ref to cl_salv_table, + gr_events type ref to lcl_handle_events, + lr_events type ref to cl_salv_events_table, + gt_sbook type table of sbook. + +data: l_path type string, " local dir + lv_workdir type string, + lv_file_separator type c. + +constants: + lv_default_file_name type string value '26_Bind_ALV.xlsx'. +*--------------------------------------------------------------------* +*START-OF-SELECTION +*--------------------------------------------------------------------* + +start-of-selection. + +* get data +* ------------------------------------------ + + select * + into table gt_sbook[] + from sbook "#EC CI_NOWHERE + up to 10 rows. + +* Display ALV +* ------------------------------------------ + + try. + cl_salv_table=>factory( + exporting + list_display = abap_false + importing + r_salv_table = lo_salv + changing + t_table = gt_sbook[] ). + catch cx_salv_msg . + endtry. + + try. + lo_salv->set_screen_status( + exporting + report = sy-repid + pfstatus = 'ALV_STATUS' + set_functions = lo_salv->c_functions_all ). + catch cx_salv_msg . + endtry. + + lr_events = lo_salv->get_event( ). + create object gr_events. + set handler gr_events->on_user_command for lr_events. + + lo_salv->display( ). + + +*&---------------------------------------------------------------------* +*& Form USER_COMMAND +*&---------------------------------------------------------------------* +* ALV user command +*--------------------------------------------------------------------* +form user_command . + if sy-ucomm = 'EXCEL'. + +* get save file path + cl_gui_frontend_services=>get_sapgui_workdir( changing sapworkdir = l_path ). + cl_gui_cfw=>flush( ). + cl_gui_frontend_services=>directory_browse( + exporting initial_folder = l_path + changing selected_folder = l_path ). + + if l_path is initial. + cl_gui_frontend_services=>get_sapgui_workdir( + changing sapworkdir = lv_workdir ). + l_path = lv_workdir. + endif. + + cl_gui_frontend_services=>get_file_separator( + changing file_separator = lv_file_separator ). + + concatenate l_path lv_file_separator lv_default_file_name + into l_path. + +* export file to save file path + perform export_to_excel. + + endif. +endform. " USER_COMMAND + +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +form export_to_excel. + data: lo_converter type ref to zcl_excel_converter. +* create zcl_excel_worksheet object + + create object lo_excel. + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + +* write to excel using method Bin_object + try. + lo_worksheet->bind_alv( + io_alv = lo_salv + it_table = gt_sbook + i_top = 2 + i_left = 1 + ). + catch zcx_excel . + endtry. + + perform write_file. + +endform. "EXPORT_TO_EXCEL +*&---------------------------------------------------------------------* +*& Form WRITE_FILE +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +* --> p1 text +* <-- p2 text +*----------------------------------------------------------------------* +form write_file . + data: lt_file type solix_tab, + l_bytecount type i, + l_file type xstring. + + data: lo_excel_writer type ref to zif_excel_writer. + + data: ls_seoclass type seoclass. + + create object lo_excel_writer type zcl_excel_writer_2007. + l_file = lo_excel_writer->write_file( lo_excel ). + + select single * into ls_seoclass + from seoclass + where clsname = 'CL_BCS_CONVERT'. + + if sy-subrc = 0. + call method (ls_seoclass-clsname)=>xstring_to_solix + exporting + iv_xstring = l_file + receiving + et_solix = lt_file. + + l_bytecount = xstrlen( l_file ). + else. + " Convert to binary + call function 'SCMS_XSTRING_TO_BINARY' + exporting + buffer = l_file + importing + output_length = l_bytecount + tables + binary_tab = lt_file. + endif. + + cl_gui_frontend_services=>gui_download( exporting bin_filesize = l_bytecount + filename = l_path + filetype = 'BIN' + changing data_tab = lt_file ). + +endform. " WRITE_FILE + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL25 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel25. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_exception TYPE REF TO cx_root. + +DATA: lv_file TYPE xstring. + +CONSTANTS: lv_file_name TYPE string VALUE '25_HelloWorld.xlsx'. +DATA: lv_default_file_name TYPE string. +DATA: lv_error TYPE string. + +CALL FUNCTION 'FILE_GET_NAME_USING_PATH' + EXPORTING + logical_path = 'LOCAL_TEMPORARY_FILES' " Logical path' + file_name = lv_file_name " File name + IMPORTING + file_name_with_path = lv_default_file_name. " File name with path +" Creates active sheet +CREATE OBJECT lo_excel. + +" Get active sheet +lo_worksheet = lo_excel->get_active_worksheet( ). +lo_worksheet->set_title( ip_title = 'Sheet1' ). +lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + +CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. +lv_file = lo_excel_writer->write_file( lo_excel ). + +TRY. + OPEN DATASET lv_default_file_name FOR OUTPUT IN BINARY MODE. + TRANSFER lv_file TO lv_default_file_name. + CLOSE DATASET lv_default_file_name. + CATCH cx_root INTO lo_exception. + lv_error = lo_exception->get_text( ). + MESSAGE lv_error TYPE 'I'. +ENDTRY. + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL23 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel24. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +DATA: lv_value TYPE string. + +CONSTANTS: gc_save_file_name TYPE string VALUE '24_Sheets_with_different_default_date_formats.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Default Date Format' ). + " Insert current date + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Current Date:' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = sy-datum ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet2!A1' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 6 ip_value = 'This is a link to the second sheet' ip_hyperlink = lo_hyperlink ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + + " Second sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_default_excel_date_format( zcl_excel_style_number_format=>c_format_date_yyyymmdd ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Date Format set to YYYYMMDD' ). + " Insert current date + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Current Date:' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = sy-datum ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet3!B2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 6 ip_value = 'This is link to the third sheet' ip_hyperlink = lo_hyperlink ). + + " Third sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + " TODO: It seems that the zcl_excel_style_number_format=>c_format_date_yyyymmddslash + " does not produce a valid output + lo_worksheet->set_default_excel_date_format( zcl_excel_style_number_format=>c_format_date_yyyymmddslash ). + lo_worksheet->set_title( ip_title = 'Sheet3' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Date Format set to YYYY/MM/DD' ). + " Insert current date + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Current Date:' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 4 ip_value = sy-datum ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet4!B2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 6 ip_value = 'This is link to the 4th sheet' ip_hyperlink = lo_hyperlink ). + + " 4th sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + " Illustrate the Problem caused by: + " Excel 2000 incorrectly assumes that the year 1900 is a leap year. + " http://support.microsoft.com/kb/214326/en-us + lo_worksheet->set_title( ip_title = 'Sheet4' ). + " Loop from Start Date to the Max Date current data in daily steps + CONSTANTS: lv_max type d VALUE '19000302'. + + DATA: lv_date TYPE d VALUE '19000226', + lv_row TYPE i. + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'Formated date' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Integer value for this date' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 3 ip_value = 'Date as string' ). + + lv_row = 4. + WHILE lv_date < lv_max. + lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_row ip_value = lv_date ). + lv_value = zcl_excel_common=>date_to_excel_string( lv_date ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_row ip_value = lv_value ). + lv_value = lv_date. + lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_row ip_value = lv_value ). + lv_date = lv_date + 1. + lv_row = lv_row + 1. + ENDWHILE. + + lv_row = lv_row + 1. + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet1!B2' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = lv_row ip_value = 'This is link to the first sheet' ip_hyperlink = lo_hyperlink ). + + lo_excel->set_active_sheet_index_by_name( 'Sheet1' ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL23 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel23. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '23_Sheets_with_and_without_grid_lines.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the first sheet with grid lines and print centered horizontal & vertical' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_true ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet2!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is a link to the second sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 150. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_NORMAL = 150. + + lo_worksheet->sheet_setup->vertical_centered = abap_true. + lo_worksheet->sheet_setup->horizontal_centered = abap_true. + + " Second sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the second sheet with grid lines in display and print' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_true ). + lo_worksheet->set_print_gridlines( i_print_gridlines = abap_true ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet3!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to the third sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 160. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_PAGELAYOUTVIEW = 200. + + " Third sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet3' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the third sheet without grid lines in display and print' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_false ). + lo_worksheet->set_print_gridlines( i_print_gridlines = abap_false ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet4!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to the fourth sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 170. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_SHEETLAYOUTVIEW = 150. + + " Fourth sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet4' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the fourth sheet with grid lines and print centered ONLY horizontal' ). + lo_worksheet->set_show_gridlines( i_show_gridlines = abap_true ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet1!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to the first sheet' ip_hyperlink = lo_hyperlink ). + + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_properties~zoomscale = 150. + lo_worksheet->ZIF_EXCEL_SHEET_PROPERTIES~ZOOMSCALE_NORMAL = 150. + +" lo_worksheet->sheet_setup->vertical_centered = abap_true. + lo_worksheet->sheet_setup->horizontal_centered = abap_true. + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL17 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel17. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_protection TYPE REF TO zcl_excel_style, + lv_style_protection_guid TYPE zexcel_cell_style, + lo_style TYPE REF TO zcl_excel_style, + lv_style TYPE zexcel_cell_style. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '17_SheetProtection.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_pwd TYPE zexcel_aes_password LOWER CASE DEFAULT 'secret'. + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. +* lo_worksheet->zif_excel_sheet_protection~password = 'DAA7'. "it is the encoded word "secret" + lo_worksheet->zif_excel_sheet_protection~password = zcl_excel_common=>encrypt_password( p_pwd ). + lo_worksheet->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~objects = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=>c_active. + " First style to unlock a cell + lo_style_protection = lo_excel->add_new_style( ). + lo_style_protection->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. + lv_style_protection_guid = lo_style_protection->get_guid( ). + " Another style which should not affect the unlock style + lo_style = lo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = 'FFCC3333'. + lv_style = lo_style->get_guid( ). + lo_worksheet->set_cell( ip_row = 3 ip_column = 'C' ip_value = 'This cell is locked locked and has the second formating' ip_style = lv_style ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 'This cell is locked as all the others empty cell' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'This cell is locked as all the others empty cell' ). + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED2 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched2. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lo_style_title TYPE REF TO zcl_excel_style, + lv_style_title_guid TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Styles + lo_style_title = lo_excel->add_new_style( ). + lo_style_title->font->bold = abap_true. + lo_style_title->font->color-rgb = zcl_excel_style_color=>c_blue. + lv_style_title_guid = lo_style_title->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo TechEd' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'TechEd demo' ip_style = lv_style_title_guid ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL18 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel18. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_style_protection_guid TYPE zexcel_cell_style. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '18_BookProtection.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_excel->zif_excel_book_protection~protected = zif_excel_book_protection=>c_protected. + lo_excel->zif_excel_book_protection~lockrevision = zif_excel_book_protection=>c_locked. + lo_excel->zif_excel_book_protection~lockstructure = zif_excel_book_protection=>c_locked. + lo_excel->zif_excel_book_protection~lockwindows = zif_excel_book_protection=>c_locked. + + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'This cell is unlocked' ip_style = lv_style_protection_guid ). + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL19 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel19. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '19_SetActiveSheet.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_noout TYPE xfeld DEFAULT abap_true. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " First Worksheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'First' ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'This is Sheet 1' ). + + " Second Worksheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Second' ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'This is Sheet 2' ). + + " Third Worksheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Third' ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'This is Sheet 3' ). + + IF p_noout EQ abap_false. + " lo_excel->set_active_sheet_index_by_name( data_sheet_name ). + DATA: active_sheet_index TYPE zexcel_active_worksheet. + active_sheet_index = lo_excel->get_active_sheet_index( ). + WRITE: 'Sheet Index before: ', active_sheet_index. + ENDIF. + lo_excel->set_active_sheet_index( '2' ). + IF p_noout EQ abap_false. + active_sheet_index = lo_excel->get_active_sheet_index( ). + WRITE: 'Sheet Index after: ', active_sheet_index. + ENDIF. + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL2 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel2. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_bold TYPE REF TO zcl_excel_style, + lo_style_underline TYPE REF TO zcl_excel_style, + lo_style_filled TYPE REF TO zcl_excel_style, + lo_style_border TYPE REF TO zcl_excel_style, + lo_style_button TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lo_border_light TYPE REF TO zcl_excel_style_border. + +DATA: lv_style_bold_guid TYPE zexcel_cell_style, + lv_style_underline_guid TYPE zexcel_cell_style, + lv_style_filled_guid TYPE zexcel_cell_style, + lv_style_filled_green_guid TYPE zexcel_cell_style, + lv_style_border_guid TYPE zexcel_cell_style, + lv_style_button_guid TYPE zexcel_cell_style, + lv_style_filled_turquoise_guid TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: gc_save_file_name TYPE string VALUE '02_Styles.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + + +START-OF-SELECTION. + + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + CREATE OBJECT lo_border_light. + lo_border_light->border_color-rgb = zcl_excel_style_color=>c_gray. + lo_border_light->border_style = zcl_excel_style_border=>c_border_thin. + " Create a bold / italic style + lo_style_bold = lo_excel->add_new_style( ). + lo_style_bold->font->bold = abap_true. + lo_style_bold->font->italic = abap_true. + lo_style_bold->font->name = zcl_excel_style_font=>c_name_arial. + lo_style_bold->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_bold->font->color-rgb = zcl_excel_style_color=>c_red. + lv_style_bold_guid = lo_style_bold->get_guid( ). + " Create an underline double style + lo_style_underline = lo_excel->add_new_style( ). + lo_style_underline->font->underline = abap_true. + lo_style_underline->font->underline_mode = zcl_excel_style_font=>c_underline_double. + lo_style_underline->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_underline->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_underline->font->family = zcl_excel_style_font=>c_family_roman. + lv_style_underline_guid = lo_style_underline->get_guid( ). + " Create filled style yellow + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-theme = zcl_excel_style_color=>c_theme_accent6. + lv_style_filled_guid = lo_style_filled->get_guid( ). + " Create border with button effects + lo_style_button = lo_excel->add_new_style( ). + lo_style_button->borders->right = lo_border_dark. + lo_style_button->borders->down = lo_border_dark. + lo_style_button->borders->left = lo_border_light. + lo_style_button->borders->top = lo_border_light. + lv_style_button_guid = lo_style_button->get_guid( ). + "Create style with border + lo_style_border = lo_excel->add_new_style( ). + lo_style_border->borders->allborders = lo_border_dark. + lo_style_border->borders->diagonal = lo_border_dark. + lo_style_border->borders->diagonal_mode = zcl_excel_style_borders=>c_diagonal_both. + lv_style_border_guid = lo_style_border->get_guid( ). + " Create filled style green + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-rgb = zcl_excel_style_color=>c_green. + lo_style_filled->font->name = zcl_excel_style_font=>c_name_cambria. + lo_style_filled->font->scheme = zcl_excel_style_font=>c_scheme_major. + lv_style_filled_green_guid = lo_style_filled->get_guid( ). + + " Create filled style turquoise using legacy excel ver <= 2003 palette. (https://code.sdn.sap.com/spaces/abap2xlsx/tickets/92) + lo_style_filled = lo_excel->add_new_style( ). + lo_excel->legacy_palette->set_color( "replace built-in color from palette with out custom RGB turquoise + ip_index = 16 + ip_color = '0040E0D0' ). + + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-indexed = 16. + lv_style_filled_turquoise_guid = lo_style_filled->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Styles' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Bold text' ip_style = lv_style_bold_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 4 ip_value = 'Underlined text' ip_style = lv_style_underline_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 6 ip_value = 'Borders' ip_style = lv_style_border_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 7 ip_value = 'I''m not a button :)' ip_style = lv_style_button_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 9 ip_value = 'Modified color for Excel 2003' ip_style = lv_style_filled_turquoise_guid ). + " Fill the cell and apply one style + lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + " Change the style + lo_worksheet->set_cell_style( ip_column = 'B' ip_row = 6 ip_style = lv_style_filled_green_guid ). + " Add Style to an empty cell to test Fix for Issue + "#44 Exception ZCX_EXCEL thrown when style is set for an empty cell + " https://code.sdn.sap.com/spaces/abap2xlsx/tickets/44-exception-zcx_excel-thrown-when-style-is-set-for-an-empty-cell + lo_worksheet->set_cell_style( ip_column = 'E' ip_row = 6 ip_style = lv_style_filled_green_guid ). + +* CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. +* lv_file = lo_excel_writer->write_file( lo_excel ). +* +* " Convert to binary +* CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' +* EXPORTING +* buffer = lv_file +* IMPORTING +* output_length = lv_bytecount +* TABLES +* binary_tab = lt_file_tab. +** " This method is only available on AS ABAP > 6.40 +** lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +** lv_bytecount = xstrlen( lv_file ). +* +* " Save the file +* cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount +* filename = lv_full_path +* filetype = 'BIN' +* CHANGING data_tab = lt_file_tab ). + + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL22 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel22. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style TYPE REF TO zcl_excel_style, + lo_style_date TYPE REF TO zcl_excel_style, + lo_style_editable TYPE REF TO zcl_excel_style, + lo_data_validation TYPE REF TO zcl_excel_data_validation. + +DATA: lt_field_catalog TYPE zexcel_t_fieldcatalog, + ls_table_settings TYPE zexcel_s_table_settings, + ls_table_settings_out TYPE zexcel_s_table_settings. + +DATA: lv_style_guid TYPE zexcel_cell_style. + +DATA: lv_row TYPE char10. + +FIELD-SYMBOLS: <fs_field_catalog> TYPE zexcel_s_fieldcatalog. + +CONSTANTS: gc_save_file_name TYPE string VALUE '22_itab_fieldcatalog.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'PN_MASSIVE'). + + DATA lt_test TYPE TABLE OF sflight. + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + + " sheet style (white background) + lo_style = lo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = zcl_excel_style_color=>c_white. + lv_style_guid = lo_style->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->zif_excel_sheet_properties~set_style( lv_style_guid ). + lo_worksheet->zif_excel_sheet_protection~protected = zif_excel_sheet_protection=>c_protected. + lo_worksheet->zif_excel_sheet_protection~password = zcl_excel_common=>encrypt_password( 'test' ). + lo_worksheet->zif_excel_sheet_protection~sheet = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~objects = zif_excel_sheet_protection=>c_active. + lo_worksheet->zif_excel_sheet_protection~scenarios = zif_excel_sheet_protection=>c_active. + + " Create cell style for display only fields + lo_style = lo_excel->add_new_style( ). + lo_style->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style->fill->fgcolor-rgb = zcl_excel_style_color=>c_gray. + lo_style->number_format->format_code = zcl_excel_style_number_format=>c_format_text. + + " Create cell style for display only date field + lo_style_date = lo_excel->add_new_style( ). + lo_style_date->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_date->fill->fgcolor-rgb = zcl_excel_style_color=>c_gray. + lo_style_date->number_format->format_code = zcl_excel_style_number_format=>c_format_date_ddmmyyyy. + + " Create cell style for editable fields + lo_style_editable = lo_excel->add_new_style( ). + lo_style_editable->protection->locked = zcl_excel_style_protection=>c_protection_unlocked. + + lt_field_catalog = zcl_excel_common=>get_fieldcatalog( ip_table = lt_test ). + + LOOP AT lt_field_catalog ASSIGNING <fs_field_catalog>. + CASE <fs_field_catalog>-fieldname. + WHEN 'CARRID'. + <fs_field_catalog>-position = 3. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style->get_guid( ). + WHEN 'CONNID'. + <fs_field_catalog>-position = 1. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style->get_guid( ). + WHEN 'FLDATE'. + <fs_field_catalog>-position = 2. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style_date->get_guid( ). + WHEN 'PRICE'. + <fs_field_catalog>-position = 4. + <fs_field_catalog>-dynpfld = abap_true. + <fs_field_catalog>-style = lo_style_editable->get_guid( ). + <fs_field_catalog>-totals_function = zcl_excel_table=>totals_function_sum. + WHEN OTHERS. + <fs_field_catalog>-dynpfld = abap_false. + ENDCASE. + ENDLOOP. + + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2. + ls_table_settings-show_row_stripes = abap_true. + + lo_worksheet->bind_table( EXPORTING + ip_table = lt_test + it_field_catalog = lt_field_catalog + is_table_settings = ls_table_settings + IMPORTING + es_table_settings = ls_table_settings_out ). + + lo_worksheet->freeze_panes( ip_num_rows = 3 ). "freeze column headers when scrolling + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_custom. + lv_row = ls_table_settings_out-top_left_row. + CONDENSE lv_row. + CONCATENATE 'ISNUMBER(' ls_table_settings_out-top_left_column lv_row ')' INTO lo_data_validation->formula1. + lo_data_validation->cell_row = ls_table_settings_out-top_left_row. + lo_data_validation->cell_column = ls_table_settings_out-top_left_column. + lo_data_validation->cell_row_to = ls_table_settings_out-bottom_right_row. + lo_data_validation->cell_column_to = ls_table_settings_out-bottom_right_column. + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL21 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel21. + +TYPES: + BEGIN OF t_color_style, + color TYPE zexcel_style_color_argb, + style TYPE zexcel_cell_style, + END OF t_color_style. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_filled TYPE REF TO zcl_excel_style. + +DATA: color_styles TYPE TABLE OF t_color_style. + +FIELD-SYMBOLS: <color_style> LIKE LINE OF color_styles. + +CONSTANTS: max TYPE i VALUE 255, + step TYPE i VALUE 51. + +DATA: red TYPE i, + green TYPE i, + blue TYPE i, + red_hex(1) TYPE x, + green_hex(1) TYPE x, + blue_hex(1) TYPE x, + red_str TYPE string, + green_str TYPE string, + blue_str TYPE string. + +DATA: color TYPE zexcel_style_color_argb, + tint TYPE zexcel_style_color_tint. + +DATA: row TYPE i, + row_tmp TYPE i, + column TYPE zexcel_cell_column VALUE 1, + col_str TYPE zexcel_cell_column_alpha. + +CONSTANTS: gc_save_file_name TYPE string VALUE '21_BackgroundColorPicker.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + WHILE red <= max. + green = 0. + WHILE green <= max. + blue = 0. + WHILE blue <= max. + red_hex = red. + red_str = red_hex. + green_hex = green. + green_str = green_hex. + blue_hex = blue. + blue_str = blue_hex. + " Create filled + CONCATENATE 'FF' red_str green_str blue_str INTO color. + APPEND INITIAL LINE TO color_styles ASSIGNING <color_style>. + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-rgb = color. + <color_style>-color = color. + <color_style>-style = lo_style_filled->get_guid( ). + blue = blue + step. + ENDWHILE. + green = green + step. + ENDWHILE. + red = red + step. + ENDWHILE. + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Color Picker' ). + LOOP AT color_styles ASSIGNING <color_style>. + row_tmp = ( max / step + 1 ) * 3. + IF row = row_tmp. + row = 0. + column = column + 1. + ENDIF. + row = row + 1. + col_str = zcl_excel_common=>convert_column2alpha( column ). + + " Fill the cell and apply one style + lo_worksheet->set_cell( ip_column = col_str + ip_row = row + ip_value = <color_style>-color + ip_style = <color_style>-style ). + ENDLOOP. + + row = row + 2. + tint = '-0.5'. + DO 10 TIMES. + column = 1. + DO 10 TIMES. + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-theme = sy-index - 1. + lo_style_filled->fill->fgcolor-tint = tint. + <color_style>-style = lo_style_filled->get_guid( ). + col_str = zcl_excel_common=>convert_column2alpha( column ). + lo_worksheet->set_cell_style( ip_column = col_str + ip_row = row + ip_style = <color_style>-style ). + + ADD 1 TO column. + ENDDO. + ADD '0.1' TO tint. + ADD 1 TO row. + ENDDO. + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *--------------------------------------------------------------------* +* REPORT ZDEMO_EXCEL20 +* Demo for method zcl_excel_worksheet-bind_alv: +* export data from ALV (CL_GUI_ALV_GRID) object to excel +*--------------------------------------------------------------------* +REPORT zdemo_excel20. + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events DEFINITION. + PUBLIC SECTION. + METHODS: + on_user_command FOR EVENT added_function OF cl_salv_events + IMPORTING e_salv_function. +ENDCLASS. "lcl_handle_events DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events IMPLEMENTATION. + METHOD on_user_command. + PERFORM user_command." using e_salv_function text-i08. + ENDMETHOD. "on_user_command +ENDCLASS. "lcl_handle_events IMPLEMENTATION + +*--------------------------------------------------------------------* +* DATA DECLARATION +*--------------------------------------------------------------------* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_alv TYPE REF TO cl_gui_alv_grid, + lo_salv TYPE REF TO cl_salv_table, + gr_events TYPE REF TO lcl_handle_events, + lr_events TYPE REF TO cl_salv_events_table, + gt_sbook TYPE TABLE OF sbook, + gt_listheader TYPE slis_t_listheader, + wa_listheader LIKE LINE OF gt_listheader. + +DATA: l_path TYPE string, " local dir + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: + lv_default_file_name TYPE string VALUE '20_BindAlv.xlsx'. +*--------------------------------------------------------------------* +*START-OF-SELECTION +*--------------------------------------------------------------------* + +START-OF-SELECTION. + +* get data +* ------------------------------------------ + + SELECT * + INTO TABLE gt_sbook[] + FROM sbook "#EC CI_NOWHERE + UP TO 10 ROWS. + +* Display ALV +* ------------------------------------------ + + TRY. + cl_salv_table=>factory( + EXPORTING + list_display = abap_false + IMPORTING + r_salv_table = lo_salv + CHANGING + t_table = gt_sbook[] ). + CATCH cx_salv_msg . + ENDTRY. + + TRY. + lo_salv->set_screen_status( + EXPORTING + report = sy-repid + pfstatus = 'ALV_STATUS' + set_functions = lo_salv->c_functions_all ). + CATCH cx_salv_msg . + ENDTRY. + + lr_events = lo_salv->get_event( ). + CREATE OBJECT gr_events. + SET HANDLER gr_events->on_user_command FOR lr_events. + + lo_salv->display( ). + + +*&---------------------------------------------------------------------* +*& Form USER_COMMAND +*&---------------------------------------------------------------------* +* ALV user command +*--------------------------------------------------------------------* +FORM user_command . + IF sy-ucomm = 'EXCEL'. + +* get save file path + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = l_path ). + cl_gui_cfw=>flush( ). + cl_gui_frontend_services=>directory_browse( + EXPORTING initial_folder = l_path + CHANGING selected_folder = l_path ). + + IF l_path IS INITIAL. + cl_gui_frontend_services=>get_sapgui_workdir( + CHANGING sapworkdir = lv_workdir ). + l_path = lv_workdir. + ENDIF. + + cl_gui_frontend_services=>get_file_separator( + CHANGING file_separator = lv_file_separator ). + + CONCATENATE l_path lv_file_separator lv_default_file_name + INTO l_path. + +* export file to save file path + + PERFORM export_to_excel. + + ENDIF. +ENDFORM. " USER_COMMAND + +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +FORM export_to_excel. + +* create zcl_excel_worksheet object + + CREATE OBJECT lo_excel. + lo_worksheet = lo_excel->get_active_worksheet( ). + +* get ALV object from screen + + CALL FUNCTION 'GET_GLOBALS_FROM_SLVC_FULLSCR' + IMPORTING + e_grid = lo_alv. + +* build list header + + wa_listheader-typ = 'H'. + wa_listheader-info = sy-title. + APPEND wa_listheader TO gt_listheader. + + wa_listheader-typ = 'S'. + wa_listheader-info = 'Created by: ABAP2XLSX Group'. + APPEND wa_listheader TO gt_listheader. + + wa_listheader-typ = 'A'. + wa_listheader-info = + 'Project hosting at https://cw.sdn.sap.com/cw/groups/abap2xlsx'. + APPEND wa_listheader TO gt_listheader. + +* write to excel using method Bin_ALV + + lo_worksheet->bind_alv_ole2( + EXPORTING +* I_DOCUMENT_URL = SPACE " excel template +* I_XLS = 'X' " create in xls format? + i_save_path = l_path + io_alv = lo_alv + it_listheader = gt_listheader + i_top = 2 + i_left = 1 +* I_COLUMNS_HEADER = 'X' +* I_COLUMNS_AUTOFIT = 'X' +* I_FORMAT_COL_HEADER = +* I_FORMAT_SUBTOTAL = +* I_FORMAT_TOTAL = + EXCEPTIONS + miss_guide = 1 + ex_transfer_kkblo_error = 2 + fatal_error = 3 + inv_data_range = 4 + dim_mismatch_vkey = 5 + dim_mismatch_sema = 6 + error_in_sema = 7 + OTHERS = 8 + ). + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + ENDIF. + +ENDFORM. "EXPORT_TO_EXCEL + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel3. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + +DATA: ls_table_settings TYPE zexcel_s_table_settings. + + +DATA: lv_title TYPE zexcel_sheet_title, + lt_carr TYPE TABLE OF scarr, + row TYPE zexcel_cell_row VALUE 2, + lo_range TYPE REF TO zcl_excel_range. +DATA: lo_data_validation TYPE REF TO zcl_excel_data_validation. +FIELD-SYMBOLS: <carr> LIKE LINE OF lt_carr. + +CONSTANTS: c_airlines TYPE string VALUE 'Airlines'. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '03_iTab.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_empty TYPE flag. + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Internal table'). + + DATA lt_test TYPE TABLE OF sflight. + + IF p_empty <> abap_true. + SELECT * FROM sflight INTO TABLE lt_test. "#EC CI_NOWHERE + ENDIF. + + ls_table_settings-table_style = zcl_excel_table=>builtinstyle_medium2. + ls_table_settings-show_row_stripes = abap_true. + ls_table_settings-nofilters = abap_true. + + lo_worksheet->bind_table( ip_table = lt_test + is_table_settings = ls_table_settings ). + + lo_worksheet->freeze_panes( ip_num_rows = 3 ). "freeze column headers when scrolling + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'E' ). "make date field a bit wider + column_dimension->set_width( ip_width = 11 ). + " Add another table for data validations + lo_worksheet = lo_excel->add_new_worksheet( ). + lv_title = 'Data Validation'. + lo_worksheet->set_title( lv_title ). + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = c_airlines ). + SELECT * FROM scarr INTO TABLE lt_carr. "#EC CI_NOWHERE + LOOP AT lt_carr ASSIGNING <carr>. + lo_worksheet->set_cell( ip_row = row ip_column = 'A' ip_value = <carr>-carrid ). + row = row + 1. + ENDLOOP. + row = row - 1. + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_airlines. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'A' + ip_start_row = 2 + ip_stop_column = 'A' + ip_stop_row = row ). + " Set Data Validation + lo_excel->set_active_sheet_index( 1 ). + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_airlines. + lo_data_validation->cell_row = 4. + lo_data_validation->cell_column = 'C'. + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel30. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + + +DATA: lv_value TYPE string, + lv_count TYPE i VALUE 10, + lv_packed TYPE p LENGTH 16 DECIMALS 1 VALUE '1234567890.5'. + +CONSTANTS: lc_typekind_string TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_string, + lc_typekind_packed TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_packed, + lc_typekind_num TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_num, + lc_typekind_date TYPE abap_typekind VALUE cl_abap_typedescr=>typekind_date, + lc_typekind_s_ls TYPE string VALUE 's_leading_blanks'. + +CONSTANTS: gc_save_file_name TYPE string VALUE '30_CellDataTypes.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Cell data types' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'Number as String' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 2 ip_value = '11' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 1 ip_value = 'String' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = ' String with leading spaces' + ip_data_type = lc_typekind_s_ls ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = ' Negative Value' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_value = 'Packed' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 2 ip_value = '50000.01-' + ip_abap_type = lc_typekind_packed ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 1 ip_value = 'Number with Percentage' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 2 ip_value = '0 %' + ip_abap_type = lc_typekind_num ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = 1 ip_value = 'Date' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = 2 ip_value = '20110831' + ip_abap_type = lc_typekind_date ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'Positive Value' + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = '5000.02' + ip_abap_type = lc_typekind_packed ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 3 ip_value = '50 %' + ip_abap_type = lc_typekind_num ). + + WHILE lv_count <= 15. + lv_value = lv_count. + CONCATENATE 'Positive Value with' lv_value 'Digits' INTO lv_value SEPARATED BY space. + lo_worksheet->set_cell( ip_column = 'B' ip_row = lv_count ip_value = lv_value + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = lv_count ip_value = lv_packed + ip_abap_type = lc_typekind_packed ). + CONCATENATE 'Positive Value with' lv_value 'Digits formated as string' INTO lv_value SEPARATED BY space. + lo_worksheet->set_cell( ip_column = 'D' ip_row = lv_count ip_value = lv_value + ip_abap_type = lc_typekind_string ). + lo_worksheet->set_cell( ip_column = 'E' ip_row = lv_count ip_value = lv_packed + ip_abap_type = lc_typekind_string ). + lv_packed = lv_packed * 10. + lv_count = lv_count + 1. + ENDWHILE. + + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'C' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'D' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( ip_column = 'E' ). + column_dimension->set_auto_size( abap_true ). + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel31. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime. + + +DATA: fieldval TYPE text80, + row TYPE i, + style_column_a TYPE REF TO zcl_excel_style, + style_column_a_guid TYPE zexcel_cell_style, + style_column_b TYPE REF TO zcl_excel_style, + style_column_b_guid TYPE zexcel_cell_style, + style_column_c TYPE REF TO zcl_excel_style, + style_column_c_guid TYPE zexcel_cell_style, + style_font TYPE REF TO zcl_excel_style_font. + +CONSTANTS: gc_save_file_name TYPE string VALUE '31_AutosizeWithDifferentFontSizes.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + " Use active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Regular Font' ). + + style_column_a = lo_excel->add_new_style( ). + style_column_a->font->size = 32. " quite large + style_column_a_guid = style_column_a->get_guid( ). + + style_column_c = lo_excel->add_new_style( ). + style_column_c->font->size = 16. " not so large + style_column_c_guid = style_column_c->get_guid( ). + + + DO 20 TIMES. + row = sy-index. + CLEAR fieldval. + DO sy-index TIMES. + CONCATENATE fieldval 'X' INTO fieldval. + ENDDO. + lo_worksheet->set_cell( ip_column = 'A' ip_row = row ip_value = fieldval ip_style = style_column_a_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = row ip_value = fieldval ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = row ip_value = fieldval ip_style = style_column_c_guid ). + ENDDO. + + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Add sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Bold Font' ). + + style_column_a = lo_excel->add_new_style( ). + style_column_a->font->size = 32. " quite large + style_column_a->font->bold = abap_true. + style_column_a_guid = style_column_a->get_guid( ). + + style_column_b = lo_excel->add_new_style( ). + style_column_b->font->bold = abap_true. + style_column_b_guid = style_column_b->get_guid( ). + + style_column_c = lo_excel->add_new_style( ). + style_column_c->font->size = 16. " not so large + style_column_c->font->bold = abap_true. + style_column_c_guid = style_column_c->get_guid( ). + + DO 20 TIMES. + row = sy-index. + CLEAR fieldval. + DO sy-index TIMES. + CONCATENATE fieldval 'X' INTO fieldval. + ENDDO. + lo_worksheet->set_cell( ip_column = 'A' ip_row = row ip_value = fieldval ip_style = style_column_a_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = row ip_value = fieldval ip_style = style_column_b_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = row ip_value = fieldval ip_style = style_column_c_guid ). + ENDDO. + + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Add sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Italic Font' ). + + style_column_a = lo_excel->add_new_style( ). + style_column_a->font->size = 32. " quite large + style_column_a->font->italic = abap_true. + style_column_a_guid = style_column_a->get_guid( ). + + style_column_b = lo_excel->add_new_style( ). + style_column_b->font->italic = abap_true. + style_column_b_guid = style_column_b->get_guid( ). + + style_column_c = lo_excel->add_new_style( ). + style_column_c->font->size = 16. " not so large + style_column_c->font->italic = abap_true. + style_column_c_guid = style_column_c->get_guid( ). + + DO 20 TIMES. + row = sy-index. + CLEAR fieldval. + DO sy-index TIMES. + CONCATENATE fieldval 'X' INTO fieldval. + ENDDO. + lo_worksheet->set_cell( ip_column = 'A' ip_row = row ip_value = fieldval ip_style = style_column_a_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = row ip_value = fieldval ip_style = style_column_b_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = row ip_value = fieldval ip_style = style_column_c_guid ). + ENDDO. + + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + " Add sheet for merged cells + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Merged cells' ). + + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = 'This is a very long header text' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 2 ip_value = 'Some data' ). + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = 'Some more data' ). + + lo_worksheet->set_merge( + EXPORTING + ip_column_start = 'A' + ip_column_end = 'C' + ip_row = 1 ). + + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( ip_auto_size = abap_true ). + + lo_excel->set_active_sheet_index( i_active_worksheet = 1 ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + *--------------------------------------------------------------------* +* REPORT ZDEMO_EXCEL32 +* Demo for export options from ALV GRID: +* export data from ALV (CL_GUI_ALV_GRID) object or cl_salv_table object +* to Excel. +*--------------------------------------------------------------------* +REPORT zdemo_excel32. + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events DEFINITION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events DEFINITION. + PUBLIC SECTION. + METHODS: + on_user_command FOR EVENT added_function OF cl_salv_events + IMPORTING e_salv_function. +ENDCLASS. "lcl_handle_events DEFINITION + +*----------------------------------------------------------------------* +* CLASS lcl_handle_events IMPLEMENTATION +*----------------------------------------------------------------------* +* +*----------------------------------------------------------------------* +CLASS lcl_handle_events IMPLEMENTATION. + METHOD on_user_command. + PERFORM user_command." using e_salv_function text-i08. + ENDMETHOD. "on_user_command +ENDCLASS. "lcl_handle_events IMPLEMENTATION + +*--------------------------------------------------------------------* +* DATA DECLARATION +*--------------------------------------------------------------------* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_salv TYPE REF TO cl_salv_table, + gr_events TYPE REF TO lcl_handle_events, + lr_events TYPE REF TO cl_salv_events_table, + gt_sbook TYPE TABLE OF sbook. + +DATA: l_path TYPE string, " local dir + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: + lv_default_file_name TYPE string VALUE '32_Export_ALV.xlsx', + lv_default_file_name2 TYPE string VALUE '32_Export_Convert.xlsx'. +*--------------------------------------------------------------------* +*START-OF-SELECTION +*--------------------------------------------------------------------* + +START-OF-SELECTION. + +* get data +* ------------------------------------------ + + SELECT * + INTO TABLE gt_sbook[] + FROM sbook "#EC CI_NOWHERE + UP TO 100 ROWS. + +* Display ALV +* ------------------------------------------ + + TRY. + cl_salv_table=>factory( + EXPORTING + list_display = abap_false + IMPORTING + r_salv_table = lo_salv + CHANGING + t_table = gt_sbook[] ). + CATCH cx_salv_msg . + ENDTRY. + + TRY. + lo_salv->set_screen_status( + EXPORTING + report = sy-repid + pfstatus = 'ALV_STATUS' + set_functions = lo_salv->c_functions_all ). + CATCH cx_salv_msg . + ENDTRY. + + lr_events = lo_salv->get_event( ). + CREATE OBJECT gr_events. + SET HANDLER gr_events->on_user_command FOR lr_events. + + lo_salv->display( ). + + +*&---------------------------------------------------------------------* +*& Form USER_COMMAND +*&---------------------------------------------------------------------* +* ALV user command +*--------------------------------------------------------------------* +FORM user_command . + +* get save file path + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = l_path ). + cl_gui_cfw=>flush( ). + cl_gui_frontend_services=>directory_browse( + EXPORTING initial_folder = l_path + CHANGING selected_folder = l_path ). + + IF l_path IS INITIAL. + cl_gui_frontend_services=>get_sapgui_workdir( + CHANGING sapworkdir = lv_workdir ). + l_path = lv_workdir. + ENDIF. + + cl_gui_frontend_services=>get_file_separator( + CHANGING file_separator = lv_file_separator ). + + + +* export file to save file path + CASE sy-ucomm. + WHEN 'EXCELBIND'. + CONCATENATE l_path lv_file_separator lv_default_file_name + INTO l_path. + PERFORM export_to_excel_bind. + + WHEN 'EXCELCONV'. + + CONCATENATE l_path lv_file_separator lv_default_file_name2 + INTO l_path. + PERFORM export_to_excel_conv. + + ENDCASE. +ENDFORM. " USER_COMMAND +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL_CONV +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +FORM export_to_excel_conv. + DATA: lo_converter TYPE REF TO zcl_excel_converter. + + CREATE OBJECT lo_converter. +*TRY. + lo_converter->convert( + EXPORTING + io_alv = lo_salv + it_table = gt_sbook + i_row_int = 2 + i_column_int = 2 +* i_table = +* i_style_table = +* io_worksheet = +* CHANGING +* co_excel = + ). +* CATCH zcx_excel . +*ENDTRY. + lo_converter->write_file( i_path = l_path ). + +ENDFORM. "EXPORT_TO_EXCEL_CONV + +*--------------------------------------------------------------------* +* FORM EXPORT_TO_EXCEL_BIND +*--------------------------------------------------------------------* +* This subroutine is principal demo session +*--------------------------------------------------------------------* +FORM export_to_excel_bind. +* create zcl_excel_worksheet object + CREATE OBJECT lo_excel. + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + +* write to excel using method Bin_object +*try. + lo_worksheet->bind_alv( + io_alv = lo_salv + it_table = gt_sbook + i_top = 2 + i_left = 1 + ). +* catch zcx_excel . +*endtry. + + + PERFORM write_file. + +ENDFORM. "EXPORT_TO_EXCEL_BIND +*&---------------------------------------------------------------------* +*& Form WRITE_FILE +*&---------------------------------------------------------------------* +* text +*----------------------------------------------------------------------* +* --> p1 text +* <-- p2 text +*----------------------------------------------------------------------* +FORM write_file . + DATA: lt_file TYPE solix_tab, + l_bytecount TYPE i, + l_file TYPE xstring. + + DATA: lo_excel_writer TYPE REF TO zif_excel_writer. + + DATA: ls_seoclass TYPE seoclass. + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + l_file = lo_excel_writer->write_file( lo_excel ). + + SELECT SINGLE * INTO ls_seoclass + FROM seoclass + WHERE clsname = 'CL_BCS_CONVERT'. + + IF sy-subrc = 0. + CALL METHOD (ls_seoclass-clsname)=>xstring_to_solix + EXPORTING + iv_xstring = l_file + RECEIVING + et_solix = lt_file. + + l_bytecount = XSTRLEN( l_file ). + ELSE. + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = l_file + IMPORTING + output_length = l_bytecount + TABLES + binary_tab = lt_file. + ENDIF. + + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = l_bytecount + filename = l_path + filetype = 'BIN' + CHANGING data_tab = lt_file ). + +ENDFORM. " WRITE_FILE + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel33. + +TYPE-POOLS: abap. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_converter TYPE REF TO zcl_excel_converter, + lo_autofilter TYPE REF TO zcl_excel_autofilter. + +DATA lt_test TYPE TABLE OF t005t. + +DATA: l_cell_value TYPE zexcel_cell_value, + ls_area TYPE zexcel_s_autofilter_area. + +CONSTANTS: c_airlines TYPE string VALUE 'Airlines'. + +CONSTANTS: gc_save_file_name TYPE string VALUE '33_autofilter.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Internal table'). + + SELECT * UP TO 2 ROWS FROM t005t INTO TABLE lt_test. "#EC CI_NOWHERE + + CREATE OBJECT lo_converter. + + lo_converter->convert( EXPORTING + it_table = lt_test + i_row_int = 1 + i_column_int = 1 + io_worksheet = lo_worksheet + CHANGING + co_excel = lo_excel ) . + + lo_autofilter = lo_excel->add_new_autofilter( io_sheet = lo_worksheet ) . + + ls_area-row_start = 1. + ls_area-col_start = 1. + ls_area-row_end = lo_worksheet->get_highest_row( ). + ls_area-col_end = lo_worksheet->get_highest_column( ). + + lo_autofilter->set_filter_area( is_area = ls_area ). + + lo_worksheet->get_cell( EXPORTING + ip_column = 'C' + ip_row = 2 + IMPORTING + ep_value = l_cell_value ). + lo_autofilter->set_value( i_column = 3 + i_value = l_cell_value ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL2 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel34. + +CONSTANTS: width TYPE f VALUE '10.14'. +CONSTANTS: height TYPE f VALUE '57.75'. + +DATA: current_row TYPE i, + col TYPE i, + col_alpha TYPE zexcel_cell_column_alpha, + row TYPE i, + row_board TYPE i, + colorflag TYPE i, + color TYPE zexcel_style_color_argb, + + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + row_dimension TYPE REF TO zcl_excel_worksheet_rowdimensi, + + writing1 TYPE string, + writing2 TYPE string. + + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +CONSTANTS: gc_save_file_name TYPE string VALUE '34_Static Styles_Chess.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Spassky_vs_Bronstein' ). + +* Header + current_row = 1. + + ADD 1 TO current_row. + lo_worksheet->set_cell( ip_row = current_row ip_column = 'B' ip_value = 'White' ). + lo_worksheet->set_cell( ip_row = current_row ip_column = 'C' ip_value = 'Spassky, Boris V -- wins in turn 23' ). + + ADD 1 TO current_row. + lo_worksheet->set_cell( ip_row = current_row ip_column = 'B' ip_value = 'Black' ). + lo_worksheet->set_cell( ip_row = current_row ip_column = 'C' ip_value = 'Bronstein, David I' ). + + ADD 1 TO current_row. +* Set size of column + Writing above chessboard + DO 8 TIMES. + + writing1 = zcl_excel_common=>convert_column2alpha( sy-index ). + writing2 = sy-index . + row = current_row + sy-index. + + col = sy-index + 1. + col_alpha = zcl_excel_common=>convert_column2alpha( col ). + +* Set size of column + column_dimension = lo_worksheet->get_column_dimension( col_alpha ). + column_dimension->set_width( width ). + +* Set size of row + row_dimension = lo_worksheet->get_row_dimension( row ). + row_dimension->set_row_height( height ). + +* Set writing on chessboard + lo_worksheet->set_cell( ip_row = row + ip_column = 'A' + ip_value = writing2 ). + lo_worksheet->change_cell_style( ip_column = 'A' + ip_row = row + ip_alignment_vertical = zcl_excel_style_alignment=>c_vertical_center ). + lo_worksheet->set_cell( ip_row = row + ip_column = 'J' + ip_value = writing2 ). + lo_worksheet->change_cell_style( ip_column = 'J' + ip_row = row + ip_alignment_vertical = zcl_excel_style_alignment=>c_vertical_center ). + + row = current_row + 9. + lo_worksheet->set_cell( ip_row = current_row + ip_column = col_alpha + ip_value = writing1 ). + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = current_row + ip_alignment_horizontal = zcl_excel_style_alignment=>c_horizontal_center ). + lo_worksheet->set_cell( ip_row = row + ip_column = col_alpha + ip_value = writing1 ). + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_alignment_horizontal = zcl_excel_style_alignment=>c_horizontal_center ). + ENDDO. + column_dimension = lo_worksheet->get_column_dimension( 'A' ). + column_dimension->set_auto_size( abap_true ). + column_dimension = lo_worksheet->get_column_dimension( 'J' ). + column_dimension->set_auto_size( abap_true ). + +* Set win-position + CONSTANTS: c_pawn TYPE string VALUE 'Pawn'. + CONSTANTS: c_rook TYPE string VALUE 'Rook'. + CONSTANTS: c_knight TYPE string VALUE 'Knight'. + CONSTANTS: c_bishop TYPE string VALUE 'Bishop'. + CONSTANTS: c_queen TYPE string VALUE 'Queen'. + CONSTANTS: c_king TYPE string VALUE 'King'. + + row = current_row + 1. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = c_rook ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_rook ). + lo_worksheet->set_cell( ip_row = row ip_column = 'G' ip_value = c_knight ). + row = current_row + 2. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'D' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_queen ). + lo_worksheet->set_cell( ip_row = row ip_column = 'H' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'I' ip_value = c_king ). + row = current_row + 3. + lo_worksheet->set_cell( ip_row = row ip_column = 'I' ip_value = c_pawn ). + row = current_row + 4. + lo_worksheet->set_cell( ip_row = row ip_column = 'D' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_knight ). + row = current_row + 5. + lo_worksheet->set_cell( ip_row = row ip_column = 'E' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'F' ip_value = c_queen ). + row = current_row + 6. + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = c_bishop ). + row = current_row + 7. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'H' ip_value = c_pawn ). + lo_worksheet->set_cell( ip_row = row ip_column = 'I' ip_value = c_pawn ). + row = current_row + 8. + lo_worksheet->set_cell( ip_row = row ip_column = 'G' ip_value = c_rook ). + lo_worksheet->set_cell( ip_row = row ip_column = 'H' ip_value = c_king ). + +* Set Chessboard + DO 8 TIMES. + IF sy-index <= 3. " Black + color = zcl_excel_style_color=>c_black. + ELSE. + color = zcl_excel_style_color=>c_white. + ENDIF. + row_board = sy-index. + row = current_row + sy-index. + DO 8 TIMES. + col = sy-index + 1. + col_alpha = zcl_excel_common=>convert_column2alpha( col ). + TRY. +* Borders around outer limits + IF row_board = 1. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_top_style = zcl_excel_style_border=>c_border_thick + ip_borders_top_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. + IF row_board = 8. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_down_style = zcl_excel_style_border=>c_border_thick + ip_borders_down_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. + IF col = 2. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_left_style = zcl_excel_style_border=>c_border_thick + ip_borders_left_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. + IF col = 9. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_borders_right_style = zcl_excel_style_border=>c_border_thick + ip_borders_right_color_rgb = zcl_excel_style_color=>c_black ). + ENDIF. +* Style for writing + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_font_color_rgb = color + ip_font_bold = 'X' + ip_font_size = 16 + ip_alignment_horizontal = zcl_excel_style_alignment=>c_horizontal_center + ip_alignment_vertical = zcl_excel_style_alignment=>c_vertical_center + ip_fill_filltype = zcl_excel_style_fill=>c_fill_solid ). +* Color of field + colorflag = ( row + col ) MOD 2. + IF colorflag = 0. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_fill_fgcolor_rgb = 'FFB5866A' ). + ELSE. + lo_worksheet->change_cell_style( ip_column = col_alpha + ip_row = row + ip_fill_fgcolor_rgb = 'FFF5DEBF' ). + ENDIF. + + + + CATCH zcx_excel . + ENDTRY. + + ENDDO. + ENDDO. + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL2 +*& Test Styles for ABAP2XLSX +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel35. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_bold TYPE REF TO zcl_excel_style, + lo_style_underline TYPE REF TO zcl_excel_style, + lo_style_filled TYPE REF TO zcl_excel_style, + lo_style_border TYPE REF TO zcl_excel_style, + lo_style_button TYPE REF TO zcl_excel_style, + lo_border_dark TYPE REF TO zcl_excel_style_border, + lo_border_light TYPE REF TO zcl_excel_style_border. + +DATA: lv_style_bold_guid TYPE zexcel_cell_style, + lv_style_underline_guid TYPE zexcel_cell_style, + lv_style_filled_guid TYPE zexcel_cell_style, + lv_style_filled_green_guid TYPE zexcel_cell_style, + lv_style_border_guid TYPE zexcel_cell_style, + lv_style_button_guid TYPE zexcel_cell_style, + lv_style_filled_turquoise_guid TYPE zexcel_cell_style. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE '35_Static_Styles.xlsx'. + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>GET_DESKTOP_DIRECTORY( CHANGING DESKTOP_DIRECTORY = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + + sy-title = 'ZDEMO_EXCEL2;Issue 139: Change cellstyle retroactivly'. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create border object + CREATE OBJECT lo_border_dark. + lo_border_dark->border_color-rgb = zcl_excel_style_color=>c_black. + lo_border_dark->border_style = zcl_excel_style_border=>c_border_thin. + CREATE OBJECT lo_border_light. + lo_border_light->border_color-rgb = zcl_excel_style_color=>c_gray. + lo_border_light->border_style = zcl_excel_style_border=>c_border_thin. + " Create a bold / italic style + lo_style_bold = lo_excel->add_new_style( ). + lo_style_bold->font->bold = abap_true. + lo_style_bold->font->italic = abap_true. + lo_style_bold->font->name = zcl_excel_style_font=>c_name_arial. + lo_style_bold->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_bold->font->color-rgb = zcl_excel_style_color=>c_red. + lv_style_bold_guid = lo_style_bold->get_guid( ). + " Create an underline double style + lo_style_underline = lo_excel->add_new_style( ). + lo_style_underline->font->underline = abap_true. + lo_style_underline->font->underline_mode = zcl_excel_style_font=>c_underline_double. + lo_style_underline->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_underline->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_underline->font->family = zcl_excel_style_font=>c_family_roman. + lv_style_underline_guid = lo_style_underline->get_guid( ). + " Create filled style yellow + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-theme = zcl_excel_style_color=>c_theme_accent6. + lv_style_filled_guid = lo_style_filled->get_guid( ). + " Create border with button effects + lo_style_button = lo_excel->add_new_style( ). + lo_style_button->borders->right = lo_border_dark. + lo_style_button->borders->down = lo_border_dark. + lo_style_button->borders->left = lo_border_light. + lo_style_button->borders->top = lo_border_light. + lv_style_button_guid = lo_style_button->get_guid( ). + "Create style with border + lo_style_border = lo_excel->add_new_style( ). + lo_style_border->borders->allborders = lo_border_dark. + lo_style_border->borders->diagonal = lo_border_dark. + lo_style_border->borders->diagonal_mode = zcl_excel_style_borders=>c_diagonal_both. + lv_style_border_guid = lo_style_border->get_guid( ). + " Create filled style green + lo_style_filled = lo_excel->add_new_style( ). + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-rgb = zcl_excel_style_color=>c_green. + lo_style_filled->font->name = zcl_excel_style_font=>c_name_cambria. + lo_style_filled->font->scheme = zcl_excel_style_font=>c_scheme_major. + lv_style_filled_green_guid = lo_style_filled->get_guid( ). + + " Create filled style turquoise using legacy excel ver <= 2003 palette. (https://code.sdn.sap.com/spaces/abap2xlsx/tickets/92) + lo_style_filled = lo_excel->add_new_style( ). + lo_excel->legacy_palette->set_color( "replace built-in color from palette with out custom RGB turquoise + ip_index = 16 + ip_color = '0040E0D0' ). + + lo_style_filled->fill->filltype = zcl_excel_style_fill=>c_fill_solid. + lo_style_filled->fill->fgcolor-indexed = 16. + lv_style_filled_turquoise_guid = lo_style_filled->get_guid( ). + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Styles' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = 'Bold text' ip_style = lv_style_bold_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 4 ip_value = 'Underlined text' ip_style = lv_style_underline_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 5 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + lo_worksheet->set_cell( ip_column = 'C' ip_row = 6 ip_value = 'Borders' ip_style = lv_style_border_guid ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 7 ip_value = 'I''m not a button :)' ip_style = lv_style_button_guid ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 9 ip_value = 'Modified color for Excel 2003' ip_style = lv_style_filled_turquoise_guid ). + " Fill the cell and apply one style + lo_worksheet->set_cell( ip_column = 'B' ip_row = 6 ip_value = 'Filled text' ip_style = lv_style_filled_guid ). + " Change the style + lo_worksheet->set_cell_style( ip_column = 'B' ip_row = 6 ip_style = lv_style_filled_green_guid ). + " Add Style to an empty cell to test Fix for Issue + "#44 Exception ZCX_EXCEL thrown when style is set for an empty cell + " https://code.sdn.sap.com/spaces/abap2xlsx/tickets/44-exception-zcx_excel-thrown-when-style-is-set-for-an-empty-cell + lo_worksheet->set_cell_style( ip_column = 'E' ip_row = 6 ip_style = lv_style_filled_green_guid ). + + +* Demonstrate how to retroactivly change the cellstyle +*Filled text and underlinded text + lo_worksheet->change_cell_style( ip_column = 'B' + ip_row = 5 + ip_font_bold = abap_true + ip_font_italic = abap_true ). + + lo_worksheet->change_cell_style( ip_column = 'D' + ip_row = 4 + ip_font_bold = abap_true + ip_font_italic = abap_true ). + + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + + " Convert to binary + CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' + EXPORTING + buffer = lv_file + IMPORTING + output_length = lv_bytecount + TABLES + binary_tab = lt_file_tab. +* " This method is only available on AS ABAP > 6.40 +* lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). +* lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL36 +REPORT zdemo_excel36. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + col TYPE i. + +DATA: lo_style_arial20 TYPE REF TO zcl_excel_style, + lo_style_times11 TYPE REF TO zcl_excel_style, + lo_style_cambria8red TYPE REF TO zcl_excel_style. + +DATA: lv_style_arial20_guid TYPE zexcel_cell_style, + lv_style_times11_guid TYPE zexcel_cell_style, + lv_style_cambria8red_guid TYPE zexcel_cell_style. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '36_DefaultStyles.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Create a bold / italic style + lo_style_arial20 = lo_excel->add_new_style( ). + lo_style_arial20->font->name = zcl_excel_style_font=>c_name_arial. + lo_style_arial20->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_arial20->font->size = 20. + lv_style_arial20_guid = lo_style_arial20->get_guid( ). + + lo_style_times11 = lo_excel->add_new_style( ). + lo_style_times11->font->name = zcl_excel_style_font=>c_name_roman. + lo_style_times11->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_times11->font->size = 11. + lv_style_times11_guid = lo_style_times11->get_guid( ). + + lo_style_cambria8red = lo_excel->add_new_style( ). + lo_style_cambria8red->font->name = zcl_excel_style_font=>c_name_cambria. + lo_style_cambria8red->font->scheme = zcl_excel_style_font=>c_scheme_none. + lo_style_cambria8red->font->size = 8. + lo_style_cambria8red->font->color-rgb = zcl_excel_style_color=>c_red. + lv_style_cambria8red_guid = lo_style_cambria8red->get_guid( ). + + lo_excel->set_default_style( lv_style_arial20_guid ). " Default for all new worksheets + +* 1st sheet - do not change anything --> defaultstyle from lo_excel should apply + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'Style for complete document' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 4 ip_value = 'All cells in this sheet are set to font Arial, fontsize 20' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 5 ip_value = 'because no separate style was passed for this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 6 ip_value = 'but a default style was set for the complete instance of zcl_excel' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 1 ip_value = space ). " Missing feature "set active cell - use this to simulate that + + +* 2nd sheet - defaultstyle for this sheet set explicitly ( set to Times New Roman 11 ) + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Style for this sheet' ). + lo_worksheet->zif_excel_sheet_properties~set_style( lv_style_times11_guid ). + + lo_worksheet->set_cell( ip_column = 2 ip_row = 4 ip_value = 'All cells in this sheet are set to font Times New Roman, fontsize 11' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 5 ip_value = 'because this style was passed for this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 6 ip_value = 'thus the default style from zcl_excel does not apply to this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 1 ip_value = space ). " Missing feature "set active cell - use this to simulate that + + +* 3rd sheet - defaultstyle for columns ( set to Times New Roman 11 ) + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( 'Style for 3 columns' ). + column_dimension = lo_worksheet->get_column_dimension( 'B' ). + column_dimension->set_column_style_by_guid( ip_style_guid = lv_style_times11_guid ). + column_dimension = lo_worksheet->get_column_dimension( 'C' ). + column_dimension->set_column_style_by_guid( ip_style_guid = lv_style_times11_guid ). + column_dimension = lo_worksheet->get_column_dimension( 'F' ). + column_dimension->set_column_style_by_guid( ip_style_guid = lv_style_times11_guid ). + + lo_worksheet->set_cell( ip_column = 2 ip_row = 4 ip_value = 'The columns B,C and F are set to Times New Roman' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 10 ip_value = 'All other cells in this sheet are set to font Arial, fontsize 20' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 11 ip_value = 'because no separate style was passed for this sheet' ). + lo_worksheet->set_cell( ip_column = 2 ip_row = 12 ip_value = 'but a default style was set for the complete instance of zcl_excel' ). + + lo_worksheet->set_cell( ip_column = 8 ip_row = 1 ip_value = 'Of course' ip_style = lv_style_cambria8red_guid ). + lo_worksheet->set_cell( ip_column = 8 ip_row = 2 ip_value = 'setting a specific style to a cell' ip_style = lv_style_cambria8red_guid ). + lo_worksheet->set_cell( ip_column = 8 ip_row = 3 ip_value = 'takes precedence over all defaults' ip_style = lv_style_cambria8red_guid ). + lo_worksheet->set_cell( ip_column = 8 ip_row = 4 ip_value = 'Here: Cambria 8 in red' ip_style = lv_style_cambria8red_guid ). + + +* Set entry into each of the first 10 columns + DO 20 TIMES. + col = sy-index. + CASE col. + WHEN 2 " B + OR 3 " C + OR 6." F + lo_worksheet->set_cell( ip_column = col ip_row = 6 ip_value = 'Times 11' ). + WHEN OTHERS. + lo_worksheet->set_cell( ip_column = col ip_row = 6 ip_value = 'Arial 20' ). + ENDCASE. + ENDDO. + + lo_worksheet->set_cell( ip_column = 2 ip_row = 1 ip_value = space ). " Missing feature "set active cell - use this to simulate that + + + + lo_excel->set_active_sheet_index( 1 ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED3 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched3. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_reader TYPE REF TO zif_excel_reader, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +DATA: lt_files TYPE filetable, + ls_file TYPE file_table, + lv_rc TYPE i, + lv_value TYPE zexcel_cell_value. + +CONSTANTS: gc_save_file_name TYPE string VALUE 'TechEd01.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + +******************************* +* abap2xlsx read XLSX * +******************************* + CREATE OBJECT lo_excel_reader TYPE zcl_excel_reader_2007. + lo_excel = lo_excel_reader->load_file( lv_full_path ). + + lo_excel->set_active_sheet_index( 1 ). + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_worksheet->get_cell( EXPORTING ip_column = 'C' + ip_row = 10 + IMPORTING ep_value = lv_value ). + + WRITE: 'abap2xlsx total score is ', lv_value. + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_TECHED1 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_teched1. + +******************************* +* Data Object declaration * +******************************* + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_excel_writer TYPE REF TO zif_excel_writer, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lv_file TYPE xstring, + lv_bytecount TYPE i, + lt_file_tab TYPE solix_tab. + +DATA: lv_full_path TYPE string, + lv_workdir TYPE string, + lv_file_separator TYPE c. + +CONSTANTS: lv_default_file_name TYPE string VALUE 'TechEd01.xlsx'. + +******************************* +* Selection screen management * +******************************* + +PARAMETERS: p_path TYPE zexcel_export_dir. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + lv_workdir = p_path. + cl_gui_frontend_services=>directory_browse( EXPORTING initial_folder = lv_workdir + CHANGING selected_folder = lv_workdir ). + p_path = lv_workdir. + +INITIALIZATION. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = lv_workdir ). + cl_gui_cfw=>flush( ). + p_path = lv_workdir. + +START-OF-SELECTION. + + IF p_path IS INITIAL. + p_path = lv_workdir. + ENDIF. + cl_gui_frontend_services=>get_file_separator( CHANGING file_separator = lv_file_separator ). + CONCATENATE p_path lv_file_separator lv_default_file_name INTO lv_full_path. + + +******************************* +* abap2xlsx create XLSX * +******************************* + + " Create excel instance + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo01' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Hello world' ). + + " Create xlsx stream + CREATE OBJECT lo_excel_writer TYPE zcl_excel_writer_2007. + lv_file = lo_excel_writer->write_file( lo_excel ). + +******************************* +* Output * +******************************* + + " Convert to binary + lt_file_tab = cl_bcs_convert=>xstring_to_solix( iv_xstring = lv_file ). + lv_bytecount = xstrlen( lv_file ). + + " Save the file + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = lv_bytecount + filename = lv_full_path + filetype = 'BIN' + CHANGING data_tab = lt_file_tab ). + + + + + + + + *&---------------------------------------------------------------------* +*& Include ZDEMO_EXCEL_OUTPUTOPT_INCL +*&---------------------------------------------------------------------* +CLASS lcl_output DEFINITION CREATE PRIVATE. + PUBLIC SECTION. + CLASS-METHODS: output IMPORTING cl_excel TYPE REF TO zcl_excel, + f4_path RETURNING value(selected_folder) TYPE string, + parametertexts. + + PRIVATE SECTION. + METHODS: download_frontend, + download_backend, + display_online, + send_email. + + DATA: xdata TYPE xstring, " Will be used for sending as email + t_rawdata TYPE solix_tab, " Will be used for downloading or open directly + bytecount TYPE i. " Will be used for downloading or open directly +ENDCLASS. "lcl_output DEFINITION + + +SELECTION-SCREEN BEGIN OF BLOCK bl1 WITH FRAME TITLE txt_bl1. +PARAMETERS: rb_down RADIOBUTTON GROUP rb1 DEFAULT 'X' USER-COMMAND space. + +PARAMETERS: rb_back RADIOBUTTON GROUP rb1. + +PARAMETERS: rb_show RADIOBUTTON GROUP rb1. + +PARAMETERS: rb_send RADIOBUTTON GROUP rb1. + +PARAMETERS: p_path TYPE string LOWER CASE MODIF ID pat. +PARAMETERS: p_email TYPE string LOWER CASE MODIF ID ema. +PARAMETERS: p_backfn TYPE text40 NO-DISPLAY. +SELECTION-SCREEN END OF BLOCK bl1. + + +AT SELECTION-SCREEN OUTPUT. + LOOP AT SCREEN. + + IF rb_down IS INITIAL AND screen-group1 = 'PAT'. + screen-input = 0. + screen-invisible = 1. + ENDIF. + + IF rb_send IS INITIAL AND screen-group1 = 'EMA'. + screen-input = 0. + screen-invisible = 1. + ENDIF. + + MODIFY SCREEN. + + ENDLOOP. + +INITIALIZATION. + IF sy-batch IS INITIAL. + cl_gui_frontend_services=>get_sapgui_workdir( CHANGING sapworkdir = p_path ). + cl_gui_cfw=>flush( ). + ENDIF. + lcl_output=>parametertexts( ). " If started in language w/o textelements translated set defaults + sy-title = gc_save_file_name. + txt_bl1 = 'Output options'(bl1). + p_backfn = gc_save_file_name. " Use as default if nothing else is supplied by submit + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_path. + p_path = lcl_output=>f4_path( ). + + +*----------------------------------------------------------------------* +* CLASS lcl_output IMPLEMENTATION +*----------------------------------------------------------------------* +CLASS lcl_output IMPLEMENTATION. + METHOD output. + + DATA: cl_output TYPE REF TO lcl_output, + cl_writer TYPE REF TO zif_excel_writer. + + CREATE OBJECT cl_output. + CREATE OBJECT cl_writer TYPE zcl_excel_writer_2007. + cl_output->xdata = cl_writer->write_file( cl_excel ). + +* After 6.40 via cl_bcs_convert + cl_output->t_rawdata = cl_bcs_convert=>xstring_to_solix( iv_xstring = cl_output->xdata ). + cl_output->bytecount = xstrlen( cl_output->xdata ). + +* before 6.40 +* CALL FUNCTION 'SCMS_XSTRING_TO_BINARY' +* EXPORTING +* buffer = cl_output->xdata +* IMPORTING +* output_length = cl_output->bytecount +* TABLES +* binary_tab = cl_output->t_rawdata. + + CASE 'X'. + WHEN rb_down. + IF sy-batch IS INITIAL. + cl_output->download_frontend( ). + ELSE. + MESSAGE e001(00) WITH 'Frontenddownload impossible in background processing'. + ENDIF. + + WHEN rb_back. + cl_output->download_backend( ). + + WHEN rb_show. + IF sy-batch IS INITIAL. + cl_output->display_online( ). + ELSE. + MESSAGE e001(00) WITH 'Online display absurd in background processing'. + ENDIF. + + WHEN rb_send. + cl_output->send_email( ). + + ENDCASE. + ENDMETHOD. "output + + METHOD f4_path. + DATA: new_path TYPE string, + repid TYPE syrepid, + dynnr TYPE sydynnr, + lt_dynpfields TYPE TABLE OF dynpread, + ls_dynpfields LIKE LINE OF lt_dynpfields. + +* Get current value + dynnr = sy-dynnr. + repid = sy-repid. + ls_dynpfields-fieldname = 'P_PATH'. + APPEND ls_dynpfields TO lt_dynpfields. + + CALL FUNCTION 'DYNP_VALUES_READ' + EXPORTING + dyname = repid + dynumb = dynnr + TABLES + dynpfields = lt_dynpfields + EXCEPTIONS + invalid_abapworkarea = 1 + invalid_dynprofield = 2 + invalid_dynproname = 3 + invalid_dynpronummer = 4 + invalid_request = 5 + no_fielddescription = 6 + invalid_parameter = 7 + undefind_error = 8 + double_conversion = 9 + stepl_not_found = 10 + OTHERS = 11. + IF sy-subrc <> 0. + MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno + WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4. + EXIT. + ENDIF. + + READ TABLE lt_dynpfields INTO ls_dynpfields INDEX 1. + + new_path = ls_dynpfields-fieldvalue. + selected_folder = new_path. + + cl_gui_frontend_services=>directory_browse( + EXPORTING + window_title = 'Select path to download EXCEL-file' + initial_folder = new_path + CHANGING + selected_folder = new_path + EXCEPTIONS + cntl_error = 1 + error_no_gui = 2 + not_supported_by_gui = 3 + OTHERS = 4 + ). + cl_gui_cfw=>flush( ). + CHECK new_path IS NOT INITIAL. + selected_folder = new_path. + + ENDMETHOD. "f4_path + + METHOD parametertexts. +* If started in language w/o textelements translated set defaults +* Furthermore I don't have to change the selectiontexts of all demoreports. + DEFINE default_parametertext. + if %_&1_%_app_%-text = '&1' or + %_&1_%_app_%-text is initial. + %_&1_%_app_%-text = &2. + endif. + END-OF-DEFINITION. + + default_parametertext: rb_down 'Save to frontend', + rb_back 'Save to backend', + rb_show 'Direct display', + rb_send 'Send via email', + + p_path 'Frontend-path to download to', + p_email 'Email to send xlsx to'. + + ENDMETHOD. "parametertexts + + METHOD: download_frontend. + DATA: filename TYPE string. +* I don't like p_path here - but for this include it's ok + filename = p_path. +* Add trailing "\" or "/" + IF filename CA '/'. + REPLACE REGEX '([^/])\s*$' IN filename WITH '$1/' . + ELSE. + REPLACE REGEX '([^\\])\s*$' IN filename WITH '$1\\'. + ENDIF. + + CONCATENATE filename gc_save_file_name INTO filename. +* Get trailing blank + cl_gui_frontend_services=>gui_download( EXPORTING bin_filesize = bytecount + filename = filename + filetype = 'BIN' + CHANGING data_tab = t_rawdata ). + ENDMETHOD. "download_frontend + + METHOD download_backend. + DATA: bytes_remain TYPE i. + FIELD-SYMBOLS: <rawdata> LIKE LINE OF t_rawdata. + + OPEN DATASET p_backfn FOR OUTPUT IN BINARY MODE. + CHECK sy-subrc = 0. + + bytes_remain = bytecount. + + LOOP AT t_rawdata ASSIGNING <rawdata>. + + AT LAST. + CHECK bytes_remain >= 0. + TRANSFER <rawdata> TO p_backfn LENGTH bytes_remain. + EXIT. + ENDAT. + + TRANSFER <rawdata> TO p_backfn. + SUBTRACT 255 FROM bytes_remain. " Solix hat Länge 255 + + ENDLOOP. + + CLOSE DATASET p_backfn. + + + + + IF sy-calld = 'X'. " no need to display anything if download was selected and report was called for demo purposes + LEAVE PROGRAM. + ELSE. + MESSAGE 'Data transferred to default backend directory' TYPE 'I'. + ENDIF. + ENDMETHOD. "download_backend + + METHOD display_online. + DATA:error TYPE REF TO i_oi_error, + t_errors TYPE STANDARD TABLE OF REF TO i_oi_error WITH NON-UNIQUE DEFAULT KEY, + cl_control TYPE REF TO i_oi_container_control,"OIContainerCtrl + cl_document TYPE REF TO i_oi_document_proxy. "Office Dokument + + c_oi_container_control_creator=>get_container_control( IMPORTING control = cl_control + error = error ). + APPEND error TO t_errors. + + cl_control->init_control( EXPORTING inplace_enabled = 'X' + no_flush = 'X' + r3_application_name = 'Demo Document Container' + parent = cl_gui_container=>screen0 + IMPORTING error = error + EXCEPTIONS OTHERS = 2 ). + APPEND error TO t_errors. + + cl_control->get_document_proxy( EXPORTING document_type = 'Excel.Sheet' " EXCEL + no_flush = ' ' + IMPORTING document_proxy = cl_document + error = error ). + APPEND error TO t_errors. +* Errorhandling should be inserted here + + cl_document->open_document_from_table( EXPORTING document_size = bytecount + document_table = t_rawdata + open_inplace = 'X' ). + + WRITE: '.'. " To create an output. That way screen0 will exist + ENDMETHOD. "display_online + + METHOD send_email. +* Needed to send emails + DATA: bcs_exception TYPE REF TO cx_bcs, + errortext TYPE string, + cl_send_request TYPE REF TO cl_bcs, + cl_document TYPE REF TO cl_document_bcs, + cl_recipient TYPE REF TO if_recipient_bcs, + cl_sender TYPE REF TO cl_cam_address_bcs, + t_attachment_header TYPE soli_tab, + wa_attachment_header LIKE LINE OF t_attachment_header, + attachment_subject TYPE sood-objdes, + + sood_bytecount TYPE sood-objlen, + mail_title TYPE so_obj_des, + t_mailtext TYPE soli_tab, + wa_mailtext LIKE LINE OF t_mailtext, + send_to TYPE adr6-smtp_addr, + sent TYPE os_boolean. + + + mail_title = 'Mail title'. + wa_mailtext = 'Mailtext'. + APPEND wa_mailtext TO t_mailtext. + + TRY. +* Create send request + cl_send_request = cl_bcs=>create_persistent( ). +* Create new document with mailtitle and mailtextg + cl_document = cl_document_bcs=>create_document( i_type = 'RAW' "#EC NOTEXT + i_text = t_mailtext + i_subject = mail_title ). +* Add attachment to document +* since the new excelfiles have an 4-character extension .xlsx but the attachment-type only holds 3 charactes .xls, +* we have to specify the real filename via attachment header +* Use attachment_type xls to have SAP display attachment with the excel-icon + attachment_subject = gc_save_file_name. + CONCATENATE '&SO_FILENAME=' attachment_subject INTO wa_attachment_header. + APPEND wa_attachment_header TO t_attachment_header. +* Attachment + sood_bytecount = bytecount. " next method expects sood_bytecount instead of any positive integer *sigh* + cl_document->add_attachment( i_attachment_type = 'XLS' "#EC NOTEXT + i_attachment_subject = attachment_subject + i_attachment_size = sood_bytecount + i_att_content_hex = t_rawdata + i_attachment_header = t_attachment_header ). + +* add document to send request + cl_send_request->set_document( cl_document ). + +* set sender in case if no own email is availabe +* cl_sender = cl_cam_address_bcs=>create_internet_address( 'sender@sender.sender' ). +* cl_send_request->set_sender( cl_sender ). + +* add recipient(s) - here only 1 will be needed + send_to = p_email. + IF send_to IS INITIAL. + send_to = 'no_email@no_email.no_email'. " Place into SOST in any case for demonstration purposes + ENDIF. + cl_recipient = cl_cam_address_bcs=>create_internet_address( send_to ). + cl_send_request->add_recipient( cl_recipient ). + +* Und abschicken + sent = cl_send_request->send( i_with_error_screen = 'X' ). + + COMMIT WORK. + + IF sent IS INITIAL. + MESSAGE i500(sbcoms) WITH p_email. + ELSE. + MESSAGE s022(so). + MESSAGE 'Document ready to be sent - Check SOST or SCOT' TYPE 'I'. + ENDIF. + + CATCH cx_bcs INTO bcs_exception. + errortext = bcs_exception->if_message~get_text( ). + MESSAGE errortext TYPE 'I'. + + ENDTRY. + ENDMETHOD. "send_email + + +ENDCLASS. "lcl_output IMPLEMENTATION + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL9 +*& +*&---------------------------------------------------------------------* +*& abap2xlsx Demo: Data validations +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel9. + +CONSTANTS: c_fruits TYPE string VALUE 'Fruits', + c_vegetables TYPE string VALUE 'Vegetables', + c_meat TYPE string VALUE 'Meat', + c_fish TYPE string VALUE 'Fish'. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range, + lo_data_validation TYPE REF TO zcl_excel_data_validation. + +DATA: row TYPE zexcel_cell_row. + + +DATA: lv_title TYPE zexcel_sheet_title. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '09_DataValidation.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +PARAMETERS: p_sbook TYPE flag. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lv_title = 'Data Validation'. + lo_worksheet->set_title( lv_title ). + " Set values for dropdown + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = c_fish ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 'Anchovy' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = 'Carp' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'A' ip_value = 'Catfish' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 'Cod' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 'Eel' ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'A' ip_value = 'Haddock' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_fish. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'A' + ip_start_row = 4 + ip_stop_column = 'A' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'B' ip_value = c_meat ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'Pork' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'B' ip_value = 'Beef' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 'Chicken' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'B' ip_value = 'Turkey' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_meat. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'B' + ip_start_row = 4 + ip_stop_column = 'B' + ip_stop_row = 7 ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'C' ip_value = c_fruits ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'Apple' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 'Banana' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 'Blueberry' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Ananas' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Grapes' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_fruits. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'C' + ip_start_row = 4 + ip_stop_column = 'C' + ip_stop_row = 8 ). + + lo_worksheet->set_cell( ip_row = 2 ip_column = 'D' ip_value = c_vegetables ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'Cucumber' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 'Sweet pepper ' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'D' ip_value = 'Lettuce' ). + + lo_range = lo_excel->add_new_range( ). + lo_range->name = c_vegetables. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'D' + ip_start_row = 4 + ip_stop_column = 'D' + ip_stop_row = 6 ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lv_title = 'Table with Data Validation'. + lo_worksheet->set_title( lv_title ). + + " Maximum Text length + lo_worksheet->set_cell( ip_row = 1 ip_column = 'A' ip_value = 'Validate Maximum Text length of <= 10 in Cell A2:' ). + lo_worksheet->set_cell( ip_row = 2 ip_column = 'A' ip_value = 'abcdefghij' ). + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_textlength. + lo_data_validation->operator = zcl_excel_data_validation=>c_operator_lessthanorequal. + lo_data_validation->formula1 = 10. + lo_data_validation->cell_row = 2. + lo_data_validation->cell_column = 'A'. + + " Integer Value between 1 and 10 + lo_worksheet->set_cell( ip_row = 4 ip_column = 'A' ip_value = 'Validate Integer Value between 1 and 10 in Cell A5:' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'A' ip_value = '5' ). + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_whole. + lo_data_validation->operator = zcl_excel_data_validation=>c_operator_between. + lo_data_validation->formula1 = 1. + lo_data_validation->formula2 = 10. + lo_data_validation->prompttitle = 'Range'. + lo_data_validation->prompt = 'Enter a value between 1 and 10'. + lo_data_validation->errortitle = 'Error'. + lo_data_validation->error = 'You have entered a wrong value. Please use only numbers between 1 and 10.'. + lo_data_validation->cell_row = 5. + lo_data_validation->cell_column = 'A'. + + " Evaluation by Formula from issue #161 + lo_worksheet->set_cell( ip_row = 7 ip_column = 'A' ip_value = 'Validate if B8 contains a "-":' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'A' ip_value = 'Text' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'B' ip_value = '-' ). + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_custom. + lo_data_validation->formula1 = '"IF(B8<>"""";INDIRECT(LEFT(B8;SEARCH(""-"";B8;1)));EMPTY)"'. + lo_data_validation->cell_row = 8. + lo_data_validation->cell_column = 'A'. + + " There was an error when data validation was combined with cell merges this should test that: + lo_worksheet->set_cell( ip_row = 10 ip_column = 'A' ip_value = 'Demo for data validation with a dropdown list' ). + lo_worksheet->set_merge( ip_row = 10 ip_column_start = 'A' ip_column_end = 'F' ). + + " Headlines + lo_worksheet->set_cell( ip_row = 11 ip_column = 'A' ip_value = c_fruits ). + lo_worksheet->set_cell( ip_row = 11 ip_column = 'B' ip_value = c_vegetables ). + + row = 12. + WHILE row < 20. " Starting with 14500 the data validation is dropped 14000 are still ok + " 1st validation + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_fruits. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'A'. + lo_worksheet->set_cell( ip_row = row ip_column = 'A' ip_value = 'Select a value' ). + " 2nd + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_vegetables. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'B'. + lo_worksheet->set_cell( ip_row = row ip_column = 'B' ip_value = 'Select a value' ). + " 3rd + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_meat. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'C'. + lo_worksheet->set_cell( ip_row = row ip_column = 'C' ip_value = 'Select a value' ). + " 4th + lo_data_validation = lo_worksheet->add_new_data_validation( ). + lo_data_validation->type = zcl_excel_data_validation=>c_type_list. + lo_data_validation->formula1 = c_fish. + lo_data_validation->cell_row = row. + lo_data_validation->cell_column = 'D'. + lo_worksheet->set_cell( ip_row = row ip_column = 'D' ip_value = 'Select a value' ). + " Increment row + row = row + 1. + ENDWHILE. + + IF p_sbook = abap_true. + DATA: bookings type TABLE OF sbook. + + lo_worksheet = lo_excel->add_new_worksheet( ). + lv_title = 'SBOOK'. + lo_worksheet->set_title( lv_title ). + + SELECT * from sbook INTO TABLE bookings UP TO 4000 ROWS. + + lo_worksheet->bind_table( + EXPORTING + ip_table = bookings +* it_field_catalog = " Table binding field catalog +* is_table_settings = " Excel table binding settings +* IMPORTING +* es_table_settings = " Excel table binding settings + ). + ENDIF. + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL8 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel8. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_range TYPE REF TO zcl_excel_range. + +DATA: lv_title TYPE zexcel_sheet_title. + +CONSTANTS: gc_save_file_name TYPE string VALUE '08_Range.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lv_title = 'Sheet1'. + lo_worksheet->set_title( lv_title ). + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'range'. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'C' + ip_start_row = 4 + ip_stop_column = 'C' + ip_stop_row = 8 ). + + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'Apple' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 'Banana' ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 'Blueberry' ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 'Ananas' ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 'Grapes' ). + + " Define another Range with a name longer than 40 characters that + " tests the fix of issue #168 ranges namescan be only up to 20 chars + + lo_range = lo_excel->add_new_range( ). + lo_range->name = 'A_range_with_a_name_that_is_longer_than_20_characters'. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'D' + ip_start_row = 4 + ip_stop_column = 'D' + ip_stop_row = 5 ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'Range Value 1' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 'Range Value 2' ). + + " issue #163 + " Define another Range with sheet visibility + lo_range = lo_worksheet->add_new_range( ). + lo_range->name = 'A_range_with_sheet_visibility'. + lo_range->set_value( ip_sheet_name = lv_title + ip_start_column = 'E' + ip_start_row = 4 + ip_stop_column = 'E' + ip_stop_row = 5 ). + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = 'Range Value 3' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'E' ip_value = 'Range Value 4' ). + " issue #163 + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL7 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel7. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional. + +DATA: ls_iconset3 TYPE zexcel_conditional_iconset, + ls_iconset4 TYPE zexcel_conditional_iconset, + ls_iconset5 TYPE zexcel_conditional_iconset, + ls_databar TYPE zexcel_conditional_databar, + ls_colorscale2 TYPE zexcel_conditional_colorscale, + ls_colorscale3 TYPE zexcel_conditional_colorscale. + +CONSTANTS: gc_save_file_name TYPE string VALUE '07_ConditionalAll.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + ls_iconset3-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset3-cfvo1_value = '0'. + ls_iconset3-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset3-cfvo2_value = '33'. + ls_iconset3-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset3-cfvo3_value = '66'. + ls_iconset3-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + ls_iconset4-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo1_value = '0'. + ls_iconset4-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo2_value = '25'. + ls_iconset4-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo3_value = '50'. + ls_iconset4-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset4-cfvo4_value = '75'. + ls_iconset4-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + ls_iconset5-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo1_value = '0'. + ls_iconset5-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo2_value = '20'. + ls_iconset5-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo3_value = '40'. + ls_iconset5-cfvo4_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo4_value = '60'. + ls_iconset5-cfvo5_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset5-cfvo5_value = '80'. + ls_iconset5-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + ls_databar-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. + ls_databar-cfvo1_value = '0'. + ls_databar-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_max. + ls_databar-cfvo2_value = '0'. + ls_databar-colorrgb = 'FF638EC6'. + + ls_colorscale2-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. + ls_colorscale2-cfvo1_value = '0'. + ls_colorscale2-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percentile. + ls_colorscale2-cfvo2_value = '50'. + ls_colorscale2-colorrgb1 = 'FFF8696B'. + ls_colorscale2-colorrgb2 = 'FF63BE7B'. + + ls_colorscale3-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_min. + ls_colorscale3-cfvo1_value = '0'. + ls_colorscale3-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percentile. + ls_colorscale3-cfvo2_value = '50'. + ls_colorscale3-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_max. + ls_colorscale3-cfvo3_value = '0'. + ls_colorscale3-colorrgb1 = 'FFF8696B'. + ls_colorscale3-colorrgb2 = 'FFFFEB84'. + ls_colorscale3-colorrgb3 = 'FF63BE7B'. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + +* ICONSET + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3arrows. + + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 5 + ip_stop_column = 'B' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'B' ip_value = 'C_ICONSET_3ARROWS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3arrowsgray. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 5 + ip_stop_column = 'C' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 'C_ICONSET_3ARROWSGRAY' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'C' ip_value = 50 ). + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3flags. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 5 + ip_stop_column = 'D' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'D' ip_value = 'C_ICONSET_3FLAGS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 5 + ip_stop_column = 'E' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = 'C_ICONSET_3TRAFFICLIGHTS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'E' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'E' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'E' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'E' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'E' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights2. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'F' + ip_start_row = 5 + ip_stop_column = 'F' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'F' ip_value = 'C_ICONSET_3TRAFFICLIGHTS2' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'F' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'F' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'F' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'F' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'F' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3signs. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'G' + ip_start_row = 5 + ip_stop_column = 'G' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'G' ip_value = 'C_ICONSET_3SIGNS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'G' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'G' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'G' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'G' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'G' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3symbols. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'H' + ip_start_row = 5 + ip_stop_column = 'H' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'H' ip_value = 'C_ICONSET_3SYMBOLS' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'H' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'H' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'H' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'H' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'H' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset3-iconset = zcl_excel_style_conditional=>c_iconset_3symbols2. + lo_style_conditional->mode_iconset = ls_iconset3. + lo_style_conditional->set_range( ip_start_column = 'I' + ip_start_row = 5 + ip_stop_column = 'I' + ip_stop_row = 9 ). + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'I' ip_value = 'C_ICONSET_3SYMBOLS2' ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'I' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'I' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'I' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'I' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 9 ip_column = 'I' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4arrows. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 12 + ip_stop_column = 'B' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'B' ip_value = 'C_ICONSET_4ARROWS' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4arrowsgray. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 12 + ip_stop_column = 'C' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'C' ip_value = 'C_ICONSET_4ARROWSGRAY' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'C' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4redtoblack. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 12 + ip_stop_column = 'D' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'D' ip_value = 'C_ICONSET_4REDTOBLACK' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4rating. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 12 + ip_stop_column = 'E' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'E' ip_value = 'C_ICONSET_4RATING' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'E' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'E' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'E' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'E' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'E' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset4-iconset = zcl_excel_style_conditional=>c_iconset_4trafficlights. + lo_style_conditional->mode_iconset = ls_iconset4. + lo_style_conditional->set_range( ip_start_column = 'F' + ip_start_row = 12 + ip_stop_column = 'F' + ip_stop_row = 16 ). + + lo_worksheet->set_cell( ip_row = 11 ip_column = 'F' ip_value = 'C_ICONSET_4TRAFFICLIGHTS' ). + lo_worksheet->set_cell( ip_row = 12 ip_column = 'F' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 13 ip_column = 'F' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 14 ip_column = 'F' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 15 ip_column = 'F' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 16 ip_column = 'F' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5arrows. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 19 + ip_stop_column = 'B' + ip_stop_row = 23 ). + + lo_worksheet->set_cell( ip_row = 18 ip_column = 'B' ip_value = 'C_ICONSET_5ARROWS' ). + lo_worksheet->set_cell( ip_row = 19 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 20 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 21 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 22 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 23 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5arrowsgray. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 19 + ip_stop_column = 'C' + ip_stop_row = 23 ). + + lo_worksheet->set_cell( ip_row = 18 ip_column = 'C' ip_value = 'C_ICONSET_5ARROWSGRAY' ). + lo_worksheet->set_cell( ip_row = 19 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 20 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 21 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 22 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 23 ip_column = 'C' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5rating. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 19 + ip_stop_column = 'D' + ip_stop_row = 23 ). + + lo_worksheet->set_cell( ip_row = 18 ip_column = 'D' ip_value = 'C_ICONSET_5RATING' ). + lo_worksheet->set_cell( ip_row = 19 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 20 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 21 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 22 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 23 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset5-iconset = zcl_excel_style_conditional=>c_iconset_5quarters. + lo_style_conditional->mode_iconset = ls_iconset5. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 19 + ip_stop_column = 'E' + ip_stop_row = 23 ). + +* DATABAR + + lo_worksheet->set_cell( ip_row = 25 ip_column = 'B' ip_value = 'DATABAR' ). + lo_worksheet->set_cell( ip_row = 26 ip_column = 'B' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 27 ip_column = 'B' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 28 ip_column = 'B' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 29 ip_column = 'B' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 30 ip_column = 'B' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_databar. + lo_style_conditional->priority = 1. + lo_style_conditional->mode_databar = ls_databar. + lo_style_conditional->set_range( ip_start_column = 'B' + ip_start_row = 26 + ip_stop_column = 'B' + ip_stop_row = 30 ). + +* COLORSCALE + + lo_worksheet->set_cell( ip_row = 25 ip_column = 'C' ip_value = 'COLORSCALE 2 COLORS' ). + lo_worksheet->set_cell( ip_row = 26 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 27 ip_column = 'C' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 28 ip_column = 'C' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 29 ip_column = 'C' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 30 ip_column = 'C' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_colorscale. + lo_style_conditional->priority = 1. + lo_style_conditional->mode_colorscale = ls_colorscale2. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 26 + ip_stop_column = 'C' + ip_stop_row = 30 ). + + + lo_worksheet->set_cell( ip_row = 25 ip_column = 'D' ip_value = 'COLORSCALE 3 COLORS' ). + lo_worksheet->set_cell( ip_row = 26 ip_column = 'D' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 27 ip_column = 'D' ip_value = 20 ). + lo_worksheet->set_cell( ip_row = 28 ip_column = 'D' ip_value = 30 ). + lo_worksheet->set_cell( ip_row = 29 ip_column = 'D' ip_value = 40 ). + lo_worksheet->set_cell( ip_row = 30 ip_column = 'D' ip_value = 50 ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_colorscale. + lo_style_conditional->priority = 1. + lo_style_conditional->mode_colorscale = ls_colorscale3. + lo_style_conditional->set_range( ip_start_column = 'D' + ip_start_row = 26 + ip_stop_column = 'D' + ip_stop_row = 30 ). + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL6 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel6. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lv_row TYPE syindex, + lv_formula TYPE string. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '06_Formulas.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + +*--------------------------------------------------------------------* +* Get some testdata +*--------------------------------------------------------------------* + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 100 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 1000 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 150 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = -10 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 500 ). + + +*--------------------------------------------------------------------* +* Demonstrate using formulas +*--------------------------------------------------------------------* + lo_worksheet->set_cell( ip_row = 9 ip_column = 'C' ip_formula = 'SUM(C4:C8)' ). + + +*--------------------------------------------------------------------* +* Demonstrate standard EXCEL-behaviour when copying a formula to another cell +* by calculating the resulting formula to put into another cell +*--------------------------------------------------------------------* + DO 10 TIMES. + + lv_formula = zcl_excel_common=>shift_formula( iv_reference_formula = 'SUM(C4:C8)' + iv_shift_cols = 0 " Offset in Columns - here we copy in same column --> 0 + iv_shift_rows = sy-index ). " Offset in Row - here we copy downward --> sy-index + lv_row = 9 + sy-index. " Absolute row = sy-index rows below reference cell + lo_worksheet->set_cell( ip_row = lv_row ip_column = 'C' ip_formula = lv_formula ). + + ENDDO. + +*--------------------------------------------------------------------* +*** Create output +*--------------------------------------------------------------------* + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + REPORT zdemo_excel37. + +DATA: excel TYPE REF TO zcl_excel, + reader TYPE REF TO zif_excel_reader, + go_error TYPE REF TO cx_root, + gv_message type string. + + +CONSTANTS: gc_save_file_name TYPE string VALUE '37-passthrough.xlsx'. + +SELECTION-SCREEN BEGIN OF BLOCK blx WITH FRAME. +PARAMETERS: p_upfile TYPE string DEFAULT 'c:\temp\whatever.xlsx' LOWER CASE. +SELECTION-SCREEN END OF BLOCK blx. + +INCLUDE zdemo_excel_outputopt_incl. + +AT SELECTION-SCREEN ON VALUE-REQUEST FOR p_upfile. + PERFORM f4_p_upfile CHANGING p_upfile. + + +START-OF-SELECTION. + + TRY. + CREATE OBJECT reader TYPE zcl_excel_reader_2007. +* CREATE OBJECT reader TYPE zcl_excel_reader_xlsm. + excel = reader->load_file( p_upfile ). + + "Use template for charts + excel->use_template = abap_true. +*--------------------------------------------------------------------* +* CL_ABAP_ZIP may have problems reading LibreOffice generated files +* You may have to use alternate ZIP-Class - see comments in issue #234 in abap2xlsx at developers network +* excel = reader->load_file( i_filename = p_upfile +* iv_use_alternate_zip = 'ZCL_EXCEL_ABAP_ZIP' ). +*--------------------------------------------------------------------* + +*** Create output + lcl_output=>output( excel ). + CATCH cx_root INTO go_error. + MESSAGE 'Error reading excelfile' TYPE 'I'. + gv_message = go_error->get_text( ). + IF gv_message IS NOT INITIAL. + MESSAGE gv_message TYPE 'I'. + ENDIF. + ENDTRY. + + +*&---------------------------------------------------------------------* +*& Form F4_P_UPFILE +*&---------------------------------------------------------------------* +FORM f4_p_upfile CHANGING p_upfile TYPE string. + + DATA: lv_repid TYPE syrepid, + lt_fields TYPE dynpread_tabtype, + ls_field LIKE LINE OF lt_fields, + lt_files TYPE filetable. + + lv_repid = sy-repid. + + CALL FUNCTION 'DYNP_VALUES_READ' + EXPORTING + dyname = lv_repid + dynumb = '1000' + request = 'A' + TABLES + dynpfields = lt_fields + EXCEPTIONS + invalid_abapworkarea = 01 + invalid_dynprofield = 02 + invalid_dynproname = 03 + invalid_dynpronummer = 04 + invalid_request = 05 + no_fielddescription = 06 + undefind_error = 07. + READ TABLE lt_fields INTO ls_field WITH KEY fieldname = 'P_UPFILE'. + p_upfile = ls_field-fieldvalue. + + cl_gui_frontend_services=>file_open_dialog( EXPORTING + default_filename = p_upfile + file_filter = zcl_excel_common=>c_xlsx_file_filter + CHANGING + file_table = lt_files + rc = sy-tabix + EXCEPTIONS + OTHERS = 1 ). + READ TABLE lt_files INDEX 1 INTO p_upfile. + +ENDFORM. " F4_P_UPFILE + + + + + + + + + REPORT. + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_column_dimension TYPE REF TO zcl_excel_worksheet_columndime, + lo_drawing TYPE REF TO zcl_excel_drawing. + +TYPES: BEGIN OF gty_icon, +* name TYPE icon_name, "Fix #228 + name TYPE iconname, "Fix #228 + objid TYPE w3objid, + END OF gty_icon, + gtyt_icon TYPE STANDARD TABLE OF gty_icon WITH NON-UNIQUE DEFAULT KEY. + +DATA: lt_icon TYPE gtyt_icon, + lv_row TYPE sytabix, + ls_wwwdatatab TYPE wwwdatatab, + lt_mimedata TYPE STANDARD TABLE OF w3mime WITH NON-UNIQUE DEFAULT KEY, + lv_xstring TYPE xstring. + +FIELD-SYMBOLS: <icon> LIKE LINE OF lt_icon, + <mimedata> LIKE LINE OF lt_mimedata. + +CONSTANTS: gc_save_file_name TYPE string VALUE '38_SAP-Icons.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +TABLES: icon. +SELECT-OPTIONS: s_icon FOR icon-name DEFAULT 'ICON_LED_*' OPTION CP. + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo Icons' ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'A' ). + lo_column_dimension->set_auto_size( 'X' ). + lo_column_dimension = lo_worksheet->get_column_dimension( ip_column = 'B' ). + lo_column_dimension->set_auto_size( 'X' ). + +* Get all icons + SELECT name + INTO TABLE lt_icon + FROM icon + WHERE name IN s_icon + ORDER BY name. + LOOP AT lt_icon ASSIGNING <icon>. + + lv_row = sy-tabix. +*--------------------------------------------------------------------* +* Set name of icon +*--------------------------------------------------------------------* + lo_worksheet->set_cell( ip_row = lv_row + ip_column = 'A' + ip_value = <icon>-name ). +*--------------------------------------------------------------------* +* Check whether the mime-repository holds some icondata for us +*--------------------------------------------------------------------* + +* Get key + SELECT SINGLE objid + INTO <icon>-objid + FROM wwwdata + WHERE text = <icon>-name. + CHECK sy-subrc = 0. " :o( + lo_worksheet->set_cell( ip_row = lv_row + ip_column = 'B' + ip_value = <icon>-objid ). + +* Load mimedata + CLEAR lt_mimedata. + CLEAR ls_wwwdatatab. + ls_wwwdatatab-relid = 'MI' . + ls_wwwdatatab-objid = <icon>-objid. + CALL FUNCTION 'WWWDATA_IMPORT' + EXPORTING + key = ls_wwwdatatab + TABLES + mime = lt_mimedata + EXCEPTIONS + wrong_object_type = 1 + import_error = 2 + OTHERS = 3. + CHECK sy-subrc = 0. " :o( + + lo_drawing = lo_excel->add_new_drawing( ). + lo_drawing->set_position( ip_from_row = lv_row + ip_from_col = 'C' ). + CLEAR lv_xstring. + LOOP AT lt_mimedata ASSIGNING <mimedata>. + CONCATENATE lv_xstring <mimedata>-line INTO lv_xstring IN BYTE MODE. + ENDLOOP. + + lo_drawing->set_media( ip_media = lv_xstring + ip_media_type = zcl_excel_drawing=>c_media_type_jpg + ip_width = 16 + ip_height = 14 ). + lo_worksheet->add_drawing( lo_drawing ). + + ENDLOOP. + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL16 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel39. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_drawing TYPE REF TO zcl_excel_drawing. + +DATA lv_value TYPE i. + +DATA: ls_io TYPE skwf_io. + +DATA: ls_upper TYPE zexcel_drawing_location, + ls_lower TYPE zexcel_drawing_location. + +DATA lo_bar1 TYPE REF TO zcl_excel_graph_bars. +DATA lo_bar2 TYPE REF TO zcl_excel_graph_bars. +DATA lo_pie TYPE REF TO zcl_excel_graph_pie. +DATA lo_line TYPE REF TO zcl_excel_graph_line. + +CONSTANTS: gc_save_file_name TYPE string VALUE '39_Charts.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + +START-OF-SELECTION. + + " Create a pie chart and series + CREATE OBJECT lo_pie. + + CALL METHOD lo_pie->create_serie + EXPORTING + ip_order = 0 + ip_sheet = 'Values' + ip_lbl_from_col = 'B' + ip_lbl_from_row = '1' + ip_lbl_to_col = 'B' + ip_lbl_to_row = '3' + ip_ref_from_col = 'A' + ip_ref_from_row = '1' + ip_ref_to_col = 'A' + ip_ref_to_row = '3' + ip_sername = 'My serie 1'. + + " Set style + lo_pie->set_style( zcl_excel_graph=>c_style_15 ). + + " Create a bar chart, series and axes + CREATE OBJECT lo_bar1. + + CALL METHOD lo_bar1->create_serie + EXPORTING + ip_order = 0 + ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no + ip_lbl = 'Values!$D$1:$D$3' + ip_ref = 'Values!$C$1:$C$3' + ip_sername = 'My serie 1'. + + CALL METHOD lo_bar1->create_serie + EXPORTING + ip_order = 1 + ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_no + ip_lbl = 'Values!$B$1:$B$3' + ip_ref = 'Values!$A$1:$A$3' + ip_sername = 'My serie 2'. + + CALL METHOD lo_bar1->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_catax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + CALL METHOD lo_bar1->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_valax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + " Set style + lo_bar1->set_style( zcl_excel_graph=>c_style_default ). + + " Set label to none + lo_bar1->set_print_lbl( zcl_excel_graph_bars=>c_show_false ). + + " Create a bar chart, series and axes + CREATE OBJECT lo_bar2. + + CALL METHOD lo_bar2->create_serie + EXPORTING + ip_order = 0 + ip_invertifnegative = zcl_excel_graph_bars=>c_invertifnegative_yes + ip_lbl = 'Values!$D$1:$D$3' + ip_ref = 'Values!$C$1:$C$3' + ip_sername = 'My serie 1'. + + CALL METHOD lo_bar2->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_catax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + CALL METHOD lo_bar2->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_bars=>c_valax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + " Set layout + lo_bar2->set_show_legend_key( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_values( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_cat_name( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_ser_name( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_show_percent( zcl_excel_graph_bars=>c_show_true ). + lo_bar2->set_varycolor( zcl_excel_graph_bars=>c_show_true ). + + " Create a line chart, series and axes + CREATE OBJECT lo_line. + + CALL METHOD lo_line->create_serie + EXPORTING + ip_order = 0 + ip_symbol = zcl_excel_graph_line=>c_symbol_auto + ip_smooth = zcl_excel_graph_line=>c_show_false + ip_lbl = 'Values!$D$1:$D$3' + ip_ref = 'Values!$C$1:$C$3' + ip_sername = 'My serie 1'. + + CALL METHOD lo_line->create_serie + EXPORTING + ip_order = 1 + ip_symbol = zcl_excel_graph_line=>c_symbol_none + ip_smooth = zcl_excel_graph_line=>c_show_false + ip_lbl = 'Values!$B$1:$B$3' + ip_ref = 'Values!$A$1:$A$3' + ip_sername = 'My serie 2'. + + CALL METHOD lo_line->create_serie + EXPORTING + ip_order = 2 + ip_symbol = zcl_excel_graph_line=>c_symbol_auto + ip_smooth = zcl_excel_graph_line=>c_show_false + ip_lbl = 'Values!$F$1:$F$3' + ip_ref = 'Values!$E$1:$E$3' + ip_sername = 'My serie 3'. + + CALL METHOD lo_line->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_line=>c_catax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + CALL METHOD lo_line->create_ax + EXPORTING +* ip_axid = + ip_type = zcl_excel_graph_line=>c_valax +* ip_orientation = +* ip_delete = +* ip_axpos = +* ip_formatcode = +* ip_sourcelinked = +* ip_majortickmark = +* ip_minortickmark = +* ip_ticklblpos = +* ip_crossax = +* ip_crosses = +* ip_auto = +* ip_lblalgn = +* ip_lbloffset = +* ip_nomultilvllbl = +* ip_crossbetween = + . + + + + + + + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet (Pie sheet) + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( 'PieChart' ). + + " Create global drawing, set type as pie chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART PIE' ). + lo_drawing->graph = lo_pie. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_pie. + + "Set chart position (anchor 2 cells) + ls_lower-row = 30. + ls_lower-col = 20. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " BarChart1 sheet + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'BarChart1' ). + + " Create global drawing, set type as bar chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART BARS WITH 2 SERIES' ). + lo_drawing->graph = lo_bar1. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars. + + "Set chart position (anchor 2 cells) + ls_upper-row = 0. + ls_upper-col = 11. + ls_lower-row = 22. + ls_lower-col = 21. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " BarChart2 sheet + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'BarChart2' ). + + " Create global drawing, set type as bar chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART BARS WITH 1 SERIE' ). + lo_drawing->graph = lo_bar2. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_bars. + + "Set chart position (anchor 2 cells) + ls_upper-row = 0. + ls_upper-col = 0. + ls_lower-row = 30. + ls_lower-col = 20. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " LineChart sheet + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'LineChart' ). + + " Create global drawing, set type as line chart, assign chart, set position and media type + lo_drawing = lo_worksheet->excel->add_new_drawing( + ip_type = zcl_excel_drawing=>type_chart + ip_title = 'CHART LINES' ). + lo_drawing->graph = lo_line. + lo_drawing->graph_type = zcl_excel_drawing=>c_graph_line. + + "Set chart position (anchor 2 cells) + ls_upper-row = 0. + ls_upper-col = 0. + ls_lower-row = 30. + ls_lower-col = 20. + lo_drawing->set_position2( + EXPORTING + ip_from = ls_upper + ip_to = ls_lower ). + + lo_drawing->set_media( + EXPORTING + ip_media_type = zcl_excel_drawing=>c_media_type_xml ). + + lo_worksheet->add_drawing( lo_drawing ). + + " Values sheet + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Values' ). + + " Set values for chart + lv_value = 1. + lo_worksheet->set_cell( ip_column = 'A' ip_row = 1 ip_value = lv_value ). + lv_value = 2. + lo_worksheet->set_cell( ip_column = 'A' ip_row = 2 ip_value = lv_value ). + lv_value = 3. + lo_worksheet->set_cell( ip_column = 'A' ip_row = 3 ip_value = lv_value ). + + " Set labels for chart + lo_worksheet->set_cell( ip_column = 'B' ip_row = 1 ip_value = 'One' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Two' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'Three' ). + + " Set values for chart + lv_value = 3. + lo_worksheet->set_cell( ip_column = 'C' ip_row = 1 ip_value = lv_value ). + lv_value = 2. + lo_worksheet->set_cell( ip_column = 'C' ip_row = 2 ip_value = lv_value ). + lv_value = -1. + lo_worksheet->set_cell( ip_column = 'C' ip_row = 3 ip_value = lv_value ). + + " Set labels for chart + lo_worksheet->set_cell( ip_column = 'D' ip_row = 3 ip_value = 'One (Minus)' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 2 ip_value = 'Two' ). + lo_worksheet->set_cell( ip_column = 'D' ip_row = 1 ip_value = 'Three' ). + + " Set values for chart + lv_value = 3. + lo_worksheet->set_cell( ip_column = 'E' ip_row = 1 ip_value = lv_value ). + lv_value = 1. + lo_worksheet->set_cell( ip_column = 'E' ip_row = 2 ip_value = lv_value ). + lv_value = 2. + lo_worksheet->set_cell( ip_column = 'E' ip_row = 3 ip_value = lv_value ). + + " Set labels for chart + lo_worksheet->set_cell( ip_column = 'F' ip_row = 3 ip_value = 'Two' ). + lo_worksheet->set_cell( ip_column = 'F' ip_row = 2 ip_value = 'One' ). + lo_worksheet->set_cell( ip_column = 'F' ip_row = 1 ip_value = 'Three' ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL5 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel5. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + lo_style_conditional TYPE REF TO zcl_excel_style_conditional. + +DATA: ls_iconset TYPE zexcel_conditional_iconset. + + + +CONSTANTS: gc_save_file_name TYPE string VALUE '05_Conditional.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + + + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights2. + ls_iconset-cfvo1_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo1_value = '0'. + ls_iconset-cfvo2_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo2_value = '33'. + ls_iconset-cfvo3_type = zcl_excel_style_conditional=>c_cfvo_type_percent. + ls_iconset-cfvo3_value = '66'. + ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_true. + + lo_style_conditional->mode_iconset = ls_iconset. + lo_style_conditional->set_range( ip_start_column = 'C' + ip_start_row = 4 + ip_stop_column = 'C' + ip_stop_row = 8 ). + + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'C' ip_value = 100 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'C' ip_value = 1000 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'C' ip_value = 150 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'C' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'C' ip_value = 500 ). + + + lo_style_conditional = lo_worksheet->add_new_conditional_style( ). + lo_style_conditional->rule = zcl_excel_style_conditional=>c_rule_iconset. + lo_style_conditional->priority = 1. + ls_iconset-iconset = zcl_excel_style_conditional=>c_iconset_3trafficlights2. + ls_iconset-showvalue = zcl_excel_style_conditional=>c_showvalue_false. + lo_style_conditional->mode_iconset = ls_iconset. + lo_style_conditional->set_range( ip_start_column = 'E' + ip_start_row = 4 + ip_stop_column = 'E' + ip_stop_row = 8 ). + + + lo_worksheet->set_cell( ip_row = 4 ip_column = 'E' ip_value = 100 ). + lo_worksheet->set_cell( ip_row = 5 ip_column = 'E' ip_value = 1000 ). + lo_worksheet->set_cell( ip_row = 6 ip_column = 'E' ip_value = 150 ). + lo_worksheet->set_cell( ip_row = 7 ip_column = 'E' ip_value = 10 ). + lo_worksheet->set_cell( ip_row = 8 ip_column = 'E' ip_value = 500 ). + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + REPORT. + + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet. + +DATA: lv_row TYPE zexcel_cell_row, + lv_col TYPE i, + lv_row_char TYPE char10, + lv_value TYPE string, + ls_fontcolor TYPE zexcel_style_color_argb. + +CONSTANTS: gc_save_file_name TYPE string VALUE '40_Printsettings.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + + +START-OF-SELECTION. + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Demo Printsettings' ). + +*--------------------------------------------------------------------* +* Prepare sheet with trivial data +* - first 4 columns will have fontocolor set +* - first 3 rows will have fontcolor set +* These marked cells will be used for repeatable rows/columns on printpages +*--------------------------------------------------------------------* + DO 100 TIMES. " Rows + + lv_row = sy-index . + WRITE lv_row TO lv_row_char. + + DO 20 TIMES. + + lv_col = sy-index - 1. + CONCATENATE sy-abcde+lv_col(1) lv_row_char INTO lv_value. + lv_col = sy-index. + lo_worksheet->set_cell( ip_row = lv_row + ip_column = lv_col + ip_value = lv_value ). + + TRY. + IF lv_row <= 3. + lo_worksheet->change_cell_style( ip_column = lv_col + ip_row = lv_row + ip_fill_filltype = zcl_excel_style_fill=>c_fill_solid + ip_fill_fgcolor_rgb = zcl_excel_style_color=>c_yellow ). + ENDIF. + IF lv_col <= 4. + lo_worksheet->change_cell_style( ip_column = lv_col + ip_row = lv_row + ip_font_color_rgb = zcl_excel_style_color=>c_red ). + ENDIF. + CATCH zcx_excel . + ENDTRY. + + ENDDO. + + + + ENDDO. + + +*--------------------------------------------------------------------* +* Printsettings +*--------------------------------------------------------------------* + TRY. + lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_columns( iv_columns_from = 'A' + iv_columns_to = 'D' ). + lo_worksheet->zif_excel_sheet_printsettings~set_print_repeat_rows( iv_rows_from = 1 + iv_rows_to = 3 ). + CATCH zcx_excel . + ENDTRY. + + + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + *&---------------------------------------------------------------------* +*& Report ZDEMO_EXCEL4 +*& +*&---------------------------------------------------------------------* +*& +*& +*&---------------------------------------------------------------------* + +REPORT zdemo_excel4. + +DATA: lo_excel TYPE REF TO zcl_excel, + lo_worksheet TYPE REF TO zcl_excel_worksheet, + + lo_hyperlink TYPE REF TO zcl_excel_hyperlink, + + lv_tabcolor TYPE zexcel_s_tabcolor, + + ls_header TYPE zexcel_s_worksheet_head_foot, + ls_footer TYPE zexcel_s_worksheet_head_foot. + +CONSTANTS: gc_save_file_name TYPE string VALUE '04_Sheets.xlsx'. +INCLUDE zdemo_excel_outputopt_incl. + + +START-OF-SELECTION. + + " Creates active sheet + CREATE OBJECT lo_excel. + + " Get active sheet + lo_worksheet = lo_excel->get_active_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet1' ). + lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected. + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the first sheet' ). +* Set color to tab with sheetname - Red + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = 'FF' + ip_green = '00' + ip_blu = '00' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet2!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to second sheet' ip_hyperlink = lo_hyperlink ). + + " Page printing settings + lo_worksheet->sheet_setup->set_page_margins( ip_header = '1' ip_footer = '1' ip_unit = 'cm' ). + lo_worksheet->sheet_setup->black_and_white = 'X'. + lo_worksheet->sheet_setup->fit_to_page = 'X'. " you should turn this on to activate fit_to_height and fit_to_width + lo_worksheet->sheet_setup->fit_to_height = 0. " used only if ip_fit_to_page = 'X' + lo_worksheet->sheet_setup->fit_to_width = 2. " used only if ip_fit_to_page = 'X' + lo_worksheet->sheet_setup->orientation = zcl_excel_sheet_setup=>c_orientation_landscape. + lo_worksheet->sheet_setup->page_order = zcl_excel_sheet_setup=>c_ord_downthenover. + lo_worksheet->sheet_setup->paper_size = zcl_excel_sheet_setup=>c_papersize_a4. + lo_worksheet->sheet_setup->scale = 80. " used only if ip_fit_to_page = SPACE + + " Header and Footer + ls_header-right_value = 'print date &D'. + ls_header-right_font-size = 8. + ls_header-right_font-name = zcl_excel_style_font=>c_name_arial. + + ls_footer-left_value = '&Z&F'. "Path / Filename + ls_footer-left_font = ls_header-right_font. + ls_footer-right_value = 'page &P of &N'. "page x of y + ls_footer-right_font = ls_header-right_font. + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet2' ). +* Set color to tab with sheetname - Green + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = '00' + ip_green = 'FF' + ip_blu = '00' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + lo_worksheet->zif_excel_sheet_properties~selected = zif_excel_sheet_properties=>c_selected. + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'This is the second sheet' ). + lo_hyperlink = zcl_excel_hyperlink=>create_internal_link( iv_location = 'Sheet1!B2' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 'This is link to first sheet' ip_hyperlink = lo_hyperlink ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 4 ip_value = 'Sheet3 is hidden' ). + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet3' ). +* Set color to tab with sheetname - Blue + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = '00' + ip_green = '00' + ip_blu = 'FF' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + lo_worksheet->zif_excel_sheet_properties~hidden = zif_excel_sheet_properties=>c_hidden. + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + lo_worksheet = lo_excel->add_new_worksheet( ). + lo_worksheet->set_title( ip_title = 'Sheet4' ). +* Set color to tab with sheetname - other color + lv_tabcolor-rgb = zcl_excel_style_color=>create_new_argb( ip_red = '00' + ip_green = 'FF' + ip_blu = 'FF' ). + lo_worksheet->set_tabcolor( lv_tabcolor ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 2 ip_value = 'Cell B3 has value 0' ). + lo_worksheet->set_cell( ip_column = 'B' ip_row = 3 ip_value = 0 ). + lo_worksheet->zif_excel_sheet_properties~show_zeros = zif_excel_sheet_properties=>c_hidezero. + + lo_worksheet->sheet_setup->set_header_footer( ip_odd_header = ls_header + ip_odd_footer = ls_footer ). + + lo_excel->set_active_sheet_index_by_name( 'Sheet1' ). + + +*** Create output + lcl_output=>output( lo_excel ). + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/ABAP2XLSX_V_7_0_2.nugg.zip b/build/ABAP2XLSX_V_7_0_2.nugg.zip new file mode 100644 index 0000000000000000000000000000000000000000..d50351c6f29240b2dcda484801316e5e6e655141 GIT binary patch literal 319157 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�hYPwc z_s3W?V;!XsqoDxTJh-JRVV;!96G~%nHTB}f+~W${1ZR2hru}Z%rQl)HK z&=dFx0paxU`jMdGv(Ici$hox9X}|B+PM-|N7yQhb@ve-2DOK&!uju9m?UvO7^LHNr&Ep)-n3(lPld<=x%e=;el$2e zn}Np6v9{n;h)9&4W&_ zT^z*RG6DSMvZjk&I%cG4pPu#l!*=(*ctMxDw@8#*f0g**b1EN>PvUg+kY-x0%B#p5 zINe?}3d^O+_uH?^C0&g_U?)=E`%`~T7v(Kjs5)$chs#6APL2bAGNvou&-GVNtt^y9 z!p6pvIW27RV-Wy_QndJd(3u=-#V5Ab8;b=OifGtupG=rs`OTE`n&j7U z!{DY0@2_z6Q)Mn$rG{c?`#^pcb{MYj$+|#W;~Fv71AK`!V%3!q!*4B+QN^hos`q{z z33+6L)%S~Um)RUu`n0<(=W|{Q*C%MC0^7E9Cn#=+)3X($V!N=sWkvo}1*&;P5lY*U z=;R?6nSVS~MM7}th8KUPQp-)Wic`7fJHQIuEmR#5sYG(;u`HMV}L}e<`9hQ70)30k9Y7blo5G?1Z z=Cwci8p#VpeI{ZlkIjAX&yKxdY8T_$bcFhTT$VI85xdsyM{5IJts7Ajxnlt zHg^fCC1(YZ>)*`cds5C-BI&v~s_(pS4=CrmUFVbSOwjkQf(UxiL+}5{cGKYP4`ZdQ zRwhifhAD8#$-Q(6Tw${vzJPMUxbpycz2t14p~vW>CQZB?Kiu%fR!gD2TH=c*I)=td z92hu9ONS8IA@v$zHVT$&6fWpWI09R9L@wvy4cT4KFgxviwBWE771Xh>tMJnQ zgY$b1HrCcHS*o+(>R0=j zY-x7elFf=-Y*)W&kq6{fY+z(>U#O_oR_C&l2jw(DN5-S+Q7D+XsuR63_fU%?%B z5+->WwE!e^dbJ4KfJ@1_lR*bB9_Bj{XCY`f`=^|W2TZi#` zr%RWY7Dk;)$eO!98OUC-h0fLi`Y-2$Vf)x(rB?}1^U!$)pnqOOad3IRb%5FhJFJAJ z8DJy>O$e8@bx>NyOss^Z8O$aFON<$|9bi)EhV3SW(l#`0B`nRrB^g+<2z6Tq=34Zo zx8-1Nlino3T+akl-z|r8t7agHr&Wm6N?5)rhcXUl+W=!S_pBJgdIkTY#{d*;Hrtqm z+S9QuLfLVOIG0s`OOUoPSPf44?e2$R@7N~rufCsR0b7NDSQ07RL)jdFD7C|WZ`fe| zb7cq(;Tn;C$gDV45M{?Ntj<|Lr<)MEG5875UyfZhnN=aK;bV|lpZbk6=)!WCDi6X6 zfkf9n2upT|vekz*x}2>tu3C}H86nrV z9~rrl<{g#A6Ru6()>1iCHcxVhx9Rk7OV^ywu1R|JZ8{H(kC=~-B#(HTPS1u+99{;o zl3sb6&Jv&^Nr+wrdt0-1B(>i8WZ{a-S&D^H{%yDOx82Sy*zL5?tHijFl9{~#7eOo4 zA)L^rH2Uw4Y$u+oT9qMiIbEyQvL1jHel5p}M`^b{vi|@JgP?RXU~2MLZmTgkY4t27 z_Nq`>Y*CNB=(-hF-UZlfB-a9_#jZ35bGz_#TC2y>V%rq3^vBzRV~^6m1{^Imrp9!6 zw?#OfAFX3fv9SD)L#ihFTY}?BqivzZR7KHZXYbkzD(~xUD2AuB<>wYV%~esf+0nc4 z$HAiVZu3S1xi%#zwI!8{XKSl;Ar02`AZy{TqanME;I3m@PwnIs0=qS{d$-qJ!`yCx zQhF(bw&P(PH1bGKv<9Ns8ih zb3iQH2TLQk72B5V5+fd$?vVUCnz;VAkw4)F1=;6AwmZqwf?!tjj=-+E6JPr`KHnfQ zOTiSp5KKqQh~3DK)5YLHe}7zB3{R&OwE8_5i$fIpeU`s%#r(Dv^Y^nAqsC-xbUGEs zjIAJ4r;*+KsUr6T_4?+FrGRR>t#;!*92TY@hbQG|wF2)7j^NthRk--ux1VPPiJOR8 ztM|!5W2u5#;c8@WJ5aM*$5lbCaM@8XP#+U&=Vz zf5}*<1;NypW32~V7_nf8 z-`~rb^NyX1^Rqw(1SV)*iXaBH*ngls>2qs2nwKIMZUWzd)9!|~Y6)9ax-e!zt7<(H z1>w2zm64^E_At8QaJDk4lCmB~6FXh8GP1Pd9!A-iD|{=X%_wjg>fma0j5THd?dk>Z z*%Z8MQ*d1`c;BXAD~gSRd&3i|?b?)XMYc#pSql2XU@x-L9m}TODHsQ4eYRZ*@q1B8 z|83Lqw@u5xgH205LKHiHqjPrBC?7L8PDo=iyY|%av0JdDFY$djKDPFJX`VFtd+V@; zEQQ!nr(xrD#SybSYi9-6E{W z79Oe$%QxG@lYr&>zT;Tzy;K9!!b26ne6vjh9Kh_`IHFgB(!xFU`1s9s$x49oi__`! zKCK!}3pZ6jbE_EheZOH5@UR+=7H1xhkDK^x5sqt+lop2`K~loMTLUBn&HL=M+-`5^ z4s0&XYjd+WGpF3rRk=@gNH>hhz_*GnwpS=cck0W5%Gev8`fARXls0>y+`C@Emf8$&X5rLdLFD}1{7cx2_^8=C zJ?nMV==rNgqtbp-H9X8)6dna0N1gNapt1kx&~VN)X_gI&MavHgT3+R>l__7dPg@!7 zse#Wcq@%3@m(wo&x9}i}2M%{6n7MO*4F9{D`~DRExR@+RyF2W`jrEwp_2yR>wN?7m z4jWc6ZTtRg?njjIBElSNhu+0+ae#hvsoe^f+PLTfdOkpa-!|jgc}|d&rbp-P&amBO zvdYrLd9(;7F(L-TxI(zQa$Ob$1G?R}y!qF9Rh1T7#{};>wAqItySF}MEnHf4WcRiT zS&NOyWs$XTaMh9B-zsD+b}W}g*23FWNA_T=kbSv6WG$Rub!1;|4YIaY>1Cm{@PtjE z?Z6?_?U}=DE!N9oYvCPhV7ooD7-GA|Y0Sc5*1&dq<}t)}jT4!LW1@lW_RM66?HZ>t zo2>)`-0hjn*i8*!!Yn;$*E*UZ5-JU6p!Mnye&E~2R6W;Ba z)fl{MoYrhE%rN2Io{5dYyUv-d(khL?yKPh3+cm;lX{E;CeY-XAp0z*rhI}z>;qtpQ z$QDbsv*0$2mF4iO#|-ju+v&jGe>tR=fj=3Okr#WD@X7|ul(*4t1&CZhSfkT>|HDyg zTlg#B*dvfKfo3-knhGJVB{c0H4g>tR9Eb)4LJg)@WG*&I;RkFuO}!gmY(C+@w8Cnc z0M~d(9gCu=F7$`*zN7t;}JqS|m%@wqiN z!+E#<+`FoLIUnm=qcIx?ZnJmZwU`B$f!4yDHVPNh$`|xK5@62%rB+igx3D+fq<%?nPV%R14eLP4$}*9|x!do6EVE0oB4{7FEBT`@4af z?@ewZ3L)%|dP6EoU0RLX?hc*za92V$sO8APd~f3)&VF{CPn0ZlKzx|DxNWlr(gpS- ze0YHG>qGAuXya2+q@X>%Ba>SfwR(3FO#KK;BLRNLwe8N}%jr?CGk8aSH;I3L z8L`CR0n3uoUhB3ftpp*fF(=pdv0NjFSjQ|{^gO(SD8${~khHt)VY|_(K^$WUQhSRZ z4~gP)I|^@Z!YOmN4X0GC!%)?Wo9SLKjh_@$@w7&me<2zB5ED6C_~fU(gI5TUQdNEl zHDdelih^mBs>u1=9wL%zP+i)K?e|@_uykQ{fbox?kzp@|FzY20JVy=#INb}KcGnpg zy;$R&VDxPg@i+CME)ZiYJaE#Ch!>NI??o}GGgngzjM*BArGye9Z)5Coc>i;nFiske z`+V)uwxB?LLY~rMybEvU#`A?=eL(4wH5Uh?Fg=?cHLdsp(>BPCn!V?q0VuwZMmQ0C#S8^A3T z!FXLgY-duEeGC>Pn_hnPBYT;(N$uyNR(^+`=GL(M?gsi&5(KSvbWTa;6OaMw$HVL? zWxBYz@aI&N$P*r54txS)hQ(|<6s1t+ddkaH4~H;yjY(qsQzr>dfG96g69MH~PM(=+ z4Gi3Oj-9^KZRYlGIkUe0k<6;lKTr-~!6}sUmehgQr-JQT9K3?l0aVxObucYg?(yZY zf9^=WUP;^OXf5qhizXMHyj#hTl|(XKMrfQ&jgvYQ6h?mKBh;Tv`1j{*%w;Gnm?6-= z%ezdVPK*#xCD6GO6L8`B%L{p)^t@Bvl=KX;4qqBKlHDnfmTimT8n% zW;!L88_TNY&lm(yMA8E}vawLzmKq)}gUQAmU9;2cozVp?5il~jn1cP&31t&9zMsx6 zCu8FLDPO6}&~&L(g=%VM(~`eUJ(TS5t2Io%u>=I!=!sInQwA~Dkhe$2HyPbl(I=^S zI#<(QPPf;{O3kgQ0asNC$ZqA+G$KouucP|3mOgr#JKR!jO9Tjem@@K?{m=YpGJIxZ zaEwy@WbR-3bALMWYu1NXD=Q}8E8#LL)Wgk1Z|!xIb(@Q_8>SkJ*tZAF-Var{lcg0f z=L}C?uBLUrG(WS<<%=dqR2|{LQP7w6K6eJ6i&|ZvZ)DK5TGd132@17{d>tYYjM>&F zPG8DO2KD&LWa8Ca9V68839|Ma}mC};4#A1~&N zyKfc~j~zZ|dk7%=FTBVf6FTw)W8$LFn~q_J!A9oUhEQ3{y37PaU7W2|zS%6unw|EC z2duk_+Lr9Lly$$cUBtQ{6)@i6PrltuXwSMVVL!Y(=1HGgfwZFFDcO5TtH;hcD;qf$ zZ7vFtVl(lTE?af-Yg{*jMb(flxyWSXivDziu^TOJn84@i6E6L^8dl%s-mS`X!6yy9 zkegsyP{>QmLcDJUg&f!wf?gg4#q8S^!~Jjy3gSmvxTuyhv{HzgS?I`cYb0GRh*W$w z!21!CDGEmz&QN?gAq%CQRTGpOl^teuEU&df1+*irD`07>R^WZJuK?3ltNo?i?-P)vEQn1QMFGqWXn~I8_)zcY zLl4f6P-s2jrf36BK4kw3{~FAMPR3sR*Qfl0h+8DcTZ0aD(im|0T0VKUV9vQgy&G=# zp5BW|^V*9fl2sfrew41HHd>tv`_ACJlk3oDF%>>^4VW0MvuDGE@R}l|D_Kp2Dh`pd zqQxW@W}QpgdtyA>EeiN}1gn?vWycux+3TkaB9sM%vIsIRTwdRTVnCG*JAdMV*j$uG z8E`LVnxyGuoX7sA-t^trKWS#7ME46D{y^5Z(R_6qxyk>h&hVtyg2gOaaBGQ@LMC%J z_HSm4<@?StEJBqu83y`E%xwse4^6r(bEEr()t*wO=%Z$2dGOIQ@;a%~O5|P(=^c|` zj%4$3#0W-q=C*16N;gcW$iy5hP#$Y~V$vqCxGKoS>k*f)%Y4~2%514dALiEakN-f2 zChMlv4MrPZjzKkFj+Z}j)M>sP?KS#x*o?S5UyecI%fTEuz@fud_pk_;_^H?bFgS5+ zqE>$j=U=01A0kz6YLvtng7TF#Q}V#+@QVuz+3wJ#L#5wtmK)c13k*%NPY)D7Q*c&N z{Y?39=4bj^{YZcB?-A3{w7&l~d3X3vN6!0p7i8E?d=IKbIE`J}-Sc3iOUco-H&8rH@fz97RC2y_*H-w$~2teb!Cc-jMqL` z^plM77+y!guV&(jcjaD$ld)P0YQYy_ILSyGP@Os$m8LaVhNaEmrQ-31usnb@#Bh5c zZye`o-gxyk#T)hgH+iFtH(mj?Y^L(jCbmgq2a&J9GNOwzF|$4V{cFg&$1T$D;<2 z_AivQ)zI}QLOi1{&+ojO+3$B&@jMfy@qyaJ20qbIcuL>9y*8lz`HSoH`@R0Ei2(I@ zKt^sDxU+fq?cQY;%J%75$2oPnL)1P|?dFT$Q8QK44ah&Jew{(%5+JV&lXvt#c1UF%C{$<-{sey3=zi%jovvgi1Hdo0w(VW~0-Q zgW5nSo_o`1;>Ery6cEltyGZSAz=H`n?4qxd?@~CZS!i!y27;`V-;tbfr!#O2MkpA} zlHcfO62$@iFHJ;vqVEI+$pnL^kiLTYu;O%cV+f2bH76UCY;mCHtXrd90q=DTl`>Ih zImFD$Hliz83eyvFHT_ZC#48_GRyg`gDprJvR(J9~D>d_7O{dn;;FE`VaygWz+{;P1 zmrA*xlX5?m@*pSWfnaNOFQ;_6%AS_;X0EvxM84>TEG0=kiM9kw+eGil&ms4l2eMDF zx-pY!e0U@iX4&9Nosz;_uuWDt)-$pJ5`#hGy+hh9mAjbvfi_R=BSO08r$^Fv@Xx%3uSQT^|2H`DFlnPXLyV; zYMF}zUM2NjrPTYCQXlBbzf?mt2~rbu81h2Rv~P-tny4Tx5Lh-%y-G>Lnw}_M5H7<$ zn%D-n4p^0$Sy`_1f^gMKLc4Wo$9>;#x9}?S0ayT5O$A$+PDT^=Y7w~JL33B#{AA%5BJ8S`!RN$_HGiut7m0=WAgxqlWeocDrKZP#$}y%uoCybLWxkD-_2;#y76*;`iu& z=O((ktxH+T#sn>1S?HJ8hDiC7VQ70y7Lwv*&^0- zb5>>z560T&hoaLciKd~JNS${DeCY&xT7tcFf_*K)emcQ{mH=kEJQ0KsUoPi!70x$h z>}m5TWR~D-ZrIlcTZ1#cvl>;+9Sqj$4ST6GUkMJ?V{hLg(xi_t-Rb4T zD-ZppQoKmUF!4a@qWM$FPypv+xWdr?7N3RT1bO7{l?(%pIY4Ohb44a z=>(i_+W!PQeBd?$`z+ldIH?T13x5K^YMB=VY&Y)7qjLF09H4WHRs{Lmzx~JmLp9!L zbUpQhF=ehO7+sT_fc`PMrfu`-WZ+*crel8!iw~ZQ{w8<9oN{2`NB)g?KfRbxz9Umw zL`<%O>930`{}O7rifh%0P1<`5Wl(8FC!DX8SRY9I6wrn4{5qU0rdLrk^Cq!BC3lPY z*aw;^g;$Vi5(ih5?jxRwx0bfZpH?SmPZHF{7W(svx457~jQj$n!&|>nJ?<4%uQcJXV{9L7lz#>Lq}O!LAAv6*&I*Cpy0blQXbI$({uf;xKbN>x<8 zn>OP;w5wW%UVF*QZ?jx>8dQDx=(zN=#Ub&JlyzZJ?J`S@a-n*;Lys9HcGo_@<^ahP zp6e?Qt63Sd=1HSJv^X}?q~kq~K;lgN)Y+IkoXo(l1vtq7*iP4^k6FdLk zYM(k?0Llh3i50F7*eRoNK;_y6EJj+8|NJvdq>W_ zcDRGVC~R)PYQgRcoZt3hFm8=ubvW`Oe!Un8B3!Y}=HYEHW|poNJ9cZO%>=?jQ(P z#fd3(w`(=vHfj}!U&;>x<;K;@UWD{py>90V9^bSFW+U)8?mNyej(gVVGP8^ILZs7qO^fG9+y4HdgvhS84V${bv;u#r`>=g!`sr;1j>1me9Xd8wKto*p zN#g8;TAkrBVSQa`B?LE157tm~Po2Ka&EyZk?g3M$f}MNb9rXG`XEPS948(ymJU=T3 z552=6ZsKBQ1z3f7Gi$G3C2b?1qT;T?T48Wa1zfeILiYTbzf{26$E=yqY`~^qO6#Ge zpEwN)!g_GcwkvHjuD0$xY((R}7BdmV_cPxL(+Xy&v^3;n8>rj}yoQYM=YQMT2|VxJ+!Vs1j=X24~|UYeN``O8Yr!*GU{ytVlzPF!!5V>JY?aw~MQ z*ALp2^KyTc{j9)fI50WM8vx$<*_pL{co@zITuM~YHoX6URmGZZ!}9FzX>O!r6|}P! z|5_BX@2|~{)97=vVc$7(8p1_pAVLxAA$*rDt+v`ThTizkizsHtnZfOJ?$73aBo1Y* zt|mAXPn+~EiI4?0Ul$L3z|{)w3y@Iro$IIL|dn#;|c6QG8kRo{O#ZVtdSC}HpxUkJ^KAYA?{B#4#bshu+$;g|87T_^Lk}VRM&!mZ$OL88y+~jgF%p&EuiJ;w;-*~lYV2DL| zA+(0>as|>c|8&J#MDyAoeTAE|)U(PE>VO|tUR_<{Dsl~2xVVMiv!3QA^Io*d2dP>1 zCkMNAafhwVEp6E$DlqQJp-CeatKNr8+n8=7?OB}zwx+?WVvg^r&K9UCXCN0m zThr84@x%|FHO0D=&4IGp@}^8-15%Q2^?dmQXH0Q_4VoR;?x^Jyna)|`L-W_*k_%JZ z5Q2DsGrCp@{OGT2-#7CC4jelVbRXSfTCNWF&gfFy` zkj+0DdX7W;m+IIjS-E5^g6^6Qt6%+j7~#muPstXTE~JO#wX$*-H#gq={=%PxcQ)l> zLYH5*US2Lcd|^>8CS>KJQZ)^J4XBv^)hEA(;Y~F17 z$_F$TXc-X1O#S_95}`D6knm)DkSwM$IYNayHa3-bQFIs1S*G&j-Xad&%U}Wl<&?*Q zz-j2wpSQkcMPq;B$G%urufHNtM%LRRc6iYRUjntJ^;NWX=y*lzhc1{#iA{8!E#eg= z$0*la(fXldt7@&1>J>e+sYytZ2h=3)K>)J}`RUagyC%+p+mMG3Uhlw41oF}?w5uo@ z`BQHmghscmp&}n_E$$>7ef7tQXj)rEi>Y4K8Y+SpB=xMJqHvzINmi|*AEwkOS9YRK z2DgnvN;|zKFLx1iw-+8j0n+HNaC;SohDH5O{Q7Y!US50X%ZC9%UslD0zR+QzFP1>& z#tIPO8`)^JL|B$`=g7u*OvWs741`LC*yY$98$V`nIBm5DXAm_Q+!arUE#?Kei+`(* zlSfVZLf(6izXo5r@QHT`-e%x~Cb~>32hARP+di{zIuDqGWlA?rwG9PLJ!|yU=Fy*L zjlp2ZkG-e8kdw9u@?K=}qS7kllV)S!0RQkVLdFAQ3Ap168wnwwPMoe{9p{NrLP0_| zxDiH6c=+cC3k#;B$zn{)N-D7~7J^L2vRM38RwxAcZ*Y@P?ijdv5bJlHPi`uNX*oAE z=e`Fq+&wa->vJ`bDbtK&WR>zkvG=0~MNa$W5OI3Tz;hfJYJAK zEwXF=$jNLvpPBhBQS2-L@k3YXV#O+vddoQ48;_r4X5xIkMqX~|u^-F3O6TOU9=Fnl zh4(jsg;UK|8MrbgEfa~eP8c(GyCgH2#n-cFT4Et@XS<9ug^WaJgIA*QL}t~l!;zClASCf@X`*n`VpOtCpn zSQ?!P*>3LISnsIaZNVi@<hlq2;!@4e8)K+mbbp+U&cGv5b11549vM_gD^mrvQ_Q7V7%e?mN7?~$Xd@gWnfhd z#K~`!UYeV8 zsi3_Br#J2zPJ0=a(q!&mg84=DBIn<^`Zr>8Fqh710X#uGzsDNjQ9tAC%YQu)3FzGW zZ5GaB?FM_i2+*6{%Abe)g_cC#?I)7(7g{284hqD<1DeQ&(vx>BbjDy)rqiIQW7k1Jn`8=Xx;L5;a6tbS+KMx7}C2S)jFCJYd zK4fw$pLN5UwHvqBarVl2xLCy@PoR{iHk!^WdrfD3x(#o%BIjGZ<~dvz?Vk57Ml?-? zcccXq|2eq3m7j}vTsRcN6J39+iCCROLZ0)oHd#&PzBOZQPEY7 zkb^P-RiWm0!C=t%2yvZ^1O9OMVsEWy|)#5Y)-)VjDdgFoM=WSiv;o-0eLb&c+``*}}+f5N~9tegu zMKBNl&pe3D8i8q?4|~UL3ub97;_xy^pt%di@wFW?Zyyyh?2Z`>Lu|`6O?I^+;}#kA z-vSxDdFUa~40@8__Ru-~4#Jh!HaI^T_J$1$t#q)sh{KpF8yK~&5;_mnKYtiHme33( zE|p+;s4{8^%hL7;6PDBVU;tWB%feLiDVUDI%kXLujPYRFO%O%6F_-#;|68HV!HFy{FPJF z?tWyueudjc`8xQ@32L=ZUCNhq3^Y&Nj~|>b6={08Zkh(pX`>=duhu{lGLYNu7Sf}b zAf`KCr{SH{5_+@fx%@G_pB1T+#l}S>thTx%anHypt6=O$qj`W}y<@QOr> z(KYd+cjCPD&jja*=j3W0E@n*efdjj2T1`^@Y2i)dAin2U@;xWsO}LoG{3m%b_GkWd z?8`S#ldRp)4HxlqG7a%$7Vd|^*P%bUo(6we_y|TYC9G38X@kZYY5CFDm@cJymzTlF zC+%tMU$HyX$&*&E{d9F526f^F7FeqzKf=q?ci$0O3;47!K^x8?Sy^ex!wi|K%{rck z6QY@{+itIo(Y71yE`(&HfAxDE-Pk>whu`i2%Tz{b!aM8tK7Y}3MYB0&4rZ}UWgMLK zsrrfIRL{kZ>}J)4gH=sDa_4>wo|!x`%=~>k)6^IKcRXd_UVGes8&d|tyZsDX1|L;w zr4#2Ll``BQaz~R8E{^173nRm6{lgheLxpND_rKU{7pHBKXJ$52tE1~ zf7U1U`cp>eNI~MxgD!JV8r@dM0g*+qYj%en{)RV+lCIPmyEvlg0Cp$0Bci}a)44o^~s z&cKCk(bK>0pLKY{QLBNhEO0^x3UfMO4`-SZR>e?bnp2XXrey<~l`QFO13apJ+|#qE zg!0^aHYGvLptCci!D%x^GYf$lhMSb>n7OH#H4AuuBg-%!d7dg zx+$7jw$e_vntvfR5c~$Ep-|h2?r$!_N%W5GI3FMOl6TBl6{(PF$K)*7d*UTEifXC1RrKpz96~z8cK`!{LW3sqNL!x4mjHArn zE0GOsF(9QwCE3ODLiv~(^Lo?!+@8v(f_IrJr7F@QN|4mZ5(Gs#8P#Qi%&QHX48=L0 zj$~D%5RxuVT`%MphSrXWf9p@8q&%~*)N&xdJPjO;m6C32nRCGYJ96XAxRjuh+P?uC z%ZPA?u&P2oQ;14Gv9Y#h<;_675y@n#qI{_(O%zNeDSxRYq?Iucqx+pyjfr$tY2w%j zD;~bn#G;y5P@oEIqcBBY8#zsZok4{x*RW=hCuFpk&;9A>9w+L*2xHh{8t^1fHKHZ2 z(t<8^*yJ~z*!&zydZ6+1=T2fEL0j1lef3UULY#OeN=$XTpgtK=mNOu|`t}VzKxm;j zpzlkQCm^*rlo81w zL1$w$0JDW0ttXuBC^gXEdL>?r9A8+;#}v&RzIk}3mv%dkGfBpwykG+*ne>^dSi?W2 zsg!wF?+N^<18<}^yTHsbfpBOcxG=cJF%YH-b)$BBRI{V1T4lh;0iScCUkx32G(^yTc>yIPo zLB&p`Xi0@C3~N@F+K@NPk7T$WLtiPFNDpX}=RwSOR7U<1D<;uY_^*qetyF~4Q6ssV zdjZ#LMp_?ZDq>1A?T(rl#G}i;s~DnrSfrvrOZ&T;hEAb|i)VrI2Z&3s?n?Re0s^#Ky?vG$%rZVY| z32x{R@6N(VmXj)gQ%uv~31l-bj8f6s@e(Xms z>@3z)&ZXZJcFR~tvCMg^sEj3)k-=C%@jG7CI%I|`e@fMjk((?n^gK#EsXRtCFm8;M z9cJNrijor4fc%u#O3K^9l((wn1LnB7fe^CudlsTfG6~}ixNkX`Fj-Jt=8W_+sVfEX ztu^;fuaXaK62REjM>WV@xx=Pq!angK)+b+diwsk$E>0HFwb`%{9}b#-o8C;A>fxA) zmQRlSL=lLT5tJ#6U%n#)usNYcYXZcN!_fjDTwW?u`a~fv>SbAzROEuQxzco&rr&wr zZ=CJWg{Fwh19Y4=n*H88(u5sFS0S*BD&=7Www&X3*C8XVAS8>*_KEM!->G|-`~%$m zAog_wP}X9hc5?DY7)hHY82j-&y!Xe%8wadTEE@zVcViG`vFITv8(0>RnAUijiq1?3 z@DO8+LxV`5A)spKVwzNc?^8V!QxL3(W~c3=zp(CvGH9H#TN^}5+eFQ|)Q`*#5jmVB zytI5ryFNtI7Nwv6r8Y0K%_1r_dk*Em)YGWr?oiq4mQ7G2b;Fa}AP$n!BvD5ud4jlX z!US3LYf~YKCGjUwLZ7lbf5;REER4mGg?^Xgi87xX(&aACs>J0cE$n(}|K&?enEF&U zmgZrTkr^e;MyEqgo#9EZrKCn|IG>7lDGJ~h8$+^LnqR|n!dMo8_i++qr<0J zK2*%XPJ41OpQ7MZ+)6kL0w1Wa(?S$`k|fTr_*&r4L?n2@G{ul5J?2nGb(Fz~js>+9 zoKuk3z z)9X&L`iw4lGOzeLB-|%YdS@X7l%*Tz;9}D3J5E2VEZIh`b&tWXFZ%k=n3e06Nk77C2VA@jk zF@30I2-#$yv5QDt@Xt)mf6oZIZK4tEIpI!Xw4tEBYc6ANUo)pMR$rz+St5zyU2OpG zYHt*&%x8bB^P5ejOI4{~3CgFsqzjpWe99A;2u`Ac8q^ow1e*!PDv z0J7F2T3^`pgQB1`QEU$szu&glw*fIOL_CxDnPMh^6;vfjZ1}-0gp%qPHHd*E>|&g z6iTK@?$*)@IWJfCHF%qOaXb$$7O@}YRVO?-_3$$(W^hC#nnUiQ$qDeHD7c#PcUUzz zWv2bzICqQP=`^bbJy` zjgE@kL!+cR=GNo1Tsoij+s>e2}4piX}1*iKL{F>=9EY$q!sAWo4@8WvUls+RMwdSCDBxFVlWO zrh~jp2L+j4=4E@jCPRsT)RqHV>MkRMs%k3JXiiG*iCA*&~sS%f^*YGA&P-InuN$(A7i zl}s6jsbnV2t5M`Cnq7@EQhM9a{Y=S}ai~gW!q%A?OwrCWo9#2RWt_s2^{6dW@?ikP zfr1jMgz4unt;Yxk;Fp`4g}|BV0R>Mhq^=}V*+fZvNTk5;4Nsi@fMh&}WFH4Y`X!DnoecHFDmsQu$QQ0~~^W8pA;X zsnVmOcL7_w;Z)Q6RAm!ZfgblB&pZNY5|QB#&iNFMvxD=ZAV{T;CAkQu-u#|Kl*2~X zycIc`H4zTbu{cdX#+{hw@L% zpHJKlYd7)#q8p09pCc)PJ_SWw2V>u5dU~>;s#3s+VS=X#dDr4H{GP6uf>CA+j9l$rCTd3_#j?WwxH64G~ z)QoUxhCijPktLX)sVMiSAZ@Y;GOdC7lTgL;D%3yA&cZ%30aaW$uDeyL)r4H&J(1s^ zrqn*e))3H!Lf8ygwX=%p>iq^RvGKJxC3W?188~zUyw5>E;9 zyM&Kurklki4y13ePI0H#J0p!@4m+45Uwk)YuXx~kcQH)Kg&*JflF`bBL>}Di!B`;W z1TPE)fz$IgA!@@c<0K z-P8HG#Z-;sF|w3;QY=N5diHEb?)n~*!c1~Nr*dZ{H3m1+X^O`kJgKsa65~M4qNcFD z^2W}?oDMC9Yb35PJw!L%vAyllIoG54^jl@~rIDJvy&4`-)SN8!yZoWi*-g6HT&DIwv<>Vg|7 zR??%ePN27GEasL+>Gi^;b zlU45|H5Zj+(?6qh2l2Tn9m#`na-7o?a|v1i++Thea7oP%1@13v0PY!?`|R*Po2;0t z-u=wCLY3B{opUn0ViiG^$_f=h-Y5G{W%hP=sCaR)$F}OWkyGal-Kk8m7o`TjY4l0e zT$5}5amXROSOgS0Jpd8k^3o!d9Af+fwle^yG3d+7;EK*2BJsoKy4;x#KH@skA6>(o zo$4(3IK?>Asn0rOB79BFc&EgWA>^EntcXrxlaSI&*)VA)KSV+&y4l2|LNJ2qQ&gas z$V|pfyCC9Qu?NWV+YCmThGnrCb;+P(dGfXoIWjQ0pjsywb1>{1tf{69XOT?VIvy&R z1Ck#M1|j+>Rou@h8(^x`!QD8l;!o#|ZfdOMH=;`yLOMIJr$9DPeu@@1S^PwlCl8B8 ztCf*nYkhG6-QF25KrH5`p*bOIMW@V}3R-kEGpK+TO;cGIN@_5EiI{@VFQ5gS<+--?d8T!HW7ZySmOwU)$U{Na7Bx5Bbp$K8FZOgRG6L!LDW=d zCVmXGeD#nO(BffTVb>WWqc`mOV`O$newXN-Lg6ax6diHC5)9xDE}$X81vwb1K%7bF zQGN(H7fwa6uB4kwdf_iWychnmR4=3!KCABovquOSBK#rT+53&op|TTr_&`A=UJC>6 z5UdhWmWV(^XD;{JpUj@@@%t>MHQOO0E7T9SGRh+#*L}}e$aogt4|_>=U=q|1)5BSp z)LXsFl~V3_%)kU#`AEk*AQ1jvFnV|sEcz`$igg**js=YUk&-UG>BQAowFJ=wby6+l z5$Q?vj65Mbb$QQrK8NsfVBI4o8A6O1sir4`TglaAVp&+rC=EwMKCp9t7W?1CZhT^^ zVqrmX;m=oO`gazvlx;eSc%xR^*P3&(E*zdq@-yC=3%Mk5)@#9oNhgZ%H1z#ehrEVg`{E zrE@|m4vUhTAJb0@v-O__@O)k?%r{-)iaM$ zt{8`7)l=gsQduHbOu8rtdmYEP*h(yeSRMwGo(GP{vh8bpA8D(OB5=L&xR5~B`a_Z^ zo2*Q^=OHH_9uyh89zpCtAkA7vN_G749Xch~C@ae(7J-K$nT)YnlRSwzmHCM2$ieg$ z!#XfvjBesNlYpJ*IF&^9)k+!%H||Xk-9X$c5$;&;b3ph|D}b(MjHyH+7Nd;P8fmut zilmuNt%#{5BI+(GB=UGD?xwO2kq`H-#)*^X6V4Irf6qDFJQqJ}wc1lqjQCA+bdtUd zuF~9-I)1MP{h?oG{yff$Zz4X+;6RGe*y(p0aQet}KB0<+o=q;#oo4&A(QyaPS)<<= zicLwDuX)nwzSl!du_%AyITSc)pi)t}h~^Aa`o}I?vg&#ozL)9=Bxg2TVX>up$U-W* zwBJ~6ts01@>AC(SxOsAraYY*FKd;p2jyT7Oz^OQVu5i#`5)oY$t^Vwg1O^a=qScU> zw9!B5G9jggabA!tq%n+qi%n0OptKArH^OG}0sI72PT{cml&6pTohUJFrP(P7%$W)u&1Uda_T8G1SFDy*f|Qf=*X)c6ZMF!o%7-i+%i@jDAhBa) zy*0sr2_=VS7BP`%dZ}76S30p|hK4MbgL7ymHp(>S+1Oi!lF{uRFOse1}0z@c1b1QpB1hh?hM!c!eGe#B*6iIkXb(#s~J%d4I zg4mB@kOxodyQ#5`QFZo`c)I$-`=TDj1YOjC!)HA5ED5CPfENW5iV{USMF)J(BUV%e zH3(|~;gO0nrvOD$#EBrnfO_s?Myuj#R!aKgN7()n5XBPn<@}>2oC~9e26LY6-y2Js4B%e9VF^Kj)sKl$V%>B%M!K zEN0v`OzLJDycyG3aRW;HP_szTZ7h%$LME$?y`U@4ugbzRqqf7Wmp_vL!!Pg1EmpRx z&4tmEBt7=kQU#24$U^;X#%h=Y!_@)%G@uhbYOzs)A>U5u^5dF?M zUA8_+A=;~^fOkm>(PT9RdzYl4zpkdd6y-Ek5)v@Q^~k9FJ_ub6BFQBYJNYQo%%q93 zTTgxC^P%{_4ZYgI1bHff_hOh_ApzNC^K&F_l9tLdl~i38t4}It^bQ zDz)Mqm`=zI6#kf8+>>bLjZy+TU5XBp`kg4XN~Cm6MhA!2rJX)A4{zx3$(PFH1+R45 zI~_!vbC}Y{gdU``7=7G;$8;yCDm4UI3IaXO{xm5ihw@MHDNnv9=3t(Zl_=V2z{wev zFFAkC*5JhUJ+p=}0|~e>U9yE4dkz2n83Vt-J7qbC21Isph~Ig_I~ zlj^kBm8m2z=BDoM?pl=D-K|$Dvu;)9UZpbkEy_G=4l9%?y=02%RQy_4fy|MRuF2#Z z`ZrCl6){bsa3lxRlq_kZ6r4ig^gwxxJCq!-=FP8Ul3a_FN`wmzRH2d;2OGI)=z~Fs z!UO(zGJX1-g-q~9*HVoVp7lbSl#cN{eKB*c)pSO5vP`}xS|W@*^^>9$CaqT!D5@b? z-PBLn`eBg-fd>WM*dOU@C`CtMl8}CcDTAeAS2&4xNq=bpee^v7-GNr|4uO~* zo;vFx3K3^KAhA(s#z`QNitpBsmDI{^d^`rdSVVvz+-96=F$y>F7IP%y))--o9N6ZN z>A6u>^+n@OB-urpF4jqr>P~*zkun2?1Usl8)=xo+?HQ4ujZ#%>9fvHDb~cJVl=_TO z9nD8ts;vIzXQ`IzXe6pqXT!5hhr?5;(-~=H9S@K0rpMpuhyJq?F}UHsKWm-jE64Uz zMHxN^Y^j(lBckGc*rL^C|n z@kchnT>Y>omN#3XR%Cw8S)+*0DW}dy(8}GaZPfivnQSZ9U6c}*0wo8MLO|@`C;+1n zin69l1^00@y}rt}OLhH`v|axsMER;YLM}KSJu3B;qO!LosO+s2mHjP2Wq+lp9Bc_H z2dhLSwe)9RO;kbk|Dv0wmxSy4sw8#uW5FOR*H<2)PF4s2{ktjzl~guqoO&E%%n&b2 z&)u0m>E@aW{P_U1#JJ0@8I~3#u&XefL~_}pkxwzClyTRcWC0GpxO)^$3(2_K1Kf`W zKV4j})%0{ohLH~5@d8B>eLF+G9T^)S^26mk#K03f#`_Cz^flx4WvJZ9r?8Dopl_cg z#lcQe`ZeD^N`GK`Mj7?bDI+oN&HO~$iN3PtN7*YywDUW(Qy2x)*+OEZ^h!9rbzwoC z<(PnJmPgQo%-{fZ{jFp`UCH&J%W*l#LtWr`?)D5 z{`4xoPM3X2D;3vK>)T$!tOA|MWo056c$%mB7E2|oDsE=M2>|ZtG-k0=z}g0Vj1HY< z;vbVMyvHxvpf9h zwB7ybwDI|;#>e+Rb$e$&wT_2BWotz0!=_nTk5Y+Bu+gc)h2O^mBEeLRvH_22c1^bs zW)|xfQZ@Xi?(Q!Aw@&}vqyO&He-D153e``o25ot-`_o|9-;~y7J0he8PqraghT<>Y z?3Kx~jA3>rV;v{%19}on?|dr7Ue@;x>TfcW;Q1|b;r|-=*D+~%@!}?;lGwX|d!{qe zdka`GP04<}R^O}D-@JYMoaUy}^Vpxn**QQtsK2F?9O#=qm4t)QwKs|X>|M_@GmLB3 zHJXd66Zb5{AZcV{l3V8#?|9C0`%gihZ7|S$~1u%{DiX<Zw;|eiu|v|i(i_0+0nH30<@{aZUqrR$pg7;PtTc z=S36;l*7$UTAgs!*DQJPZYg%daf(8!n1X_=9ePspX0i+OhspI}lX+7Nm{A(43i_bU zLQ*frC^*j$BPUI1*Hhhu#8Z$>@s+BSEyH=rCR>Jolufq%<+2?tlP$}pWj%N-MYWp6 z>{hzI%!&>o69cg_ywGvs04`^`<;JUgXl`7XNK0D%z-DxPU+Qef?6d5UBlk*l5mY(h z-!E^QA9i4ih=Khp(?oKa5b1O~U&J2groO&^Z>YQ0) z#2#)JwDD!OG{VKxaoQNlh^W=0L>DdeGI#k)Z_I-YQpk?=XY!;R~h;vDyELcgI- z3d_QXcFP!)95ir^l+*uO8$`_2v7hDzW#}&%{ZxIVp)D^OYW9QiQ3>=bwmm=Ll*LLd zPndMHVLV6y&^|7cNAjwcvhZrz(T$S_d%$8{hGUT}@q>p&R?e&YPq}rc?~_vBN{$D% z1q-pl#>^ZHI|jfobTn%`F77pyQcT9e0N#5?hRyT-=ZwC|#*7<4a_At&!zWEx4p25v z&z%K9w|JZgA!!c{`4z}kLa07k)MC2xbsF9!&BVP=+Sp5PF-e9o$=IXTr$(xlX7QpT zk>q?-7`ID2x${$2d3#v}Nx*XEGk-F=nj7hSkzizQ*-%q7fhkPAi)MQD7OCW67!m7-@ptxOGL3f`g)E}O}}}I_{^xkQ?l{K_7=BFfz?0?l}o}3f% zW+!LvDSTH7ve?XcleMq%jGP4ioQ}`=m`oRQDrJ1J_3V=mu!q8r{?k+o+EZ6lw2rRh z=j6_xf=oiA#4mm@0;7dbnRSjYU{9LT3tQgwJ?-OhjkGWhDP67o^tXTe&;Ry+{q0}> z^S}Lf`0KyRzwq7vknjG_RJ#A~|M=U#(SQH-KmJ`L`q%%(|N4Lb=TCDo1plDeyO~AL zu_fLDJTP$5eaCf6NfkE!czv{RY{uUFl1e_1&Iz0xOiF4TUxEx|)S$;7UebmZXw&D9 z?2s?7jy~)j)T#1dNP~=#k?d*L_x2B7zIy%UZSDEa&rbFzvlyj0TWVQ*S6YIC%{8t~ zGfz5Z&ER)Wh!wOl^Wh`{)1NM5Z1qbJ6_DEyrO|b88D}L&)8CjbAaET-+khrFF>sXj z8tpF+c#+QM%iE3M*PMrkJCuJVCp}f)ETX$=X*V*Mr$nF8cS=6CvWzpM$cc0EM9*SW zqfTV-%Weu|F*gvCx!hgPagv5oMMOT{mKQ){#Ey%~SwW=Xgrw!}&>09%Bv~HYJ<)R( zVJob}>An$PcvQ>`=eZ<+3~!23ulhCdyw)6OlLXvh8*0KYB>`w;uq*{{3}nENg>Z(7 zNxhyICnRZTs%_7(Xci2ZqrXg01;;!NpafG8Scy+cGzDyec%K_zD<_1)C<&h+(3Z95 z#@IryeeGDZ9M{F}{>-3a=0)FYba6_3nW5yD25%sZxlGaK@U!@7pJyn-_z0hA4FQjk z9=W`N^a2MLly@76>uoqq!5wT*o$^EStJ!baIAM@Oo{2~rZ`J_Qq3wsjkS`Vn6xY- z;nk^tmY0@$1*d_ro$Ac)SAVHN416twfx=z#&m^_4TnNaotuok_&S*D_NgTigBsf-% zAx13uB7l5~L;d!^XzUH@LUkhl{&=xtDvs53mz=A7nqtuQId#0tKKz zf~4Kkh?%wsRApslWo2b$Wo9|Zu}_*DvyVm2IOL`^&JjyG;)Y1EPUlaV0>M5#%~Z** zT;e*8E@LRhqpGVhNL>_J!==KQ3ZWtWL+U%c!beE#pHO?y9{|2%iqwqUwxTi}sL zQsQ7k1e_;G5e)2oU>(@T`epGCAwOC?kRHL4lNS~WrVq83+O?r4d160+yl zWUyub3X?6AFPZ}Cq2UmF4571g)jW~F|JR~X435*4M;v_l;M&LVyuY80NFMO`HW9L` zNdq~LfB&8u0JP$^dJP09SK zo?N2TSCuyvgPZHgUhqg*J7_H$){~K|`d-JR5gnpZpzDIwTi^zV%r&?EoPW{j>9+p> z>=aT`On6z6f>%M{oTESh2<6Z28ZEKyLt7iw_g#jmxt5`ECC3uoR$)*C>C z&B}-DLB$0xHK-==nc4-(U_8Xsq+Z<8$87jv?WSK z%Q2}}$5RuXnQ2FCQb;%8SY+YvgK%0_6y8LO@F%8eDPhRi;n6R$(6h-xnEaZA_*uz9 z=vz`~p`q81b*zZQDocQ*g(h;bCN-0r?M%U$5XZZfoXS9uey7XNbZ>MxWrf@?B9x}* zmPP1eugwTTVpEf(s~Luch+{gLrAFB(bfNadvjvy%5>AJEm}p9fM(9M!07PB!JkEyr zQ+&%lb<>ci!+v6W5)x#lbi!}CUx!xl}27^kfs<3BzGfbG(_?8|YR>}JE$^%76ECJa3-;N4mrMp+xZml-Geqer`m`E(Cbj8Of!ePfaa{? zh~b8r!Kg15 zMw5OH+3#cTRkU0(`7KL4^ZMb38?DMW-kH+t=rHf`bMHs7?d5O2Wmtf^5<{ym;K%qQ z|K*|RJUV{CI&(yi_igQY?VH-O+HviOk=37J?Hb!l*O(GnTL1>Nt7r*|LyedU03EPV zpRqPidL4O1vk#&Zjwv*f@l*T9Y&Bm&WJF|)U+aAI`m!@>oxW|r*qxqV4$izsPIC*> zDK4b3$S%B$qlN5QrDv5qexXedxvf42y@jI?GD^Ze_jvPXi5z0(D$IGuy@c@pN77mWYZRFEk+F00&QS^=@M zw0p#eV;HBox!%Qd1~R63Fy|^cT~w;RsqdOhv|lxs6p7hF5x%AEwHCzrka{vChN`@z zmmXVU##3Ormuj#<(1Q$kUYMh9`$MU3 z+Ap{}{$}yh2)uH%SK>N(?bRoyEor6D%)|c%^<=F54XO(NDKkUz-=LS%U$>!nr<_F0 z7fc-R7c_13AD}`=OlaGm_^Fi;p@;mZaOu=g)PAOQOGyMiimIU4_3}3)294~%mSNP` zkAIbd6n+2@;hq0Pya4=+7q(`qn%9rLL3=Rh^t#^jm)@ZHW7}(XPuTvbH)wmOo%42e zE#YR2);P$MJolGOXwm$KhF(5>+IsmFUI9z6!5*y^Tn|qhPc)(IB?X!&#HwqUGz1#-IcM+2 zOK0xi_;)F5s6^|m*?q0SlO5rC-Wd}cuf*b)*!hKggyPkB%(m~>tLapv)1V}_>H{NU z9Qz+|qb>gS!f(F&?jU~Pr#?iG6W%T?rfrekd@0j}&c)~yKmnJ2Fm7B0ftDp*N7P(U zbb(5wSM%9M3bqZ36$6NclsKjS+oz=T`~$rH?NfS7Kcrb<&}Eu^}ZV$imT5m4s>#I)pgzN!dc|W%MF#8%`9ew4Uv*EjJe8t|LvpjdUwN-u?02ilFgQHqzXtESP!N0U{Z?6<*68)1 z)uWf4i+n<`+Jx_siM!UtqeK@knti=n?B_*uFuVw8q(2zlx+koTM~FPFwtqax zf5b@HJny|O9`GURfmb0N0nmnui9UZCeQ+Yj@rLC1J@rr}Cm^(0z23!;A$|_*Q8AGQ z^lCI{4?!Ldim60*Dl83JF`XNf%h-ub&#EC)8uM)us=Wt7eUn3|qYVfpC1B>mUN&kj8>uU&*} z4|4n9wQ!w(>={qZ8!UrsAG4d^{`D{a{(r_FgT)j2c5oMZ^G9a+s-5tXn)@;I=5`_vouyr0HXwNsx4w$b3D1@_9()#~~>Q2RX& zYryt|ZLW-Zy;I&v?`>yz=3RC>zhm?2hxU6~(J`{$MmrumXn%5P$Lo%!(Os~>^Yb!w z;|DTiTOX_o`TL*Qs^TtGtSi>4yxG*poQJ2ogIl%a@}UgU;*oPMgH5w|bm>sdd2-$Q z_Y9gHQqC-4)w1MPcC`p@u37lYNawypHO|wFrRn~$5qI%qij%BugFId>vL{T=Y~gDK z?mB9N_itYH&eO{s+RI{7rlDaX-HM#xxrDa?WL=1t(X9rzB*1GSRfK8JOFjs&*?pf? z{dziK)6iN~uPzMXn!sx?PEW`*UJ7!$s)Dto+Rzzzoo;8?X`a^!sl37si{gRR^elbJ z1_`O<1LKYS#htZz&RhuvNTE+8Dw>{9-B|ch& ze9NDXSC}XY5EV}3m`EtP&OqMKPBYkU9L*q-iI+TPB@c3i05PDc$2T%(lF0 zo=NuvktF*|5-n8Hc^iGM$hi&u$?{t&T7(-3GX7du9E6u<(UROq5bW1dLzWOU0uu5g zL|(~Wm(j!hz=77MNBO`PA~A*RfLL4#Ha2ePI5878r|BjQ?>4}52OOf9T)D2(`pCb4 zz!bF(cu(J+bzn{@aGBL*iGR8AH9V@)C%FxkVedHMrJ)Z` zBuD0AhLv{0)#l-h0`gz3|$3~Aev4(@1n&=^p>d;%!6+Z4^_+kW@pgG zYccWcfbTfQ_tbZVt2LpAbVV`I=fHJ!kNu5uv0j}@^|-W7*Pc~v9__cAO!4Zy`p0%_ zC@nU1zMQ04!qif%D>!TBbQRU$r>gXC>*7l(A`1E^F3HN5z;=@0(=TN7y<_c zA16wReSk&j{KFslsHRs*#&rkEbVY0HW3Pk9?^mqf0j6R?FKs>}t{%i+2bdG@Qy7O= zQ<2dNXUlo7ci}ZH+lA&}(0ScuOqsnuH#K4V+M2L@x+xY)&(TEXBMFqdh@LS1Tm)!9 zqJ*wY>zoDLWu0HJ?%lE8`ZJifH{kxTyc5}{lHse;!<0jpEbnJmAm)#sKr#9gbI1E4 zgw6oi!GwggvE|OSbVLS$E{o_>2r`AC3weauI6{O=d<#A;ObkpTh&g-ADJl|KWerS? z!CnHp3TI4y=T3fEvA;F<(CamrZPbxPr!+(KtjnI7x1;4a+;i>5T|v#&bcX8*l6XgB+< zGuf=3IUneS@=s4txegH#aCguKYfT!FPM1+2r>7c__Pfqd{xrA*M?x6zt#^&LdfgTq zfi8@KLnkzFh+wKq=9M0rZUR3!Q=Y={9wxVE;*Ek8xQx}4?c~lcv=Z`Y&WtH`tCnRr zR6~Q?SZucw3zMRU{;&%A7MkzyGt0{4j)EweCCLt&JNNYt3YF3r+WmJ=;bn|@^W=m{ z1L6%1la~|9hSa-EB_m~Gmmob}l5y*si(a?g9cEJw-{9)pJM{*`{$*=;*>7jq@EMjV z>%3YRh+Bmw{M{jV33%cNQ@BUKr6I!F1Wz8@ins(+v2G8xk@JFOfd+SW`IbQZIre`2T8vplM(CIG8re_iJ_`%od$GJujz=r7N*ev zFC4K|OnLVdH0v@IkM&DN36*m;@R-g62U3R>f{R2KneYf?4~s(`jPO;80XUVZpl zt9jnK1XJ9Im0(3WC&RPiunXmtK^dID=Z39!dJx-TMiAR?KA#{qd*AhNwpQ=_@=e!) z9uU+=hFGUKoQ=cWI&UsE32!UzdB6A8vD^LV&Z*B8#j+v7fZet_-@eG71rA-!i${BA zcJC?_? z(0=jkkx@Vg4hM`nZ@(Mb+qenPmk`@nPT&>B*XwYPjt-4*Dh5Ie*%2fq z5ZBX)DOP&z!}^QoMjSf^Pg4h`f*=gWVS4ZhRv&xk?e6R0 znRjH?BNBdCSptAk&0<--dQ7iwxhqI^b+e!jf~%t3xy}ZH#}rTjOI6SM=vA|WcNhVv zd26IyiU9P{R^O)Uy4Am)`X5G+?8Fawp2`uQy;L7h2(F@N%J~R?U;EQIu)xtTGEq-? zI3d&j!|_INKxica=x`?K;>f%i#U=kfKTP1O&0AZ=)HJrwc^xQtoQ|(k-PeGci3Q+@ z32T^`Mc3DC6OaugG>h}B)~>}@jPqKNhl%{qaqP z)Yiy~rMT2LL!qRlMi#?eupL4wuE_I@`ZO|htXVX$NdU;i)HXhHtj2ZS3*S2d1^X79 zCs2>zshTJUJiNfMf%3P?eoYoo>EvkGujSts)a0WdI?&(g(lYOk7w9L|`s$k31gpeX z!bW0kd}I%rmU_jc}NZQAB?=)oei&jfK zywRccThyjy<4oiMP4RT*Kn(VQ6jX0?HDoo0@e`QlBKP_xiGPqT&98F8ZKv{*noO zwh^R>(>YBDHtSi&u>W2nDckF3!Q`DuYz8tMsKvnMrpe}|C978NoDiASAkovcBkSGY=opQcdU8_(5Qlt`e?8}&#&@E@cX$IFR9nUn+#$ej}{2NAALp32opk5I`?OzhH0;08hYFji3U zAhAh(WXI@~GP_C?xP62zlMCAS#@gwfOjo1>dfV@SD=0@7mL_d?U~jY^+y)qNNOKjz z2NOw;v0+vr4TbFo64cT9*2r$tJT5hGfV*{stib(-PdESK2!)vKR(_{VM+yid(**qW zl{x7E^X|;qZp_EUntePv)FNC8nera5$E@)@fi{1$)HbS7#ODg)V}?!LfjVpwv#|!j zWQ-J}gqhUYwL3fue|~p(A(zf1ZiIL5$K6e^yuoz&GYY`~Sq=kFTj+ZEu4SwSs%zSk z;nFoIn%gy3#JEwQ2sK&E1-TTJlIXRX!`7J!m-4>;y4xF_F;(Kc-A}Jk1N(BwmMXq- z-T9R98E*_qRcGRqiK7+2RK#$amlseo1jX{G<0>GCco7*Pf{bw>Ssi%;f2l?E5u)W! zVby-nfRQwS%NlToXio39uo;(ILP89E+v)QU?f0T@`fj>m%nYN1n)!w(kYzOEQo~?E zql6lIgBPewI+RFu0M;B%$6ObCxyI03L;8rAZ*(ZY%<@KAFm_8>!z6IDf;gHnI+1`j zq3CB|RLiDYJ+pWQ5$zQ+DVkk8gS@Pjw6a(UVy@IlRXngNmZ}45q0jIW%^RA-)WPLRa%?5@0wyg{?&(j){^7 zKz!s*>FU9Qw0-K4XH0-(-awW4)&hy$?RAIAE0L_xuet@X zk?4_LPB;H%i7z^jUr*IsM@TQK2_e}rP8?vb}puZd5H(1qGELb;8txTZ?SEh4>C>KS5iR z%^F3?nv{h&m-rZQZEOn(##A2oG$8vO``fm`hLXWt4yda1IJswgnst`_Yx@Z`r@rRf zmPG)q^F~3l<6?-tgz!U@%Z6AliBV5M8^!kxuL0iqjr2*hz5<)5qVH6WqF;iY<9b7+!8acwzx=7`k zqRpd(CrA`9`)TB;Yp^6&2%8`BYsz^GWAt$mVj3RYo)sxgTZ6_gx)28bGUpJ$F2}$j zf^do6v%koBYb$QX=u%5gi4H06Q{H#NnrgXqwd6laHntOFLS~ z9RP^@^j@`Jce>yuu_QKwap0#fY&7`opX5g{TYkg8(ENl)xye1@T*qFT(6k1rs z*`voAMlykThKCsstq^;2@{~P#{+wwrkSL$$%NZ|2$c6JTCo{*wbi?3{XuaQ}_mV7BOleLWu zhdRvkp+NKE0_HP6S|+kEZqOLrMBbpNgp&GFQ*vdUp70L{;6U3-r`u7?rQOzAa40{- z+pw8dgZsWX0$IvktS1pa7g(Tw5PnRrT>y(ww%Z%(gi3`y=@Y|XA?<_eonRkl(my7e zC{a@?V^`jgJ=#nv5mq2H^gKh9dx+jc;|-lY*qxIIb*M2KcyEKnhk!I$ZJz^vFfj=> zDxi7fz@rE6a?Z=>WU8KwDrEHt%SU3ypyw>2i20B)b_$~nystTlj-GwTD0ISrfd`l==D z2Z4-|O4pN~e%cD5*XyfWs`1e-+%rJwZh+cari1#C_T|ZHd>w1(1eIIqUv&Q+Cneh)10u{Opb)aq_nx!)|yi{S`wqpA&7B%|!*V^LN z))KplvWY!Ot`d2mG0!7C)OqvKDvL-pyZv*Htu7jHAneeA^-)J7i&jg@ zZtuW50^MgdUar`F>L!{_V$3D^$cajoT@%{Eu4%og=$_C5>b-L(A4v`{I8{r+ybDCv zAmO{6(-1sSipgi^z8Y$wPIP)+EuA>pyCKm#HyUNLSP43PTP>a5?UYcbopT5Kd?qi2 zkTAu8M#*cxH>43qdp9I{=SHJkUUH>VGPBHvbb7Z_LcPLHI2?#&vD2$)F$orK*FYza z!ZxIoLVh>2dgn~6JiaPJu#`@{A;sS9nq4b|S2AzR*zElawJmHl^npdF~q zY)v{pDW=@(U=}R=sdvg~=SH7RmHgB5=IfmjqSZU^^@}Odil))RjRckH@B?mnKm>P9 zl2QNlD@U?;O)Tp|o2vA7MVS#bzH{EsN;h7CVXR4yn@_GKIfYOr6rp`0=J1_0E@Z_*F~@WD|%Db)!O6da_~? zLUV_78MNF4FH$BRgZOo$O;w7pqK!axm(=O}-kCPxPmYw?R0XzB2GQIlU55S65AESu zzjyiCAw_t3`Ld~wymR?-$uy@vIJs_v8k=gx`=iF_jgzehXV8i%!V8GtbR$Zo>Thxk zcSNfWdk_Bsj2x&0*H44rn-hVaRiyeNl7!$6snYKan{L*dezf$R?K96RQhF77JEY0! z>&lH0&#KaM_hO9Dh_V%P#IsG++kXQT~5E+rkvhXLH-=%^sAl8=}I-{{mJQ9+m+MbRHQ%e zS5Cj$j-39cB0YLva+vC!OYN_SV7uaYHVvN(bLFm$}oc0v@YMA^%Kx%+cm{68azD_AoaZ zRiu}zaosU(dT$*}NgK|+%5?NS&pjtvRWR?W(%Sbt@6Ow&4yx6Lyj7LXzGvQYqt)iT z^}H(Oeb2nr@4P;9AlPQi^}H%&e$UM1NURFDt72V#U)(k9T@;gRL*A-bf!{Hu-jyO% z1)No}{=RF@k^u&zvtGaR`(AhGqQjR9i+EmZw7bdkP4)6!x|=A949@zU?hnJ>X=f`$ z*;E1F4^hA_?_&6cvjj&O^KC_{wLon*BvD~BqqEKlYq^*vm~~?=Y!rJea{9PXsv?zox0<1aK$V}8 ze_NUMOnZ%;o{}2`+G32=w-u?+8i{s#SZ<@!*3Znptw^!fiMHc2a~s{Zbaei0MLM=l zt(_j7TWMA83HrC2YT2L33A#LW+S+orsph@c87bxx6OOWV2^ z6=~x8U*t4WRlC6brYfa;&kG#*>1=I*`%Og}`F<8SBu(WD+;6H|A{SsG|uD#DCPNU6s*0?R`*!x)HbUJN)k^627TKAq7Ih}4>TIIg0Nd4aXDreBD z+GXy$s?_m4FLT4*#nu+N?x-sci0DYKOY?z=7M*!x)E6qUBW zylp|}-qZ4?sJ5-ets>2P?~9v8sfw4js?_j(EN$(J(d)~O!(5|_c|-7O4zEMU=$r5I zl<#LIX%2HpqoFRS0GDUa(Ji(DD*V3nj%pUup)J~_2(IR<=Ed>5^TE4J8ZhNh;LI<( zeA6DD^-lQZsw2D{R$LjKyhRkQT!ptM&0+H;sS>yT9IxzT4>affMAwMNBmL_Wx@nW1 zadbPMGKLYCFq_rJ_;w@;J;|zfZ>@K)0D(Y$zgJXMDMIUB{LH9IrL-2OqYtZaB5N7d zG&*^LOp;13UO?-Qy|;mP<9`Y~-DcZg;G%3-IH4H zw1%YYfK00!w7rc!F+N+(=hHBlaK_Nc8qPa()#Yr7X441HA1|S(5|4MjDk~5r zSob-=(oEdYs%SU<^0rsNR2+zRUz5!XI04;AFKQ8`1n9dEZb?KG zk`}b=EF)~@Ks6_@vNS*+lFM1cXs%{{uG?$f=hwRD)mqJA>&*LUd_O|mac;I33&zSd z><6FxSGVC3CM4G7j6)oNmyDaT?RGU?hIAd$ONkY>*EuC7pjTdJ;0-P>F3vmc6OIlQ zxYtW`d&6WY&+9ikgSH0>4Qh{k85O-yOduIi=ZgUQ*WgmACE7xa!`XGj7Fb+4uQaiT zV$7Uv?`kLuq)@~5v|HNW^nPsDTD^Y1J-Fzx_hL5i=DcCgvyP;_o}x*r-o2R0{Qhy` zQX=Iwq{&XxnY1nVc<-HeerRJ0@Y5WJjM^Tr*+^DvpAYET`5r7+l6apeA3%H~1UzG^ ziC6QahWiquDq|+V*mr-%G=il+4acCSgdcKvy(x4gQ6S@drodqzb%Dcv zCIpVXw#REWlGV7tp)!2FVac4Crtqx6f0hq(9Jch3Y4Bvp42CF}z1Y?VK7R?`2Xh8H z0Jt&$TuA`VYyz~kv56w5jZKi8o}EoZO?~YV1m-)OOkUvMHFhxfM4ThC!FUQp!&2YE z8nS#Lckq%me>xR^8rzHAT%m^Rvs~7q`5>(9g-edJI-1a3)1SV$w9ddWp3HE zT9(eG+A{bo*}>XPIGF^q>;zFj>6h*+)EtD1V{41}#l=Bt`|bPDtBUcere3)MVGBp% zRZYFB=bUcD;q1dSAQK=T-^?Qpfs57JO%jq~zX;MiB=$k+ZLJZ?|3f92LTH_W)@)BZKrXqhNG zLOWd6SG3Z(!QnPH`&Vv}bA$vIwydvce{+Omn1vHxUCg$LDkEu@vwc-YyOO}j#%F#_ zSOAM5hSTXtnyGAGrD@6y)`Dlgw0^CLuWqn}Nz3|Gn7B%TO3NP|l$-p~!KEaS0nS+h z=^#@w$N=dmgA9O4DP#h4ltKVeSO~3Og~iYfxvSjqxGFmy0-Sw31h`V;Awb&4Lx3zX z9ulB+JS0H3@kpwbrYuNmm~OH_?uJI%Ml$_X+clN|DR+*xuX3YU0^l;ZUnYf(0;qp2 z0rYO+&!MXIYfXGD0WiKh*;Bw-t?WESjljAX(Vyp#*O6dNVr1Ai34FUv%U zHh?<{+bG9E$rgx<3R)=1K+)aIWFGBn`n1X&b%2{vuWWEjGLD3+>spy`%Q20DttnpF zuuC(Hg0E>|+3-s;iw0e(WI52wF$&n!vKb|H)aZ;h!p&rq)N#@paBYl|f?JAFG}snK zNy9G7C>neVqom=NV-y{Fno%s!%P|VtO;emAz^9Lio$)5XNmj7}F2^bwV2f6h23(3) zbl_=)#sa)7v*-<^bs0+o<+#NFpHgFN;LEYgGMcBwiiDp$>32pOz^0^%4Qx49kzkFT zeiqnLjG{p6yZ%hjW!Xf5*DU~<;L9MUF~gs5hO!9$c@@Mx{$?g>S?)qnexN4)`%-#)z! zmN(Iae$d~}@q4}QVA#KG4V@y)^}^uhKDg{N7{_0EgJE+>5r%q;DSk}*vDDWC%aJA1%x`A}6W5vmPR zO^tjaNL5Tug$fE7@-CWwVv?T`+KlVG37FWy_u}kW6Q3kZL>LWxZ8gu&z0=DsUMs^- zry&-3)atj{9Hkc|dSrx>kVL^Jls2QIZ$fJ4-eah-H7RRMxz zL#BCwa==EEX=&k%@g8=UKB3-FL*)UqfQCn&C8>{6pEy#D{KOlXglx%)LEzz-Lj7rU z2l}7^8y*2a`JIE8-&gZ_ZvEtUvp$pvW)qTW)u|*W?eq4qJ$lpbzjj!fP6E{3Kz&7( z^fp*9es@w&l53ToY9OJW6e=X9eAl~B7d}hyic14F>z8n9gUEWAi6E3A`~)DCXrx2>`tRi)zVBFmDWNtXjH8lT9hk=%LN@5ls=$npdNZ3v#GrF za8(X93kLi2pnt0CnjxF_Bf;E>AZoAKJrPB4Trg?Ivoxc-Zv~^E>{=4b&?;GA>>7M2EF5N>lThdZRg+8;AAt)M!T@yo-Icz)b zR6+ze_lU}mU~L+idR1bOe$AKNR0Yz~^sbAdTUdBsx4Z2=TL)dYW)&|&i${lJ%QC&D|u=Lrb!%`b8 zSyY37^N{U^W44J)K>#1u*$1J{BKCYc9D9ie%bztFT~54V^VK=qM4eg;8WhKL+3o!9 zvhDrQeowpDQNrz&il(2T-Aba>#J61Rr)tvL_1JsOh&2sk%xlFH&rBb?z-#br?15;IRIUACG3i{gPE+;QcF~?Tr^J5uIra@%N29K!6Ab#4AgK zg;q%xm39&;+vyJ4{UNW?=`zltaTFuYi#1P9yd&T%jnqOKV^{0yeBx>qGU2TkWX;UR z3${i>qOjErqy+nKIK`t3repYG&BjzsOpwi@C5=qX)&w7uL0K`7CZqxAj07AsN6e@K zMB#vulY0sBB)j5ygR{=5patZtr(GIET%EU@70Akv=) zhlfXxbg~Azp-j>}kao6A(z8`NeyGK(tHs!ZC0X_v#b1(CBDKyEGP8wCF-O|(IztXm zUqAB)mQ!pi3*m6oYz;dCfWhPU+?s1oy>bSn_IZ$K=Yu#Yj zXPmzN#wWXrd)fOW&@q-Zw#yNgIno>TrAE^yNB(qv#Vp)=DW(~|#u7ul=>G$WRbhFhel8CxIO!eLb zB_yJTb$x5*F5m!nDTB6Mo($PRwj^^Q?^(7aW?bijTds=x-csrEHWo83mX<;1&4s2$ zSJc~n@2z83`_Y|KKR2}~={a}-yDB@(){GyU=a&v!rIt)T=+x=FRQg9HJ53l?-0gm= zxX;|Xg_15Zr5_d%P!yK|9O=hSgvd*v??Q;d`@!WahHS;%cf3Pk00)gu{mjdPpVQB@ z??NKabVdE$Vv_B=WcDs2Tw#uFOW*gVGTC$`aVp54pj02IHICumAd&|M=Jc_SZlE$G`p?{Pl10FMRjk<-7lyD);~X z%U}P({{QEH|DU4JpZ_=i>;L|bug4#`8d%AQ??kovx1tDiPVkr4w*$^zu|`KW-= z6zL=(c$3;E&9;$B`yy;p`iE_8F;LMSopj!`yCA5GB{pt1Xf7+C4?-n^Tt#H~}hva|snhK|J-uN28V#-5$mT`)D}(48-7 zpo5|ICG@{UH!XBbJ{$Chui4=5kjElyDW^Wkl|13enW`oixAe(6YaWAJ@JFh@mj0!m z4SFm<2;XGoj;%Kw*J4D}ONLUKYf0@=c?Z)aK)o!{ilN8tP?K};X0xesZZ43? z>(6%VgkkONM*2!iZh@4$l0g&)t!2|QEN+w;<|{45t3P?mr5X1Re^gQ~HQoR4$L(%2 zx+i348jLzaa5iy?=pz1=hDZd#ooFX4VT@$AOv7 z+Zdjs@XBMobmxSai!8hRbU=yRTPOGWTjE5}W5K%LVSm6}DWra-?09^*Z+6V-|IdUc zGkciFn8_ffy|d+@^LvN0lGi*oT6qscM?BRLk4$_{tNL+fMC{&}lc-=EBIVF!drT?U z=uR2N16+w|<|BTWP9D3(T6EX8*sOipygc8#+3&c@;HLFBEt3!%sgawRz1C#TvSu#} z=Vnj?S+R2}xi+}=SJP#BN5tbLUiB`!cI!X^0IE`KDv*}_CjBD{iCyFO>@lip9>*~E zjBnaT-`xCT5A+?Ibq`q3rCrQoDs=*$+o!$$o93{XLD@8pJ&rT16=)~8^_NbwwnX6D zc4w`njD zd+6H2=TTdpknx!=*qMhpLyS66!5&l37PjmfjcjPVdcQrq>~~Z1jb`(5@gUN_a5$-J zR>#v3`k*t&*S8I!vT5xw>|*2c)mx;;is2?GqhvzyqurW%kIfYKR30bNy`tlL4P$}i zYW8s!-HGGywz^1E3O2X_@){CK`s0rnaunXv88xf!GIHjqJm2->$iG5Od#7hxN*E+nCpM86?LB)yO_GMIe|7ZJ}( zjh|#*iRPd!0dNG~p0&FeSNZtR^B60iF`{~>g#JPM-iN$YFTJDVmxs?^9vwasA~mni zW#tUi{#Hi^;vF9!d92j}bi9i1~v?%c4BP?lYt36WiLoq-`4yPR2cQyFgx0m*Ns{{{>&na zQk^$cT{p^XkKLsPTSfF@c31c2mX<(?PYpg1R&&}v3icWyy9q6n%~qA(%WMBmOBN=w z#YMB}g9kYz;3Z91zFaEV1#!ldWtJ!SGvJCK#b_~!rD^fda2n1oZ@EttmPfNY%3yh9 zfHf|*v{tjXDypliAr&A!k}(5k!r>)1o~HA!QO9_gV*;m?h})LD>NnrA$>8R`5{tBe zZ0TP5;~UBtjEWqLzmv!+;exy+AtifkBtK<16w{!MM(h(#1W0?dvA{ZX@HpmMZjL#} z^`e?QT^S_lm*5Oej~G-q?$+Z(mg@YDC9XNrkr$~O0ZWm{E$LYvXeAwc!7G@#R#dW< zTqwCgARIHa2=FYJT-M-T#VOGyJPT0(q^$VU5t2%*nSw-FJ9RjEqKmYHs+mC)9&6Gk zmG6_}q+ue5XKFYQ2&kDJ1B4wCO>}e->R!Zm-qOcI!)7p*M}Gd`tR+3MTno7iA8s+TJ}hEuH_Om$ypRv+a3XZMt-= z?QNCpS-p}aBPc6li@=-fNKi(~?LboST$e4^gdZ{LxLPu2^je0k(gaxZHk?r^Qk4YP zNoefdS=OL~kvgIB6d8Fk;>cY_v?@uFk=gHUg&gLIi?Y4vIA+TTt#>qu<~)NXHwD=8 zTZ)1*dL*kX71-wFbj#xaD>oS(AWGO}x;@*wGcfh6e9j6e<%Kh@AhQ*KTNJK$cj$Ww zh-R}KU|5%j7UtDH+NBX&;+V6}>$CP?STK7XIHZI}?k>!!$$n{@bGI(9FR(V{mmGn$ zmbo>P6nnF_ni!!#bTYLrMmOPyn;>4MWUc*zhHZ*k(TAMn-eK01@GjovtieuMri_zr z)Ag6Dg+Jw<{yUj6o$m0PY9@)<^S#dyhR!D>sIe^;UTGDsv(dhrDXr z5*qSr#~_QzK%&I!@gpgL=j)*yi8{K0ocDScUUO&#n96#RLb^_*kb~P$e~MdJvhy%H zx56(}(-4=m*EqRU0;H^_EV;TRk2eZx3AI;CzHJ~_oU}WuW>Mm9t)5$U@I-}T_$@Ov zxPcu3p>pUjqh@1WoD}bwLqLXo#{2>3l^QgyUh&xNhc^JX49-|ak}veSnh=+Ano_kI z(wO7eX6retb>h8xZ~Ag^tays2ge1o#Px2=g)y~Er<1Y}2bqXt~j5Ci2x_%W%`*+?U zUfY#j)yOmU*ktK#3O&)3J6Aupv8S8Z%c+{rduBx!=1$jeXu(DFJx*{qmwk_wmtcjw zbX++vZBIN}2iHa1Wma5!#B_m_950ke+Gq&^Ya*%Jrbdv=Qa*{dwx%=X8QX*!^6YV; zKr>L=+6EOjXJw6QbZvF1%s`kSy zNzeA~-<%bbRO;rFRy9Y3hYr3C#<@qOJ>GE?)}}sTmX5kbVWp$5>;?fN2nv^MBNMUl zIp$L|oqg9Vmewg!t&p-T^X@LhZK|Z!!B;aOZW_(vY`8`pDw3byM#BK!=Vxmz-DM6n z>vJtZgQBuVWLu)MSl!5=nylakxz0B#Th{<|W_1WISUYR#v%UM|CcC=6U}}Ay`BIg1 z>bZ(1kuBBWJv~*bIoGzECzZ)Hru?|5p^))m>0dF*JL;c%_w7`DQ;O%0C3@U~u6oV> z>sPzvu7ScZo1sJzVvSEDF))gW#G5TMPx<`1hJOIwa9sAV_M5%CF{V2HGuhcB`bE5B z>}zPiC>Z8C9m(}CJMkYun|8sJ_D@0fOCpc0;fTVf#UpS~w%ooZgR9lWslRgpnF_UFOm`;8gt z&|z{!9e`4Y=eYHRWM5A;5=-8AM)^5^sEgGZ)(+;=Xb)iRtJa^WybF6`asQ73>d9CB~Y zbzu2T=YJJfjamCvbStn!-!_eD+Irt|8QP(Pn_h4Xj#Y@m51npa@QgxM%Bz?z8~r9paC4emhfL42gTQY_`O)=iMpgz}dH6VEV`NrAd3Nyp z@R6+wTrSF$93e!*xp|i;{tzhuWcoz*6T2fLN9vfWGEHcB?Zpw0 z7UD5KM6By~i%7aj>A7reJbCT;4`|8R^*S@@Q#YAYR@bpwD?dSm#9j40{D-H_so0b@t*4^&<)Iq zNrjS(Bf44(XG(T1N$dw1dThVj>OzFO)_o0ui4 zhx(Z;X=m&W7d#`ldvqj{0HrXY52N1Y@ZxgFOOZ>8oQ-wW(4Y+)T5rIH`&`Y)WQ8Q@ zPy4+$-tu}9E|Oo~GQw+c8unJRMgg8y^ZeX9z3k#PI}-JNCr84wpAB^%5_G7U68 z#+J`{4}59c?}n^y5-uM#cp5@VCF>8)7+eC-NTMrdL=vvXstxH}MvqPDTbRN9lC=?`}^=6;Dp+!;eSek7M!2Gx5ha1~Nv< zD|+-ho;4XPYiPIPrhn_dlIgU}nV6DQaQOx%1ppat5uI9kt?eE^bOscVh%U?AQU^V0-%4&?=iE=c`;LhW^3-0J z-d2{#AhX;3ixK;l&*Tmr%~O9}w(F?=zUuYP*AH~a?BZUc9ZYOcV3BQMY5IS@mllQ* zn)K=xCw*KXOvh1NF3b~o6Eea9NQnle#Q>x&eo!7Z!uLK=#XP}IFl*_l^61-~1lAsbj#I1Pc?@a~ z-bMTM@iVxJb`i`2e+e!l@l#@+*i_C#Ux`Dit{WUh*v9(&U3 z)mz>G{|EC$5C^kmOp?G~1U^ocYqsm2)!05VUi!1;6K~8uFu@Tnt3$@d%*KjCUY@CQ zPnoFDtc%sM(-qPXNH(Wbg%$|ugoR{2!J=4#?`MAsuSG6?^dv|6#ldn3F`u}AeHeeD zw`71HK}B=PkeQB8(J~S)lWT}(+EFXD5%wYd+&JO%2H6Cn>7a5Pg9kWA!BPRHLZU*Y z61W@b3r_4YcJnv`KB=yq#GoZ@Ub5$!7x5wh)7pWmW7$H|-n1$tAA1*jp+qt_zBVTs zk}_rWz;8Sx2n;2?Deskno>B5YPmdW zoC`!i`aYvnxQU$(=JG`k85IB1|HloBIZbERepyg^8R>OJI9*alNO4kCRF&feT4Hrz zu`kxa(#5ZBuu^JHBM*wT8tOQi)i9KZDy0q2a;%eRI1I3fLgA+foG$S`R*eq@DaIUjSqRT%LS37h%&qVFg zX+F4BInvp?4!2!io;Mvk54RYuroL16lasn^_w_NCSZg=n!U0qGr$Md7^bmgx zjdo^}a7?kk4s=PTsoI1t9OJE0MP?Bzrp%d0Ddt3oWDv9?AuJJz8j4#b1(;AB9T9Q5 zz~Qp{MFq*&Tt|9X8AHQ#s}zx5WW^MLq9rMkJSZqj5!1&lgA%3B{VbH&%ZZ=BqpsWc zry|{hmwW)WNUx=3smM({W~*yYK*l#`m>$E@Zbo{w%<^eGsi+BoJT+2J3Idiht4hC* zf~vBdrR8*etS(*jz@x;xhzW08^->R3OC5}0VY6Afu@y6zr|Roir>bu3uE`+eQJX_Z zG6k;$cEJ2fb;~Jq`BZU(1cv;^Mr+c9)Qpg?+sy1uglR?=}0)&Y-Q_$2b|s_r!1l zJBv3QdWw4D60D19;KyKUjy{Ex07JJ3D~cQh1hg%#o>Jyj@FAoi;Tzn(;%Tb)_0jWV zujWmn8C6?)%V;&e@!;er1Pic7^CrCZ@SaC%ER4OmAIJPQM{{!EaXtP<6qHbOOY#%W zmIs=D0By3fvKP7JEkY+bstZX5#yoEnkhWp?8StZ=7Lo_OJ^k@Gh-2?l=u-%m_c3_z zp4bnTj}MQY)ee7CJA7v0wDlfM0+S(y{;qR|v^ZW8o6?9`tTVia9XK2m;~EQIns`1q zvBC0IQyL0dtGI_7x&N+Wy6KbnCHBUv#R7%`;fa=#ERmnHNpVZUD#Q^UAgZ}|*3f2y z$SrTeI13MhH7%z@TBF^FI!?XT;K!@^d>S%5h=ReVUpQFQgH65JyLp+y7Amt!!^zKmx@$pJGqo~$dynU@8Rt8S3dwqveM{dQA>w0IU zy4y(Wv<-0p9Gcfj+NUaNt|%_fn1)3zBPu>dJc+prl~VIpQ$UTndC?12?KOwr>Ct9} zRoS6iLq^L;?lb5JTe4!q)~rb@^T-_@mr=i-M!w6q&wZxPOv(@G^)ExZ>mh~HScefM zgd7So{8*`ko{<#Y*AAI;8D8k)^?L`qEEE>3P?NV(c%m$1(E}5HM-wUs@@T(rvy5j(KoOun!8l- zB=$&#%Efh6&@DyaDEeFT_E?X{xcipd4%S3CV?FbyruVTjI5kMWMRpKwS@`8Z<)}?o zs%dhCn#MQuCmYWRfJGK2B*k5;FuGL820XDTF&YD4@IF;<2fGz|T;@3#cgoN6 zut1fc=hAky@jM4eF7sTrXkU)@IL!gGT~2doPfT+-8(0XV@G&BTq_AY@wohwhRQ?l+8-4j7VqSB9!Nk2&j6V-dgp)o^Ta*C(z@Kol z>MaU`)%*#Ve=x4WFe-Yt{)2Y~mNo{3v9`22Z)#XZI2+rRv#iRAskhdXZ30Fg!&Dyr zI_JVnjFYMOw=$st^L&dhRq;G!^r*X36GtpaV*bOaA|cG%QxdSKu5nV?Fg7hTQIx4E zd4OBfSwiweZeekFoV4|4mCq!iy?74s>=p8fma0=kES$3Hpjsmd&J+D=3|=Jvo(5XP zC&5%O>>`*?*@p>b=U`|}f>{hIMSK&jrV|h$*M7{F@$44!E_e`@?DblN1`Ste*{1M; z_AC##)z9Koi^r^u@OsHp_++&>)sOn!7D-& zdpFT^Lismgs&KXxmj@-$W5^jVP6FXq+KQx!79sA4d=9tn?o1gtWutTgJ9{|C z9x_xgg;6Zp0Sb|Bi^?!YH&QAm28Ah6-b1jY)r^%N2e&|j2t9pXGQNXk9e6?q(U6=c zB&gW)agYBLS_Yk&K4vc7czC*ef+vA|^8i%h9zc;$!2vkx;kdETeI^XOy{_sajc(cQ z2Qc)Ken0wGtdw~S;Iff63}$-rD|iec$trJ;;U4E+;FO|VPae9^A$XY$o z39X$e@iC^^rnxcc%YgN9-=c(?r-kK7CwZ_wtdP++oj3?3i(W#Sxy=v5(DcjvDB`MZ z&kteB;57JUhU7dO&k$wl*wXG0*Zc5Zg8LQ|0%|5rVW&jmQ|uXiY7OMX#Yn`}GMus| z1By}}FGkaAK49gC%XOTxM#*V-SP_33ewcxRGP+y%^JQ?q#L6<&LBa$h#~?{DD73{` zGxy*W8FO|W@c@-}an#vobYFP7$A3%FXZBwI4Md^YJMPT&*!k1QJtS+>h%{SB*2ZBJ z79#95oI>D(A`rJlNpY&IzV=7oHEBEFl>2vfyahc*wl%(*BzNBc)AX88wgP%zdh@?t zTUCXMQw|}N*vkkv&s=b$6J>SnRAQmGT{D+wn_0{KyFjBV@#tpUJdbTa6|pJUdn~uk+N~cnyRfd&7d4yzaHM9D%As6{-`!0x zgBp@C&7*}}Q+pXpd)maP93k{X7x+w;FG?>XAZm*&#BiNm0P+SDl;FCY2nO-r7i80fLFXef(J%s_6%F)}-$?&XLa17KX z!*}6idE=xsl(^}ACrX3S|>@dC>op#<8_qpjYUJcQefSC9$1kEwU4-Pch zRIkvo5%KH(4!297=H;;Gc5`NPwT$qV%CS3(Y^qz>?>>A-|7@sd*a@>gO+&+{t~3oI zwsx0$#>#ycEj|j74>cy@T$8{c2ODb(g27NRE`(DpHS|QT$*(pCOS~lII=rVVX2D-W z#82zN+T=Nl2#ug{I{woZz*B)4ZrRbouI0#uM zveXc*gmZE7urW<`=`D=a4|wPFBV+9f1M|+Yu?)u^%_4p_ScicbEGds+yj)#hi+F4v z=f3bE*cJ+VD?^#~Y~nF(1xG;@J-{bP(~>bhsQ(q8#Ty^!g1=m1 z+bGC}sIJt_1>T}zF+XIFUPILrWo<(tKI<`qnM3B%UP}Gk?>Gai?|PKCq%+f1hOhgb z6Y$C!6fXgwJ=4Wl9~R+c8qR{)MSFgJ=&n6)M_*3$R4D=FsX!NEy;c-(&RaSG(7DdqFky>H4Gage;3fz^+&GzWo+l~2=bf6~+tRAH ztH!x0cU5s1mDN#tx9M4w&IAqw*>ppeAjn#(wv`}z)3+5iIJZgVhDA&}T=9y}S6B^R zK?6erlhS_m^A)qDhH-tS{^>xRsh2xe(GN{HHmE+(-^QT{(|>r0^qGm9WepxD%l}33 zX$k9UjnGLaV$n`Y3>ry0J-nsL2cl2vs6;y`*~T%6E2*r6s^ow~9*=DKJYsOhrcMd< z0M@MdhOuxt9VscYcCI5O`>Cl&rAYwY-;08jz%*MPngwiqjVd2b z#f!%4ZSo`AnKJBpeFu`m$%=o)&;r+62fizDBj0xTPW4T3+m9uBJe0lNA$uwOviV9B z(YZ+s4e-#Xk@&S`)^T#+Hturt@V;1n4}}vOeP$uHyw~~;D3=gBU>!!c?g^_yW~R+{ zd6w>-o%EfZ^(kV063mw2br`tKoK5#~+r7-rLXcOzllNPtNR@|dJD~`^8Vx(cjpo6o z=W2stpY21c?_BR<1g2znFXNKINmbtFm^xiHd`n+(-_mWfgP@p`5vzWrnT4^QD zUO9=LZJjLrW_Q5WI|s2bWPA0P4OJi(N(a(xdiUeI)AsqvwrSAqjkwxeNQ09IGL-R4 zd`J~`qQj;)KIYP4ElXjN4tp~aA|iF;P(A`(5mQH@SeZw|E5mWptyb4BF50txh5nLb01~fko z&f*Onu(aDxCgGTuP+2tP)XS-Z^N?{xygZO*{>~C?`&YpdmJqz-ESie|q^k%17c_9* z>s@%wp=u}D*jqRly0eF`kHd33~CFO}pTOz#KHY(BQ z{cWQFk$QE>h#q^x=p>3?YRS5fC(&R3{O|wki2XUd3FJK@<7gt1!BYl(_~m=BPE07; zCB`3?wBPj_ZI1e7Ui(u07YXXAHlmf&w zLVu3=(2M%+@;pWbvZ$2HgOujEM~|N!dT`yqMR+^+ZXdi>G)WV!X1^jEpM$$_?maTg zA0Hka*Vz9Ke`5hvuLH;M9JKLE4-=>Y701b@Zy}@E2e>X~f?gBgD-kW0-tB4%iDG9T zR;(`E(OfZAzCQlu8ADVgw}{dF!UjCLqsywVQO_OAOgtjrnYRRyQi^)EM^f+Dq|*fN z%7#14*!=aU#HTm~IHqaTsw0iClhDJqJknJv9x+9K0f~rI7ZTQ!=;}|w7?r$7TpE4dhb+Jlj52fYA2J0sc0u{8u$sHt(QaPy$MXp3&X0Zm(E( z3wNf!^q&6epMLd+U;Xh{kAL<3uh=x?4r@2d<^1K-r?>HBR=*9$iztq+mvyEVKMiKJ zRs3`sUM>8^!_({Q-#mNq&CyZakLULp&483+qHGe4SCG%z=htoQM!N8Q08*;e0Regdyka7v7qaIG7o80P{ucaU$rYxd8TKmIuNVIBU!H>3Ub#d)(O z%)nYBtUD=0F|k&nGh3!~bu4S2LBQ%i^3Ws`-Eqv;temJPvo)`@qrnol7$ zW1#H{w5cGi2Dy_ZJyS$CRDGwpQsA1Lnk=SZVt*s2)T^C4{opo0*Kp9N6qS4?!f|I7 z2#q@OCP5r7m@MMkxgzi`56&b#>P`5LA(zk?{3kgS+(eYp1d&=s&4xZk)#3WsYvP_2 zw*s(Jf@lCw@-ZPAa|xtn$MGkBTE%$t6&U3Ct{AW5WEzEsSCryS^2;azvC=KQ+QHYf zySwNHFjz?dgMVIyLxSaAe?`pLq#6!3WM(Qm30n1G= zGeL=a#(dn-d2u)!2LPCnb}|j%@-WST;9aT2vKDL*r%agF= zULj*GNEA!01Bvft)&Sa5ko>oSNz4Ak=0Vkzg1%`=M1j3m@6kcq>^m}=M8Fx-PZ`xfj0gn33u1lhr zOS~@7Q!z`aTrr1Prr_W1G*>Q+c?+nkY$VVP59sj7@tvp8BT zgGpW<2fH02dDfTjO~E@v`kaZHxtF0;(OX$r4y9SLYmL+unL&1*t zm+|V%6cFw9Oa!1M15TCgbWhsvyd!(CJJ!aAkqCMSe`a`py%;Z|~j)VhLVEkps&__jLth z54NOju;q5K+<-$Z9p0QnGw}PIIW#-R?1#&4gt&YJ`L3;xJmaUCMk-pc*Ir!3N6 zL1=FKb+7-Pmi&x!=02lIb3p4WL*um5ZKBgD{Ajg0-4^{i?Yx7Q*k703POEp)7G++w zq*8Hm*>A$8c*GZMrk?aWgC9oc?H}9c_?rkZjmG}8W9%RP;W5qY#~yz4&_bNtV}NEb zUtO_%zQ--dvX+R~_K4u#bvVVmgSh8OfSH3qF1prgQ=2!z6qYvx9mKzVYC}`uKYW-6 z@jnzJ;LjdBywH6TFvts^l$?WP2PVOFIKxw>_z8t7Uo+N>;X-9}oC6T?Bkv(v(H%el zn)pcrlISRqYY~2eb)SlgU27bEnEA`qBH*2*zNo&v@xiL?*tuIMtm7|{)G?doj0Ao{ zf^d9z`-qUgWQr2obp}O~MCzr@*0A$qTUS|&=1-GuJD1bQ#VG?E6q>`Ku5h!T+@1dj ze=s0FcKSp7mg%98#&*ze^?PrRXacbx6jq^rvyaD#kNh_PX7AX9>%PV}PuHa({I{5H zn%seHoeSBH^TT@fA}-UhM8=2hOh>JYI%5`f+<^u2rk@K7+7wEKS0*#cB7!v{ zb!_I&V~I1gZSh!VFlqxOi}|Ysr>e1ZMF~jaqvII3oh|)v7ED|?u7q>{7C26ISgiui zG-*P)GfOPzX)!lPr(j1LvB~h4d%f(#E@2=9uoX3gp`uP z%Y~y#++?%`j-uYGh4EsP*Z&Q<#zi7^vO;wjT4L1ac;A(yB%-UaN^ne>vjm=^1rEoH zc}7k@o=@gPoE?Al%gMqoCktQx$pUoz5?wu=rwp*)>wfQ&Nds_EG3U_m;!;VNcNgcK zR)_c+@;!?m+-SQNa zv$PbL(9O}SUhjMxw&+c$1e==X#h~qAo(3JvpU1((iAvx8%%}u8z8uX&v~YN68*m|& z{ZK8RRGsedo6n6(CA{9)inIul)`=|oeCJM|v|jtU5vg}Mgj6%Mh!+#9w_0Krr)lsh zn7R<_xjV5wYi7bMilf(;9S6yjPWf0&r{AnWCrg&c&x>e3b_N}%6tO>sadfKwjz-X)+RqnbeCH zib#tdp%(os5pkvZMEly@cCecouB=D+N@j{6(@Z#vMZ%k-=P$gP*Tfih(on&~LsW@% zDoBf?gskEt*MSVMd3Z5g^u;d^r~Rl}fHVy5ujPmyx|?7(SQFrYw9r0Nyed@bt+dJX zPjp8LfPQf&cVMhnx_I_!wZs!yelb#WuaTOL_1*ACtH?4{%pbeIhsUWq8h;da@-yKN zi6`d|X$w^RAz$r|KQ4=Ga>XpNdq*_a9+_NH*j1%Wbm1t%pYk)$ov;vYI&!&3;?Ef< zp-5QNi`}wO8FSNXwy0tj5j;*tLjk5eb>X+8621v<%7rpl#C|#@j3eg~6k6*JmQ9&3 zZJjHZ`*J?PdWiWE+m&Z*2M3}b+)Y|^pOpj8GudoLAfq^n^$EkkWa1vAUdPvJG+ z5m1ojd=bsrW*`h=^k+i=BG-aSSG)ab?qqf^p1!+xlyvTrwq7`O_H$k^j1KS>!`QKFnvE=;0k2Dl#@E1GciQI#QVvZ=G7Hpj( zcvm!ja6C2HgCL;mb|3(ZEw{PNvr!Y_&L=*IEFUT(-3hYklM>2+oso$Y5-ESf2K&Zxz- z*+TS{j(vs;a64&DOqui1#BG`r7s}+#O#_g#3FqIArd**Vu6WAf8TaQh=WO;yHs=bv z>A+W?-<-2`_HS&?wG0bw(k4rD&NR_}7IUu9uIVuCcAxUVwM$#^5U6%CZq-8|ha&4v z&oz|Cea=bQb$wb^bc+7jOklD>zIyL!9fteqHM==nM@WBwWzlKMmoT8b*_{>9P&8>aFsSy|5PW}31xyOpAl|-f7QF} z5>VHC>M##7?jE4XqYlJ1!390^x<;9{14uNzj669qcq79V+*+Zfg;&P+VgG$yv|#kK zVNdT&hX71_r!@JYaV(&2y-OcMGz{=He#SuM*_3RZDH3>fMTE{!rOTfNka64xPZ)@S zf@Iln3WxpYy`t{yM*cY&+8xB%=i>60$GoVvRM0hMFTN%cTqcauj5jCFT?d;s`u ze0*^9xj42Mz0o;ky9Wp^JW~B8({@m@o(}tkZZY-q7W0gS=8}HkvVYxl!vmS45}rXj zRxy+3GvIOUc0gl>wK(wFrn7JWQNZoWrl93yYOM+Q`EDXN)v%Kk+M7zPPScS-B(-??@OV z&S5uJAxdS5>G$432fBk!G1-*{*N^UgNfER7B}L5NUWyofz5x4`P7%W+OShF3M#oQz z-&WE2r<&uhqG%fUGw(-#5#suP@UAgjtb!+At#JzBVNblloN-L!a`tf+-OV296aFw` zwOuDY1MFhk&8?&{--MJ-)}ZW_s+d;x!~;BQz6;^D6$`xy)!56?SsN~MDJI!z7)&wB z0HxXK`S8MpY+qt7f=p87>V2Cq*B6*{$4VsUlpk9WXY1s``b@=H(I#UPW?Ls2*0z|< zWxJWNbbgtM9Ev-$hMR`dzU#R9EhrR|E1-R=l?>hIM`z+<2&P!#{h@jYI$ZQco&_F{ zKv&+bT9KOoZ=Oqs>gz%HE+P1ymlK1Zh``sn0MYDl+nl=3(T7{mnVxvdW9FVVcEX-B$HGbL zE@rPioH)C7NnHX2zsJNT?d#)YuQBfR| z>H_B?Z9Q(J*XSMc&xXejdvIlN=}v-ss?-XrWt;*5B$3zHCK1~tU+su#Hg?v5zGto-EbSeiAgL&Yy|{2^4u0{DvUrl0NcpkjNp9Unvl(98YsK5mG4QrG3;f0O z!DBk-Q8@9Vc zoEL-Q+1rX3!DmYk=-|D3bMBo&2fIuP>r8%><6EVBnH}r?vPAMf@D@f$=|9%*Z>RLZ z!69uh>@x-bt1Y;stwq|CUhAUYyBLg`7Z=5pZO-TA37YhzwGea?jV~6_JbvoW=RXT- zwt9UBb*~jI)?m=2w`d+c$E<}fnV`MX(_%8ddSF0*1aCZ@e1|z!;R5mvIdJsgtl4j$5MEB?9o+bfU@~B> zt;N)-%YW^Jj`dc)Z~={`Q8&^;76F5#-Y~eGPyMAEZ5=kLjJ7hBLi`l}`O+6aZhCfH z{gB9M8BvbV4!c*A&?Gn%xxaX^0qHT_=nZ)u*AWyBTU-zn2>uJ_;Ne-@CBe)6ba)fo zu3>CBa@YVfS}p-P{rBh#rzjjrz3TOTa3ShjzMQW?SBHHumjgmy_%dl)!nsAeyV`+( zC9btkCms4sh(jvW$XSOX4a(!njf?&2D7o>R z5VJzU(Ne;b20IZhsn(YxoDIp(iF{k6-0}a<-n%xpu_K9s-#23aL+$B~4IfWSvSgor zcw4uFrYM`YX;DMc$ESOCf>R=kQjLo&Hmf8{=f>?X_do3q*!^RR#H#=lUiFe>4-qqc zELI|sNF)-8L?ZF31eC=j>0|IT@$`0%PbN=!R61x!{_dqQEI{cW`PC9oqF)Lp12nX5@#tfk0<6Bh)OPS# zktNn{O<5?(;F2u}`kpq77V)|I@(We3`hXEaF&2rJ!FaWb7ZHxg;HTE>Fo!(mVXz3V z;Pg3zDA_Oxki~#uvfyi+-vrTpPO}{x-Y3~T5wSCzm_AA8zsB1@DnJ^R2xE5z*aC(oL>EBw7@C<67*k)OJy}= zJew%XqoshZCZ0TGsVg+}6urSuDaOZe}&8C zJcH1c1$lZQBP+|xV6a)%Zl~2A&jy#l@!No|G2w1;12RZvB+-8_{yx0?5qd||WH5gB z-v|8})o5)G0FZO?Hs~#vfhGb5V$xBgK#VZ6l*OCnx_GV&9=!oz6qOC+z+2N$<@kIDTwEt5e-6pjQ1Zn1Nk|)tG>*JYnbm zz&kH?+q=iCQngOAT2I*TKid2K($#Td8c6paKNf`W zovAu;&~Fs#c0i={4BjkpBe33#o6PhqDi5 zs?91ysH@?%MQtcdB|B~nXYmJrX~5vEhy*Tid3u*-{Ey98PI}&e?-)T1=9fKJr}}A* zJx;3jBuKc9Q&4$mBZsOB3YQpBbk$oZ>pPbS;r3n>Ef*cdHHkatlz-5nhq zw%Y|b6p9mW%*G=s1RNdtyEvXj;z1M#{w#8%EDEO_PA}C)5rB_K&*I@Dt2o)AF=wD_ zxrPOsQpM{Sq=$W1R~_~{8OUrNt+)9D2!m!xpqjNb^>iAxrjD(wW&I?o=)JUdO9Cl4 zC}jmGI9&;Fbrr)9>-CFU!_fL#@p32_U)E5S?ZY44Dj}h1&MBKZ_GXt!B|Bzh5cJN@ zf@3PylBgGR7TZSfmpp%4DTNh&Osw#Aw2VV&%)`*;15qp#rSpSR00s}_JYK`YE~Mw( zSjtTF8`{YfpD4-&a^88&s6xfbi-i_gSv0gu1_msx7`g?*Dww7f!Xk{F3Kw;OFVL1V z&pMGVjQYEjE>eM9BR&ud;wZ^H-$PbLhW5<6G#G}PO}JRZ!9g(IBo9Hn3UV518btST zmKO_hK>>Xye0VXO4SS=YcX3u8k=rbqb4+^ct?~>o%mE@LUX!5aG;rBTuydsx2mRdt zG@Xq<2K^7c$?X3?#c#DE-FP92&X3JcFtmH z1ny+vT~y3Ik8B!sqh%`J(`!?~bZ@ygd9Bx-Z7q&`-}i%0})178sD<01Zu+ zhiIN`(q)7v8sMN&6v&KSCv*5h4rlpH6T$@o9M?-n8V@k}rx->c;7RYI-7a26c06MW zWkp3FGI5Y}MxaWV=!+>A&}|-Tn3YbZ>tV7|%hJh;j8?c1ZHY;hBC_eZn`2f0>mMCv%-^whz&26$_yuDD)e5GnWv$6`do^_PKGEG{@DlYy0R z+Be^B?5!Lb?;aS4r-xBnyJ#J0u7?;9;xjQXI?J*A29)I7+lf-2G{izC@iziq7n$V5 zrF6&3$WwgmL@BoNRDUQGv zG?q!cz=!=ucblc691c<(0E&8i3u%WAG0uN+b(zXMZMvP7vn?`SmRLa6$suXMNeG!M z?Xo~21Rv+D!+7H)25ZBGON}{*p^ExY3ea#i4gXl^VkC`CyD-vFnN~TAR}-`=Jpkko z3FtY(M9ly#?a(2QFmJ(03sXykD_zhcsWT@%Se>;caDc4Jz~JMHmIXv+25!Mg2X_Qv zQre+|;&ir6RDZiXplzf6W9$VDhf0KfjJ^a#!L8Fc?RbU1id3g_)`A(HgUA&ll9Fz| zOViv?k%DOJSqL=L+bq&0Fws(vg2)vS@1tMS5L`D8@&`nuD1iF zwu{)s0bM-?B3D#yJBSsl-c}InR=8uJp7_>8qg++ccLW2;LVPDi;~?8z#t@5*sGti8 z6n=OugKJh0#ZWE7XYsGnjf+4}i5kW)g6dGqhmKb}#1+OpVY+bi zc$25tMTQjtO-uRr;Uy5x^wBAZ4gBl0aCb6SnTrg+A_mS+(bVB;O?D@UdgPRmC;DL7 z*B8On1Nt-Fp$Up0RSiS>kEB}4&G}$fNpAZqr*L24M-3ihYg5W z*yIqInn*t(yEIPV04MrN{z=%#29+IL(6KLkqk91$MaO%*COq-@-;-T_yTeb?xU@d> z?8L#{Q%z}m?Ab|zn;5NTW{%?q6f_=t?(A!K^l37N{qU2b<9y-ZZ$Luh@h@Di?FztW zdWNtU0a|p-=SMOPC}=DJ+}GW%09nfsx*1e828 zr-AVr6?je9mh^0_sXH5f#K8~Ht>+-$$r(*5U}Am}Fger!TXr8#F-y!;5NOiYcrhXdNq##Gu8 zceJZ8H0q_rZo*j$*K|7pt^dU?7jd+WE(skqxFsZX>>21=%UTYl*39tP!pn@fpmk7^ZGbd`4!C1f zK7mwgx+@?60dcco}Ro!db|q>O|d$ zHFPpH8jml7-b@h&rmB>>@B}y7N}PYX=;L>_iK?5PjsH6Th&FLBuJiYUS#gqu#ku^* zc5$X~D!0Nwh966Hn7q&nCtRGwC8!-W+T>Wmp+`l7Ps80>s;I<)_7Tqb-3mDAR&X=Hr3r;TLvmDM8tEM1Q+TYnl!7wBhk+7zmy z>x5t|*?di=kH7KcHFqksTzBG@xY?>hL}LljNZ7q+nil=Z5Wg(ZfQCvUVI!k;@AO^< zJ(~Dn}5OL#82Uhv3zMd5h9AUq_D3q0v@q^DpJD5(IA|xKE_G@c%0kJ)t<(d zE;BC;?^zF=H<@2Qi<``H*T2Dw%wh+ys8qVgT-+;R8bpX>map@2NbAiD;ZB7EVXuI+ z-y=yES+uy_#rcB+<5{|xQb;StY!M<09rcHOG-8|rWFJ9V@!dor1oLjgc;~ne{DDAT z0;Cn?U9>3f5Li(XNISA{7lSN#AR~}gY{^!Qem7ymkXBsrn?NZhT=5$#qCC!%C`(tc zT4z>7GYmOi!S!_e7%bBDHrz0wv*GL$NITo&&6n(Uo2N@qo;GYFfc&(brI3E#F39*+ z8k!(Z3dwU)XoA=U8QB;+Oeoq#Y_6lFS&%topFp~l0y62cLMPai!p{V1s$5QNFZeA{8J_y~e1n!i>5gU8n#ONGE?$+sSk_Pe4`Sf}XJ!2b8Oe=C-vu z1=QA-+V-!V-Cptb`I=I%Hd{n$)#i&vt=fE<@UE>~RkYOhxv*%iF7G~MB+9i#GZLT6 zi{{$;D~!rD#B%itw+NN%kY!w&OOf)-GhEFRCUF;=%l)mn$GbImo3Hk_=7M4oXM-l` z{$_458F|g(v6&uE!#jv4h`q@RFUA+1CgTCX<1k)yJhjSu(f8FZ`z88c z26Xo#95!k8HlBSE)(@pS1W&Dw$b~p32zI=fw1LyQc9+>WWm3FEQboU*#EO1yE>{FmrM?(S7m{Vab;H^9G9deS1GmV>#=OF4 zns=%LKKU&b#v3Bg+ZX!zf&1*gCTL{Ty)=}E>PMC?TN+pU^!09{m~^ZWd9v*%qOSN( z#Q2SgRp?7&F2!#e_N8s!G@NyMk5 zZ~|)4;*&8~Hiq?fur#ZrgF(4D-w9=yP150Ht%{3+qvtBcmg;7~_XzUC8GCcQkim|vF`Te4T^X)9Ui-N8i#dRs7iuaXLQtDt8 zX{ zF9ol)Ism00x@R{Kl&mRApEd;s^6!o9P{j2ML1x*4f+7ulr}Sb1UteQ1@uwVrz)XH}YJ2-)6a} zh-Rt1?LfOz#^vZg$MsS|wvKV`0Tr7W8L6NhnJm`#(1Z+Cu*!7VQrN7S0hj*btHj~tE2V_TsST+xMH9_$L(Syg)jssK0| z`13j3!iQQUNGKo2#SI?*83TN-`3Rc5Dog2~ccg%I4HY$+8{Yha14ji@#6 zC+*RbxIT;99)d@ri(wNy8MQh7{Dw~G)zc22?AYmK1Z5vnZQi%FYPUCta>t%_9Q)Mk z*2Mr)PhD+>OVf|7zO}LWm|NEMQjM?ji>;!)pmp&A>8`{!lS+fcKgdR~Kfd^RFqz>; zL*Q)S?#j_O*ctOa^0Rm25`1f#Xxj3dPp1PX~G#0+pJ1iz0tmT zdO7IhNV|8V-o;-@s&Pv)$;sgT;1_C>y!f|Q2Y>qa|MBL3{z(6I;{PwYu_|SwB)|Xm z_~5rE2fuwi`|X>zzy0a$Z-4)H?vr_0bs|$%;;Ld@g7M_l@vDPZe>iycW_JAM?N5Jv z`_t>9ttXuFOl@~E=b2t}%ecPmC%t*n*PinHIAlNP%X7Z!q-V_hHfFtRf8|&9p$5+? z)L=3g^&so~^uzFSS~1iBzm0oz2>(ld@Ch>b=~)CBDBb=BgAAk|999l8K!b+!G-NmN zHZvYZO++Z`@s^0se7GgzE1|1$P#zbD`+>Q+q48*6bJ}h~Qe+(SI%_wg!BEyt>rdE4 z77HiaEuHu7tRpN^7cUKD4VTBoc$mlnD7yd+mnU9mPF!eSd!c!4?W}B@mAad69Syig zL6@LU8Vm)()$5Zsh%$>ty}$rG8ZFS}W|mK`MQMQXbhHhzbkeM$`aU`OO5gDEWT+Y1plLt% zpt14Xl9$Y*am75U-u$&?c2saW6*ubgha~FYL7MML3s&jwv!>BSpty8?)F!*yZu;jx4&lY_M%gaz@tt$(8}4u$zz-?aOw{o z=L)DlNDMD#)3<@79*G3wmt2Hm@=-0`V)!Y*mt0LlFA?|wK?1H1>?U3v@7 z<3+mLL_2;-%Z!%7_X)g517VWG!Y2b58(1&i_7bFaHi$9Q59i+oh{W3cYLr_P*5U5U z?e+ktxXI(IIEnKIED#>FEN;?Rp8PgiP=EWlf;VO?_t8IY;~jb3&Nx)ZK2lZSMDQHK zlXL5Mu}iabl^-Hb(fPwBGqCFqM}Isz@zyFCY;yy(Si1KX*YLo+3X|k2Tzv7vjE3Z# zR`9@$X*da#VxB)T%_?TH{W>rgyg1nh6mdIHi(~!q=x2DFr#Khc5?S#4hPfFpz~dBK zX9V8R1ncrPN%I~u2Fu??A^-|)0j0&qOajAcY+6>Y59zJ$Jt~881!ynCcj4|~ktXTR z;|A>FEkO4%v={O$DldT+*^A2g4Rl!J<$VRL2-*uPIcD(1ilM#m=4E0ncym8u@5(rB zqvnS*G`!Mgkc9Ffs1EBQtTf$2KdIf^u6NPO7b}9EL@O`EsD1^+=tp0~3Qh-NhLftF z{3gx<^ndt>50Xcj^wcKJqqhO-?;=EtU=ZG=@lqG3D;b5!RpOhK0hxrOtHg8i-=trY z=o)S1zeKJ_WDzS7^aw-$H7e&2G2vHb){g&YPniW+B#A6I*aLGv%r6kMH}(unNN?=Z zXjcjQHbOf`!KSriza-G!*spG{u9B#DXVQ-S9fqFj-kL0myvSmY&^FfkAEo6sjudmk zve?E^-(pIrsEO=`OPsL{8?r9R1=tb5dbY5NcUhh#$RuSOCyO=!*eSsFjGHDX8a4v? zE>Zx-n~?xqiIWfOt5lk#7EWSVPsFeZk{4_sUjo<*W5Jq7=`yAfO5w$kd;k_oVR*x1fZ=r0MT8*-v z*(@y?k=}R_tT$eG(@SEoZBi0gPt55qMyp@Qv!>ateh%x2ooq+NuNKn^!+IhP?-7{v z)g~90sqeakY{%8Q{N}95u0CJ;YK3+9pXu&;7cbe0YSq^W_C15G(m)=?s(;@+g|+a!;Zy9CvA;NGMk z0d{nkAQ|z*kB8nS1m{Z{dhS@hHW zrLR$Ul`bE)Ue;px7GS**Cun~q`|Qn#5$x3BtyfWROJB{Xx4t-4?%HsAGhrF6cD~$2 zuoG{@FkQl3C?Gc@hUtP}?Z`{h7TMj%6c>K**~^0EeivuyCh?mB0RMBGjS;+O$Cq)o zMJveWOBQ;$%mMx#hVS_QUOAYcYqn}z3|<6(27b9Qg8vwrR&M9%&EVn;?rYOS z9JRW{W<*7f7Oxx;j(`65ctTv^DFIsFqSC0JAW&RhD^hJl%=X#R9=&%WwmV`v7yC|8feg{3e_^=RGF@Vye zs(vI7HP}iA*p0BgZVMZhef^1c9d!6NB{ruawx3$X_WM?`{h{`EI z_p~?cidfGoL#7n3I}H`D*S&3?Hx`GQHYFo$gN(2-8M`*f*tIISn!AQrn&h<}|8ym3 z>R*u#Bq^1ycj5L1&VsVTQk|`}&Nhz9RT66z*cz7W*s4foO9qijaYW!1K&%BRfY=o@ z^7q;bxX-j!crVnr1A9>12ONr*nubdxI`Qg(Fq-GN==Y|`$U<|E#4Td6BFzBAArYF- z9|ji!85EZ2Z*?G`6l3?7Q!R3Tylk*UwAaz*_s&q)?L?K!Q>Mbx~~vQY76711s{UdxXju4O38a2rU?K#w5k=EruK1<~Ms zglWpNWEAwM14ha5@O~s}%Clsd+_w&xN8|AQsMM5pxkeWMbtPL!xA@Dq3*?)!BzRvY z?xYb97aU`)qG4f)dnaD(o6t)JP1&cpwos2CYTB}U4Q)^ammZV>W%mkX3ST!GQ;x7! z(G2NHiG{DdSlE&xL2Sca5>*IcAG_--R+fdWaEqrces1ZVA3xel#fOW{COU~I zXpcNL%{$qc7IRjJx@?OREabHoFD#sZQvCX+DUHjx-a9lJ3Sa9fY<}GU&||Gz5m` zx2Hb7!-A%^n2+$fJE|!Tu8Rcz)QG@%dEXX+ZzKYT=bWzxaBXuq4KBtr#PH#4*c%;+ zjZ*jMsZ>FL7>uwdPg5a#ILO1R_&zuYj>QTWXTx*h@BaAWY;b`VEmBd>#?Hi-5ZlGz z;p00uC7R+KzVevh#-1@#MS)|N>}*2U(ir6R=8t;>L=u1Bh{U_rDE!GxAs^{G<-H4a zOhgRoL~UzO)LT@w7~mYC$B=Wb5!HKPCeeo&@kbE*MOe?6_F!v!f}i0l-R;q77XLpq zqO(O3e{UwyIYU8oY_n4oGq@`M2x5k4Y>zixi5W>r&>o%NxtM|In8ghJ1r|I1o0#;` zX34C2_CXxiCS1Yc*0ng}y)|k!2c&EYZ4vrLPiSZBn7W6PI%V4UHs@Pi{qamWhCX)3 zE1LJhO`@heQ-0Adb;mPm)Vj&klxNB_+NJJzMst+7$<&l*$}`%f?s!&YUU5^ZDbJK` zMX&A@N1jM$6W+1B5pF^?#e02!Jl7}dkIFB4UG%WqP6>ZeN7 zvhsWxC}p+kih)ILt4gG@@@%;$yJ9xKn5V=OsdhfE_W@+#5D%5!EL&HUFDam@6H;Em1B4NyR&Ms@@s#0R$Ht*+uxnl7Aw#8 zcV|t-%C_>|SyHJ@&L#M5y;je-p9AZJZkc%3%q&{PyDZO=coEfo+`!vBdOR1X)G3i~ z9^P^3O^?DoE`wXVqV&qq|BsSS_JMJVA!;i*FKK3*#6H^a?ww}7 zW$!d=#<6{hUY(E6M2w|WrPFJK_bGbY8P~mguPFof?!9IV+`IQ`vu^L+tIM=UT5=zk zX&t)v_9=S#@AXsk3aAPs@E55<0>9yJxOYQ?sxTk6yLgk&lkh4^g2BHA;Z?Yu=et`L zB2=*Lq|qQ31k@^;A?6Ilu}yKxvM*r5h(AUOb@Is708cClqfumQKp%>qMJa2}lDcb? zhcibYw0)81l1_!`3OBLIif-M7iHV$MdubGwXXV!N+vy!GWYa8n)mXLnGJy4f{#w7#`4g;9qP zA_F1Kk}WKw)vir;nG(4)8&O!C!d=)ZrOgI52{+d*jBL>{K&To%l6OS(jIbOJ@NZFh zHsSF$N%OlnOE*c~1<>ZC5UBLxZ>6=b%wRrqicS>^U|Sqp#@Y4?joX(jtZNTGLzaoX zYM*Ct1s7+(0JCIW)4LAk+3`*7S;4zvPhu!&ItSzPp#PyanTbA2?3tWKd5-oxncTHT zgMjg70^V9hGXnV5r_}2koNo6V{Yv8zc%-YOM!<$}zxR!Jc!YtlpJdaLvh zl%*+;H16%T?FpYTq_v7^y8rM0+sjr8T$G#62A9E4Z-YMWS8$)9u|PH{`cD+DDLcp? zt8kI0y9Yu}jJhfD1B1*d%!^{QQ}Tt>k`Rg2Db$=c|01AdoCeW$zDPH@r0Eb>kVHj0 zJt^$#i-5IF;MiYmIOV}DW5+njA1^4|g8==xj`EvydHCle5=`{p;O9RdkzdIl%|B0uv%zG3^6J$eehB&>FUj}*WYC)p=D&>QXOrIN;l=yu z55do94=@~Goc?h9Lon)Hy#I9i!{CSDY%uLlhL%`z$e`M;LotPK`cPy(})Ap{+N6mj_04plfO{EIzY;op%sTwbbT&bB@lMi7z(l@8Kb|+Bu!4TN$?_1*G|-M% zVFCu!BP5U)v+3JF(w<+l&%M#70TcPZ45&gNlW^-zt9HH_0{ZY0>lW&QI?2LTzqaw6*s4^An zFy4@=R5uB%L=C4Kb6dxHdZE^8Wvul|YVE8y>%C?AS3-m9PX_0~Y#hWZ{9R~C)VY=# z97wJzZ8=O;DUiPAB1+IccX5;MD%9O9(j~CNMlb`CtIBJqp{l%k$_V%(W^0=Q$u;>h zX{*VAr4r0J@p#Zx-r%e0kwU3=w2K`8G~ zw~~3h41|I!$5b7)Zb2P$3+mtc#9W!r9=1{T@30I9Xycs*`ArmHu}xR_-+v!oQi}u6 zpi|&0{Oh!^WnOe+?w!01khNPFLfio78(t>wS_6xHeGyzeh@L=|?)>CSeY0 z4BVb^xT#_dg8`4`M6{bDLz?diZu8Z_AIU!pt4+4*RFc`(7v&0k8&Y&jE=;ph3t=?qO$7aT$PW{^qCSO? z!mrGR#{9TO{9xaUoshUnoQf!T9rl?`y3Zemqk&itLn5_dUQPaa6K3;GbPp5P5T?mi ziNBmyL=7ZT)Q2plw0CwE9K-S=vWPaMF(6KZbtKNKd%haY3B(IoJc?*d_)Fwk8LqIA zq$#8TZs##tzwgOkr^3ot^hqb;;TD;f%lYCaPL@c#qp#$jlB+@ND8n|mIK!jZh0yMu z5YNmBF`o=ZO*|1Gin2fA5PtD@O8n`$IVC7Z_MQnHGrmdp1n$J4)k8t|6vDzSSzgBN z@h&p_Q9YQzJ%8i@xbi-M>t;2<29-{&$msQPgkpW5uMTH zLPNz7ZpBFpJ{jqp7Tk)L(@5i)u)2(No(wOCk*=c6U1TB9%T=VU=i?~SRjlA9(pC3y z66xxBxroGy^&LbamWu8nYgJkN?#Qz`K_Jy7lR#|a4$*(R$qNtKtneYZ%v!&)_aE*3 zN8S04p45F*!e6s=;YVuhx?$!-C!)oZsQ4XiI|mo&|5-Q@vz!Zj z3$<0u&GW&k$YT@1iL z+4JWB-{%w@kaG>xqYQ6HeQ48)IDF78T|Q1(ia_$iw!Q%EJ+aTr6Fcu+^goOzZVzM2 zL1BMs2hjmbzqy%1Lv_5|knK5N8F_8GUiEw!_dk8KIA04!4A1AoUp|h68Xg?6 zIc9x0QfjnghFs2v$YA@Wfh+oTy&iK{^swVD4lcd*0%QJQH1HnqH}yR6r2%JcdV1t( zpAM}qc~j6J+Doh9T^iRWgbpIeK7#CF$dbF16cKa&HTA@dAS+>B?NaQuv*8374^(+d zezTI7dLY`y3nwB32eMuI)kzkD@x$aK3&DtF+0bq7(710c!L)#Hb9WgpE`5Z5f$%xQd>0pY-pDX< zE@Ym>A!JFq_+mcc3tdwwmy=C4x38S; zV^t-}UpPaxOD}nL)!g#pt&GZs>?(=3t2jxlf&@V42*`uD5MTofaUsU$g9&!+`QpZc zi9&cFL!)I^$nMc{9)c4@)KBwdcQlx*_U`9bLU9 z({^>enQATThuz>;lpIM zjxPp$+Cr1jcFrN<2IoT3c34$})eAo-ic5ad!H9d*+ag}tad%5R&#Uti0b;cQEe9@d zd0E>u>oK6H-%(=+F`;D6o=Q>(?H!<>4=DspNDTy=cJhSNqoQ90j28If>mgkl`3Wl! zdoezE-@BZaz5$u0Zvugq>SYjlFe{FuJc@{fT7zg2P|YC~R#Pv;^Ce(eDJ%l>xzgEE zyPQCbekx|LL4IC5LDKgm41r1W>^SjM(jlmT7I-2odEOPta#7tnAWIZjneN4@WSCYP zEp>H57-|g`Dc03VFub(()Yo{K-^`=+Eu0t^!5nh;9Ow6R6MRqp>(vwU;k}jGn<&1% z$=f0Kp$&3th$n~(8y&Fi>=HWrJXRzW?VvnOD2XqqS~DT7`Cu+CZV@e;PBN8&O_nl&2xp+7eOMl(Mc6o@+#5PAL-VJ&8owX^kIs zm&}$}A}^cIhck7}sy5hCm{!k8~4+&LST=Af0>`2=x=5w0{$BuA^SIjTV(MrE)Qn zPSu1Jw=Bs%BJ{cq2~?{C-@Q>tg22vVHOhpg2=P!R4eqkEw=}S`XV2l)6mQvUHox(q z_G3`#HAC)kQleI}BkdZHv3nb>uPQ#&?6t^v&x;e&+-@e8EbzdyPnzOA;ElUlUynfa zS=$pjtN$`f;PlG0IGu4sT?d4c&s8T9MDNv_MRXqWWm3QDHe(eI7xbh{Q!28`M~Yin zkK33@1VfGODr^OPcc1Kz9+|Xas9?Qqs1z1dO)}K|sEDe*gapnVo*LlUw$@UELF@Nr zzg4BRDr&&}R+TFzE-5aVZ!9&P3qASV)=E^0sD1>BA9+zyt4n?M#wA&K5CYz|z7%m* zFAg0k__EuQ^{~EwJg6)zE`>vnc@-P(mBoPb!+T#DueU&nib)6!Xl-~Jg&VXyJd3Wz zXVLipsnuK19uz~{3M5qURxb`EBHZO@U0Q|PBpuLCK35g4+g+?km*VGHNW+Tv6m751 z3khrWQepS+=Sc3{O;&}BMH^%+WPUuJ7%7iUPck9%ll$HOk|L)N6SYc2)8uF$n8?BCeABKaxT2~Wu%!42{euV^P3{8 znFl|vt+=JW_~E4k@4$>iJCkJQ=?KFbmEGqrnVqc!SxbHypt~@D@m4Wi&V!YK#WGGr59p?Kv&mc=S!Z z$>4I->koq7XcUb5{ZEt0;G#d62IF%ol61!s3@@~pKM!Xg1nLyYcL=?_n{|(m;Djs@ zqE5OBP5Y&|*3L9(%h7}c&s^3nBCajU$Hyl}XXiIFKPyeogWz~SJ!=Z+H#oMb%`)5?hgo zgjf!ttfzghFarF*p0f=MWug`1x!uJ7xQ!S#6CMK9*J7&>2f#xBtVFwyRkJOc#Y=1{ zvQ*#Tg#IsfjF;VBiFLi}eaFXta>aIDS?1gGGM3_&AqSGBFDJ>Daj=|71LLUL+i( zhZu!z0J^X<;SiTdDCKiTk}OBz;wIoy2OSUv-r{1CADxAY-8?&6Oq(_yp1r(8TkHVs zBgsB4Q6J!y#v1Qkg}KGH=*6p#0oiR1oK)7Sx~l>M)v9hbj>hB5pr>#WS;@oq7XWHfP;B-T`V+f4$v@dS zNWp`Wk}V3bMA1$M6jR`ok~XpF&^`i0`U@9#8)2$(YYCe;^`A1+f!uv~nP2dt1KF zffTsPw%~zkqlbU*|3YfI$9urq&A^cq^xpL@PktFqf3XR@a)|bEF#9k*3#j_MPv*=A z{qmrNf>)V1%g{plo7b;jp>_{~-V*Pe`e~Bxri(C%!1=YruWBICC5JRQf?%03csU4$ zci|>DkJfScyTDOSULC(Vc=gAFlb_n_3NQ}1I(-|w8@wN0fFBVah1g}1{}=zXyS|bf zz4%8F3|teuK3UgYB={7O<0r5G5CGc-yB(5_ue%u78j!~z4{+qLhR4%9S|Kh^7dPww z?|=Qj|Igw}w6ic9vH9fS`1s(}aeMS@*}S?-B_>n9lEh&yMZ|WK;K_Yw6Fhv?4GwCx zqoFx@1@gQi@ARNedmdgTQFegL^$-~;^dK@1ZnG#@q5-*0a^kgz=PuA-l0k%j5fAx6 za272Rq-cpYI7UBYInMpk7U|_NN%Ds|CVLK4%SRwdv=W}3j^&R#c%jMkF;BOFvF25p z=f%70v1Z6*qPoyyk1%w|&}@(Jict{CVP!ECS^1pZ@4h&O*z&VMD@F{fdCgtg4~JJ+ zYx>|ruy~=dB1~`dB;G_4i6(>;)!-S0Mnx%EX@m)(@oz zksPHRV?cODcz1WVFXxrhlzo)m5%gH9X`jfjcIy0cbRL6s z%!lh}9qz7UArQ(uAFiX11lEZ&i}KrTP!t=^DZu(+6jZ7M55f?!?KSYDrO=!Er&K++Han2uNBF1UIKddXF^%Y#u8F2hZlh5A;P zw1Q8o0Q)W!+pXIw*}>qAoU_#h-}G787o!2pBn!lh5@4qe3k2-=Kq=|2Pneqx;7`2u~^?Jh38NN4x6?8|Q9> z7`BgK{V;kMUmT-jbV#D|KrF`5A+T0_H&M8ZcB?ead6=USAAvo`uvVn$a!Fu4h(xd- zFsuusOrss62aVBPv{8vPVFXwYA^}XL(uUH5%J4Q%S8?Kn5@63UtbN{K5W1Umpd_$; z4C{eZwrA}~?P9L>*^RG+u1ZY%E-IUFMgui6ns69bcDqKF*27hl6jra%gd?!;0M-X7 z_kegHodB#ADO#|}ZYnA=1DcQ`*eQjz6MB<={WaR9q9~XR*!1h)0oID~*EC%#W`YqT zz*@}&8RG_wyu=UV1%~y*3$`iUAUpA1BG^&*kltFi$ufRn2kyi_1z67pSf)}y%`#A# z8ep)1)R8k1#`$^|FTnxgO2r7U?-A?>V69kHj5e&-UKpWmwEaY?kt__EgU(6%6{$wD zFxWANXoq&E*cL`Lj$v)K1tInyWu;{#_8%^#wT?yKiyhlKHm(H(S6B`VHR1~It+;OD z~q+@>$FX?1#v?m=QpEfbB>>I|mr92!z{ASRO4n8LW@U zAT3jL--MCEA}!<5eF}`IC|KY?jC7Zq1=MeyAbT}oZafp-`{Os^;w`N)f*KQtStDX+ zE=+&yeX}F8gq?jiVHfdQk*e+)8&aboPG)=sOpb+X8*Wr=Moa)}*BwE*7Ba9 zWG8s#oo2B1jw%OCHiXs#CL$mBB9Pyvg~HmYTSS|17yH@14AzRV-R&P$6mWrvZ2w%w z7=b0*KRclW5-A7|PX~cTs=w(yh0|eH|fo*)3=H!Uni4w!kFsyxo;vFo!I2SFM zU>PSUh8hDUIC zU_-E0Ts+{z0~dj{qAPhbE$D8njzX$16j!DN-OB1DB#e{ZWU!;lT`x1Vc!olk?DVU8 zBiy`Xr(b^tSS!Z6(EqIa&f&6I-mm0mF)X+cti#c?T?uD7{Np;?Xq)=eRS^P`Z!TG5qqCs@$AbHN~qTzm;P%dagK z7tOGAvakq3zJIF+^v-Hw6r7=d?qh!bE z;Zngk6_246r`wxygH-;n=_U`8<(B1pGTIRw_H1j+`b1WV9lVPs9M@a03b1x{fjCaC zU>C)xE)eW^=Q4V>AzGk3hX})Z3=xJ?Uc#{AoFZ5^M$bXVuUCu`jWt&QCKVLJGAAC7oyl(Y&Ht(68mMmT19Y8HC-;@ zINgSm!;Y8B!JXrj0ByUyjY0(LFbawPW(~*CPHY7BBZ9S}WRc8sxGmy9i9q~t;iS`c zT>3Y)YNuhdHPtW`Te-8i{auNI`t3Vk*s@ZB?2@faOnpk$;qJ@r_5e_#*016OZ7VQ6 zZVI;IA)<)_?0L81imz41diG`=FLr5`uJS`f4rOV1WdC&Zrz1wep*_hSZ@WUGJwqM8 zWP7H{kw?P4I(6qlz+2_IuN%~TQ>U(+@XuJ+C+VN5a^|1-&xC@4$#s?Ff2O)#2>{i~ z6_NnrvtIGinT)AO1Xu!8WFE30$#I=}JPM$U1v_K|spzp_K%wp~{i?a$qOZ%Z2f@Vw zT1h}fjT2y!d*GLq;X zlC3EB*lb9O3i9mG1>hHmNcO(+Ennz{wW122Q>L2Wi-y!&+k5~`Rm(N#JOGtrIkT7B zNWv^P-=ebS6@@f*c=cpj{OG8ga_?DA-qXRY`w%>5Ou1qL;k2 z7X6uP_mauYGvYed3Tchd?IJXYij^YO4GByEWn8pFBEre+VH=LQsunSxn3~?Ngi18f zWsaj_6q)j@w2&?v8Y{v2taB3=l{Wbs0Uj@Dh8j9}NKAm>Z+AOlj+c6Jm8MA)Dk=pp zEiMI@3y~MJhCF^=STZ}7JKbs~V7WzKMfg-er<1>u#Ug;4@W^PKctkW}=aeu_j0VBuJ#z_}RFnC(_BFRKXI0%W4 z2WN$iA!ni>ZvtJ6FAhFk4F45r*uM_`MzUm(;0p+vAOQ^WToW*qJk@&W-ueA77jeE~W#H zP}NISMoGl((`oG(HSZnXOLW#djJ;X!DrC_vgpt+OsU5-zoNNgHy^7JkD8*qFT(T>(bamq0O&uUXLngz#A384rIX4N$5IL`L%IgYxT zOekwaT`tdQx}J+czaGJxxMD=8ItX@p3%DZ&62E9D#SL2^RIB8b8>FqdrOq==@NdR#-Uh?;4sa9>Z8cm`U`)p=GFE?_ zC*C+KpJf@3u?XhUos@t3caz|hK$-Z^7W!ebxJ@8r2tmT{Xw3u*r+n=NnLe`FQ)+L) zaIsc#9t_@MJ9HOQUcOL+Pz8Yrn+&S30E4n8w>mm5WUqhuh<>TKPYl&mzwk+aH`R3h zs{>|yLL#9@hD74s_|wH19bOZhGz=tz3qp;Ju+yM$swi{NPoappp#7N3HH&y$#UgD9 zh@g!tbcoqv#lB6#ME7_nhky8q{8O>ri#S8OU3?{YuG#dvSyE$56cL0z2~JT(>*&Y^SaqiL@|=-!dc~z3gi@DsD)Xf zcwNU6-<=1gX#p?bGJCy6iyiQ~MN3<(fwk;f!%dta+Luvq6W&EZo(5M@5N&S4%_3UD zeMfQu4*k9kHxN%8CRxgEHIipu3XV#cFVHd*=K(?=ZeUs;q5tP<%#*jRXib48&}PLL zL6Nr5jYq2HK#^h{E-0cMURfd25BTc%3khvSWn-x3Qn9oP^$w5L@y4IEMuQGYT>`@U zmI$Dd_*phkYpv{sd5@|J);*M({j6X&lfwI2Hp5BcQL*pRZWKx*i7xF;FviF3w{DEZ z017C~y+yRl$!h?IWTH5#O%p1GA8KVq6G$0-~Oc`OCa6G z91sai5f0W#smT-ia@b=rrH`FS0hUaeEndz64qcszY+@-r1w?r7P|;;TN=>E3DwX|ZCH1J3Hxe24Y+J)wv|xBTm_>^+jqcKfDdJYVAz$=cX=UMUvZQHt%_8oa zmRe0)t@aR$8{=A|TwzU}!WKl>jy7Wd{i?8!RpK;-kg$vrmMrG@r#}P-L4dd0*jeeLSBrvN-pwr+*?PuO}usHtqbX=(ErkmZZDK>`S7m9I-HG)eeENW zoRpIN34=dDB1@AD$%+1Gtc98;5a%6&WJ8qi62XTu1H=?trzKPe_%DwhnoGIwfBH!v zfy4=kR8TEr!&$wQqyvork`5zTl5i*lLPV0eCI8|{69Y$_${r4~+pFCoIBlIlw3KNQ zNszhHzO3NlBHY>DbAt6H>66WL!ZpZmcIoZ)4f-$flA>w^yhTQ^!DmVJGWMu3Nq%W1-&$x4^h7B<%GK|bMYG<; zS#KgRsf?+Vf$(f_-upC~0mBq>7_@g|Bkw+RGNk^LBL_6k|${=4S5|-@) z96#Y)oZ(e^2UG0xO^WuUJ2 zYTL-o54!4(3!R?bkBgu=6yx?ek4tOke>DlH=ttH$OpV8Ks#mJ6Whey{} zDh3s|u%3d@?&gvF)pRZqtfC>&LfpOioI$)v?>QI~*3Tb?u(vGg;|gf$GQUpuPqf#b zZ=!pA1w^0!jP&C#rxg(cofL5)r^Q76lTZ5r3hT=kNsXb+j|l49_zJB`jr9iqLbpKDqy?qk??FH&{wEFh_#)420xN zP~L#R6A=r;H#ZksehQ-4v}*EDMEEojzviI0j&yIo(7_Pwx_%BI%{DCjC<3?mR;Ez5LJkaiC-g0qWL{5~_Tn-4Ny)Fr z%}iv0t5`THsU4FcD*?T53uSr4&eGs(gytvqWJh>L7p?N%W;}k>s1SG3ZRmjA7?l;G zzUo4Z7K9>bNT2$Ks5+mjLckW`3JXzHYWwSPVSy=*);tyznSYdf&DIAJKuYe=YgdWm z@)99UTMtT`QCOl&>*%T!tm+|Rtu4SDYlAhIS!6_pgQOH?T1n=sjilj@B`LM^tfr!m zuEo?=<-Qn~+dzz_vP;&;aZyziYN8s$#rV)heb0P4Tmvsr8RTXpZNjZH6pLQ^%cVFq zuCXN7xW)>+ty;_tjcU`=ikCsWLgP{V1mlDH@;lVS^b2{uk<|Jf7!e!t3wOxzSa~y*1gl}w zrk*Z&prUo@=CUn+NcS$B4jx;58T4a->5VD;$}8P6t-QU9t>wfcvJpsF+|+y<`1$c^CQBayF`cH<7KN}sjk{GK ztWr>*S=#h!T!*gW)fKS`@#X_=MUxLePfQCD3uOaScU!sbR=>R?!`JPvao;j4TGuQ^ zAbL>W@_I>F+B6EsqwPa(B9^AE&KPV;QKG~Jy@Ua%W)SNfoNBvDEK#k!bd7y<%^gQ` zf2F)RV|zM~ec&2-@)fd1-X>uX!*j?Hwh#!CgJ1wUkJuJG?Pd`B?j9IogUC>7Rw)J& z&npCWy=l0K^hyJ3D2`JI?^6fL2VT)DxAz+^Cm7^~&81KhFRv4$H^PZgX%OhMCiafe z;{fgbAFPuX;fACi`p?^p#ib$PqYPo>+uDKHu6h2jHSR)vs}KH_xoGA|6oQ(cUnSw@ zOD3edWTobGt&l-N_T4bAkz_zvvK4eql$)DwHk#flYzYMKPp zxXuzZbItG6qf#J^KBV1$&Y1#e#Q7|M*A11&6IBR?r&H4?zb}J6UI{U{5;QIn)Nlz^ z5mzqu$KLNC1f6^|M{l!7!P!g^)jw3f7$3avT~765>}L&Ce-{E8=H1{L($o|3S?B`{ zZJ}4o+xg)N;ymcE^N5cW-{ydw82z$_!ACy}uL;>>wcv8?9Go3GRVw*$&h%x}dNFvYl*M^ykc$H+F`J~mqSNYQmv zp3ow_6-4CD_fcsmf@v)o+XgyX+VGSQH=8TKW~xtb3RX7R0D)-z4gGS%poBwEGdQKj=Zl`YXZ6p?F@sny|X7QL~c+D&NSNqUy< zy6srHtKToR-NxPw>Vfze?XII`z-JM>LJQ|G^EG_XaS+Zq@JAN$O3paMTH1|!YaR{U zhWE7B6st4iY%uLlhVKT&skqoP$PzmZ@W1Ec&1pg8${$T}47H?)=b>^HTvnffoJDJ}bS zHEN@uZk91<%`geb77wRwW&X>=o$P6WFwAMJ@Z)5BB9Xugf$|ozKasQh5^9WVcS~Zp zRR<>02eaYDr$NDLjk~(x%mP}9f$lC z)oKDGq;tAA)@+LvjJ^+@n$no>&~}N*m9!rODEd+FV}=ZhC1$qw6&6fn7uw({shDd+54IhMjXsgp04Wva^cd5`Hf%#RBsO9-Z8}%CvLvdOT z^k}Q##Q}8Zm<}n4ErDMSM61qR4F~;-)!+xA7EPT_zhXenKs)Y}dL*5+M3P`pVlWnW zqYS>FcoC3zf(%6vjjAX5s_MN<8_9+9>IW22yXko+cgdz|>Z)E+j0%_(4WX)R)TQ*U zN_2voP(e3%TeebYf<~?iJ65ZN8cJH4q#das1|W|fpS;lU?)plvSu2bnLWgn95igrpn+0JTbKwn`EF4gRmu-CN-d)*RY0+i4I z)nUi1mMXK>S|_z?y;f@#^&B>gDD5PAm_V5_87O;vQqKa8`gAey;5!AL zzs`5zY85XMNS>8hrjF8zUGw>Q>1y!Es)EbrG=E59=#< zgsBxQO@~Mt?>2FrC?*EmwlHD!+#i~&y0$w|Y+D{z3m$t!bJebi^VlbvtF}j6MeXvY z4TbQgErsxA7vh8PhDf4io?a#4;!8tB=9PFqdDJC4hS-n5z;dh8n1n)59uw$^;?(hRo9ti`tx2 zhN&fLc`DIeDWPktZcrtAXszPZqgvLhiChhCJ6zG4g|LljuH$o+X&&8gcTom$x$;ym zes@lHEs8Fte9_QFx;aKkH07QKTT%i~;sqtQq66d0Q8 zo&uL|$E#@{7b6<+pr!6Vde67JbiK_R$$)^OITr+EPsEF6Y-o!E9dsT6ENI^Pd1meh zgW>hWoppgg{LEjMx1n5+gs?Id`e*0O3Z7TZQ**xNiXBC`gvyTID*a_VC(FTGn)2Gs z2B6=E6YZ=kzPGEPSj0)*S09@;5G}bdj(sWCl*U^JMuU#^etrz&nE7}Ebbbt(-}1K; z>6=~4@hW;f*ZMe~G#E$cNLCoj6GJa6jb@AEDUX>NlUmgEZ$xxWElqoU!F{B3r>?(B zZmMt}iCvL2nQ(&H-!2D1{5y&3@SS{^49?+@x$uee`m{A2 zN`tFMfTIpF%ovifxP%01aqpSHjOr7GK8C^@Ab;1LD(=V8T`n)7tB>dG!b957!==-+ z&Bvq3aG0Jw(62tw8XpC;PK$oK3hO-~7}c*txmDK@D~!_@BgxpHG1!EO@NkfMW3Be> zc9+P{=~nJtk}j}{Y2HQhN!jH0&dvgIZxLRINkSrZOIiC1{ZpYBjO`>!G#=@Y4VTPn zWVlsRumQ_Fq9_99ZSgoY#^L_>1B#ec(V;_)IxHh%;YCtB9Vbd&DlU(-!4;wn$T78azfz^!U> zqZG%A<&QT{s%#&zE++X%Y ztKOq8PGP|9?xbO@uhEwsT(0P zAN6I^?)$SsTC=14HN~ppeHL_lUu_;D4t>2r z8*shPy_3Y+xMkEZZr7*tY|#JX_&-Yf0l&^t|NI&#)jaG8jdapgXqPoxrKc4;RFf&` zHr73J3WQWq5Cl)BY{V^8VW6TPsZyl=Rb23@Nv27=3Dxs97kf{d?Ab`>q5h8~e)s98iPIj?KXE&*8+ zUI=I&krP-)rn{w4>(=QCAjLSVbfgNYb^E%Fc2vPNA9fL2mvaQS(^y^B;}x9Kw#6yH z)j6M_kw@ne*7t3(sq-ZYH}lv_6iLwAm_;mkFVyRVIo_FhTjI-Y7R_a2wM8|IkT+fiwQ}~1_f@gPE;ca5t|RV727in*u8Y&))wC zh!6D~dma&v1%&4B9{z%;f+pxN1s-R(>2gUOvdTD74vZ&$IEWLpK8|I)TFnun=q_UZ zXNpojt5b(Jki3W(RTW33*pknfYl`DcnGWL_>R*HbNs~vkcdK+4pl%;QzwuaSeg_&I^uuGIdM2zo|h_Sdriv?==;N$*T z?>j3Jcw~sfY z@kl?LDGk(o=X09;-GUt}TC420kvS$icD9K z1x+zsiXmUMORr5jE2uA0I$6L8hIX$p$eIyr$5skx+39R>8T|A%=;M(O?up?Sp#MZ6 z4tq=>H5~l03KvM+9|(CdT1+L0!60)A!=?fPOvx8gOF|@8r%>~IW_MCDPQmP4q?^2u z4TJ`X4YFpUot_l-^+mwiCUER8u03_SRKSjLl0VqBGBgMu2eS|3v%^0hW$Ep15&bu) z^yi~>l;5OF@(1}hGR3DCy^n*_AO7AS%?H2q2c!At$#6E9%uimu`oj-F|Klb3-k%K6 zM4taLnomCr2DABOFq-}l{5+UUhvSRWAC7+rM!k#opH6=m{1BWCrv1tAa)xS=@gf3$ zpB#byyh_tAN1#ixBdkgf5oZqJPXhHrF!<$iJpD8oV64*_Y8L-%a5kKcCuf5R`s;Oo zS{Y6+hi9ihyh8u}I6H%-7X5+$eKzQi(BJsacYX8&Qbgzv_Sf`p7w`!)BKR|!;An=z zZlNJFrby%A&%^Qj^LX-C{LRE8go{voEK@J`Qt9MnZz6UK{dw7&PVt`z3HmQV@*4kJ z?ggjjsJl-8JU^TCKBG<8e2A8WUmA4$q+Z95S;vPRc5`q!NB>02T9c7g#aHa$Yq^83 zbRGOu$uFJ7Dg2i;K#+Yh$bXE*T{E|y_amMXlT zd!tWmQJ;u#!U3MT3<&;Xa@iOXy-47@sjR7@@+E$Qh3fJ zI-`rThK?iLj*}X8ybJVnNeyjh8sXHEZZ1(5MCWwTcAWIUwQM?QozkP+rl-a&_d0hhgFjMd3*R%!drFmL_Vq=%0{3hb z-4Z!qh6hV?87Aol4O5XmppyZ6&82G{#w2f0AZc|rZjw%|?p!k3$W;bSDHgYBqH)Q% zd`yVGib)W-lSyNzbuwCS_-JLfSI}HWv>de~d&^~jodbcm8Nh>@1vf~aW7fzz?vy&j zMfF}iXHW-j+oYX*L4eBTv32=tTRphpy{muvV46&xVyhPW@q_O%g1m+FA;sgMsY08+ znY*=}O? z-=anl`~Z?tDfSOYI`23b{#nEH0$h&7#t-<>=Xp@ei7-n_Jf93MN4-89sC(*(BG2^D z-TEQ@O*dq6_1}oKB?4O;Za?klG2C@Ek{D?2vWpCd+1=PgtsP`PE4}cI>C{>>{Vl36 z?(j8PMHqn31R$Z1u(Bi^9un7XcBBdf{f-*9sG)i+cxqK58aLX@2f#U!3@@WDX2e66 z4e}C*GtXiC**1kSfNl=657j5}OV(^R)A*%!;9SKxj}=lYNEA$D4`Q?;Rlij-m8-OC zJ}&uD9IcW;!T^~;QW6!NMS_7!CJ9Bw*8kUeQ5so=tQR?RC4+BeuAp z2GJuVW-Oq>c2D0mC9VjVn1;v^)E_ho7qjWxKvLACHum8L=F?gXH3ca0w{Sj13V(WF zQ?h)-*5JE4qyR%18d9+pUu@VskX=b%OvtV%CJ~nO{VGjL_O^&WmcE$q$42~d9wza^ z*21my#ni&Bv4vYuHIT>H)(Bwy!p}9$@&ZtDOQaF$t7cv6nfewdLxJL&=Ic9R4Bv!)FcaND2P#$yx zT=B(*%>&sM8BNh{LvfmrQK)l2oU3b5h>QeY_dSK^$_w9>H@@p#xP(kfq|+vR49c_9 zS)Oi-FXp+PZtb#kh0oPXC$ADe2#BL83gtmMfn;Co_&m@-dg$Vd2^~OrAj9dIoyahh z2R3PpjM&U$By$b&6T5H`C=YbYIJ{1IyrKymgR;xe=61bWTWt#h;SwPPb-wnpE(kvM z#g5NT`xM()))gv3dJ>@SSD9snLQojjFDsu8+^@thCZzW(4^+@HCe4Zpp!`VV{moqX z2=A((bdrcsdSF}@J+@#3C_iMv7Yi~ET*Rfx*k_#b0A*z#f6+YAq(&_nP@ET51ImXN z*hdmADOM9Y3f1?;y1Tv-)>NZfy}t5YQ`fs&q2nfm2+B$#3zbRY>kVx5Z7qfj$l4-@ zvbT7-OLKB6V{3BDp{#8dVD?5Y5Ke8tztl4JYLP3lVlfNWt!oR1G2RKG@pg=N#^pxD zmy5=<6<=;Ks6~uO`s9x`IrYFt=ZFVB3h99}kCkCD_d50(mO?AL5N2-8j4>jBn2W3x zBZKrnx{R)Ok=G3p0_lO0?lFX$DMmU8r1ow~880zS#CtP#^F(uVri>K)B=S`p6H4Z`pxPgk*Y^-5}4)T7W5xm5wB|gNZ@r;qLlMAzBIt2}Z-e4$%Kx41)1_fmyZ!Su~~G9R$A0V>snHKh{C`RllG7k_13RY8b|>x%ttdv#~rkXFF) z2(&Vbvl+F9V6RHWmttlsHKUkfc@&D7o!yLLilr-xVKVm9H8#8gqQclJ%l59P0k*aH zbuwxxKF*a?vRQ25N~*jIJmt7CGWa6&Z+E-MZ+DSgx!BmLmC+YRWnrhLRHjqNQD4}U zDE0Xl2L@p;rC=z&I8X>1Km`Rk{iMexCM*OGerQ72`;>)HP}h?|?<|=0-ho`Pwcva* z{>TS&HtAhV*+UZ-43xcE-wccXGNo9P7Mbk*Ja)fRBBg9&WH2vv?hePtw9KbBb9O3=vg*jk(2xL45he8XgN&S$M|iE^&=D zT#au+Es1l5w&h)ywDSQyc0_Dg%#pJ0k5bF<&hP8RT^E9oPq{njNObqt|l2ui;{GZg*2e& zmu$@>=cfln5k-fr$_I3Dz8IAJ@Y3Q;oDB4j`I20xT^`aCTC_nIP+olcc>Zw~Y$Cdu zoX*bX7iWV$Jv!ylu87P1n{aa-WdUNzbs85hL+zKf+0;H%@KniyY#7R(Mm%C~)EOLKKVlPVELMw4n z+wPVNqIGi#Nlcx&r0u#OVaIO{`St!N$)b2wo^#PZ^m9(g3!q1SqUELdZ(&M`YD6)J zksi@oeqzX=p!#flFTh`E=#iTjElVp6g*oX-g;>E&2er-YY@jXck|rXu@X@1 zDm_UME2u<(XicJZxRoZqtcNKwbxEsl+{q_a2V}GFYvA$L#{z8}uB>?(JlDLs)-^+; zS<5Xo%U`c=^s-As&Z%!8_ zq+C)Kt3xGWO>Z;`#{K@M$z*WRN76n%rwdAv?xsK|q{I2Y5BW-iTWrwnB8b+v`Y{tMO&`ubTT@#nC~0)Le$!}Xg@6hKjdU!`K5BxI4n&Q3^S zVSLa|j16nnovS8&sqn}uci>tDLhKhqQ(lBIE|P-d5jYfos~qAfL>_@jx1BOcQmb;` za4us*pDO4=gx|jhMjhDgctV5=&(`t?V@lfdXN#t|2DWW((X=-4uMt=ME%M{n2E6dK zjrd@rKG3hz55x0W0W%rC|1d+=^Jsvrd1UzxNAM3Ew6Cu+8k`F?Mrg~RR(Onw<6}D1 z7Xvc%I9`nWpeE&_A!sm^FA9?5@(lrLj3h`ph`gMtqzllQ8rmidF8NZNxe?k~cCePk zwm@5}R25uk?mH7IlJTj7p%D?+Dpd!EG`QC*l|_JL=_0>~OEO9ERq~S)!djITk%F4V zwHj+yA>8P9Y+fk{E9_bER`UO6@7gd_chyp2=%O;Q&rQv0IaI+u5Hc;1d=4S zK!6K?b(ytQb`nUExrN&z6TI|8+p)7|`T)I2Z<6Uz&w9~=%+8whA^QXR1%<~wA|o>+ z69CETskE7DFf+o#-NVDf!^6YFVZ{ngMOG)ZVkNu4V#SL8vS0=E*OMFo;m-Z^lPflq zT9z?k3o25{AGZb#W%MKj3&B5-C}LeLrsSM(#XeK|c`m@~C$Mo8>XpJ-CJy1CiY6(2 z%a8*&^i;ngrq`xfgcYp`ZwHdLV0Ft>E$qI_Cd{%tA&X_7h!kMXMpg`CL2|I?!=!0w z3Lug~j_@GCi%yUzb6Jg!_yM%{GQ7qM#hJX)L1qBdyT(n1%1BX3IVzB(OH+~@Wa%;` zOL7+l{xTG7vDVk;5xde;A(oj)K*JYLBy4LaV=CdnF?=$if2XIDOMbXv9i2>pxGFUJ zlN+PUZ7kZ*j&g)P%hJ+Rc&eHxm$iFf;ZX@KFB@{_Nv4|D1=Y$2a^}AZC!pdZ@dBFK zI5+5sfXtpkus3IENU)V22fsdJCN#vtrpt7qtfqEUHM@j>aVOTXd)#Ic_j#n$ERr>c zsN6Fr1-qb^mN{_o}l9npSrc&>laF!QN%Dyd2XEI-GK{f@{N{_o_ z;&v*?rKt5yD$7eHFmKB;NwZgPK`d3kl^%D=q)k;2PPO7U`7AG=jDK4eQEt#~K}dDb zl^%C7<&9MkRK4mqQ7td3f`eNSRx6ki{s-m~$nij|77#lvvnq(a*3~SbKcR5J2|F#- z25F1j7pK1`p`z+?wDcZT$sH<%57PhdCdC9{S1Hbr;ewN4S^$ASe!uP!ooDj>lk!Zs zx}K6}-1#NA#$H(XrhR!z&Z)z63%o1AJtOMc$W)_oPy6ze+~Yy>kIOwpB{qm=Mai6I zz?rciS_Q>YmpY1A@0TW}<-kylyDku-g4P7W$E3kG=r}SxgT$q|wx&U)LU-?L<#EdH zvU#cF(ndqOYi25-%~_oHSH;L=JVi-0s+of2Lhm`B$hlf8e@ZkBW94ZYCP$Z^pkX>D zt2b>K1|==ks_H~EuWWhod5dp(>F0|!rc>4!GWn}BI;qM7VB(OVIj>fjSxe8Y74=)0 z;hVXPGZ{e#=GVjqcU9uf1bV*lYhr@4T61OsS6E*Y8_FnIXGV}aQNAK30KRK6z&LcA zIvwu)qjEOfpM9}?Bnke+`=O}obA zgR-WM4gS3&mlh&@#3y6>*?6FDB+;1Q9@G1 zxl*BB?p2~2wR-lhtfZMM>E^YVtx{5r;iW}Kz4&bN(xX7HMo%dLVwbIz5FJ+Is}>qc zLpAp1hztL_qURG^1db+~lD4qe05*~>nw^#k?#7a^bJ94M$@i+;PG*M8qUZ69r?Qx3 zJ{7DdEo)>o^GVHv$?YelpHl{uH8rMtVoO?{3Sv6HX`%8+SFvl4>~jWdjdt2*xqfyS z?ewn{Q&>*dGE8Ar9+fGy%`GuyvkFi`({}TncZ1AWB?VrottGLK#J8A~o$3JzB-`RX z^|xK>T=o>>l<{n7vpR4+fUmQv3m)7_4!=s^;Obf5^wu%IG`nis7U6VNASuxE*_$#~--Ck#F1mJgO?Qorm&Tm_lF@PiSIOHq#=L2x^_fXI6*H*gaO!@H^6V@Wqb z5=gg66(_xd471`!^;Rk^Gh0$1CKyI8&|@LOCdVx7sXLHRz#ls9*m-S9lg=rZcG9fE zmPBLVS>Y3S%hg0REk2%l-Mo814~f|OP>X2cNKckcJ0`kfZsT!y70q-Tj9HrzyHv-H z)RZfE1H4=lMez>&N5-nBEiQPl6@?d*7oPT7H(KCPtZZwdR$*)#uSwd?_ugm36U17O z(;8CO1v)I2ftHIlIN9m$9+hahG}zBTJUie;t_!S9X5q(;F1l^M%SyQ5mzD@b3?&py zu)-WaAV44-|JkVvvce z=C9uXYIXo+n3n|u&vXdU^@6xxb31%d1y*lNFC`~-F|W&Kqn7D-ooF!e6y!eO4<##O z79?Bov^z)h<&wDwE+0?>vosE7-p{0Z&&)4oQ_f3EMQ{V>Tk5krO`REe4w$p3948HPlBsSGY z#fG@u86cnZj17-tu3!0Vn6K;Q{gux%=IbgyL$G`{%-Z#`1 z?uNT9yWvTn98a8l9$!iv@(#;q!;-Rr9K`Z*7njH3F+WCWWVeFH?J%o++>fRc7)&0dY%}dK+l7N_^2YQA4O?63 zVA#ka74nTCp79TgE|&8J#8RYP#wxR(K3SypI1V^VIyL!hSfOktpQL;oNi-%POO8pU zZ1st!LcU4$ahQN?St#Z6lxj=kSt-3`%~z?^E6O&Q&Ri*U#tfn(#%Eyd&;g2!H6i?o!Ib>@1jTr|r zb*6mM#(|A438lEX^j;Kw%6QYmdvbv&ey^eCI&#r74f*m}cLuRqY*OD%OU0uWfm{`TZ0&e|XFr#erV_MAP++aSbko+ufkYs?2q z53ChCnZSXD0U3mw51}N$=?E_-)bc!wu;_g=%(r~ILQqgSihlYhDJdg zqG0xb`0PeY+yyZj-2}61>XX5yfegN-pnL{|yu!1I_f46o@UJfrZ=06me+hBSn9+HC0+asnf(>fi0cYOuwAb4G zc`u%?mZR`bQ0eErX_(y1$Mg^S8#OzFZsW{5{O&K!j_-YHdL92`zdiK&etm!chwo7H z?3{jY_Pxf?^FMX`!SHj(8~Dv$r`Pwpy_WYK`hZQ!cCUN*UF|#6X>?C64!^^1X|~<- zA+AijjamoylRawZ>|&NMgMm&sFtooz-ly~4;G*vlXoDecmHhHr?P0Iq^7{C%HwZ&- z56;`I!|(R-@3UcR`1u@{+b6$UUbBP$CVw6^@rz~yBeBo_8hq};C&CBxGu8okjABE7 zL%bMZyO)$|_xx6`d2!}-hs7LfAN%c3XC0*mZjI7Z)9F+BV6fr5(N{^wf1Wo61M(*Z zg8xf_9FX6hrO~}d;0ea66i2*{=gg4$h8V)z+&(`(u=miS5AU)V<3RmEHR@}e`oXZ@ z?w*i>9~zwt{DzKBGC1kaN8kv1Uo0R^K+B0Suh(SEUnp4via5iMbAoADs&VtYHAHi_ z8pFmr(-wnPP~SU-or>s+Ocngw_tH`j^FJw0rye$EW9DH+*&PnvX@&-Ml&OzW6_Gw> zI+>KDKb00~v%2Mi^d}1-E?EqYFE@(8v696gi4RYEGD*fI=`U@i6pY7Y9zyfk1TToL zP>|qtQxGTkg?bA_6r-3Pylb9%&G*6w#=WJ=MhWWmCB~v0C;mT8lD~&J+{vHF{h3yX zw7Z?)>E2O0H0BM}cYL_5r7e;oCrh5U!3=r?22a}m$4g0HTSn-&oJFp2cJsGIwFy#Symp+r_=e2)T6uZelizusU@4j!M-9c!6pW1ORTCY z>ziT|ZGUYhC1tL)FUun900uzoQy*peOv(@+xp)}q<3PL662%Kv(-E@e6%*NncQ9y- zRTA}q?)mtUOC_iE(c9;;K4O%s_J1xj9E`bj7d;YripfSST9Z!i+=pG2oP~}9rFpBF z1D(=+o7wt_8T3V#Dv>ibh?sq9ZcK=Am}yNxsg!x9x$MFT$!HhfM2l=VeWg?i9NUNK zf_Wy?OPp$sPCu$ynQd35O-dDrG*$9|K&f0X<0xKCf(HgJ3k)mOErPZTuOv>{26%Xt z3niH+!6Yt%LQD1McY~Yx-7L35fH;!R&ffh*K=4$M-`-7u?N# z9%R9PF0c3E1(w?}Nop~j?BN0Vc5fO)`KYOhTQrf3#`jWCGCA2E|3O;1a_X@ndPUuLYptmJZuRQI zg__+iE27sEF52vRyvXvh=-G9%*ytu$ z9_U4NRUwPokfdgnOIal?k5QKK4%?L3d0g~Xv8f4#R@0fTi!_=ck|dmrM}fMuC&hkc z2C66!Oy<-nvhm%An%sSul2|;h01km(_;o1PzT6dG1l{csIMm;v0bZ{QJ)%#7>HxIv zIqA==Bo{B;B;t%5}n8^+)en1xSK*fs)@GtQ2fK_s}^CR>4 zi;WC@qr*g*e|?dzAXXZZER_S<<>Mrnjj^E2a5srP>g{ycfe;#)q^M(wXb#?AnqpsX zPgKCI_!Q;hO6>_|ukzRuW;&V0^rs_QVwGn#90V>zqY}3e`6xE0qp=W^sw>=u8qXAs zr4*H*UN=L_lCCarq3&_J+d_>_2lblGi+o4HAzE zT`ix2<2O!&3(qsrY&2QH{6@MM3&tInYC^W^UUhS=8tZ-+>MSEKTVgAP04aGsz{b~A zO68s;d~H&Y?$oB9oSu9|@Z>8KOJ}lATu<^iIIWymwa8;v?8V1ZukWGp!)$RyIB04! z_28PaMB>auN#QRj61gf>Z}+2SM|+=J>ucE%=7CQb2Z33s9RlZv=W$82TnXhnVolHtWv z_SI^}?k2FGi!6(-Fh`CVV0YZTNhpI5y4@YKr=tIdhNfY2QJZ>?nb#ShOW{DP9c*|3DX0E{)l5_kve$TPFz z75eXoy;cvsqNAMcz}}MR1s>#@xwFL!`TI4OLUory2QGzPyA*okQs}Kqp&wid{peEY zCx=3{eV0Nm9Iv@>yyn93nhVEkE*!79aJ=Ti@tOFBZzAKGwdwihD*rObVyxjwcUN@ zP?a0C1u%_N$A$%6!=#wNE$#jE+`RJ_UPj5mfNvaxf2|3}Lp)u7W? zLT{)z%o0~!G7bJ^zC6Yilz|iAH8z5LRd~6@Yd3@Gi z`6QSn!F4zb69lE^U&7D<;O8jHkfgI{w4BHDs|0;pQQPh600g|}HS0xUlh2N1(>k|7=^!72%+E@%vc>BJ7B6C^h- z%osc@NBP{xE7}b1d)RD;JUEj%^2TssfL@_x^TY+v*<9$>tZt}f4gy>kOKmW79&#U| zFtMXue)77At}|F52Pc$SEe&9MR#Rdc%^aS?c4ah}HB5XRbVu8e%E8}DQNqI#8 z>OPpo4gOn2Gou53)NF}8EBxzaK;EF`Joy+UH-npC!BMZ7SYO8)y4Nwnz**savv2|C zvLH!kAj`b5c!4prAUT_lm0|}O-eS?L^6om$K>FZ~fU!Q}2S4N>p4CTk$+=oTe~#znfkklXvHzHiv%+ZhJ& zO)w7CaZqz&dF`MI%MGl5TuW9=%zrxAHs)D9CD*PS8we@lUON(J88L;#tuqoVjhQ21 zFKgnN%xv$_9jEzC{S9k!6fD@wE4*IjFQ*HRMOIk*|$q07l?*$+7PUMt#U9L3yPu4}LP z2Kk%Us`9bSrD-i|-Kf4A%fJr&NvgRy)u!pqBLfItJWCg;oKW{#)(#Z5FiUcyq< zz!B4nu>RCZMH3O;B={2E>TgsEXuA?9xh$a{U1xTWbO9_QZo?!u%P>6Wnq2nJ22if4 z){&-x8KP=$m`sfq>R*@PZ8#Z<8R;$bDQoYBi*Gi84Aj3) z&%kR-=US||YKu?$1A$K-s8fwRV&RG+J6fU2?7}1y%Y0Rh62`E{w+; zjW$Yb!kD3wH!6%-JypwJ$7GAE%{5^Y*Gj}~Nn8`lyF6LU&=LirxR*6a?I{j$@-CxK z>gL>&5q3;-n6*N3<5R5kLU^AngC-9y#2Bd9C#mLXuy?c9Z8nBp7ymyM`E3Sco8iJ{ zz^WNDX~qYdA$4XHml6SsOf?; z-94sj!CcXrODogDH%&^@lriT`Ls{pNe_)_{K<-$i*$m`sH1N(FeJnaHbo3dKG@H9j ztROYi@kO^eZ1=iMtOw0AxT^q8S^2}B&kkJCZxk8t(|NBCxd1qBaLyi)BYm<_`mKFt z6un$w(-BSy%0q-g$ivx~p5xliQNEA8{`;d|?|u2xe0THZm&^J5OUaXbKR%a}e3J67 z^DrOBA4|%soeezXlx-Bps}TJGueNd1JLo)`F3|J=HObwKukqc7p|d;0Cgcs>hX>gDVEwfau2wzL0(1=Q{?(7`Upi{GIDFYjj2>>7>Cri1aA zzMqoG1toJ7-Y+JQ4DjwINYGt~f@O%3C59&#zR?E-`THeOu`6!qSAcb#xyg5SQ{5J0U z861I1XsSh?F^!%VrH`6hkZT2%8s(UlmIj!YrGF{MywYH?nG~|KTZLeu><3!b0WwEo zp`>0dLil{?02m71M&Vs7KW74lvLB$V16+;-z%GKz%K~f%&@l**if;~RTGkb){y870 z157OJBelcwU_x1^4wI5FPuL(UWbC;p>(IbByozSw7=}<`ns8RO3uViJ7T+B}XFz6) zip;F=TKgocUa(kbZNrn*J}#Tnwh9%_@`d9lQ7<&gf(m6lQq~3V{4O*>X96Z=ok1^G z3%G*TDOWx&djw@2z!LM((11A|4C|{QRB=*-q=kEW&{F%J)x!NpdML9P>O%>r56)02 z(7R}y$n4&kLzR^M2xXli--O^?c7uFM$~u4!u%5ULlR&-jD|3vHvcn+b%CA&DRb)I_ zaA$4V zIV6_8ZxRvhFa4Qe z@+nVdpXAd+Y!VyTOePg(LU6sMB#noS!0LF+N$hWnWn-dM04!xc|igR{Ay=0W8+Zu51?q4%n@G0BBJ-_SLF9!+UG#kHFx3h&BY@L)q?$w6;(mSA5e_gL{rwh^>M4~6!$7o6uj1%jO{Q4E!4%AkI zO1|8J`i=bz$Knnj>x~;5>r~!wF)yu8PWK{o*8AX{p7t+4c$74gP?I+}e=0s1kAayYh=EBZN<9v`BD<$Yx+jJp4 zlkh6UO1J(aQY#vLbaMGl!y^*Qnp}(2wPp<4#a>88j%EtKemUb z3Wn>>KW@HG`sA7K)mmqfIu#J$9mG)pE5MWrxm2QN1D3T#xJ;rj{*476Vdaut=#c0P z7N@k!ajZ@&MB}+qYMN4N0F-nDbOzq`=)Mh?56^;jK;+a)zv2ifftrb&yZkMdc!IrW z^GUeN*u>H;H`|n`&6RRm2FU#XqFEyxBSXVd<0WO>Z0e-UE7YR) z3!(-LX`BS<;R&Tr+WsE(&dlZ2+PvmeW!b)|CS5Bk(3T{|MSIhYn{TeRksgr@(k3yJ5D``cGv4Y_^3&SxU zn3pjgmPv@Pz6`PKi~zsX2|Ef`@D%A2J1ol62p2sR%V-wcvE+?rJ45rq+aJe9HzFr% z3oZSaHNIdhk`FKR0d7N_mCLjW)63hc)0(O+#nexfw7w!#X1NK?d;tHab+j6jwLKb| z+hUuuAotf^&nK74Ot{GgtBTTDfoE$6 z6!|i2Hh=?{tbUBVxt}#xO_i2mL-umlU3peio!e5JiW1zU0?{?r4r(ZI&My$2yXJ~9 zk6v!BX~HQrsyel8Aiw$C7!ln=*Um~2Dz32~P8SK>YmV3j^;eh#MfA#hfT7}sRfsaj zZq$p2?0!VB$B-;SL#{K{iSW&^ACx%tLmSg^wHGL2t_TjB{&*>yH9HK#G>&=~-Igfv zjP)lx1uH32wU}HQ>B0M=(qm{tcydfV9d*+^2~SY~0)bJLl4>ThJ4I}7l^qk~>a{Vs z3m#%by<{7p!UR)vL{2tm?++FA7-=^)QTj+ZJd!^Pbr-FEdtw zHZxh<-J@wTHouoiQ+1S)3-N3^RFod=E=I)|IQ2I_)KgIjmHLSLUN-WG@b@<&{QaJt z5T!@#7^eE6KRU_Y>xV=1V}8mJ5q`SwFa=1h&Pw^L`4{}4s+!MC!W5_ctf=s>FOWD{ zc&K6`^58`C_qpNyh>2dYjml|srl3P zv+}3?^tAcY6lz7WX z!AJA?Bn)P}dmSjQubDlrdD`f|$;cfisM+PZ9~-3+ULxS`u&wg(=)GhFh~&8VD>Ed> zwAC4S*@el{LoF>PxvdPu6L07bF!^4KXKHL?tL;;9FP-4kM|^`Pn=#j1#Qt*`j`jVg z9gdkatAi6)@AxEZKrt_x;bek7IE(AL1N1MHI0eHsMr$!M@Yr>fiEfarKvi{D)5~z_ z#EW%@Zo4~toiTDVC==rtjzObI>{BWBnG_F|Bf!QtHX-)CMhguaM|g3seU4eWR1+cz z;CSzSX5&Pd=vay1Mkeg*MGmf%@HOs4QyKk4;9)3GY`KwZ@XeGkt911bj?g=0*1=kU8v+ivz+9xrp$6xyJ5(QiPyS)U0O7N355@ZRruAG{9vn=*k|++guQ zZxoQ-_l{+W_OVt%XG%7GLPQlg$H-7A{h6#>+Z-j50_9Jy=z8K6q7JjsB#2`aX=TtA z36;8>L?ikgo3gytDh^R{6UB&jJvquo%0mE_0S2oGI7_b7rfuGYlLhWc0y>O;-m{@8 z@h7L$|5S`XFnb`^Ormj!Aunmd7xcm;fcRV@^6`5_@^iwylrcnyje~^VFde@{5Azk- za3r9qWGg@nLV;b&=$0IRCPnF_igAptXP~G;MkJ+0(smZWJ(!NfO`))gzd%yOY?jj# zW zsm93%4Dds{Kg=<>_95GGzuE77tkJQH|7i9)7iV4hH~v^RKC-_74t|HndiO*fUF8|( zVU5}-#Px;_y?aHI7lX4vg)5ZNnOq0;eIw>4upBhQGFh) zft1~YQx6++j#el;Y4VY8Q@HTytyR|Y<%gN!jpnfZ!Se;0&y8#FcQMlhw_@T2bm7^X z>O2$J4H$ZxXPK}f&WcvVlyT=RyV3U>`Hz3x?s$C3sV_5fDiAYXJ9%0LX+YbO9pk5x(I~1uHE*s-cFCYZp~Gz4y)70xRzj-Mi%al z;#)*>CZfA2xj}!Atx9H}vE2_WEnJG2xUh>2Fe5hYueI^kZDGjV>bNW>ft#3PMw*Kl znJ$5+5F`5XE48S(ZK6? z%^`Y4U5w3MAD21rb;;p0f*m#nJb`DkQQJz#ta(ghzw*& zL$l*G`cfCD3>lBfjZxh3N(<}=RYhnYkN1B_7|G-LRGtZYs zR=|=D*1=+Ipm~Oil4z4EX2hNKm-mao$oFJib0mh_S%pVN)cWAU)LI{Q|NKdNL zfx!j?U78Ks!wy$!8;%wvQn$fKK?<>bEcryQP{_!el*NOL07By^FP8CBulYU)ijD=V zrfjSlsM38DjH`(!N)W_>z)XG@nf#nCQ!BUqp{Fd%D%YG(Y?eV`eo8%r4|D;nhdT)G(A{I8w-iUVo^= zJ^D<6E_0HpkOK7l9wCicB%I^S?%;nit$!;w-!#1^CrF%jX_yNbHJnkk!@>vA@Vzm-0p?h|C&<6l#=YryhUb(mKY z2Z?4zr;Bljxi^hwArZ|TDVoX<;bybcRgN|S#b5{9X2)m4VhcelE*jIOaaM$pW}C#d z9rP>wsSA{`YQyix4u#~D-AgWa}x(JpAxGRs_{lQR4 z?jUnJfO$7;pLv3h*51k^0J(@3wW$|g^9Gro(1TQ}=EYM2Q=&V$qYh{|m@*X`H;;ofw87V&Wub@a2HKf;M zT2WWN{A;1!)r&iD(|zXU?uf>CjL4xda;lp)%d9DCv_h)|b_p)FD^9wq6SDN1jV3-Z zuppAaUnS8b68TtW;T>$0iz~Q=6gMLhS0=2le_~#S3-B3Mb6-@<29b22cLHa7f1c3Wqwv9h0>yZH&+PIbHnB-YJTzupMBb6urcU&d(79Z z6~@)6U|6I$F{OC8wiLr|)>=|bw3=)dlDV)wvWo%uT3}-noizsU8Opx@j{GkVa|U5o zV*%|}dj$ui1xGQ1*&>r^r^3X0YP=o9Xo`l({<~I2DarM!GAm@yle5uePGSWeity<| z3Z8m`R=&-l%b}GNodPyvTY*_DCreYEWma^WDotovrgX{KSQ0L%b|`C|xwVCa9SzZj z9e|=i_%4MwS*$xXX(8(0k>>$fUE7Q?Xr2xDF$X+huvh_gzDUgzL#)h^d=4ePVtPNr zMmpKlDTWO4k=sp7bSZ6Q7(Xj6hQ6&R|2 zcYA>_18>L!{>sNBf)OB{_LmRz#1y&=vB5^|IS85|0bwK#ESk?Uj~N)Ti!SjpwXMX< zWN}2ErLsgwI4j+d9%`I4N~NXDsVyT*`RDO6tohlk*49HSjB8r zoJt%60&(($t!O<3lqFKHpIoFAIxC12IRSMQg_AJ~Z5(()3DZtbWs8}hpGcF#THw*- zuhlz-K#}53pz=q~Qgy%+SV{ulJOc?7lva>HmGI`H3SOi8S(UoN6KHud$T(0SgTzZ* zR{Gq}d4K8*&Kwv{4|;>EfF5?GSbp~mk9+H*+JY_mjQb%iw%DhnTC~%ZP2+I2^@er%ASQ z^zJ6aIwF{jikVhCVm0mwHZk4043z=7;kNKJ!upe)EK@sd@9`1fN05mA8$3NaSje$< zCn|Yx+CG0C7%>OaGr$B^$49;1dmA!vf>VqUN0ZUW+mkxJsm;OrVyNgg(7vPfx9?#6 zWgcb(zi{vBD#F7bkQVA1wy?1h56~#M1hpH(71Vf&yq``;nV4D`c!?3t$bGfD_mlYE zIE3|Uv_RSe_$$Y-NcaOTlzZr^@Yt1J+w{?ut8E+`OJVGKaBN1dYgfQkgp&l9>hY&6 zUXWsX&G9n0Q;&OP)MUl1bz`@>@vheGw|uKWuYGSlLPmYZdP&IErWd6oM%@Wo%+=P!Xiswz?M2&_Y<(>C1&fKL4#iKhCeCLKFIF|+@97u0Ps zN4QZyMj2a&dKLoyp2P>mN`g~dlXr@G#TKuu*OTJM9@(1G^j31b9#HzpAlus|L(Pe9 zT#_zqZlXmQy0v;wNcU?>_jo?S>w-nR7c3U;osMh4&2X`gYn7l~t@ebZzcEN3&6i;X z+M!w%;-TIXQva4xkJp4$=J{1Jz=0C-kLRbVL%^*1yI@9g6Hd#B1F!Og#Qz|OSIKs! zm{%%CG_Uo9bpM!7_p2hp*^^flyDPsHutk2a_Gz5zLf?Rk3HbFE$>xnV39uQC6FeBD^hbh#xIK5QCE9Gh*J*2lt;7MOZbFBweWK*J? z@kHtx^-#f(lc%mu&7s31gdi8f2T$JC!@>=9))`7fscYeN zj^Z$wN>|+$&XNzZ6N;pP6yJzQkS9tH@YI-pxgN_YW!@*%Emn= z1Ogn3V8=6?5D%(2^kXSjQ8*Ok>{6X60`So|*+kZ8+#y&rVZ)Touo87Lq=$bu=N=XiXMQY`wSfX zA-MX2R!>oun$e`B{)+paiX?cs0Eo|^{3Zcz$#GH_`&=}C-Yl4Kl9e3A3iWYt8%im3 z2x6=n4`Ig0Jg?{o9lKrV7}T84;v~R*3>QBV34!`--&?s7lK3{8DGiIwwausFcqf@tp z6ETBpRz7MZ3D%16)rdXeH(q9z7e(w9ecGTAaFbn6z34QfL12}&5`SZ>#ER(kxt`Ev+MC9yGGy=J;9!O=&*PoU-b|jUEvrNvV(+P)L*K_Y5CDMrvC#m`@_UF4whqX zrwmzcLgfbAL&$W^ZkEjsE7>@X*g~0N@ws|HpUyf68($!7V64cg0ZcU+5K4P36`7+d z0Afyx9z8Ta6B6+x7KidqU*jrY0zgqmf3^deidVa=hNe%nN_-h02HJ1*p6_Lx@N1QM z%WN{19N74^)y!Cs;#uO^^u5)B%wlZB3db@Pu7QCvkgMY`N~7=`uFpQu#ur}R&93!aAcN;F35&mJCBVtS_lUP~?L8KWuv48pCC&4vaby5p~gJW5bI!8hHr@PU#n0=s2k5AG(QV1~v#QV4juG&5NwS*6syADQ2pgsrqi~l?oYCGg zoX&5CmS^TgFcD-j?CeU=BJ?sBXnnO*?t)K+m%ZRq;jQH; zh{i~HvYKm;a~I;ed7TBMa6O*{%WLZy0v!w~l}mIq&fsk{zLykdHLz@t|Bwq_SHeaE z#Ce!3a$C4blEu5dy?AsJPJ?)N8o>$4`BkzznosxW!hH`9r?-2WaP66E`7HDZg9;E# zAFI$Xv>k)o{pL8xaU6VGy5}$5^+A|uB->Wv#e>#ZxktZhOMJC_WE3syMR*Qg0aX={ zNjujqV1|xAwr4=<4}tja-YLM52SLoa=Lo*1{0QoNzIj)IDLbW~9Df1?KD_4fJeV}m zhYw2Jo%m28!lz_(k6n2j+Ux*Qx@^3O3E38KQfY;!8ZB9mlKVA<$QsTSw^gNWMX4A( z>$GoJER`_0ey+ZqZ_C%OdiiQ**?cz3R)ScG1&1hZ~7yg8am+_%e;B6WzvTq3d=d8M5cgXSfBoUianq96Y@D zBJ)Iw>^*vR%GQ1Oh1l9ENB6fKtgm(nu=NFi%suw})&Ly0-EYf)Z_5DrIFkBp8SwjB z2I!eaHjd&qV_gdYoUCc&*=_Z|HbbwnnGQh8(Y#?JosYJ^YCFA3_kAt6r!|&A5 zj0@r(07eW?ac8`F^BuX66z;W{F8-d3eez4B@85%F+4L)VhTG;`6cCmJue_r2)ybX z%qYA|7d`D`Br}39mr5diyn^WVhN#_b58I6nmCjzDmyNMr#H$2<8AN!p)5~JeuXZ-@ z5L>)`g`13H$TD*m#Ng&wOd>p?hxc&AIZ7rEa=OLeC-d2L0>cOYz6&Rl&7lJHFT)tl z>x*R$tVa@cJwmf1ZmP*wXpX1)YW>~zSs2HA4;^%x=wix`8%!&}>=E~q9ajWSvw>8VVy5-%0<=txqK1oN!I`;Rb zE1M83eC7>Ld#!A}Nt>n2uxKwK@+ylesU(Lx3j5f$)H3*FEP?vL>>6un>9Kr{7ZXxW zd~=d~bCRs*BrykvSRdz)7Td;u{^B^tC2$}v;_di!mkh6vJ01LA-0(W<N-XlO(Y4d4UYtux6qEgt$0mKZ;mdMs zHsLS`$hZs_(?aHsB~jvJN+OB!qJ>Xhxx3*@i3!;oDdt!k26ixse#QEzyoA&@C?Q5H z4WMuGZ8QmkGW!qIpXzJ#Ng}e#PrK>c`;>pX8#$Db zV%mvz1|x%6Ct(tEP2|EY*9+ubxK&Q?5OP$#)9$vsPgxXhPsIr5Y+ERmbqMi#+fktA z@K>oj$i8j7qyjzhXeyL&&J^aK4^^cQS@OezrB5`hdZWM=WZ#Dn#fFo{=!e)SBe!59 zzL)MY7F@5g-^y4}$Wvvhh-e4N$r~3gl4G;WBwm?vB#Ll>5+NaOGL;Gs*|bcx2fhc~ zE0(9`O*r}zqr00B*4v0j#GqhF(^Cb}EF8N?*xM(QFiEUbxz6;TgtHJX);*pC*V`01 zp^9O@CquG0)j3$sv zfL?Y^??L~rk_)q>*Al$xKK=|lH-q7TlqmLOYCFy;>dAo=%01$^b7Pc{IBc{__ zN?WG|K5|FgT3w2}rh13gvpTd^%j?nFYqLx1sV=P@yw2~^`EsldHyz+=c!>-OY{8oeh$xfB^Tj|W~0f9rLfZ& zgaX+1!9ScT(2!zMg~vlfCBoTvI{#J9=kD3$?!G9IJ8-S2xkpj752NgcXqyZGDb4`8EX!ZJ0@=GbJNuV!QV=imMf-DH}K?tT2pC!Y-T$h^pA*Abl0Tdp94 zdzZ3VImaWvy&#*GBySP>u~>$;(R{@sDCkcfL$7U`A0qN!V=_jThf<)ls^Dqa%Vdp- zeamvqST{#;MZ&(EdOBm0&-3YiPEk z#W&buYEWrn2ME%dT^G?)1`3NggOdPck%i0AtC;-}Ea^$tv7J!XFzaHnS4gFaP(_au z2w{Vsj*%fZ@L;i@FG+i;%Bo7C50h(JW==C4kIY1-qCO!7xsmRI52)h1;h`AkYeUfyyl3O$M48lR7w;2L*oMV zqxg&832(y*It`XnY|M*jv6OI6`~XPwfwpC`tAc5*=#WH%8!Vr6sxpS0BKhxl6Z2J~ z30pP~zUQscwGrku{!A$1u;?{TR%qhfsZ8BsZ&iHPrCi_}hskOoph4?CTQ4j8)xXo* z!+myM$gP+^jp8`Bcr=5+zCx(PBSmb4IJ?m0d_D<-Sq^T*AkY6?j51#WWEOxf*ZGix zbo?b+_{khIBD{}cVk_Cof=;5Mq^Qn_r1n#FCzb^8=)*6va(My!6QtTpO;WJ7i|H9? z_$FGR1A;Dk{P15_!6eq311p@si4eb_ss`_|ZEbx|7gh>_W>bur8)=MpOipvOi#O32 zl_m1!FLX&j)?0(&=ZX;@#`iuu;jLShQFBlvlOov7hkjcV_Ww>v)*T%C=`HrT>;4N zemay$>_%PEX<&jpxcxddDk4$ zFR7C%+&U!;V*f{H!2^aCFTh@fMF)>|XUmguc)7a14%ylc_b+9hF4Gn{)oj0tYHCdp zp(qTJr7kK_%zq{DqX8~MA})y#99iVaH4Q<}LDL9gOKTjhr>s*Bv%R0D7cVOfbolS% zbyCftgDy*V3}d^sOPD$QG+kmCXjfzy)n7I0q%*Fbu3Pj42aF!T%As@08)~d6Yv(8n z+Fk0y8{ULVtWsk<3s6rW?wL55FR8vK!5dJVD_!EKkyKLu+G-g-t7*P?isvPt#v0hS zDhWi+KWD+MSDHeKW{>pip>LGd|_>mS7WO)?b zPrzi0k$qKGRiK?_cPQ}8w7}a&rgRPazfMgQ8^>JTf3&%7Wc*ZnR?cQ+Hk}_qapHxU7 z@4PD5NpNYF2=5n0303-mjzb&vhtLgro;F^AZ^YkXwebSZy)&OKv9uwD02wxMEN1;U z5+=c(7#8xS@)>^E7M+=ekCwshJhSi~L*f^eC(0xJ(U+^MD>}SnM=4Z`(T6z|v(&BN zW1{ahUReOJX^5*iY8}$9;l0Jzvgr?mLgj<(J=*(+y6Vuy_Jx9cO5<}~PoYq7Rz`sc z9dcQ6H5yXeJI`|nIZh%BfxL<2+faIhp=6&lnXnPFm#3{I$vZIv@oeXT1Y#&Goc@=L z`7}Lk4lvvW5jbVmgui(@&gm*n5Y4mkm{TU3G1W;@G>AymXqGic=8arw0_lVG*1uX! zwEb3d5N&8Mvt}X81xvsTY@PE!a3Mj2M4`Z5AS#d|Q~**kf<0?3z{fIKW?6 z4^RrVvAOxd%vxD%1cmF3AQ$UMN`WpNmW8I!eJ|hU~A}5_i z{VT{NxD!82FXs~s1NvwZ%eZBri2`DQt;)CWt^6bq*m76aHncWSiLgb4Ens0iGd~O% z-!g_1@;CtgHoSQAcTsY~fPD$6&x)0pTR+Sd1!(wTXOWnb_3CVhX za>Cc@ASf@S$P}1%+0r9CwHEe^KI7pf6?#qY6RSE={SMzc&85@W!qvii(Pea1Z!^^` zJz%)}zjZ=EC%}*F>tID6aJE(%H%6BzeMSNpxtX+7y`R`VvA!prWBnp}gcBlc7D*X4 ztZ7{4p#sQ-5`t*C;4Ew8Iz&wHSYBwG98GD@lB*WBG@TBpz_E{$e(&O(q#7K2I_vn| zUduQyH$1HaX9hmo?boOia^n42S*p(Zw+He4bZ$Fb2{Nq!S5~ONexm zi0#+x`Q4$~Y+=&j6bSf1PUL;Jh3rbzS?N*f@SB}pcCPATcAD9!UD#r??}(KIEkbg2KEAEMN7m%;gpVf! z|LEfQ7=I;Or`1{c+F<2=HjC85oAunooAuP;%{M6?)M`J-cgo?->)5BB60vto%@&$w zh?rgx^Em9(#86Jlbp;6GWM!EwKLCXFbEw6Mp~WP;-PG^Ei= zi{*TQEqO@DLC#*mN`mYJ3*WIA(6P(tE0Np}_~w1Yw2}-9Yv$;v#4DNhrNQmQdo1Yq8JIlwuLk<|O#~G$>Io{Uei#NzUEAK#b#cXe4@?wYeIk9s4VDrRwnxF6- ziR}}(do7FP?7p?9V99KlEw=A&;M}Fy=pjA_ayKYZ{WCmDeXQmE`4u=p!(hr5$VP?m zUbz!a`un4+e8{58u3TA1e09!!s_=Uh#3>}P(1~hyH{lFIwZsctow_4-gnQx806=Cu z1467qNMSF$@^ElpdghUMc$?I%L_=lB?-y1`>PDJMEyreQqlac#ps<-A2fxT~0GtZ} z^Kawdq|ZtJO9w@@985Xpl;@IQM5wj@+=R)1kP^Xm7Ml&i`^7Sh;Z{rZViJ7`nJ46k z#aO=l&ki%f<0a;F=Y~}LAMzRGpy4X2b)n(d)mrPS^Gp&!hp$QEW|TNXBRkKcEX0(f zjJh1nr_=e2?itdZOXfda&hP3xaSZrYSxj7LdI%#~p1WL0DjD)^Y7`E+a~8pND2#k4 zyhC5gLL%jjT4)J3N5H$6k1)bD`?qkAe+Om@9oYKeCE}}gvF=KweS9SA&cX$CaJTbP z@k+-0C0x#TF0qOpBXZcwX;iE`@EhIF8yWRkAz-B#6l%cF8DR$Hn; zGIfh66FgobzH(Q#_3;;brWH|zXdb%m|0AlAZ_3V-k&=K!e1v>2n%3fwNL6(=9@}$# zH(rfOp%*-Ovt;?eeoGA4-y#bV1mg^-UKmilFa)%CH5Pv&Qw1RwQKW?Q0Nq;PkWiNC z9UGqFNQ24Euq~_2JP(sqUDB|8S2bB8q3L6)NlNu!oq9CL#%htg@=q?>#fI^B1Jdd3mfGgRU(avrMDW! z6|(3Me%{FjeD@J7Y{lbNs4Li=^T7a8N73Z5Gm-1SZ zjg<$5*HlX$c)W3%lnc&L*FSXzpDIpC5*>455~;cFwdsU?p&mZ4{(L-AeI}74bbkR- z%i@$vhdE==oAeCO?I_U$)?G2d@qN3Z(b>80u4oEXi{2j=*#dYWY zLVj#@8#RY&VdNOwsQTcyqEDu`5hNFe%W25gmu>%z4NN>y^HMwvzo;BrQ>AzFMgblh z3^jE;(|GKVry>V%VamhFyuJK=*^E}QN!+VA-f4Tp}xQ16gZN3+ud%wupQNdHYb`T}aGF&FIkzAX>|HWCthstC>d@)(f`gy~|M@mq~y zqga5X#sSUwy}0HDE`4CWI_5?Y(*?iV8WgFM1}br()FXLVtgNb{kA#W!wJW7OW^B#m ztY~~WnVeN!E&1Hoiih9Qq`pw3Mhjw@vy?k)ULnX(z|Ze$r`&m%DS#2_5p4MpM6F*G zU8n|?vE|+?bcXE^ymFi`-XRavAGl;eGo(UW>76kV{_hCuz40=fZBzBzV(2(np~Few znVbgZSfh(?w%LPE10yw54T-Ke1mld~e+8~A8O-~_;2f`N34|LFN_;(FuQ(`B)c@s5 z$4=lU)(ZKtffCTI2?%p!Vwlu~AF)|bw#hTgU7IsvagZQ9+SW)G>>_GRHp9bXC}EBC zOOzs@ToY=}arnW_8RJw{yNdke;p!&4HYi;9-V|VT&mMaU#rkhg#8iMqko@6Fm9P z#GSgt{E@K-8lkM#wJh+s(FXP|_E5A#&m!2^8Dc~* z3eN(UbFV*an@8uW;*xtUCcRUQUgcxl83$Y4>;gaYqQczEH0@W<6{2 z8S_n&EZ*(y-QC^o#=&BDG@tH4Ib4jTOS}!2aN>#;uk9+?n*lxtPL_PJ`W6r-Wcj^w zz;1F`i8W#FSw$fCBj zm;s|b@QFn4soze#u7`UBjM7g-tfk@GCjr*>HC2-`D!+cJObSZ7`vD^d%+3Iz7f98| z@bT>9d;fUR=wv`Ji)g&h?Cw3gi0pB(q%RRV@3%kTR?vV>$RNS!(0Hho2L8Tx+?u=c zN2`P^EMRg)!=BVdB2zY<=T^%7nY1>+dFRXbY(+}4uybl*$lw@_WS}mF0bX3=fk)LG9Z6 zatSCvJyDQ;wYLX0ZhuHd0v|3q$5JDwRG%{S0V}@|UMMov5wY%0*3yz6kL9!_O>hNP{NNQVf|@n=D%1EHK^1C?4(S!Kh+W)^Z9!#U z(jDl8+?jj`5qI=fWRb&`(3{LB;gW2xzqE^w_As$cbtabrTstKLE;=zQ30__{AjO%~ zxES`1+npg^fE6#-8>?iFt#rJMfSb!F6ME~ji@VfJP`96*8pyJFry=>ciIWsoHL2qCA$Rg28Mcfg)lutN6An^F^jp1d=QHsH zmSBsC(~~i$j~U>SX{sO0uEVmT^V3?Q!%=%O-r!}_MZZ1#T+E$8I9e^Ea1~oj@4exkxSEnT>0@1p$}x0kBHHX z=%Ho@rkR;LbC_mMV=0863G3>mSqI!=jH6t1Vx3*9S72TJ30ZeB@cf~NSLu!H2~M>p z!_k+^`Mry_Dv^Lwu;)?zeE_IgHo?-M%LDw_f#A=&nU5vb(R$~gxPi8D%f=VjchnHI_~PmIXZ4*&7jfc z)+F_DjD_dpuqurCQh^aa?5sp&Tw(oj7>}0GLgA$Fk`vzz3j@pR6$V{f+j(n za5$F_20_wuWJFsSqP`LNX8{1&^3URbTx#aio=}DJ8~e!_cxV|~tSIT5k-wUWDsC-I z=A$pm@HS#{?$QEODFZ&{*NATi{9QB~&+lSa{wUy^9k0J%50gw+@p!_zPk3$v-PmVa!zn%#L@XNJ$ zfM1qm1Ad`%0>5}-X5hbhfK?S<$m)))z`xl~$_e>*1x94XJ*z(YR?F{t9~C!vvFXPX z;-Fc0hXUcZcUeW02yI>~n7M#LHOANRaM6H-w3DSJkJ9ROhUaMT5GUajz34YS*51B! ziutV=@$7W+XcJ87_ezPw=8j$Eoc_$+xygt!P7}EcyPIUyOM}6L>_P$zdPn&?BGvfg z9NTes%P0x|9?fTy2mDWnAli=KS+$(|O8r9xSWHHFFsAvVm7@{tSOm%+%T7lZEPcs5 z?8P0Xjo3&5raub@qi+;eu>NfEU)=AuQ(BvFY@a$0eanyw*+IKvg! zV*Y{D#t1RLpp@S}Yn*sh2eh40?V-!Q*)U2bZp^88YQbawgK|J zp8LRP@v-2*0yDEgbv?$>%U5Eo6j2?*D?oGc0YGxIj9+_8H5?t_M(xt^lQ2CLovx8J)}(b*dTpi9T(&a5f<`Gmn`xsb+`3~WXUnuL6aqt zG{Hrd9_#vsY`WC>sZ7pZHLPPzF)J}sHI*2TjZ9P~7x0L3?C=5YV+YzdXKD|$ti|>r zHehLjU!g(5PDzZzNl4tJe?UHi_zCTx78clL2v_ftGapwpnFrYH3ChAs?(tMSQVOwJbL-`$e=%F4@u~An)qb zAQ1N=$I9*~Re|%x1016yvrhCLYw zYz*+8C@oDnrCly9jU(w#lJYl&(5_T@S*xIm>mcJ+a+`XlM`#)i$DDPzx~I5`CtD1fBcXC@<0Fkzx}`e)4%_3|M6e{kN@X? zr7!>MfBWA-YusSd6V2wM8#InWq=Z2PmtQ83t!+8`9^HkL(M^b0Gs0-Syr;T{9pF(+rgu6|u* zGLfc~A~6g*gU@G2z0TkrO@amBY9#Wk(|+&af4W$?9Gg~QuX978G~KBQ55fY?s`E~N!> ziZCnA+D6^h1|{`ldw9yKzV|*OX8r1j>+Dmn`CeYnaftTC;Y2jJnXe{e+{Jgn zLyQFrB}+WK;|Oj_PHtelkefj8U|kZS#-jmpX@z4r*$sj*;U|$OXAe0wm<2wz;<)*1 z!A?2FWWC{T38BF;=ykf?5Bwx2&0fe^21PzQu%6}s2DQMenowOmRD5_V_eHJTS7@er zisuQS1%*Byh}U?W^0kCuk=Jd3L~eHa!Y0aK*uQAvIi+~w(h3*PPnmZ=)z_V$6hu_3 zMzs+##{Z! zL#_Ts1xFykNAV-oAEcZQpIFEe$%eQHFwd7WpTXSS@ai9K9ceU&?GGMXW47HcSv$ew zmzwiP8PE~EZ>?DGl*nFNsCOI}zFCyY@Bsd~#2UCkSx{~%TycxQ^a-S}wJ$R5bd%As z^erngCiMkNx6Mv*3XUb1Z<9e6;VW@D)fR;Bu^lfJrOnClk|}BC zl(fL7SdV<#hP0JD{S8v4ZNWH+*b@XMT4Ll8_5?w486id6Yl>Ka4Tqw>cOZ1# zy%~%+%YWAFbvpFKi^MBu2$_`a=7(50t%~6Z6_=hIjA|Gb$119NP%&CTKG92^-j-P@`s+*{D9C2}cTN3|%8o zFK0Pp;R(XLU(8ti3a20KPPo~S2|*p8)$ zZ*mf_5^+SE6tE0>Rg1JqKQw!gQqm<^1xttmtZ0fDFZ2Sd0(pG)W>HtWZq%CmH+iHYy#e*P~*3wo=vBI*2v*;lL zT0DV03V#c8DlUMWmmnq6p2Hhs(*h*c4W_frj0u{Pd}YR=q~+^uD{U1F(2DCx0j(RTm8@Qq}{c z#9yiP?NOODl98YIX%A4hH&o&(3%o{DZ8&<2RG$#f)AdO^J1g8Ok|zp17C({h2_n|O zu^z_*C4e;AsCu4>m?I0H_Qj#rBt&JkhwKk-Dx{o1xG7OT9gNy&4?GfnOpbrhp7?ci zPrE=ileUo9Rc4eibZE}z3B9^e;g)h;=-}dL*l#q4n0Ig&tH4Ueq_$^>9vPTKF<2Gg z_ohKmv;eyah7rlg-NI}&>^Z7sVf?%h3&fXXWJ32jO;aVpmbN`j39A44rl&ONd|R1i zDs^JPf}8J7?evzw9@%IS!7#i+s#>Mr-Ko{}JRUFYLp>TZ#^L^HnGan)uo3DYEKd|xXrWPEN6}Aiv_EMshze_{Jkqy$4x!=-s^U3> z6qRhGh~x^?#bSMipJkdE^WcH%6Qd(E;~_vqgcKjlxz_}?db}WHlpnB#fxz_;7CEX% z$^B4;fT4J_LTe}!2(xf&k#D}p-3(9P8(#Fg>`%>$)#@=aXo74N{HC=Oq#&+xXl=0G zp|$!Ggf?c8Dz#OGgHsznwN^rVIi6ax(@kW}@q`eT;MC~deFQOdpEa%GNXKcJDf9_~ z?TRQ@q*E$lH>Pab%r7CDZf1Ty?bp;f!a6(H~KbPoe5Y&_=aX$)je2Do4%gC1Ntqwz4^5p;R;K9f^Nl zyCaTU19`MR$<{y$A$9K7&c!iXlkFdGQu39p7QgiwzvRiXiW$+I&u+tIVnp(hBw#GT z(&Qn;BC^!3#N5vs8&42Fl}CNmVX@7zU|Hx@+9!0Po2R9%I}!ezwhE0=mPzbxR`e{- za9X!*O(|p1jC9!5E7RiobC?U<01%{-Z=sYGAWQR|EWJ5JZ$Q?c@q9)%<`Oi5L|DP) ze1%PHeo0_VVr{<{X|tjjje{gW)8GNJ=a5v{ulR@$CX)x}nfT{DxN)BRf*%$EEp_uq zL%DkfYXa}2*Z)k_LB=%P_wbr~KqV2kecbLgNN!O0quFeCoAj^a_9p<3e_eFjaGwz` zbJP?Hr*+Y9kR28#+E{@5?ZJD$<9+ZtFbkT}SgB3hya^|8nF#?M#y{`b(3JQO z@z9R{RE$6{dmzV#u~md2FKJF;^uiu8}UlWlUaRd7?c<{@Qi6q}LHD$6Ja(s*YK@E|N>RoLH5J0p6}ynU@ziGXPG@ zB695bF{O?8w#fWmEN1*#Be7rWV}s5oA?E&w`Kx0*pUG)&>ShTVTY(nz;-4X?2=(>ghV_9sQ4n znaXk!k-QYwWj%%#TQBioNp1F6j>$4)s~XKaE@s2=3hOh;0K66r`0aC#r{0Lla@KE3 z>cMY1?wgKtXhY~Y*(=KJDd_+nZjSkQU}Rwt#-m_C^7i8%CCzidyb0c+s#2vOsownW z{!Y`Mx^9)!StUG}ZZknY&iWhviK%B#ZVy&y`pd1If=o&ZZ;?J4&ld_`ryLd~0S^d$!KK19#KSj)xGQM*IC!#Od;AH83BsxmUAA!It)Scgo$2ZSML~&0#z%5>e4hKB*$d>%yb5%%i)*1%Iev= zOuUJ%Z^Af%?=Q54Yi?$8*?dwP=jXiBlM)-yTBF?oDR_S!tne;n!KODPHYe59rZtBV(xmL*FEv!y1gE*w09N0S;_DN>1&9l~J-JwZX%OS^FV+?u6XUL-?5!?kZ{+i0f zSj^PN%A}D;=oW(C_BXK}b_#x5n`rGSykg3=!2M#m&UuJwm%y6v6xTd*FqIsW6jRc^sf`jBn}LXt>P?yQ4_Ry6p4P5Or}%33 z_dx{>_Ky5bZRO6uV-<~ComDWL6J9z!948tXk&`I9VO&&$ZZDrjwd$r!F*42H@+*S! zs*t35C>|DVadUHAK?`njlgo&P1@w2Ry@!p(zBf4C_@$2-oI7z*q$h9+p3NXGoO*%{ zn-opTh6O!#?v|5OTn7X4(d!J)(cmFY!YO*uZ+xu1eVk3e3qW;^xkG1w)7;@e)g#Ul zC*s0hmw7^roQ>%B$XAw3+tBhPElpbgYPU9QW2mwCGnbZf%rmQ`}F2uF}gBUW-s3Uwy5oQvo^L9}w3Tt%ln)3lN-k0fG! zaO7F0XSg$KfRz^Hn{(Ap%9cT^ch*4oAI3NqJw+4l^?DslSBtQsapF;Fz#>kOZl1!D zfjME|!Q}KVz;lS-$yb;W?XyN_z}{f`KQubtr#A8UpEU;WMQLbj=zYRH{pqZO2BVvB z8lcPhd?J0;-yz(gr-1x`$^&hXBuXGJD5>M|{tvggRAC&jjFNV1X&QTH#Np+4NFQ;m zhIl66zNS(w)N@-<=spf6F>B)IJ?NS2F2b^l#TCo7-y`YJpQfW&b`?DKdJ8)3tkFMd zlJa|r;Xqp^DcxB#Hny#DyD7J!{LcE6YPY$8HV<;!+)1?=EEba}9GmnO$qWdlXXE5! zh{|@xv><6a1KI|DE29~L?#}zYA4Wr?#K!pL%Aew6MuF#mgvWas9YkFYKGW9Q6B* zkC0)g(QTf>iFkK0J4lP!K{YX>8&u*XOZE@o}&5g=IJI2WuG+-5>iHV-lRq6 zjZJhqy^mhMNuozSxeHQ@3DU+Sh?3_lKX`P)0Y#2foBZk2g{g+}WoC2}EECyKllSz}nH%U-9u>~*!#e$0X&ra`h+?{FHN`-NsZ)Mcf$&rfEgxc4a{3Mnlh$>0$F9rhuk#>|F{)#96T~-#J;tV* zq1QqEUZ<05@%pFjmUr5+F|WWz?luC8jq{6h#E&4W(OAt@y3h zQ#gIWA_OEZ7nN36oGtX-G8ablRcq7CtvaGtX7PSVuf%nDQM9iyC#rG1{-%)YZzQfa z-lSX~EpL)A!Hc7nIi9VlaGPf;ye_VxusY5a`(D_be|@5ezn!abeHCWb-V`yjE-^Fz zmWAL}K1<>j%~W_*T)wNzwB-=(cUM^xn>ln`kuA>1h0O!ZmlD$ngy*!jzFt)(O-Zlf z*3p1jgfc^vWSJR|@i@NkqblJC^pK*~DauI?oqA^? z{pqPhdQ0gCH~Yk+8yhL{!*O^Xc=2(`}pB zWNDO1Y&r)Y$07<78i)e#AOQj4`CP%QOc{ky15I+Tq)Jzlw>E>G+2%SY@dFj-lzKy+ zQxsdPA@Qi*ka-k=&x1V)Be6wJmUu!lGW^h$?PfF9<;1g0F6Tq1`JtHlHg@jnlZr4r z(Rt*1UnKJ9a%2vuDZP@?T}_@X8(zf3UgeUTlnHXG%!f=;ub^l*lWxlk+Q*a^nw{D_ zFNmn&Zju#v(J{DemQN1He|C=O_Mwd&sjQGF6Y%6b%8|c(gPWy&bbDOkr9R_SW;Y`OH(>o~%UVgFMx z*DS0jh!jh8)H{hs>5pUjL*dade9W?hBuTtbe)n{Rx^ki|*>}WTVs8Q#k)9mg*tnY` z|GH?pxs=P2SV1%Ap~8>i8eLtcEq^khA!N73#Gd2E1~~GO-f&sO5qQ3%AS&Y}RdUC)80Q1ovG_`_)Cbx1qbSS=hLo0)_~r0)b;-l4A3?<_ofp&0P@!L{;bksZfsb{wk}b1bts(q~JY$}N$~ zYiRgXZMpP3JSsYApK&XQa^=e-WphQIq7+l2E{`kC$@`Q?noNm9I9pBYl~?KNvuzpF z&fhtZ;ZH-moUO*65xExXMIy7?emsc+cIAx36e(5V22RgRNxGulOu8-kcfp$IG~btd zL@lBj*EpTf4!paJGxQ>u&CocjvoxtaZE9CZwPnGJ1TMDwt&!8Z9(Kkhv5QyNy_Sja z>x_VKGV&+OC`jb!MI}`p0VF*$1axJ)nRHwFLoZ*_*J--gBs*zjikAlHZ@s-#G!0bFQ3%qNh^+xwPWZu%$ss!OIx^{FDDiGlCisTIxDBHa+<32@)3K6 zoZ2wtG&^5xh&>Lu5*^PVCBp{#+W;-KrYT&)kVP0Js2xQ9BvB)=^H~yWa3*RaKD+_X`~Ncy88|2U>UI7==<<*Xt7DbM6#=7gb|(B%nh z654(@N6L7LMD<)+Pm|V_(rk&n1HK4)3-ai?*K3v?>az%m zZoDldzj8`kx<;hGOlH9x9`t^A@S-PltS(tq)GS znEWdToT>+(N)G_?Yk<{&Q=Td-GM=ugGF|CzCVgF2JhyM@>biIC42|ZMRhZTqOXMrM zA&|4IGU*aeE;32I!ouBLjxAGOBt8qz=#EPslvtJSHJR=;neOS2WBQ|n0>j;)05d87 zngqao9b?nF(<@~`zn#_HXyVQMRunGe z`65k|7@$e*X;ZsOsx1#*dJ#um_@)!@7EGwG&V);H9v$w1S@@AMb?0&us31zi?vc|-HD z%nDF7F*c?AAF>*arOM1uQ+fp@yP5QLIq@t88m?FRl8c2|w#KeVXFgRQap4IPwX;dR zd{Q?}vL*5h+F|3)xa?Fr^yt_`>owN#;~-Jaue0A0r86nLTuN7@*pfLb%f~ia1qyA> zZAFRxd%xc!E|gLcZ($PetlyjiIG6%-@{)3OQH!~}#r4-ke>}Jw; zo6a4L4q9{GE?H$LiiZA_2&*RavI$+DU`xr1?s!lhLJ=32X3}lx{xa+5ln0P*m{7NIG@sCFu12s)X%Yi+ zp=+9AT_x3)^qEQ1{t*6#NIz<6753Jhbc9s#1oUl|`aD&l|0t8xD=6B{q_4?^=ke0X zT&TK>x;6)bKl1b^X)^Vdgr2roS4p*{`%5dHYiuzN!C~=217L~my9m4qSsq9k5+knj zslDO~-F%iUUtV-P=%3zH^)zW+Db1GHI}n&TZk~6Yg3EHt18E9%P?~eh z`p>8hW(^8&QF8C2#Jj=bnZNONEYj`CxUS5uNvv^yi~+kB*H`+0m`#&y946i@Mz_m3 z4WPhdnvripy^IIn9%g7Xc4@(3_;|sJzEbrEOWj4n0*Y2K!Y0dP4NW}uza>Z$D4a=` zD5;GWE-2p3<=9gHMXVKz4aRLK;+@!Fd;#_QvDxjkiPUpTq+U#XD^sMzHvGAO_#e}I zjG4Vqmsp|A&6_24g*T;@x&`^Rd|Ov7RpQjA{_w+jzyIOoj-0?F^fzJnMR(#vlP9rg zpgV9;kpABgUT2g-bcq>R)|ya9=Pc_+L28g{g^~04`B{*>%|9PoIDFqr{I;XO91S>rHTH zTg|cazCZkp_7$$&99<7_3*dFe9d!t_q0@B;y12;oRj1W&6VxfX4}NkVP7S!VdIPpD zZ(i|qx6f89M#Q~2v2{bTEI>Cty7%VOnLquXg%~^S&KN5f;8`7ESe?T1_YC@^Ra+@gEGWpIEp3Zxf$fM81)3|K9pc ztD3v*@P=bzyEo69gU09X=yO@eDbm0GM5S~siG`N*!{?lMWc%=_`v zmI$@A@tu_wOHve#?@jl6OxOE%-JZgOAZ(Oabp3d}t_vx^WACbs>mZ8amPp`?+-~zX zYzdfYkdBeqPm*AM7t4CXf+8m+6scQKL^Cb`_pOm;ysBmm!FXYg8%7#`hHe9Y2G{6W zQ0R0s6dFquy1?jfjY56f@iPh|I0cdpA#@vs4@ALQ5$4T$gb{iKOyjLlVN4?^MrJZl z*C$*BOXPzF;RJJfksO#U;Vqi@vsuit*?_Ym(cAS%R3n};rqiYXC`Yd8cN6SOWbJ0DlyVBMiQg)LPh zuxB`+*Na?>qX|VA!ATcyYZQ!sgVz^fhm=IzttjljUcUPQA&8o zEeg^m(v=NqA>^ZLsHt}IG>X;l8@*U=IAhY;$x}r#Q8O3If!jZ9i6OfpHl=diDt@Ba z*=zZ5b*2zxs}(|45!a$CcUY_#E*@~;3)s%TqIo?bU(~vme~`-p-_cGlVFHp@nPh|& z@d{XwD+4D~=QeN+$8V^xB1rkv%*j-Ja4%w&q(-dF%3UJ*1(J`$6fTe!M@6M{4xY$| zxP2q$kMORMb2JmKr?HBQ#K_!2)z6C1$goP}MAIoBY+(l&G9(c+iX7^8ulHQM zKDG=&o(C-KvG*iyMl3;8G5r6Qt&X?<#f$#9I$j%aStB*F?ckSy_!g?7t$ZKH0@-XZ z7#$v$CM1-0b=u`@UYCHD?0i@dCOYGlU=BFHSWEYIA{w@EJ9S>i;k4mK)|xxpiRzQX zmrY$FHxsB?WG!zoGLjK4!#*24?45SjFguElZs9}M$dl4Uh7gHh91BJi4PQ2+zHUvG{xki$EAc=_xmoWa;1$NK5vJtZ6TnUQ1Ne_0~Xu<$1BZKlDI;w>mK` z*#8sv>5o+l-M~h3{)wrY3e~uf>$e%u8+pr?q;oTh-}<4py*q{oS+r+MZC=T#V!!ep zJnyC5Yd5f`9MqR}R=7K-7ebfUCWaB@x~OC#JW#^M7*BOUzW^;{+~guBdLTdEx7M4= zLDzAPNi^azLOIE7nwnF?z2Fw%RLsnIobq_j^>4QnWr40Tg?1T4IQYE+?T%6lNG~L*{N2v*~(i^%vMeQ ztrs@8v*z5D@_~7WXwCDAG>ql4poSyDIjC@hqg|a?>}IeLms+~m^-WGd$LeZB9G-hH z5E=-31Q07>F7W_Uv}wQ05q@Y}TmMklB2Uk@Mh9zLYAM#r88cG+z?4xG`U~ykU@Dm< ztOW;i$eITR-m%5}OJh^XsO7Ge;_k2mJ0pRJoD@7&hUfd`Xrk(hvOUG5Ay18p8bRV8 zD$9@xhYPC6CpD~&c>a)W;b7=3J^Gbh4e``*SbO-F$QrU4bKa79OX#V)UKE(HP@2{d-4+zq^fLS1-9{KLRi$9n{ zBw3ZkfG6-h*#&W|NaiO)RuKCIl)#AW8+|U4WDipW`a5rOOw?;#`DRVy$Aa;*rwus` zuY9c1?^{xpc|bQgj+OH|gUKdkFOObnh|60Ydj+mM;>lKt*IbgqS~el2K2C zIFr05JxSY$6l^?uGhuyKkIO?XS6bfIFP1$+YGQK9^?Bs=1zY z{6% z*YOnv&3y1>0wl*);Qn^IC-RGS$P0<%6Y1afF)WI99OXepSDYS@di=YUH}6un>K%~f zV_k0HFjPRrC?yxS^n)_gb-9N*5ty9T?|eS{7T(y2)<2Ndac{u5fgbx9i@5N%jj1_B za1?XT_es&rL{BplS|cXxPKt+scZG%%f2*5bSi zv>EQmK(^@%hu!y(wqqv9vnE@{dm{YlfpK)dNW2@L_f96hC z&gPukAsh4m{?Q(bwjrq2DU1iM*ZL^#=Sw8g6+Xt*0sCe3I&#W6(N>vXH ze6FL@54F<~xdOMW(((t}Q=c&thj|_y&(<@cRB_cejcNu~icLAC>}O6H<&_GFMZ)^GkPAj7tv<<5)Z z8I46?EAUWZoz^xqpA-xGD4y zR&WgDfOtc83YoFA;{mGXS+#7;wroI#=R9CORGo}AxSg2Ys29eNJ!!(mfDJ07`OmYm zc>1w|j0f=|`1`%!q5TMV{M`Fi12oq9Pkoxfy2l8jtOB@d`)^_8%d)uF03Nf%&11>$ zP{^x-%cBR{ySsF;+W;|O z&=jumV3@{T04y(gkbbpzssbQ0^E0HT^(9XEvA;ha>^h&L2gQFg+*gb;Jr6Wl&+nkUF+=Wbyw0ILn(X_>UFLCd zpR8xq?*kqR7WV5mnhrr3z2EVvhs<7e_OyIj7!asGZdS3zs3I;08oZ6b+O=7LnCz&qcMGs za0F2se&#?r)4AME$Zaoa^8tXJ;)w#86&?S{>)VsJ#epnbS!3?vW6TW-a^T=U)5C#Y zh%*W1KnsS{9#1K zrA!%5SWkz^E363gGXokTjNi$U-R}4ir*@c^4~TbcOSe0U!=||bLUG=aDJ-$84vkr3 z;EcYu&DS)obd(@V2#)Y#KAejr!z&?Q2NOunr?`p~CSupPOnBKl4W$rbXJa-y1->K8#m{MWd6*Dqf#`2ZDD2`jcWTt;+TTxU zkk#>vb}BL0GrjNbE+G{j$Wz_nw@R((v-&HY8AIy#;u3`g>A2@)>M#Cp;Ux!ElSm4j zTz3itS`}tP;W=;a0AnS_Jl6(KAk`t#56uxyrTd58Xr4;z2mRfIb4Cza>`L|w;s*WT zePhCqyBSPMweSocn)d$I(r&e<_|*L=BSq&kPn*TsSt(oJ0t)z0;@ug$N0(qG~~+7a|T2MBG!x96I+D9zh%{ z{cHjvds^gQ;g))ZRh)fPaY)O(z%6zUItR`Do_h-iQQBasAU8?-lbfoFZCWmOZaQE7 z9ur)C)q3?_?A%a=0#8N%*RuR)y*1b=Aqm~73nt1G}GudQi!Tis#I}NZ{5q=79LHDgFAh=$j=01DO>kU~Y?+6G4?V&g-m z`>QnfcX4daySMGmuh^b`ov^o}ZFgzY?!1KcIm`1u3ElSp2*2!w+)K8nUvg@e=Q39H zDoZgOvR&xO0z>6oOKK14@ig+V=xTS+%BG&?jV`KJ-?LZBN4I3*+Uv%Rimw~Z=8ekr3zZXv%1<&oK|Hjm|8&gwWw5qW*4?Nr@wQY8)K~!t4pSm@5fB)Nn z^;8a0f@*VNu&;pgQR>Mk0c)82mh4Gspnmq1`{*m@*-I|NuyZ4E^HL0p0C4pmZNv4) zv6sAiH|hJ~QleLMMCPnn{H*rTiuS-{bD?fhKI~wkr@7(L*T}P%v3oat$4)v;dCN}P zkNj`;N6gtxtjX{3Ys4Au*ShZGd@l)?_c0ID$JKg#e6iMP(;!Hwclv*j{ZL>DH6bPI z=YjnaarY|_ucvdG8&?KW&{shKLNty-XI?lrU40{Hp-kM^SmvxP#06{u!a4h@6cPmG z$J3uCtUPnAdV=HEb8=~Dw5SZ(wFnI0&MhAYmsJi-+Q=HaRkUcG@BC#`M%kz6brbhO zk^;N6i;X>#U;aD}rAWqS&O53Ks#UO*4I(9uw?cwWwQ0k>9q`G)R+7s7JCj<1Lg#gH zJhsem*mp6=_KLtKec9m#_9glg(YVJtQJk#^zn}bqlT#v-tfna}fB`y=Y}2Hxi$Mm} zs!FMi-wc!b_tRnp%0;P<^9u?cj+(8Gj_AClYhx|SHN*Vl$Lefa72Q&z#ZIRZ+pFSR zNz%o}OHoI{;3329BG9J`-P&TgCoXM!bW+n7;Ia;d{^NmH*A<`s@2@MkYj|+w*N-=! zCIqtN)F%0KUH%`->aH=JO+Q`O-QZ$0VgSjKhcXdWHr1FHiGQ(>n_dgN54t6(0@*8y z^mhg-M1Dv#Kr1tmDqH+D3+J6Rrn5G!o4%$;7V|j*qb+AL9dFCI|eC_BiRS0EV{TOSjR+ z|A>rXg~C@p#zdf9zbr8_TmRr+aT)@}hc_UdR*W7M$~hDKjP#%XZ1j^BzQ0juenX7h zw5wa0CsAp&nRG4*<@GD@)k?Ppp#OUV;)DoGN;koPaFFF5oVN$ccP#fYzuQ2}B(sKn zztru6GT@YY^u*j_RCw zqp9jt`i*N5(;OB>J|f}uD`FIblx~LLphuK|3@_hoU?Px3(q(uY6o)j(YJ?5X0K;-& zQU~p_IR}o;p+4KImL}ng1S#Y@K~Wy4Zw}chRRC^enL$dy$M_6P;Cgq~_7{90J3k^q zch{dq1mlxINb3Wm*;@d)CIKnp zxAp?8!N|TZ&-hO!7nZVd^J{FKSOl55*KSXNCJ|e5pdFXB zek_x&Qd$OUqWkL~5PzgZ`}f|vHZ2Mg+T&yiyw;pX(!QQg(St`99rr_pE6VmwCcEDAs(Z8Mnz*oKhrAW_o_AVQh zgLu{VV&oZpPd~%JP;3`EnfaJOWl7H&2_vdAR)Cu6@1;8Ho%U_I?)lk;(cGj)GMs|UfzFFIoVx>gK&B1@L$^qq?I5wO%`|{8V`#`=qnw_%KvcQk)9xwHR@_3+2 zZ=WrC<3*$_nvI793$F$zOtwmmqum20+8s~ZR8h2Rc(WkMe$U7kji3mqD8m2-XUK(3 zK)zIWiR%3Pc>^VPy-NfQX$zX)i{c(a2MT zIMruT=ut{AW6tY1a*8A;rDK+^G>kbI$x4bKA+|?I3U5modOHc~1WYAD!9W!~58L;|7(Vz1Gi1$_;tGu&BSsujohx#Tp-VXtU zQCflrf^noqlyQqZb~Nb4IX_7>OHTFb?M8Y+53v?|uwXxM_79BQ$9R+KH<#3d8sOyY zMXe%ufcL&@Bf0jgTdL+bb z)bM+NvgWUIkrQZSk}zW`HQwJfoE`ZjFx%jE-$yg`mD4h-6V^5lPorrw_R7hVMxF*c z=b%c}CVm1&>OMSR?vYu+N@#7jNXTkJ($^gp(5e2Ui>m9z!(ygh8NCr#w&&uMUt zR?KJ042B`;a@f&vt*#Nop~pona0d9)1$EQqr~-T~RqQu=}rknjS<Co`j3E&?oUJ6RX%dp6iPvV#K9DowIKTjIYAc-9 z>50j@WSXH~6dS92geGG1aH}6D?d?MhUa&ZB$s48&4w-x4)7H$p?)Hbu@eTe(Tz`$7 zgyMq2w7ZNIpDVyjaVe+lp&z9e%&te{1Sr#xpT{7{>ddg+b4pb4;cylS{8YkTlI36uG&O%^L%K3vzO;v>mH7+^ zO-SgB6wfMeoU-BzNB_)LfA0I1y7*fM>w9aIrbeZ)J-w&A)KK){+HxVQIvGa2;=ZH4P2B;jqXeWqpCuzddwx~o=gJ3k9pa-da;jA5JHg|tNEkP zAW)ZD-2x#+k};J0okn}T+TqH>jDaJ`@N~J&Tl~rHd7piK@{>C&w2F+z)jaB5{b_pM z#g_JNFKn^C`uX{fYN0rnSPzAGBt7^U>Qs$q8< zeia)2U{?+>s}#ZOa1T<8dP{+mWaJM`nY7e}z zLAWh3qtdvh8jDJ;ebWWm>%M0LHZC%HymgU+-h#%2L{F_}Ozk+WHH58i--6@Vjh&L~ zk2rFY2F4_!oOc2=GZT&vm=9bpR~x?x-Wnx0&~MO_V-$9J{lPB4UE)SeIPhH@M)eQ; zSGXVyk0*>_9;(+Tr7_42=XAl4qCs`|IGK+_ow=-mOJpgXgzh7pR~hxRu;Szr4#%ZZ z($<{k`jW*Ee-6OEUPk!}*XwN#5JZ~p84TPb&}&piiO`u>Pj}Kd{MYb8?RK`Eqe)tJ zw|2{g)F@kVfkUcT^iV6n7%(1smR3heDfVx+HnF0vs`M^`*!84c3c(OmLc8SX-Bzm*Upadjp4OZtW?b`S<>bZ zC|L-_8=}Ap)e9v0!XL+s{UVz-yeE51j=>h1BX3)nQjnG1oq|@Stqdp;!8NviM@M7D z{|OvITn%0E+t2xsWm7OGU>LAd8)*%Q@b+mwk*3) z@oLg-X{%BrKGgqbNdQ*0yAs8e*ON)5+pfpXK~+5vn!={F<>eT3ChMsw*8$~1@?lGuUG=92jph}I0w6!B%J-(UbLVHBBl*d`RA-i0cL4Rl5$&2~pPD(NUe?1|{t91t;KEIq zB&vTp;Ey|Jh!?1ct{RSw4~6(NRXbb5frvn%ZRs>Gc8F-z|D6+EXSD0*9nCKZ6a+_F z#F;WbCq1*y9sps}%9Uz!g{a|C!gOSKB++{)FQUr#l%!xN?!pN*>O*5Ju!sDhG8OBl z5V~;v)-}~1TZ-x-a3oj6+jX|du(KttWoaEup;-f}?c(|B@ZF+0k}RT9!*bQOsP02O zPo~h9>a?D1YeUkCZ5vGe6>I(6>S6cu(jH4athDB6HJZGGvZmA*KZhP~Yeo{1Z5@oK zStAN%(L^t^gTi!FOd%w9h2hW$AdLA1HFjp)U)2nyE?(7>Lbv+UmbI|OjQkaB%~my; ztiaWhRnv#=j-`pSI`5ifYe5p*u?{2Fs0YQdz~zb=ksuV?QT{iE%@y0V4j`tOX5Leg z!hY|{g)<&VyEpdcQ01#=4cS{WkRr)%Rj0*9i1+FJ!rDE_|T4}e~E)aZ;(DxRtW8UzK(cgX`1~1O)W!?ey z7u96uJR~IDETv)}Wp8(xfFcwK$l~t9^tMmcm$069PtbJsR*iez=!|3pmXrU-M%MU=0eL*7Hy^R2)fK>t|K#f4<8o(#6q z;MNg1KuleEXSJFJB*jI670ud^;#ZAKSvvlwrxU|D!Gl0~B{ani2nHiPqz~cFWF-Gy{&O;NpNor- zAF-ys-i&B0mRW`ZtU%U=II3uY zy_F7IYdN&z=(+HW{_nG>!}XkC^s+(d#{-kF!8fKtbN{mx4MRC6X-^k#ZI|%dBpgUj z+7mej#Q&BSAsD(X}PG%_*J$F2Dku0-$Q@>yq7m=4WRGrr@iz8R=sv zNk6oP0W?ctWLV6^!xT|5d8zd>?(m6jO5qb zE37rGwcw@_&EtQUDMiJRHRRqA>!~IOLD{r_(n`4r0Rw;=7#0R#3PZWHzZE=C16M_L z91OrTMO&lj8}j)17fkNKpz_NS@i23F|9c|>@yxjm7G$&7$BjT$#|E2dzH*jgQU8FE zURE+e9Wr5EO(VY9x;PzV!IvGQv$pOL10MSYdE7DqY_Q4lzY)#VRVPya9i+Ben!vya zHy_DoLZ_PSZ#9CL#`si0Jz#`C+-hZV2MbZp2umqjo1dSoZ_U(f#c;>iBD`EVUHY^H#CnN5aOb|38OL z{cRQ8+t)@1WPmLb{ne8#`g3_(_v>V$H8i6sz>d^L`r*Oep$*n^<)&E5D`qLczbVuN zXX~(D4-yq({>}2ZX+>p@!Zs$blvT`>whBF8U0)A6<;634HWazb;62RHgGuNBK>uH7 z1&8@=G#o2>fK6)DfT=?4gXx(HzMu(H*jB(&Q&$T;xg0a+grplxFl{jk5@OrYbZl|Rc6WrBQqbcZ- zDJA8N8n@k%gzy@kZ_pIf&;msb=s*{8Xn{!^rNQ}FfE%J0OTV{vQ&dJ9v}AGTAl&=t zOtIUm7WI#T=(i9dEaxW0>a1@P>}xBe;?p-~n4K1sf7`#CxK8Y?M!3~Uo}i~w^Zn>* zBx49K_#M5{!OVU9-(Binyq|mS>gR*;$p-(wxfga+jeUKCIivt?94osjBz??M0Lq3E zH(wwgNhGi5MXx(A$YYry*G3pVguU~apO3vVpX>X(H;H~bZxK?HWhQWQRYlf3itHmH zNdy^h;1ud}y$oHwUQrC+W=_87JOvK~nIkL#0EGHIoeHnv&?|9ka?&8r$Vi=E-vF$m z7C-j01%DZD=>9R(gpFhDclt@2HY2lN?Gt9_0eU9ce=o-&QM7uevvsW>>~QT}bsOq) zqEi|#VLDLZJ1`F9jI4Do?)B%53b2=fD4hWaD?uT8&dE0J^iY9NP(W6^_}aVW-JV~P zhu+JA5g<#GP}Y12O;|nEjpS5Wg^}t@oNL=7onu5suoFYbH!9>uFZ?r#dcyR>K{R@+ z+p#_qdUM~Gfe}JSCpQZ9N2fV-MpQQN`xF{OJ|n-1&WKre6iF7}oE}6g_J%1P=Lz8d z9st0q#ybWI=fFqgZOhw7vlk!PaB$oz!~Y-!n{eVpwz8c|{w0l(W}Zkv=Y znAu56Lb)oo*NnX&{UU^bw>!&k@~W{n9>>RdwRR1%}Wz_<&i|``M#gs-Q9`jd!mTCB|bNj&n|cuPd;>c9|e`I^2TiWDn8vS|^&Hr7=GB z$6b3%#2u1$@Pi|dMp32)rl!=krOe9?~Oln+AnuKNIBpa^01D4-{aXo^|wEHu&97TaQfjG0C0RRi}=>$U;~LA z2FGd76zT6&J|X87c5ZOsTMo1#?o6Paa9)FOMO*M*UBUuxHZ-V%8ho-LlAb8uAB-d~ ze1}K_n0iioyCVBs{QyTJzIQC?&-6VYj>TICUg+*KfeDCw#DJL*o!sIoUjXZC9`W;Y zSB|U>X!;I4eEq-_w6}h6$W+><<0+q-$>U|O)2AgVZaVZzeSNB*cO@LUqKF?phD$v^ zESQg*alKpcPRr-)CVXEzuI`?wQGiy&%t8FQ(c}7Mo{#+pcyni;9nOz}Z(yw0k?Fg2 zc%x6XI*(=Ej{?=8CEMPJA6H*~^qkos#tO%6OC8P{_*=H-AYYkV5_X6|%(oEV9FK>; zC2l80^ZIKzIbU<7!|K2I7o(cYd^oVpH$WeI-=I=UKK%z1?jb+6GzS#v>!g35*Wkf- zK72hxugmlBd>I8xpvmxg3lrq3F4%>&$Y1;PH%N~NBozS;!MtzzA>KiG5JiWwAfB#%}tNI0Q|CJOj1UtzcC!i@bjuS4t~dj=9Y?+ViLT=1r^Hy#@k zn~kEP)kVN*KwTKmUO>88{Ym3*D^OFv z2pk&VMGE9-l&N;T$jJ(T`wKbkduXu0rUm{}F~AuzM^yuYW-1tv?h2n^Iw0;3zF>D6 zkTZ3D-NqUN{yTnJqHkT{J4}!yW6ZaPrEVo^Ut96c$HDT8>9Qe%My4)Ui7Hd)TqVri(}M#%H0-R`hqK6tjf?h!JGfY8uyAUAkImqg@sY6;{z6U*&$ zDFqTRE#bRj=ur$0cZlgEFY8VjcB=mDHL<&aJdid(JP)NlmVw}>I1rlAtgXdL{SSi= zBp6=!VP0J_0SALO{C!iOW_=zZ_hKUaRaAe9=m<73HpeVLe&9jF^I0J7`8^WDX#*Ow zS3AoohjU!gU8GE+KHinfcX4-I1$@A8Et?4R-a_Ar0?nFmvdh#@}CptkHY7VB?_kG z?8pP2zvF}*VjEZ^$a6Kq1YUgyK7nev$GSr|2a+1Q_>_-xRfTmH$J7eG9&>aX(#%2j~M`dsg z#dra|y%R{zOw_YEDfHOJWiG~Ud3UJMtyHbBa6|2gzJoEP|y|)D$wubcr4GG79O7G+CEiYgy7^ z5X2Wce(3$%SemD^{ONaH{lu(tFSd9li!K#WRM@f}JMU08lU$;%n5H_lH_K`A+0d9+O zO{KcJ2j>DyH3b@eQ=0IBSS~i1j9j>YOa!--%arm@zy`o3=JIhrw*<}!$Dcjnl9L7Y zalpbN{ajhCq_7SeMuu@{l70Uu$C@(K{TQdoYP}hN z6GtGoC))pi+KGda@?TsOD#O1p9Up~F;a zHt4VWIHPehhpykh^m5QTFXMCNjWYS%vLQwWZj|Z9pO$2>F1WuKF$O!|sRQk^g9j{y z-6>F=TGF?)@{WX54q58~m7oL#r&aS2HLMG*E~Y6L9e|R)@bCY7W5G@$%p7-C-<-;7 zGnt0?$?D0`vLh;u)l$A453az^VQSK|aezR(j~fUGP`g)N<3!(@n+f?s!Q8XBjdsw; zpYdO4Bw%LEwJ4S9gz5__SjOQ}tLK|Um_T2KLlzBnCY&THFZTErXXeaT5bY?qk->bc z4c`E%gL+!={}H;Yu?A4Om6ixMg@wg!BtzTF{ugL1u9$k<8kW*6e8#o7#*t0K4}IHR z{4th6D+~&^>4@Ke7^TR*w;*U#?(E;hm4iReu`cU79I)fnAeC*31Za|`1^{f)VC=3&?{8fT9#q-Sd+n}DVtBIOi^fusbe(i`ACBHJ``PJ zrgv&^)Y>n9OiT9&>?LF_<9bJ2WCzlq|7$oZ&Le&A%n*(DT}k)IOjlT3p%jHohZdL& zQpgQWGD=>%G*`sEQ{G|31SFsv5-*t1^qYGx{gx?kpxw7!dh2$@=N5lJd=5Mfkt7%F z4!y8G{(aoRTnU29=a#Wr8&kme)S*keuj@2PA#iZ57_BB?Nj7%LLytpb#v_3WF;SBGxUM@mwP;Aj2 z(kQFitH3ML1TiWILptsO0(%TeG4srNq~ab5H-Tz*}@XBc>T%?Js8WGs1UEyoV;XH+iU2 z+Eybj6Zcw4iQM&pyCqR>PFvfdG9*T9U);$Gor$Bqp%fw2p?#ZK)q zbE2A4Yyeg;#|}uQi2Im$bzD2)oc;!y44*SCLT&1Bx3ltmC^|ww^{i)t7clI15}%BL z!QgWvMWcip=T^vzFFO;*yhouU>VD|IJstkwelTM*Zs%rJ=G2D#N-WXe>>fCwp>v7yjS285{^#PVR5G|eA*%DV|hupKNR*z5^dTrI1kgurJ!G(i(N z%AwGFqa15;vqCBtYf@HbB{`aBJ#3E%~ zlvDCNz$Xib6-ig1AjYW^h;C!knns$XI@EFB{|3v0FjkmwY`*lH$)EZ7?8*11>XSYuy^!Nm>t1Or*8YT;swk-{s+ zR;iogn`;0g#1_8)gbVr2sfZg*cz}FKpql5Tu9jf`LeFPDCY6YAkFDdn|1U{G{$Ba6c6iq@ zBrd*OIboX#D-VTM3Z1uZe-<`c2Er^}Ut?e%K6w>Jxq_j$v^!<(UbB#2G#Rv#bfCJT zc7o{$b-Y1)T{oJ!#hCKX^1-C4N#}usw=w1gp{s3*_2ON#GxXhiQ-svut$+r!)V<3?}@VdCZ1PSuJyx9^t7JUJ}0u$IuEjJ|5gCZxb?RnXtxV0$RPN zQ7jNb3{j_+Fr4O&^M8QvqPi0G)0xqa{A{2{ESVU8OgLkfwPflVB&*Kih$ zRfbpjS#ESuAo`>ZTcNCIs1z^`Koo3NcR! zi2F)ygn)R(KafJ<90(@M&P)x03=?*arc-Fny3=jRvbI-P2~O%4b$O!g^C|`-M$jgXpy#zhd$-ek@Z%=as60Xy;gfv6BUvnK z$yq2o-a#$d7A3QvAPW=E25`ge0 zqINUuHG+C5Q%#$nUH>_Y-O@E%3gjVZ+r)|4c70%L^V?7SBGeR(4(%Gq@|0UMOydkE zDGQ$)UDv_b5}^+z*da#>5&EPy;}*<*8rPpNA%UkDn(e_v@0j3Kg43#i*i<(3s{$Q5 zRa8kUMbKa^MiywzA#YVoQngqZsn+zoA4_vlw6OSKpv{3z3$jbxrb6QLpu9p;f~-*T zd&oU4XPPICim@YK@KfSbjtx)O&KRKKBdqXGu>R%8f3* z(d+e{29`U`Py%uqkjqC>$oHdSqp9&6jouuPG&_pEcbj&Ov`yD|(#<%yU|E1h;CvXj zj<8uEI(n4>8*R~P9|v%7UX+V_J%$&uL&Lj)f77%##{AkjKcF~Drvg;+RiPO$iQ6BbdRa;@d_u7P(d8`0YkBRKEZRb7(^bW2=0t>%NGgh67IPc z2$Bm<9`2(K<&3@!pSp^+1?8!0>NKJjaAE86b`&URWLnSW$S8g)0LfN%e$mFQx_xe^ zg_GV}a4)f9-#^F&Vc=_(6l2nffzqy6(#@1G8nlXR0-u-S`+q!W3TsV+SW)BnGH$cjYx^Ⓢ5M1)jniC?xb z{T#EY-99Vin)}Mt1td~xoJYvOJ1ZNVfpq$A}*{IbU1sC3MJ&VffDwo})?NU9e935Xjs#d>8ZCZRAmfoc?wp#yAL7c6;Wr+cL z%Xxs;rE$zJmZg8X{{LEfvsiK|_}>;N_rbX@_?IgXFY!>H9FCyJ2%K*V8mJ0~9aC6% z8LWdP@GSz@T1F8p95YVzhd6U(3I#{`++xh*SG3`o^f3zO{9f<0wI0?>uw)J9sO81v zoTmfF!c?N!%z(v<1l06dJQ_)hkY94_--g$OSA`_Y zWm6YkdD*-JPj=sty2h)b^#0L3owq?}ukp>j4MTRu2tF-+w?>~$^<%1yShB?zXYd@g zY}w@)xvTaIrd;+cLk0%zZSe@07T!-mDVcUMd)0*1WfNA{O;}wxVRhvMvbl7^>e>mb zizlqEp0K)n!tVMBy9+4nuAs2Hgu?C`3cHIa?5?7)yNtr_I*RfODN;9O@of~FxQ}AR z8!58BPi;5^JoQ4~cY&8)Sn#Yd3?i6k-*1t0gGQ|=&%>OdNHzV{^S7DjUaa(o7tDm@ zDM~|O+nI=F-Cb7MEqc}E6Ps;hLtJsVfJIwyA>SLNAdkV*nN-Tu2hn5?-ZwV)DOo(G zy};ngl`R0n4bxR%k$+1KJ$3#j*FummJA=u_U}UbeB@lR^o(V!E?y*%U4i|M13zvVX zrK_|g-B&4<)7(V}1~uk)rr=|kWNto$aw6nXEvLC#lLS5?<c;53veC^AzaQe^5MIdF$$ z7|Qi51&^I9nuOW&ck+1>r6maINso>iMXo5=O%*!}dCN(hNz`(}W^+2gC}2u3n)FC0 zzW{?P26_cXc3+xm#WP;&A8*n#v3lXW==7TIXA*JRxuOxLZmZuLT#p@9RLg=2m*NI> z(Q;ZwV|&5o#A7(Qhg0}>^vDvMBt&QRf{P`S%@Sr2P9chd>&t9bYGuH=J2C!3vYUD) z)2btK3EE-n9c)~|HgJNHxSOy+oQC#Tnx1@Pet$*M#VBOp4Cwi z$=J~dFD;UxY&M(QdFuR@Emc0~;nT&gW}{c7Uum&d64|&Fbte9jk5FfhBncyf|D^<} z@K9FxSP89Bp(!VtvD51WY@+PX6drdXe*4Rz@r`KpP$_UB?zR=UqD)ph46H1P~ zF7%q~D6w`w_1aa+gtbym_3~lNuWX{}bjD(pHlvm)2)cA8;ne6%Ikv9bHGq+}JWl!BP)p*KsS4dg;%;ciBJ{%ht$|n3gN#fh5=gmRmb9eL^T}W|Rnq>jkA4ah-8*LUMv7$g|9r@C=8U{|xDKbGfvwC$ptCs4Mxfl~ivj7( zP3NgpTRrE5wgV#>YOK6GZMNI#A!71$eXBWeC~Ix%|Z!C@-a;e29$N69k;82WHX+BKo6G8N?a=4&~^e?@AXd(jqIV_El zM(R-0WN|-h==FJl*{D2XN)V2tzviVJuyQP?Il0 zxafQyj7gQvU5POI0nF*M9|rEAIldJ4Bk(?t$c66gMhFDA`=oaxG~VpO-3UXUybO;d z;_|$WUn8JE-8A& z1@j;YycsrHW}y11QOcT-rx2S@yoQKk_B;UxD???9L;o7%j=$Dk@&h2|0{^6%EnoV^NOj3Dgm|`v3>x|{GQ>Wg7Mf%n>mrZgg zpPrx+?{^B%GiqZ9zaY{ydW5$1;2V{|k6^}%^^lJ%K@P^=4TO+R*=eyn{F6%Xd&^l8 z(6>$EAMuocXBl#rJGsA++WQOfE{Gn1(@F@mLfkjlp73Uf8c|7MSKm}>=>kK?)?Ps` z-d2LWN-y43YH5h4<|0n~TnTa;&dh#=V*(z3o>empYuPqdY2qCArRdw8bae<1m0~kI z@n#{R7ON*WSch}Ba8D?<@O&`aC*CslQINn>r^sW|0PJtYlL&4i_2{kS4AfJ�$_k zL~|e4PC{JktB-D$F+3O(V~LNFIlLP7;9-*+|35Ai%n><7;Zd;Xg91|IbjB*Apq4g* z=VS`N=M={(;Cpb#Hi9KV0rZ^OSOt2Mzm8P^JU38R0p6zfBNl+pjnh>?cf-k-^dTn= z^xW8789L0pH(~gtpn=>FU8RAM<~6GPh-uUcM-2WaM$PU=qTMIn917ueFxK#J<^`8M z=y#pQtAZ&qHwCYPdkfwrM1x@Rg}N0r@GFg{Qq_X!>VnQ^VtJ`Sq1u>(xpXmO%!%2q zJVxvBrx3v-RfxP&g{N6~whD#x8ukKADveJqCer|pt-w-|KWIK>9uhoV6`^seG^hQF z7|!2zog$KoHEDCPn1S~kwCV`kp4ezVm~dx||IME)6RLjcsW-T1`c;99zo{VOR~`(Z zA}Oz=U}QVs!e9q9Dk+=R=p%ZJ0_LP=g*1(16wWG5^t?$FB7Y8pYHCny$Cc~?*mt15 zp(z+4a7r;o|3EX}1G^X9%)I%RSh_Po(|#r8)LbSZc>s>h%9-(Uf!9l9rjGT}c-+{Q zG#*z{NaO)_YNPD|Ox(V?Cw z;sukO@9%ch`Ci|afBXf!@AV@ZAR$8XNGi&F+UUB}FE2mXYpRtNmFuVBpvL;5sHmUa zWVUQyiYg>TX!Wn~fV>)yenEE=H}<~LyCdA}{Zz^&ctsxEBk-rUy4P(-rZ&5294~Un z^>d8&TF-X6J4n=8oLl3zh7LHE`{)0{bp+>_tC-c*z0|C5EAuo*@hi=*)rw+&l|4%w zEL{E$GVT8eO4XIUdu@HN8xEvh*z7wUY_IhUHPT&FUPkg?Z?K_bxuN*!kcKd>0l8&@ zy!^utk`(g#@#O(Fr=s+Y6BcOx`1p7v6s;0$zH(P`L^{cHqlH(oU#KyIr|PdkjQf`A z`TOv}2S<7eNbauEdmcBF8`fuer1dc-#T{VVPnjCo*pq-ig92Bjh#0cJZTkTMI=R$# z##ShvujwkD*t8&qg)XLaGCwUd4AwD9cFZKGZEMzk37ddk1OCD$0eh4r^&K?|>*tDY z+B6XNg%Rm?xdT-O#v%<^5mqAYPwbL0;_{`DrfRl`TseRRp-RfkQH!+myzu%)O}*yA z7V8D{q(ytONz(@Ur8#_Y8>{3chcHwE$+T51o!zjK%8evSzK)_arFn@|7py+ivK+p% zGRdb_0te!rdJzPk9A#inZoh{0+`VU(u%R-2Pz=x5@Mw@8dhVPP60@;s^s|@7eC1Ce%G#UMl+;Nc5~&(3XZ}i^fC|#oPzD?Jn8cKGCXvxlZxIFQJ&E+> zI8=by6DCh`>$ZBVLX)hAf~v zH$@i&z0!I- z!lK~M^jb%y7QG451~Tt3>+LPZj&~R0m}F{ojK-2gAWubg2idMEa9T9wH) z=#R$TR=-^xkkL=rs9S&;O1xtrkV%lG*HTLXV>7oDzf??j%#kTJH*Lor3tbSWq&MxN zd$Tb&SIrlmJiOkE{5Xce zTv!##Wb1{=JtlTx6_QQvmOtVM(xSLA2x(N;Tyo8u1!+$-6#27QSZ$Nekxe%QYrfM1(b%AI!hYyvL-=M7XTQIJ7Y{en1>E) zHP9)_@k)9)WWq#d$$foo=c0Mt9izsN+^^o322y6pfqR_HCLzP!o4SiQnM~^f2y^Bg zAD_IYfBvY}Cq4vtV1m?#`@QNUU9I1Cw3Q#cZ?P|448lEN3A{3v-6IXf*!#JRUPoC* zVBs=xB7@#%!Fe-(ZVLHxbCkmab42uw{Zv~%zaG}=xHrO!hQHvN(X3^5>WP8X36ff}Z;1QBDA+ij5 zeil9?@`#tCAVz0GI*ZE-`9n~i{bI$H$@)+T8~@Ij{Ao+iL-rRu5(BOd&=PDyJJW~_ zKxk>MionKL$34FuG~JPdm!X$#gQjy{Yi>eNrrxs*QPX1bOb49H(IzdLd6`4$DKC}1 zl;3J|#Jv_qyQgZyHN9ZK^T!;$*BZhtOAaO;jjRyS)MC3!l?dWzZ}o>mXEf+vwV}IYq8!0crqij8 z8N~OVX|s_Ixs+!d4P1<=B+5GYlM+-qlihZ(D(Rd%nuf{DJfbEjsrPBv89TqApIEo9 zmJc_W4&g1Ug=n?-7nc8{s0x+2YhP(Wb?a+QSq-1te&PkQ7+RJmKASNLGB|8@;cl0< zGj4Xe#=**uYI3&o@2nW*!wgF_x4IM=!DmG|8ZwL$5ANKY!o@bA8P=gkv)#sGII2L8 zYIIO^9LlIUp=VgH;Q}AIgAo1JW+o#o*c=RCN@Q0PP}35Q_e(}==3+p}992nt5#ZTS zX>GuIOy$1hs>zhRaD@RBR%n1I%fG^ktuCI6e<_nCVerT^My%A%uIorvDZ7VGm)z(vy6g-z z_l#OFeFbi3=W}(f%T#`@18hE43)87ZP7@{_phMPbsX1Fy-y!FUT?MHQv+M%;h@&lY zW16aU?)aki7%yB&wHI6vnICm$T8ugMrI-4&H>&2{DvC-kC@SpET$+heaC#?i^pw+T z=;F2YcuawX-cj533Q8=qb z#FXswz{xW+IiwqS^<`7|#d<+@N~Pt=S{&}^jhVH>N)@ir$Wph|;nf*2ES&aH+K?~@;fgeGK~(U;xZiVc(k?R;M;_O2H%=y z7kri!X5R{9uz)z#OfU_ERm?E>c7#@qjnWDf9%#FY1QTF#RNIIFTL8$;h&5xu)cwjJ ziss7#NRl=d9)Pkz@ng9h9Od8@5cUvU{q=)J?bVN^MH&b7+N)Bilu(DaK@=xYIYCHV9FiaDMChI zQTFi*aouK09@qcs&s{bXkEK%=6L`cUM;oQ;9l2sm!X;N#X%~(V=88q+odyLtdRs*1 zBNe~po=d^SZ=MpLc;a)#Y>_W%vJN9(%E}RA5AWKDM{c}H>s6kETY!RjP^m^iK zwTZ8LiiJrWxyQS(eD1Ae65jrQ6t*J2e6UMLcUT-B9d;uPcpYqPWx~8h%NC zPvB0j!|3h?>7wd!9*d{HnRycvEFQe7R}&l%Et}j2bY0C37SNti2;^iX>m-a*)~Z&y z$zSH+lE;o4=#Llx98wIA4_f~AE+qy+26{ZfY3#=WkQDcrVlkVspA5kqZwmENre~Q( zAj}jB@}3z839(F6b3uo9k)#B>%~MoX*O`u$QdAmuyL4o3Lq|TuQg0`Yee{R#*#by$ zYr2?&XH#PZOlU-WXS6P- zezvJ$kIzMCI2yy4S`(dm&8CVyKHX+DbT+Jwx!*Im^Sau(zG3xz(fnL(La%RFLjyvXJkHfb)yd;*(oroa#3ET&mlYx`+G=YHjIzhQZGmBGJaJYgOCIhL z5K1EYFMo6@2 zKF6oqz{gn|pZdFP;B&DyK4>fSdA~kBZ?=KY<=Xhv8{5FAvo=2HcpLcqYi)e$TfyhU zj^WeYF?@PEhR@ad_-ti-_1DG+{k#o)25aN99s2xxZG5&vpW)j0oYY7q_}{Z!3fHi` z+JEbp!j(M51M8<2p`moGn%#wC#%sBD_WJ(D-?ntW)Jxo6)gUrmCHPt%i^f`M(G6a^ zpWaBdnV9D_f{HCeidP6IPLWvR)jNM;vh>wsmv?%q|}5ox87Yv4Hs0v z2(N(q%LI;Z4a3K{IiE6}u-27Dh0g$NAO!e%LlH-i^?dIdfg2Rw;RJTDQMG>CSLGn;g700x_e}avUOTtN0O_m`_2spEzvfoBvDtC zT;-09iH+U2*r(WM*!w2?B#Xos0TLtuNOo17Y4thXmWcczkw_#m6Cj|h+ozS%6b8T&Kc4bT(7rg-(T{!YZr$J-lN(>#;|$-bCwQvkimzKjPhT>2IEHg9WZH zza;kiXC5x-MR#}XU~1>`iC-8V#tu0R!h(Yh))5U3aKRD|#0iy1c#^q@70)JEDdD$6 zhGCjltm$Xl56N8j(9H4e3y{-yKEmvHXr5boJZHn&)01bAU|WwHzBC3SnEdTD((7bg zd|kMy8RAH?LkQVUSm32s1Jm2Xfn9J?pTL!a5AyiiL-OaL8`;roWJHXShYb5b`|VlL@6pm@;v(ClgG&UnJdF(@i&i!<$6=!3F_jkV{> z2lA8qeJ~l$?bCawxp?$95j7>33;&)Pm1*$r{@i!2e59ZA==ixfQfDY@$KN_bDeNm+ z%-Q?0cxO?`*$0a#OIUOygh(hJCs9B`%N>&_*)EG$^YF-;w_s!)HfQ(!CFSrVF#uJv z`NJFmKmoIAmJ(XoyXTw`m%fWuTgsSXFJn1bxJ9O7=49S0DW|j&ry3KnaKD170DpUk zHsSAZ#@s@I%!^X=q_77^?9gMJb8E_ZzrLZ=q+Dat$gcoYUVgV;spvduvPn{FDc@U2 zjLAupX%KJAvLu>yT;|nr>95c~$y289`7+VT5alz{%46i^SZIHH7Tj;oLg(AFaP_h* z)J?`kbG_zARlEQnFFY(%EWGfrP_gjB!$QTv3l9qw3kMq(xlAm2xqYN-&_QrA3}Tr{W6KGAz>8p z<-QULCEQ;KA|jtsK?%V;>AvU@x@x!Bh7gV-+&Igvxm+*ylq&)9kd)w{2m>)Aj=%aV z@Wd~7^WZ6XB#f2^M&x>TB>pwsSy2qlof39rrx7h7kKmO*qWPUY0 z&MTGBxtTH4jS4CixUC$16gHd;Hv$B6dd zckwp73m z$yneAx0bD{Ffy{wi68f>ONI{}N)CzDC8Nr(dF-{|*MQy|w~eU0F&P}HB%FV%OGXvl zv~5IBjXNMwZ@pDC-rq#EO}QjmZ7fQn&?RK@d?Ky%JM>dBGXN2#IksQIt9#rvv0A|U z@t5%E0nXTxP#Dp;q&X;F4W&QQLsxfK3B9xn;==(ooc@Zr2r=J|sq&KV{T9N_4;mQbf6p z(sb8QSFdjAC7$slo~iR^)J{U9XeOKx63(<5$%;}ixrO4)+)&o5ZeJfy%@VKFK{aY0 zp*c|dRQ5%5AsWhh)$N-`Yl%_tpp9CF2oBUNge13#`!|hjb?VmqmAEz%gUqitY853q zP|GNq+&ak(YpAQvZUrFioM10U;+VSgMy(_?ibj$L+vqL?Yn<8;qH?twO3*y^yV%>3 zSfLSx5&MKj!9E8&l{pr@yoM4dk7Hs6oVO0~IZ(*;*7=Bh+SDNDk(^OG5;{d&1UoOE zfvVQIlFclIRdLmJw5n3tBdvigNTT9XT{|(f98)iw=94zIvu^QUrBr@fJ!} z;d--NgpnjE(X-1kzn()#v%D72cKnoVEw7xN9y>W78f6`wpZ>4^>;L;d{_p?wfBwJ! zkJD&4?@p4hKRd!hsXwKtxuNDP-KR;f;-kr6K>@$p1Si6h^YYHg3hg#>>L*aTJw!iE zyM31(JiSPV!?RjqBLCow1-L; zw~RLNaDy^M9b2%_C5C+k5pRl>QxjHjgedaiI7(K82u+_8qwNq7&7~Moa*{+;`iz{L zFhavGi5C?kQrIIKIET1c4p}P+MTe!7SEJoOz@tNareI#6NusxKLd`gB<}T4*O>r-s&xao>Jo%jJc78Rfi)F`7Ovsv(%m3kv7bBT&r?kFE3> zQ4PUdMrb4^GoxZe3WHK(5PY?DFxO?Ua*}T($o!)IWTp5J#_;}}?|dN~IM`dAF{4jk zv?Kkgg|E;B*||-%d`#x+y;`m~Szf_eUdwr7anqS|cl#tcCR#OQXCl!_Ni`ff9Wzu9 zex?6*6ZkmD<;UX?W`)E!R^HZd&}vTI0c5VNJJ3On9}Yxj5B|p6ZNo*Fyk)=f7I&nT zq%a&i?Xz=R1!j*aR(CKRa(=Z3Sf#SJ{<1nvyF`csNQb=0E|62*T_E4^*t2oq&x4Jy z1*EFA1!OQB-b^_t6FojdjfgEltQ_VDwQBu)-Boh>T>Cy~oz;`d$r1Wr?c`6+)h4({ zam&YOard4VXwG4uCXD#I-D(Cg81hfHPY}>VJJc8C^mx?K-+g2Sv}$_rAA@AeYq)}X!Hy7hfU8DfXXs%Cq}~`qF315ZdNdm1 zt9n7{`Hz$Lpe2{?Rd?VFJI>YWwl60EitfAI+bOy`7LF?dJKF`Bxk?idlR zMZKXM24BJEdr0?qd&p<)t)ht8iLZCTV(zrvPV=TWm2$rDPjl+*4Tx+%?3nH zM`QPIH|}KWbcSQf0P(33oo|T0&u~QV-EFWLpCb+3Jccvs%c0T%yk+p@-9l0;c7vAj$qQ+&;9~dpaF7q~Scz6h8&qwYnWPHZvEg zsmH8%)l#V?k*9aTlBDMShQb$MVZC%2lZNc%Xr4AA3!fum9CxSO7b94r9H$waXyZ_Q};dXj%!kqI*;tvKc%?*Q>rw=%@##J9xLj3o30+; zs|3u;w<@K{lN*?@oC>aBNEh|@?$x0V<64xsGNWM*u@|RPLcj!jG z4U>Gj{ent@BsZo^jAa`~dnZZVi64<+_=8>alzfCMpA@KXQ$KUOGz`fI!oSm1C@M&7 zI{Bz~@k(*D5P#uc({_RdwT(16?sEJmwHYk+Cn_^d=C+7hLH6S|T=|4=%M`V;TdWI9HD=}m{;Wp~gV|C-Hz=4jRJ4(3tzjZaEqp&V7AW_b~;?%9;dgLJVZ z4y`7sT5-czpxzK8_hWqRMDkK2B&C+gIO0(j{oR~3!HO`R%mL(H?TT57&|+L zwRTJ|CIcEUZQssfj}BQpd})%wgHuT%H-HTJqep)fB!N4LAc|Rt22N6-#=n*dW_oi1 z2`rr2lB8PfMxZC`0$4H9LQ*5MDmg?oPvE8>fW&*};nT=WxBEhGpVkbTCg;0@^7MSp zhkH|Vf9vx^kEB4t1`SLhU*t>Nkl?HSg}(5CJQmE%+;l^3Se{9lt%9=jXJlcR2g0sa zG)wiL>8AR>;R~PbjsFD>MHX`Er#h*5WM{#q>b>z-|8*aIT;xmwX&kra8bTvFN|ms`SX`M^aVe*d;96kW8>87 zY8EDGN`hWLJv)0>uUFqy&Q2@m^-H&MLO#vP>FG)9ggN}w z2>)$|JaO0sw}kT?!xd_Vznc4-x$`l&b=ps>^(JyYwx{0TZo0q8GY4{s7k(T|9FbpS zj{07=-@J0Y5v@9ff|^CP}SIa$QMYh zYY5Fjo&lQD)5|0Hce+ZaUT1MY={^Tfx@0y@qotROIiru!(rf-vB2?&RCJ%>hlVDvMFYv$T=%=i`s$(hJ3H3pBUSQbHR!{ zkgUuq+Is$C5q)7VZ#SHGtO!p>rAomzpA^hCio8W67-rZ+l4f|mmU)JQg;*JXh7>*a z=D{iyUtotaT*7mFTD2G5c}rwjH(Wk&MhPzy#-H)!RgV0DBUA*OZMX~|eUvW4g$yl@ zcWao_gE@)`U}VxVT*|mHNH*-5fWyT+oL(af?_@rx%scGGb~~{9INsfEX2}KbCoDed zyORkrugD>SQpgQvFD{dBNJj=Y{Y!UDzpo-nCwy>bk34>?us^Eoj~e@<&U|Vdz;n~2 zii}A(41qC?k;UPju}dVCCx*0qjAu-P6gf8p+e!+^VXqYMmYM++-g3nf#=g`)Xuucu z2^6yE5=Z`6_sBPS?|G7b@40LbnR?$?vb#)i_fi+;Vh2rpOXmynOg6}ujzd@*bzV>U zA5X-~kpwx+$hNTiMRe;g9P01=37M^}gXzKZfsHN8U>^D^blMi?RHnqnUKpW|1&PsL zc+**JxcN{IZ7H{0>JKZ71eTE&YbtRbjyAy}OwLN`ce%gBOArT=l|a*ZZ+JC4zUp?w zqFL6lY&_(aVBWz`X;8#s-k~(V#P#f~yfD8z;`}t-kI1VG?^mn?AxQ_x9j;+Yjf2kN z9V7H%8XDPgIE;}!#!BEj)NYZjR`fTPOxjPmFA9~L)Z)C}!xzh36!vV|`>wcC%d|IN z-Ec)@P?As9(&yDk)D`~*i2 z(;;4jve_;Q{P2_`&J^KgS6m(cDkm6G7)s<#$xAm(z3A4d;=-`Wj4x(9%$-u0de8J9Zt+=#74SW>{bf9{3QNq%&5KH zM{pvE$kW>$>7aw{j#5RrTOF4?RRVxTTZdX!n}#x$u5hDJCOKNZIjA5%npg-v5$Erx zDP4$qk)1Ts%-@ju&>rwWJ7@Iv%$Nl?7e7F7LmVLp&RdfY!uFK!bqhxI;<+M&ZxMG~ zeDk5^*QsiZV4TbeUDL4$Tpe?Mb(i@d90)rQSBQm3A<%b zIp$d>?GON^4KvjX@g1sJ{3uMfdGVL*!`fd z{%F2$qf}(>t+Qd3@(k^_A-&iVZn&m#G!LF%U^N$ya>#rx<_D~(CRT*vF64RbmNv+( zGUVOwLAd3a@yx8#$X0jHXBqKSIn^pax)kRYXYpUd(JQLerL;bb2a9kCzrGfEo8_OeBOKt!cD|QX5v*p5 zDBf*?*V*Q0|E-5OkM7_!A6=&L!9ZM?h1k@L5Z4HwdWb5?7#G}`fcM524iY(FKVPG{ z!TUHI|1!CD-KhrwPrl}1-Ls4RMU(t@8mzzB_uZXCzqunh#0Br|E4ZlJaWojERnF zW^_(NLo2C(=MR(hqnWHfY)aWj&!(6qMbCeLq-Yy87mjM1hvb|!hwQrFf*#@vaPiTG z!rOeOhq=8`IB2g31{R~-ab_>cM=*iTtv~zh_;=uB?_yv$eav9({CiF9p7W>pmR52` zPWo-r=iugLlfLK2sifNsji#8riISIW>!2dSbhBs9c;B?|22R$|s+AO#UikxKg5R4V zht?O+rizLv^b~YqkmjOfie_;tIxWFPv$RzUT6Q{Wg`A8k(P~^OS2ZJx@vk8}%uPv_ zNQV~2Y9{2hQ`|J+Ji{$_1lgX)O>f*Q7W+)FU1M0NarekGB~8i4Q)jcx^QurRLR zok<1P$jU^s&q5`%nv7GEW1Vn0!8+mZxJ0t-%TzX72H3|8VgAX~$>Tt^8uQz z&rj5H((NrLWCzI#oAT6!BQ8_JS|Wb1mV-MdW#TF^HW}3VPys2uLiSOt(D1iFWIFM+ zDESGd%9}4zWvP9~ZyX_4Xj=pcvEgpvR|urs>#FkDLF4C+RZEMi7rV5FhRVPS3uf}r zn2?>gKC$T85t4Pf3wlO$Db*9YPy$nKc8eg}H<_|*_T9nH%vTlM+#}j06p1v0=pM85 z_=_k>P8+QQvVyG11uO3b|8vJKKjmOE?u^s1E&5c&vRFoQ);b`KrIzLqtv4Y(Xn>vj zmRl55g&MM4lhP^~?BYjZUaIscKq3oQ@`WHj{kU6!PRUrI2uQYYR_$8XTC(f^abIUR}#9 zv}7aT^YgPcI51PS*06WeA7q8lmN+2Ici_TN4GzXO9At&ys#w6cua@%QUcNKp0q+bz z!)^+z-V>3F+L_D++*5b6rVD!Id`z20e9(d4Ms!_i>{nzq+QAkXwsOPMIjLz5{7W=v zm%~-6M$Kt82gps4I`v~poGawwXw-YE*$nqi0py1mkRh@v<^zD5(AoJlz! zy|xh_oo;XHj=h^fdnj^o)lTWgB0x@92fz8N!NXLS2S;E+nwPFp^Af&14Nl8<*ZGMr<0_*ad5W@;)ha1 z6wMelR-CL`*TdmNp04{Uk3@gM9<~QY+)R+O?6rpd)ua=KE9%x$` zT=8h!9mvkWCy9yCCe-leQLPBc{h%pS42qoJ;4uuol!8y1W{y_d&GG8f);res>nAsT zBOZ`Y-ErS-cbik>?ErDY$LR;Tn|HU{XzMSuOz2I&IBd#jnOt>E9ye2{x3tbrecc!k zm2_PE;;&9yK8=c9HqqBu`^7Ob0sN%P=wuD&4B!lH38y&yVTfCYiELc7i#6&uV*qbD&({8{BBEATz1)7KRkJ)@ zwnF0JmC{z#wC-FLA*5()YTB!48$UT!m%Hu`Vh9o$GybZM&@ z+Nw5fEkj$=rmbga>si{{-4@cZo=nfb3GE+s;IG;{Ym6$#IJd^AGmMi{Ym8Hlab}Hi z&M>MM))*HIqkdwI@s9Ih-7l3B-Y?c|sU&@C-Ihv?%R@0fG%Bw+q~pbU>{pYqZ{HTK z9~DKvtnWUj>^YTP70=w{QIb4EKjEh*itfpUs->Yi^e1zu(=-$gs;r>S(oi_Cvw}KL zL*dkt71Tur3Q|E*42&x5(Kvq!ivQU;XuT})8 zktK#GZ-@h|K*TWz(UTQOT>`O1$&OiAY_)>Qj9I+uWd)TPvv~Q+3M!+DIQeD;l~F~U zrniAY&QS^qCu^*rM6Je4@Kz`pJA%`%R#2H41*f;Ipz3KTyfSSCl~Ht@QnG@|XeVCS zw1UcLCtiKBg34$oUgorcs%NwlF9}#dRnkyB+u66CQBj<*w1Ud0C{71jL1k4GwslxR zi7JZsELovs%y5!$x5CS4J6;g6g34$+P8Zuioy%6wQdSqDqT{TZ6-q@yu>_GE3(ML3 zLUt@{QACv{8_KL;REk&(6$e{~>>8AJ5CROW?2=(&LpHG```M1JXG6yQFKgP~9`z!# zWlf7_Wn0=7iVW;&_o>%jR^W}=(t@vGO^ar9TiT8)VXRAAQ6#{$X%z`LOqElO1@bRo^NA?B}TzU&yl8mz;v{I>&m45-QoekNM9hHJ?9?jrz3c8$%;!OA= zdx6PoAN#z;Ay+hdsfsRD6-{m~lVA3$_|I=y#pEkH=BVsIADs^zDdez2f6~`w;WwEu zbM){u#UVRKx8Z6Imk0*4?R%gJ$kviM9NB>H^Fx~Ayl(ZptD7#~cXu`JwtsR6g@dpW zX6(ajIcTJM9!Nj|M!b27nizCEB` zUIbq77_7GV_Ii9q^>A>|S`P_Eu7J$4J`e8jq2v)ca%H`{U4%0@Qe7LWpr2-O*^=H!-2 zNAV%ApBDGQAq7{~_uc-e=l0#fwE08!Kk5haDxuFioEnByFH>Du2OD@j*pVL5GZn~d zg{l5@;MKvS@ZUxI`av6(Zd+2a+aMiFR|^L>h;5VtmMMe*;{Cl~tXp zhL4Td1b1LWbigcA*FUFUk$)t3K zxpVNtV?ltzofSfPdM5=x2V@b!tDO95GzVTZ2N?->S%`E(DSVn(a@apEMeeegMJqJ7 zqb9r;if3;E5OB#^7wizSGw%{6U^KDH=Z+mp$KFgb=aL-`{2%`zh8Nk7qPwG*y;DJ^ zW9L2~J_P(-hLn8B`3ZFY^&2M9a0NGdJ5+pR%4D<=+I=Rup&4&(L0e*#CyrZwBm(=mgWMi_pV{?5nuhrCW^OX7ebMM-`_ zN`<^iZ%!F$IQSIzJAV-i=l1YfR;1gAzFC8f|D?nW-jGPqY{mNl8-mE`sT7FH-_9PK z*;fL-jPD(0@JVCS&8F4z(-h(vocrbxr?{-?%;{tN#BiDYI-HATn1jvAkYSX>IN9?N zfDJZn#ffCdF*wN+58gI3X?9}uWK1|O4L@LKd(7w|3&fA+M)sHtfUQG}>Lz)DVN~we zLZHPg2-Q-RdCgCFIP8I=^!QZ#ffE!R=Vs!LQQ*{v6C4g+8>t8a5)gvJorXi%vy8Vx zIyk(;mwLc&T(@wP#jQ27cyRP2J}bak^YfHvWjEBM@8Dr$GIa-!c*$Y$4Lqio7O`=` zhhO^cB33&$W1PdxjYI;Qq%;y9{SB`1Ah@DEG?Go$aFtwC1Rs9A>`BAuFhzIdl6VWr3S~BOJ6ooU; z#bZaAWYB-1RDlPd8u5o4jBnsBu0A~q9nP!AL++6H_*{9o`8C=htq(v!*T_Sgg==sV zA$JnPAq;S2+@UJX5xL{=NPr$tA8c}*dj1@oL^g{ke14vZ$xb#4v0^EhFgfJY_?{r~ zdIjJeU!eevBf$@eC}}{7oMMkPAmdBO_2L8;n(qYTfQCfm@i<4}_MifSmy`H7QVG;S zYllHp|5(nS(d~}2!Ra1}3ko7)nq$eHgh@+fX^Z$aY#epHa z*-^Z;J-O)Nzu-cl^blh@9O0{Q&!J#Us7;Ws>XhtC>Z(+IV{~Of)9%DhCONTf+qUhA zZQFJxwryJzI}=W9O>koKX5J6?-nGtNy{fyqs=9Wc{p)$E zs)bWAYqY2;$j?N+*LVJaptSUWJ^}^lE?CeXpg{&i!j2e=EC3N-UyeVH{4S_Gp_n@Eh6^;oQh7hk|7aV8IxdtWgcA z&FC^|e9Sd?r7O;Gu1zvDOY`;`_RDoalG#HpyENpwW24<3g`nL?$)RB|C=jXl@k2R+ zYf1u9@DE4=8AtX$h?|IakRWsY;Wg(A4KsrLbn_G5A3FQU3n=^3FVg%nC(i=!O2bWl z$KBibfy&#$tvc$5Lju8K6CFppT1j-d4rqfV>t)a8O zM|VPgOu88hS9!6)iDvJRin7&xH1L`~9Mo?%c#(pxrM%$-={D9?=-%te0Z8vM@E}8H zcD-E!u{cRp@*r(IlFLTMl(-669ybfXyYIG~c^c;rVo zI|{k0IEsC$II`PA)%JpFj+$MkX<>REwHf(PW02Ou?vkw`r*x!Hnl9zZr)fCY7NzW6 zIyN1kY=6dQWGQ`uY{c*-Ro zB#q~;f3u73hxAy4#C>>ae5Yqv=rNLBms;TfW{czRfPnh(2yMX zUV-Q2wbKaa5x}q+n#08@n&4IYqMsFh-rZE)dfgZ#|9BwUNRRa?$SQ+rxF0i89DKOyS%3h-rZO49QDI-1 z^ZeWkB@lpqx`m!Ttb#_=i9PDl60F^UJsv1wU|=6(vj0QU<0eQpM{r{Q`rhUrb1xEm z|H6TF=Gv~gX;p-0-mpRxPmm0+iEUfBE>`bi_Cb$$^bZ(UP#q06emXuL8I1dA z0oK)yt`J8s+GR?(5>fVRn={2-5#F0Uuy3R<^6R_ScJ^q$J<`R-pW==+!>)w8X&Y}o zcLO|LZ(EY?QRnlpF9a^xz?>zMWosDG+ z(t0W?+gXp8y8DSOO_<9fn`pv5*l`tI18U-}8DU>0pQsDLA6e9OtBl zWMyJ5Uk>DXotvF6uZ$i!^sO)8nKMK>K_40QLu+HB9(g|-WgSC19cbZW287UjdTata zy4wr}A%U01^9!nAs$0tiMS(ywSGEKKmg}yY(kk zQZIMa;MA`&c%BA|NWA{i(DX#DZz`xa7x;y8Pu|UIFL2>8W-FdhSr8LkaRh}7?dwdO zdwloNNpf#|%c9zw*2GJW;Yg{OYEEf3?L;gmUI5$i*XU27PthL`dlPgL0POB&ZCKbB zwmbLlpQD#b%`r-Sa2Q+~@(PQLeXcx1Gu}zo%b~%hU!N~tU}w_jlP%}Dg7$Ro8N!Zo zHGa6#BkU3A{j^UH-&feg(E+m$pfbwIU@mEs^TZtPy z*hbpKc5adLF02U;#=J|G^lK7BR-VG}Uv6Qri9Y?;x&rw#$sH%caISB6yZMh*JJo3{ zFL<8EuO%JT5=FLQRW3h$Zu>nPma`Fg#6}JDdIN($ls$#pEl;|B1NM}_s~lB}65$PM z+B#dT&Ds>VOcm_m+$z9p{EGPrE~ymqqCeCOUwo;A@yt$R)#o)G|BSNq``{Iw zSH~DHi;KH3g3X2ns{tAmyE4y(EM>F3Z*r?TdhY!nYxcP^zNya-v4&!@`Qz5=K(pKI ziTEg@4Q73M&FMm}J=mn5;i@}N_WNd0Ei}tsN}*X4#bnh7)|J>t#AvhuVUki5*c!rH zWAS-yDDA!*+aXFe+A#iD2wl-Dyo5+jZNk0h=A-Vvuod;bT4GS3^dEvlC@ky_RMaWr zxCPIz|GBxtmL)e#^i1|-Z%LR0gO{aDT!UED6_c#tP{q{8AHV{qp0i^b^}c)S;t2_4 z%aew|K*g~p#nJ`ET7>unyUZVt0>xJ%`jz*z5$K7$$OlVSI6Zgt!HzYSBVVN^LSP3U zYFR)8Rx+%D+X~$;^}!D-wgUQ%(~SsQ@Dq$^Cz!$1VccxkqzE=>-=+!uFN=1YS+eC1 zejF^cMf0=8OgeH-RQ@6YK|9T8V+zgMHihet>z=fwuBq#@s+~ul) zz@I|DnkR_t-LfD|7KpXaF0S=&B;?eVAK#H+vWtgX*Y?)?YX9Yz-D0C)Z8U=qmc*44A~)!A%`E7Py4@x zA1&@WUe1Asc3=F$LX@cG3%iGmdpip52k(t<9QOvS?V2Z?qfsVXZ?AsNv zOXzhjp9&JC&p;(A1(SdKDW2U17naHqFG(k*K{=Wj6p_o8q29a~X}?b-zD`I_t&`28 z=JC>w=o4fsv_d4wLPk^>sF^m`4S1ULxnJOZ4pRsSvSIt(ONGZ}FDgg)NDm{B9>=#N z6j69Q`|Z`0C;F=u8N;8YJEi!#VE`V0XSnl~>8mPgK{99I?zvfGx3n_z(izu6iX{$ErPe&eZ>GR!^wyCUVrLf30B(ULR=81Y28@91<@{&fjd!0h8F zJbiZNVYfObM_qhYtB}}^fO?#3 z_r8yHx;@Y1_?@Lhc66O{vEk~J-cgmq<4)#0ZNS-`aWfvKRd(hu1D+tulj07Q(Nk&e zxv*?#wkN=z9+ZX{W54c`?6H(Qfb3Fih>7`pP2~PN4X$S02!ioig1Pkpd`kG%mzn6d?&C0 z7xy;d{^CmmRM!DskgFwC>NQTQxn_+|QZdY#=q|{#wx?P#%?u~*?tjR6Z11P9KvRFO z=x|i@iTM_nIS#Oa_AAsJQa7bK1UgoLh*+YjJ{QSRres6L*rR&;X zQ}`>Zh9W1zH-|B5K2CJ~l`(mbvAw%&?HBKgWH{9PfTp=8C8BTVErYtw?p;=e)-Q4| z1<5>8l|a8mARUSxe{ z^YGv8*Ctg;Om(Prt9|DMnS|oJ3iZNSY$r|QFtdO#{`JPROL0y)cR8-@xT@SBKr?7$ z$<>l!AXt3ty-02a@go@G`64eDwxxpJRB|ovBICYiBvJoIB=KQ%N}bw zIPpUsHc8xi>1St}lt>Z#+`PV}p-RjA;LK7T?iG(e3`Oy2VA25b+4GFt>B884u_jDK zm9*>%;5_?-xP|&~Lb~OI8n2&lo^vdk&Pw#fZ!*=z>^fp3RIwe&UN>(%afUnC@)@=T z11?Rz?MV>qGz;p&5tw1}4pdnSVpRK9^DN?9%t!*}i!7 z4`G7|^q`d+-Zt`5lE}2)*uXQVe188o^Z6-ETT;dYxnn! z4Ij}%SuK9KnYTl_o1O{B5-nx(DBYJ&eA~rVHkh=-52}VbvX@``+Fr+J#O;sf3NB3- zB-mXJ@@)L{RY%qDV)dJlqchf=wtRk{4|LrvKDfU%MjQG@C~8Kn{n3Z)J?C$L?AgAE zt=H@BOL;EM@+$j@C?Wdsjp8AQXMlXLI?F+he(Yft3#--8XrNNN)0K*o4G$S9Iy}m5 z(~oYkzW6$Nz^Y))70fa(0%G1o##MkpA{1*cUqxO!1u$t5G<++7>&c)$CJAGk=5&=O zWl!=ksyElS31J*yz{IZEL%kkd?HgZeD8_BRrY~F$)8VeI{#4F>NV=N>A&{{!f2QSU zmmZ#dC_St&@!V=4ZEo%no{pT7t|}YpR|z4JVW*-y8gk83_NKjPli*zn%`B8R}72rQkoi;Vkj_Ookx?Usj z`al~;C#mdldtYWHRg6BIx8*&9BX9NbKzdQz5)`!GBOfi9@dnur778TjEy;iXeWe|6 zJ+L3MXy5EF$+NLx#hkqBaNyyjQ%L>REmq%Yez^~0@3SMkaAf*Bhm_5rcGXHsM3+CX zm7H!EM>+K$>N6NyoTfeG?;H{ae=$bF7CVJU%PPn&m-*;DK-h2g(PHbT9gT02_-WB% z7pr~lzG)^$+%VLv({^ctIIUOC2)OE{FZO9Ifk*UseEsOqFarD^kg4M!s{6CogpVUJ@Mu#jHQVYq?Bv`| zA%qdsZ8p$E1~ez7$1dyR3u|KDnCD$`j8SCBWDGSk_C^QqMJdm>vw=%vn<8Mntbdg{ zo%snlTp*l+wH&V8tzYgqZ*&9{e)poC=_k!ZvXVCDyghukoUiUF{!f zWQE$(*X`>^Gq}z|&i#rVKVKdY%1T9;{IzQ?$4Uq8{OVAo3#kwbXwy%cVzCh+|HM}Q zRrCoKcl8=8bD_ggTPommC_*7onQxqHUvIS4{1Lu4i;y%GQ|Sm1u@3zni+`@ZG9ZZ# z9&7}bNPRfmRYKdbiwf}#kOQl=kF(mgv>}8e3-uB90Vy&B|ATv;uTVddcTskK8q`4> zYwYX3H0z-BOcw51J1VZ635|86GK?6~7U$HiJFro3)(s!Dt32(xrTMpm(34G*5@TcG z{D?{zmt<|6r-Velc@Z1NrI@XNqhRx!09zlb&cRBC!%|M%G_gDAi(3t%LKFQnpo>N3ZU^^KRQO1DfpDY`q zgqsnmtG~~b&BYMo-TGIcgiZv^DY*U&la%L8pM_LwA+0wgaSrub*aALpMIeRV` z=wFt1ANehjS}&|z@ZKv&xj`4(1a5MTd^%rerw=8g! z5)xh*b3&Vm4w%xNbbT>rmoN+a?kmXMK%6={JwbK(9DN_0r;ZzJniJ(djsc}T+l_qw zx$2`J!$VNlWzif+orJJtp@|E){*GqHNpZ(RCFLiVRwA8)YBqfRdv#uS4jIOqh~XKp zv$$Ux`uEc}L4_oQyFC`+@kyB9tKWp;pFKwh0K#LiFbZlqi%Df#9L);_@}$<11DJKt zuW6c_p;4Jd$m#B06C6y2)tF83PPNpgFW}X@NmKmXC;VjdAc-~H?N0M-bW~#N@n$Y* zUGiGY)9lH-<+t#v9oPPTBMYGZ5iju8+@FC6I5+wgE|s($xTqg=$%zx)Llc?x7t*(0 zn#n`TQZjP1p;pz2Q`#Ka%N}dKGG>4Ba-wdNZo?=zyYRw?LYsLpsGixF=vZ1S5KMDRfM(-w}GdzfaFr8SFD;>tWiT zY(i%{&rEIFiDf(=`(386xC+QYiF6jB_j-Jn*wIxuHrwfEh}FRJSw`5af&o224T{qa z&40p~i=w~L;Y-|AI;T3099|=iK3+Si<5oUiULT|{v&wR7&lG-duE@ToJ0CLS?lGG2 zvQB#b&2WX3BJ)U>RScGiOo8e3oV27zk4cE6A}R4T8i=qT8r$Z_mO9vX*m#(QUvpA2 zVQEkF`il{n6<;50-yCTs1YcJUhkjZ_rBSlSbYNvWz9d(ss4hhZ+(DGb%-lnBDeDo6 zBklf0vRFFD;$(}3Wn$GOia&p>$_Bi#;&0E4&3uY)9AaG~3{HC>X(t+kIb%;CVCo+d zmO%VS+#`4J`T*R#29Sx!TZJE)82%d9RM~m|rO!n`D9%>j$m|vP$KXzaBj6}qv+xzgN>ffR4t3~-bVXrp^8=J9fQ)z zz>K1K><7D-U>lC+PvR=j8Irr8F5xt_VWA567*5T2KT_o$pf{YCzK?dIU&2R$Dpew%F7U_G~VI+ZJsT@4}5$SZ5L( zl!W{v#wV3qn7ey5zD7}Qpex^oc)U!NBf~b9E2iFxMBE4J!>Zg6e^t)-L@=(;v6)<3 z0`$j936(<0sm;j32YgDWsTsT@(TRe;oxRDTwM+UBWA4B#mB_3!g9iFKFJ0Uym|C1( zGM(=(9mlDl3|G<-3c$N(xee_|GUf4ROLAV6rB>u0)Q5!bW;`n|yTtT0eS@gwszLSF zg8DK%DV0iH+S5XlDcCMIOeHy0TEB|!Zo0+FoGMotAFaoD&Q-YVegNE13mmXo8M~^0 zg|Y+^kq>gKWQL9NQ+o(i3D;nZe$|q@tmQlb-&Oey*-k<+siVrFv}AHLpBTz#VMT%X9`h=<(o9;>m+c9x9n-NhRK*v3V?M`m48UF1b7oEO8D3K@ zxErWe;m>-IJ|LXpu4fe$bXjIrWlMf&%PnT&0O%G_L6y+QfIvm^N@x6)XNB-R86D$; z@_2u)+kPvK+88&AIk#M=9tknf=WIEtQCeAXHd3L?g#H7cT~>(o}AD z?ly8Es{OM{gY09Zf0I0dK-QW*9nl3je0p!S_E(~AR!~};Gn4;%CqAO-2ToC$%+W za@}b_EwMI9$d= z=9H_F)|KJ@&*zio)L^ZM99^+8sS@*SUzO?tv+LhUmw47fq=<{V1r+b0=id#6MCzW; zt{|t82K!xjlM8>Zsik6>H^bl$?nL_uD-WwyY%-Zx*-k7LTei;5xjDBA7aJdNHqjLM z(D4q-RyfFJT*sz&Fh%eD1nt`IUB6&2s|}9?gvkqx1$(>8=v`pMxOn<~lx{N{Q4Wj9 zqH-z0014S2=1d&*iX6m@Mo=u~MR( zY4tkpiP%Rx8d)vPM}H4e;i|-6x&u2__yI&aIP!@@>IwkH-7!Y2L|))pY;L>tA4v&p zJs0=108)yfGEd7`RQ^H$Y=h|GL1JOWNdXeV;R+X&9j^g^wkRc}+SB*D;nu!nNNF`|-=$EtHT*Br2 zQo8;#i@Mf{DwoF9jhCO?K_bU`jvzV)pGPp@rBxrZmKLJUipZg$s z9xM8c~)R4 z76ORzv}`>CXI$Y~J2Qr4i;PL+|&lMxc!YLij|6-l&Tv$Pc%f`%EboIQB6z>WM}Q_F1w4 zgA7<43z1jH+Olw$vji9sj7r3bwGa0-!6jir*3rM9DUt+zq$cz8?p~D*_ z&ST&j0=9hP+W#5;m!=xIqQUN&Y_K@%(`(3}^6Uu%yJRG^5Se^Ei8 z=uesy!i0PeuPUGrJ=+&W4l|UIa36nFK*d?J_c=C#mEm*NYMmBr{9G-;=Ufd``Jcs9 zF9Q>@ig0Pm(?Bph&ih}E2=9S|U&_V1q7Ska;a{%s|GD~ab?==;uu(pb(*mc`W#`g= z#yM4I?zl%-?-l1{`F7s-+1taWRmssBQ!j*Z#%2*IRiIa2WWan8O*jjf8gB<)s!Ews-aT67*wlLD*p}vXaiFO6h%(#yHzHc;J^Es zmIM?ubNma_3}1h;EPc+4k1YLGeF)vz&huyC1I>ej7@F(eIZNkRySR0|<~h`$HyUzIN&RVcOm5_GN(W`d5 z_Q63ayeg9BR>f5olk1+Q!+Rarn22i8aPq~n1-b|KLvA>=7yHFDQA?H0x$az*(Z5aP z)HM8me)v)K~H@*H<3E)6{?{ z!RE58A+o_bL9Uv#kz$Z?_Utfe9yIso7oG-&=`6XmXUJPDnd5sdfyH*8I)6R=;(GTT zUk@Qb`#zMs`Se!aq6I9rJ`)JNfUVwQj<4QQXxOqupx$!)B?co@tvUaDzLbu0X01v9 zYkQ0U?M<)t=cby!N3dsazU~erd~+o=W)^2_%`Nc240c;S5${?#@5}-3&e3T-TYjwr}a~`M-i%Uk}!1dFq)spMrXelh)F$i5g9s+W!?) z#!lVZT*Y(rLr?{pQ~UwvW94A}73hSlOqIBUx$)S8im}#mG2Ekyv^v&C*-r3c{uV~r zOz>ZwB#g3I;Fkts$VVWK2Yc;G)_gS%d}^ySaxtO`z-P(3#V-hYdv0YbvXv33m(^z5lBhz>YwN_ls_AbwruJO* zyESFLfFBx$>1(cNkOT}-n9_iO#p)_X+38N$eVfnHtGPlhmU6}?i@9tpRZO2|iy3&> zn4wCYXcDH=Oh7Q~*WfiG655}l+OjPN_>%qvfA!pbAU>3?3gOkIm+ zZ8-6A&IToEILUO*hAnDzZzCoD;T)x6NUCkM*`iiklBtpnYwS-~L#}Q0Re4QDO$%Hu zCi*>VAVt;HClOzqPD%M}wPGYi6^+x{$bn7`Z@BnZIo_{pMMKgeu{t_x_=N!FP{UKt zazaP@Ke#s=)e0Q{s|Cu&Shy0rU&t7cB zN=8{Q>Hpn}hB@+2x1sEhmldw!A0&h2FKcc;LJct$D+&K4Xz*XA;Jz_1@BeccXFWy3^Sa_lsb$tt>X@Nooh-)w;%b--IhMmslO%y2LS%`&ym>`l_LGVS6!cr_G;JqX-V_PEl! zj0eJ|)iJyVviZ!d1=0En%~rdf*podz<}fKr3O8COdq&Xcn)kKSIn6E zgRK+SYGu~kGGZ+AW%%UFmwu)Q@KT0C@%3pQW@4+?1+=A&Ax97h{F=fN`($OlWd)R@ zXsm@)^}OpNw)A~w37Y!EiFM+@3#O zVu3`}$F~A&NmH0nq8Alw%N=7dasP!PdIL#Ywgb0{Q!lnkqbz0c5T}~x^0Ad54VuzG zT>3S%xECi10<#q4e?G){ex2Vq7yOj)*#yzO+{XzteGYcvFGb)QLtggIIi8qf`8(h3 z*C_}%zaoJ;Qha^=1+&P{?-113hLrtv3NQ*q?|)Mt&j;YvmtXr^-1)h_RP+9+E_|g> z-T^d4iB^T;-+q{{lQ;$ek_S2aVYWbS#&K;Jwo{7Ek4wlHy}d1c28TZMw7=4mmMUnv zxUu;4ex!Y>oL(~oQ=Zhx6}^v>0Og53jW8O8&#dmjoHHM}T3^Z%DT2V9H2Hk#o3B#p z+cXS0`H~6cbP=4V#SVXp`Cbo70LeW)+u)U?47T&FiQUa#A@O^Hs_iA=IJERBk|0=Zxt zBbkRLyd1Ut_BM05_4Oh>6Ve(>d+vwkG5`89Je>tSYQ6MX@|Jm6X>SubxbSP81vgZv zs?+(sEVt?krE*IJ>pI-;XDbV9H0T>j268;jmxk?wzf%A7sJ8pAHAiXKx>$OXc&|0| z^n*%lq_!40CAeDBM4f17sb3=&kkb{D)L42)4XU+R0)dbl(8e-wM6qnP%YJ47T{G2| zT@U;2^%CAh=2kLrp5WGNt-jtwXhsUw0_Zz4RMu;~JvG7WVbzxQ=Vy4AOqYYOfo#Co z_m%MO96BIHS9!>6-1#x8q?_if9y{=yyYO{5YNn^T>UU3b<|94bd!md?9{8NrYH?}_ zpOw~HQftZQJpQ)kz4y8kZC9!@oK`>+@wqk@?XuIA8*NTeT#2!Z=}ES(4)@v*nbAFr z$#FXqG))n`>98qkluQ(=kE>ZkaTKIjxL{xfSZZfU#=Yi?Oe+SkYJ% zsgW&_rbaeK8K_yBN8046o~eR#Tx=1 zSmOfOn|AtoxVV2EPYZku;+UVuh3!}Dzx{E06+sH;TmpE^BBmxdW7uY!*84^r&0IEx zV)*1hz+K8TKjR93_don)*PZ6`zkb4p2K9N)WO;1sb#9AHMa-1TUarY?cU`zQFzdi} zUl-t-1NK2R)ilN8#(Xsdep-CaZ>>*#;pem)^VRR&H(`)KzZne5U2l*CuW zpa*5}fLC8%vFysZ$cI}v60+ta)#N%G&9^Mdn$&AMl-)r89Cv)Vxbs@c?WWkqrO@`| zVKwQ|YStxYEMvjtxqw2|=lSr#pX%w_j9Mu(92G(vkyNwzM=k2~{o8u6GXWzBA|7(; z0%bdO(NOgCHu->YL)faG2jb(JSp_bQ&%1dX2k_ zxPy72)7>n4U08+GZGY07VYV+!C$nW`6Z{Xlee zJVvrxVtiLb!M_Kt|Hdj*_Zl7j!S?Gf%2vZ{$JW|5Kj%RBV$)_m$Q?!LyyOUr|L)Wv z0>%)@g}_~Olsu&?1~Ju0|JwGG4r|)JGRu^pHRrcJt4vL2RUiC~=dR(@pEYl$gnQfs znLRkm&lvuA!=KuG*YtDe+q%5?{y&EF$KyxCRX#Z)ICw#TpjQit0yX1|qX^B7Wbp0f5uQa~_z=ZG*26xM2!hFCf2A{Ub9u|Ncj2 zDmEN*PXJvpV6n=UglyuJ$tC3JVYG5H(l(W4#UBe^Mnw$uo34N>K>Ewwb}(x4O%`vF z37E?xpKE}bQr7<6f(cHzMb%WYL^J0)$|U2+%6E&Am3U6RS*s9))p3;4>Fg2t6{;>) z75w@;bpP(hRKdB{2r>!Y1~6bAxWiGa!#S}3CsV6?#UCD*@da^8Le%BJqtIulGQ_T!)f9mpXRjlpzbIV~ zm0T4rivP>^5&3SBeSlSz`u)2*3_az)X zc5eXE2BZD_>#R|voa4lFJ2^<4FLby?Wg+jz#lSFb7dPVdmDG~5tV6S}wlj&(G=f8? zYI|pNL|r{XTlBXyi#Tz~3>6|sY_8S(!txm@t(<0EIQOHC4qvZJR)(yi)3U9DB%_-r-> zod&wF9#PV{d6)U4=^hsrJ_i&FLFf(pw*F!q4(ptmkkr63E|fmUX}`^ zdo0^E#bzt&i6@2^`rMjvpSzTm9QMPqmkE-q&yA&~Z|KU0FOZ)pi@{toQGt90Rv3Y| zS`A?L!tY~}KY3a$!Ej{1Vfoy*;`pO&6CqvQ9_ujXWg+B_cRXDv%68=oOj5GZ@1kY4 zC@~=kZNjCnWpmRoBc+iV&f`5x&YLVn3}vjAL!w zF(^qSURFsCjpqF;$LIT^Y3Q%IO2GCYfv1t)Zgz+$IU)3PtJB#T?C|mC#)_}^#bHA- zpFQu2)fga_1E$;-aM|5oC88*|s_&~Erm%$7H(XmqeSnsQb@Ly`cn^}l;A}-)_+iU2 zjmuTJ0$cq8`wGyHfB($E6Pp9|cmC)Wz?K!?KLU>!2UDK?0WO2uK~%u57pq?& zUL@Ff9fhOQ?Qyr|7|DS#Q27Uzi=30!|L|_3f9Vce&&q8DTL<0sX5x8RES=;xFut_! zhC3bH8{{cW1^23J^8SIUzb4meH!gF*8gad}eiT$TXYlQr4gi&~q$8#2qjXU(L;|BU z${J1R#^>#E#i{m>Y33AK8x{^5Gg>s~u#(k1N=5u;toM@TBb&4Xp&F(7M5}$CN`ti8 zXaHf?Ox`2$H$c_~bXsgs9mhe}2>IL{G=bhpwhNvrs!*M0oCId>50N_k)r`_ z5_kKr%m-OSnS<`L@XC|hb94pF+|j>b>J|5iycRLB2S-mr%<}O#~uo$;Cd+)ZJ5+Q{XN9NP{8;#J<09ZwjOP;pfKhG%h zlRQYoe_0$Yj0;ThL4;Te>`D))M+nr;3XB1Nkj52rl)PT)v+h_2^>vx2mVhgA-)m zi87ttq=n=5Y=f90SI}ialHR|QMJ6SUbA#&>CT!9!E!>qSFRe&JmqX}D z-D&Ibyba?PMs#do{1d~a+fH`yds*u4YN0{P#rFm*Wcg=~tG1-J$wfeKbm-rgH$tVW zu1i+vT3(Ix7rG#WM!9<($nJ;_kP{?$6H9@p%v=mUmtVA^-6m1f>&vXsZjveE3qME9 zQveM^Yk9ti7M1pLORE*x{boIOeXCi7B=ljfDONRpUT%KZ7Y9$OjO@Y@?Sx0yEFSZ$ z^g}yCkEIHfIH@od=caS~#*&ot@4S~D_ zybtINBqt$@;eVN;&}Zwm=$O^=j9mpz!(UneNK-T(Fe;3->P-F@dQAj8l?u~5yj~L! zd-QI-8g!z_8~r0lP+f;~u&Hk=89RE^j-R;aAWm#xSSF(vM4B~bS~aS@$j)ilPH(02 zlZ@p*@qzlNW`nIL%;`Cpt1P94WV*)w%EN4!aUxf`Dp$PF7rwlp0>3V`eem@<>0&Pk zc0G5!4Hf6!%dXIuuB8qw81PTdE&GjiL?RZ^4H57l#twhjCdhPS3_b`?Ggf~;jlBKs z?Fh9M1YunpMmsn4QbU?%s6f*~n~T+i zMtN>)*eT$X;V>H+a9@tantbEkOgBp~hX;2!j#c53f}Jf6{*~}^b=3Id=?YGT_Ag<~ z5k1c{<@w#-l{;$H_3$s;OyBm7x7v0~UyY6CJ{r3Xz7E6BZpqG`89AmVuucG=*agc1Uc*oKZ05dAsywt_GW8_ZiVBz z*=eiVjLTYU)NC{MA*-GGN_$45yFxh!@-)(9!Q|N84n>oq2L!FkpKXa0gcP9h(R$dQs3k;nk;Hy(87*QK)^+^z71{A% z_k{gp`CI&na#n#r>Ev-HeV2|u@{BBntg~}fHdCJQ1iVzR?9r5nY~~S42ix&$Yr1`w z=R&sq;m|WJOIe(x*)Z|5@x|MJ{dzII0y~m&17mHbHbBtU_J?_s#+w-y(=+8_n{~{+ z>GiD>tv?bG#IeCCt|E>O9%HFxwT~Z1q~O@j_U8T@wfW22ed2t36{gqcgAcT-oC-RBu?Yw(5E( zZKMj3e;)aI3EY#?jvGZ#qDENpEtXOpgUbY;39MY|3gYFE;ojXJ`RrmhIMXl``1F+C zkl!97X<%qHG63$GP-C4CDlKPJ5IjOqrR69Vu6p|$UCkTpu89HmhP$^C<LovlR2`pQ#8c(|dSk)9?esUR z$EXP4bsRZ-vAY(QhAw{IinJoTx;2}DD*qp*zA?IzF4{J>ZQHhO+g7Jzvt!$K$9Ct$ zIk7wH*tVUQ@7_1Ydp~Ma?K)%cxoZEYGit55<{Y`UVp*&ygM1UlZQ0dp<+y*Iw{hAT z1nvHo1yi^fvm9S=m|g!zR?Bcys57`o5Zk4_%m&ZsJ#dE#&2ES^$w0`P!%83eXuKca z*9by@RM{`u_A8ZU`- z$$@SBUcQ36xzXr@@x*L(imS6c81Z{|6{x}K;_>=6>@Iv8|pNHn_ zn>)sRifq&IXDPI3tUjf3?ddwLos7F2jeEJ@%+Tne!>brenpy!tY0J2X#)P&*DvXJ? z(qfh42eGsKHqvowHPu8Hp?y*_R>sm+(AjYdp7+U&P_qZ^C9dM0R+ZF+9VfKYSu@YG z@NW#8uwZrnzdYiWa)U*1C2;_L(LL1{#vZ|6p*JDY#K*PXX@DIZD6) zJ#)w0!nVbKa|j-$M0>0G10M&|U}`&7_#g#oPJFuJNsBCTY9rGV|8YG?Z299TxbM|D z{}Ky-F2ZnLVc?R0EIC=l0B9@&W$N4o3C2shHnbrxUgrqbiGR-bqx1ayBlu3^?pRCC zE~;ejv2CAj5;kKjGUsdd6nb`Xw7X+bv)w=X ziS%X_P(00m!ie>$XRbsP?^g0}#|NK@bR%J=#-dhzoh`p^XSl{)2i(yDc}4ToIHh_^ zMWffHnwtrB=PyItHy?{&-9H%z@8`gfBU1)U6_My4;#jZa|N5f)YQaKIyl8mMTdNt^ zr+v@`!uzp5j&0{TVgPFnO6jZ@dB7|IbMGodhZJs8DE9>Z%dQIt*Jv_65+xkI4-)#B zOAq{?A7RIRsS)GcAL*##v_y7IdD&p#uW5m&cICO*ciu36t9zaJ-k~~*BI!Yy|1rJXTUq1qIex;kr27 z(4`Dves#u@-V2MvVtSxedSlfRg&;!Mlr17d1DABWe%rsbcHm$#cTqkd2G@_Sygh}n ze;ivI^5j+%ru7rr7RQ;OMSCiV4alSAPbW%58e$RmZlmE!DSQt( zD5~l5)$RO$oOggsLW1Le4X&!e@U#f{>z-OuHMx-%x~_iTF%*CBNHy4Km)R}Xf!%Sj zayTN)I}Mmxl%Xpv#^$LDx`u@C;IE^(hIlHhY#%Wf?*lpj)0Qkf(L zCl3Uh8kQmdOBVV)2zT7%TDPnK5Hk(=u`=nZ$=>{b=|Z{H_q6(7{69$sVdIkWu$L03 zzzhrFyI#v+>8g>uoQK5-_i+`9tbTW3`<%u!pL_#6V%Arzd{eAkV{3-|b~ik@&U05A zU9~2WHcw3lrun-!hkpF!>ac7+P#l55Zqbb}1|)xjS_$y#ju8ZLldm?Y7yEmGmm$_= zJvuj`T@30k+ON=llZEnG@z;}0z^=UMhc^N+TlKQMDSVNWKah9f5&j+)ZVX=U=D5r-D_TT{E03;ukz+a;AcZu++uwoq&`+7zHO0RZ zrx#?jRp+Pa>AxBB7BWoi3ZXXO0ZAoBUazdV{=d%aiPfayCldFAzRddb&)vD=v-BQurn!lr3R(`}_%1??~3FQIzKV zpYeEWiybpkT^VLrc}+$kA2VLF)dx)9aQQ4jz2X?aR2j#rBHh>H5icYR%RyHc@Sz z>R5}#sY=TUpRPs+0%N?)9w;5CB%)}gH2NoCo}THFU_ooxL6IULzx)%zWV#bl=y<|8 zlZu=<_+&c z=pa<)H*8W!ZuyDQ>v2m`HL^Nq3mH;6*2+-u=kK4VR9CuYWN9^)B-G+)XwS2lCFr2s z2y*o*f>_;l{VTuMnT;YBf=h}nLU-I`5UWBJr$(Bkk*LC>TueE;@<1I|v2DCZSJa3$z z^sRCN+E_D&!ex8*IvMGNGv&6ItQ42$V2@;CP7A8o?=Ma36A+l3Va(_g=rr&d^EmcC z!wjDK&jB7Q2NbLGw0DO7POYh*uP;pT(=auNpfYE-m#h*L=d@R;)VJQzY4LE}1^YHT zZRVR%>hU`|cY-#mNZtj@s`EIuKTm?F_JrMe#N1sSKwUr*+s^^ErD<~84FTQTaJ2dD zJj^03mOB7!pe5nZKg?-gL%@1J)SXZb561U(?o+>`Hpf+lnHKDrucn_8sI_zupnS^A zh4A1_ho-<^uSVdlWftJ6r^3w3Sdmib7iOVWT_|9OnM!>T{3`G3WN5R#2I>8eiKjhr z>Q$0`H?6NY>xSxiAj`C|Uggk%l=laADsNsepJ92Skf)YPIUlnPu^arUI5GV6oOakd z=r$5Va&00ws9&XIle>nf2;YlFkTBj0oE{yGG3l5GC(S-q&|p;b0sU_kOm_DO$Zxu5 z@F&1j)OfR@Fvdn_R*-|?7!ME24IU9byJ;|(YQCXxT$rJP@2gH@x%?Bt0jYfMWXkv& z*;|(k&@JYS3v}ORs=f3(U~KJv7SNNi?`)P4P4ri zdPySmH<&)4J1BvC_-<>&B$SFQ?pjLE?)8iK1%{qCvcZYBaR*!P;M0`i7}Vb;Mw2}W z+S5~$WmiEc{6Z%nAEQ-(=@7ip?57b7&WLqg^?JhXGlwRZGrSFswgj1#nznduRUbNo!*W7Z}{=E1!@rcq}w_y^8YzmzOAx3;$AG$Z3C zaARrpW^{mqE+Q^JS|0nebQ?i{0*s80h4O(aT%wEDj%=t%4{@B}v0X*J@PiZ(7$eMr z*)JsjW1;<1q!w5ZXh}f15torGq(E^P3X1NdF-a@yl7Hkd=A)ZN&4p#ETlr$4i^}N2 ziR9q-g+C+Pv`Y^yGP|7sEe0KrJ$<@~MwBb0!-y&qc)*P`?bpF?cgpCE*}Eqs=BV)! zs^PSSp;mx(?*o}@7fe5UY8*_&4o68PC*HtkEcO57gd+$ zx6$e^_{q^X60AYJ%`{=i zooWfQO`A>eK+i5T3D%B}`mZS=52z1#da(Zc2$A!Gi}b})vasvBPQeD;)-!q$zgD$I zsE--()$}%O2CHfG3T?@3c04~plY7b@Aom-oApXw1Epu*&`4jyB`(5y&mmIy=6)C{o zDyTZM3+N}Wy2o#-MyW8z=V+8Kd0S)S@}3LhKYf+@lT*6Z^~Y@pN+8T716N$)uvCs> z%z-BbR7%;|?ipE9aNgoKLR{#_fG2E;_NIoyVCpxm>sr-@_any*NFksSryt;Q9;E@4 zeYQl~j#2^x#;xj%C0B;m6*94h5IO!proSAqq8S!A(o%M!(&q zg8{0IHsEKY2HdPlW4W~Ex5wh0%*FTmi4btKK#ziS{mP+~XO6>wutIVR25KfXLFg$& zG(k9H^*xx8{A0}g=EU^q`lH$7vNvhA>c5yq0pmQAuHUENedtBWkh&X0kN%a^w zlnm!k@^pEV85*)DT)zVLR!>NB7&2%LbIX6RI%zUkdAm9u@HXEt_K+tplQQ8mxHNHQ zqPVC9z|sk9Ao;El>ggOgJ|c;kdB4f-FNQL~YX)BX#U?jV=-(`RRX?dBd)vd?B@K zChSmw-F9OI6h6uCIX(~S-x?KK=Uun=pTh3s(%GHYS_mb#7Y&D}C{V=QOPHXd@H=xCzUepVKUaN_@<-+v!bC#|I>s+&yp=BB@C81`5|amuY1*Q`npG>C zr+UmkG%aySq)I^oBgb2eiEfk)W8$D{hSl=pu8_ZJXPCR|zRBjSZ%PNvm*vkJ4)W+> zwVn%U1+z8%0@!^e)=R3S?v*J5UVI(pw2g%3i=zs|&FeG!74-J?GKySePJz}X1k>b) zBTo{w{}2bG(hjsU!Q6|ohiJSrV+X%NzIeAjZIS{=I`+rdBrKSo@+-Y4gCq#?q!mZDKwJW0r+{3xmiV+ zR|V&gdV(O1tQ<{~Mq)5xuzzr}cE#$7-J{RsSPyk-mojZ{zZ57TD$2B%*S~FA0qo5u zR>e4L6&tQMo(6r7r<7DY1`-k*Q`4 z6;3MP9K$yQUaF-GFBKgNiI>qqPk*;FOy^~xs~m1vS-T8-2iyuMq2H|_3w*n?g+Rtd%lYsrxeXw?ons1Uw4^gns6|t9=0RemNpthBZN%=q7C>E)_02w%yRihCJG_FbDB6H(xW3H1j<~3ci z7Q~KyL)8*Lj{u&^7W!65Vo#&(Tdbv?2Z{XdAA7&xUV<(S2}tpYj9^aXA3^sw6ZvS~ z{neaMR*i|a*i>0Ph;^FDZ?d`8d-~)%h`jO^Z%oAqmrQ*%Zz9L^0A^|^bmOi078A)^ndmOF5we4NHPD2VIjZ{{>Kcni^r>P0%kh$XbxgTXAa1up{Q zfn_2wm}{moAJLyqOdEE~evZ~pp+a#34eHylK$z~BT}uVHXk+_|>$RR4wfQXn)DNA> zRPg>ZY5h#JpRY?D2-+@{C6@!bgnbA2>Ik@=RX zc%!?F-kuZCBh|u-fa9E$uzN~kTdDL9Rn=Ox7+js??@+8`1( zYmYMM`foT{170N>F0tK?jcqUu{VDXTxRXZ((E(i3t~0hq?w~7~ycZKU24T4Rx$}BS z%>x5c(E$xye|%ZHV`W8YIwX_tKq!;e$5=sff0nZM&v%INGpBOi zb0rfcL7AkK!jqKCjq%gWh&kQHZ%-WHDMzLe-V4a%^~{P2-D--D#&&W-;{aU`T4v71 z)nk1?IqI(xP5-T&gLtxc0bALiSBfHrYx8Q8*GC?4uYW14DYY0y+i9+;AX|15vm%av zd=uA5!8M{|mtHyhwSM~Uv;)!KUVigr;`itNsDJ$7Fv&8{bvf$~kCZwFw1i=CF|+^HP;8Yh>3cwwUFf(63%hn<(!zYt7N zMfB2YwGs4dLbNyaXjCCYyysj2S2gs3e)xJKw?)Rq#SUDXcpnLD1aqq3B5 zj!GxLz734LUCO?|g{YVC)Toa>B8{$V5_KuBE47W3gO7FT-6-xAF*pyVmuLzqzdPe(F>;m9wmK|4bN&q>pm({gIkhBA;ohK7XWN?WQe>>uSnof4WAaZWC8EIUH^& zbk|_rw7C;rwmP#$ggRVxNbpmqB6;hCA=Tit3sL?9_h6YlCK#bjV6#Et0H8S@TX9a! zw34~IB<{++@YL!zQ^Qr4xl($!Ba4(9=@uS@(0JIu_R^EV!k8iNz}E% zGl2_aeqo!BIzBHcFayVuMf>3#9pYq;O-d^E_zZyDx?eDaN^ibjzN4*4B}X?u6!h91 zWA=g>q6$wVopHstJii%dnO+Hr+(_K~#Yj@RdMy+WlN`GP`-M|~*^LtMN4Zocw&mvb z5-Ke#&eW7+2X#j#f3%RW_f|9n=kkb%)4=LwP^zQ%aU2@KLqqWC*A81dr^%J^%P&UJ zynsto^00I^3&$}#q4>|DcuCfO6A0Q-Az?Bbuda>Fqpo6ZIc7r+@BbFih<>m7lYY@k zVbnvxA*<2GyQtGml>HIy&tb^gXL?-9*-_MB?|B$e!-S``iQQM!DYK8I#=&hJHKy7wm@|7)-MDOQPD81X9e&aRcJX zp@eM)f8EzhMGS;8E^c89r^oib%*}vO6PZ#|ERUEv?#OT^i3`TJ1#TZQ>mZ!+Xk30_ zHrRW)I*oYTWeT9-n9nzHJeG9|;0OsGQi$H2rXn3U?_#lP@aCKMH-qsgg=C;6X3aO` zrp9G%TmbOipa%2wIw-ALLXK0E7*J5xUf6ZN&$M1aI_Sk6H1_K^mmp6+lLwsJdI^be zIO7aVPtTj-_mx?I^4E~5MLj48G-+ZI8J*76@XlBWmXfZUvoVhLuLZu8S092*-IM$N zf?<|nAIkR}6Xo9z?dW}1ceS`VzVPoj>g#EF%_!~r2>Kviesl^&HZTYsiGz(3M%_|& zA)LwZqbs1yHy?Rbd)j&X)TDlvRG!hNnVAYf@$ySGetNp5Ib9ge`&Z(;MifBsP(OTe z3F2-Yc&*9v$nvPDnI$`Z5+RETH2vcO(^Vn$?#m6cRHs?n`(@JFVB`RLWIFtvyS6*o zt9bdB@~dFz=buqNJqiMkin{z`b-4>6U}Z=rGJfjJivB*Yc>+-v8Ovu-3%+Se9)dILgk4hu$wNj)?R%+W!)CI zMI$1dk%93w$Mkj=tI63yV0g5c#4yD<)b$TUk-_MQ4?D@^W(X zQ?ZeHHo4P08rDEOc+KsQDTqkHW8-8AQz%Q`k8x{dYSm0l+e-zyM33dwQL#Sc@&{f{ zhRR`5iduLl>!GVC?N&Oz&oZH-Q^7KL5ASo1k=8Zfi%IL<%)5Fz4#n zOTI}t_p?>5%z-gCt4psFdTH~+t`$b;{c#PV=z}D48X3&mndOE!03Hje2_bM#9<;X> zFvjhP`Tp4RCmH5e9$Gt!Eigejk$^28^ix884L7GwF+J)kuJbSTUIMLn>dcngU2{wiC zSlypX6cD4KweW?0V4p09SvdLg8RJj~QE#Nm5XK6~a)E%*4&qyqmpVl$T*ye`e)x<8 zyobNzGqU#jj+NcZOwCVts}@F0Ph9-91$Ar%670LqGJtuj0AMGi+vR4^gDabZ0G> z=0r<^U1MS{s2lb@*mXX@{in(FWqp+buYk`EHOUcGB@f3Zz7Gi*(Zgpu|B>Hg3idMyT zp&nymiqBO^=9#dd3Ald2|Z|MepBtvOY;)Mvy=^tAjEohJ0*HF~(hOgac zOw#;?om`ohHoaDL8VC0`5ka-6x>~cd+8lxTK{?k(PFo&~{&oMtk(Y!iN8X_V#1}N$P35p{%t0h-C62N?jPl)2EM=pjFFZS=Uu%k)+(y z&BF?ODWSN*j0IveiF@(Bi{O%2LCiqJhJ-(q_o!|AbC1G0ne~a;6*?O{D6zDRB zceq|{lc^y_-5I{;ZVfm#Vxpuu!HeA=bR8!ZW;5^OjE4Mg6~vu7fNltTCYUHqe&=q3 zZ&X|iH?r2WU+|2=0YQstUX@v112OWo(oVn*q?hU~Rwc*}4vBqt6eea+TL{-jYsZPUlbos4&qsyoUL6NUtkqc-gWj{o@pL(%-39ab+c{jaJL?VqP zmOh#&&Y%Pd$5FT;O+c47&XqK6QNpZ0RfK4Ktn7DiPl@O6AwcN+Q}+Y()c4RP#fX@& zfhGF7)#^($&kLEZg_I0}T#u;UD$vaVc|iO~jvh1SPsOjnwe`ZT>-uX9=nJ(1-H~F> zlsuS)N2+My;r@J0MA5d5JsK&Gvvmh;`akf}%w9y0QR{CANxq%+3ZJmbB_!l`a&=rr zohiPa-{*jw&+P;2>WdnJ>VzlzVq9}J@YWCpr|!kVhMOvaMqtKs53M_sLqm#04$}#t z47}D%Gh#lL^iocUjOL9T_Ygs73s}>Ay$nx$>AR58ct6El322YHEIoDP#)6-Um!W+q zh_y2PBHQvHn<;c(t5_rCXv20Nj#n-C+R!x~+>neHqBni$GD}N=gzIi6R57EDR~$^E z#FfYGP^!Z|HGgUvd-HC9o^5=3&8AAdjIRLE4@fO7JtCrI@^v;}wA~cV*Z)$V!n0MO zIp%ut?Yp8>-um1KAA0?Ke0 zle&DB=q*rOeW&4nEkP9fA;juyp{?Ve31bii-LgV_muq+6vp1BHNOsUBjX$K#e6F*rgd9GNoEpVtxujV3w)b>?H5g z_B^m`x_hA{j=JSV><6rQjQSrY_F_`X5z{ve!~hCafe#sYe~Gf}6lM5*J@`xg*L#T! z4HI6qOIUHPoY~8BFcy0dQ-1RoOfIP}%T<#gTRWZyE1EUZMJT%*Otg`Gw-P$hto+eh zyWGabwpG@sGDQ4SFdN7kVq{qG_=mCdM;P`hxdLdMe`!tL)0&L_ouw#x_LTqv`36^F z{#tk;u|Cb;V;?8jp@#L%7#eBE)bYmqzWeuWvJ*IP0u^tu92{G0N7NKNg9ZuNI|%OS z{hZUT|LQn@R|*C_E{>N$B+}ltz3hKWw&Av+1c0Q>OC;NpS(Xo6v)d1M2Z>W1>oF$+ z;S++wqGHPGhUJfv)G`n;l048XmkbJ#peL9UgOxGN(Z)xK=IqIq=7TT;qtn2u<$m#F zO3JB4*%dniW5d+(WhJY(8kKxMmZZuy=#d=pow}8G}3$gfxzLu_i5@6st0G!uR7d4bt`+dpgi53XO1i7NYUm#?;s2 z%i*LRTT=+vm{WRPgbJnf1i;&;3}6fje7=O-L|l4X0qX7OzL*kTi`Xvq_t>NxK?_J2 zA8d-!7A_;9F(|k=uEjNH(@eH2>?zE=8-zMI2UX2KBOne&ifiY?knmzlZs><CK`hywOoHnO=kMZRV{w6o!9vdrYe_i$tYFzGkzRBqb}TJV!uF*B zWiO%?t{A=XF@|Q6@x=<-+YqZEN0Rom2L1QdYs6sXgfldS{`z*0qb;2M6JpP9*18R>3YiyK+E4hm#R0VPXpa1sJ|shZH7@b4wIH7 zMparh;Fubxx|%NguZWiWlCcK=hH<@ieQkx+D$M^JV{k6+JX&tHWuVR@oBL0#U{M^0 z;M(pqT>SZWo-PW-f<;w+9KJxpi2*f_5?PF(d_3@WG;Fx#Oi;-0ddOk1vms*eFzaV$ znw)#RnzuLxr&=cxWxtKyCb*B{ArHm4Xyj%RKQp#G@f1G_D~7F>8yo_@54sU)_B@;& zSZH-68LY}Y*D3v2;!0u3tE)>7bCESKcfSws1|UX6U-rCsb{dtR8jVP*)HYgcM#~0r zPW~ttT=iBA#<#<+umL9HGT5Gj95(;jkrsGwD`X5u``?v4rxY{xvtI2liotiNXd1s? zW&XV4Bv!}n!mGyx^0`LEk_X7odMAWUL)(-sGC(I4vd5WCQ!3DdSbzX3!T_;fm&ny!%R#ogQAIT}In*7q_-0R|Z>Y=7^G z?yY3_v!YoT4<6e@Y5I(!6@zAOGiy`SmwT+>@#0Nyd>+v3z5eZ)f;-&t zHtzMLbWMHn1@H^hVAeM|M#OPYpR-@o7atB&2M(DqEw?@m@zul`8q-{1)iw5OOurR9 zS9o#)r%2RY#}IAhVU#L>!6wtJQV|qjU@%bF+wU?|MOL1u6v9hO?$H;Zpj7Ku%g4G* zc~`qb++YquCk+nYIi5P@8`^7Og!WINahSxm*-ut=)(Vz6dXoLFr?Z9{#j|rsh(HX_ z;r;elEJfNgkkqQ!lf(5@jAByXkA~9B%n>S`%XVO^vKlstBJe}%Q+%{gH%Hx$({}3v ztC0xmQM3LZ*w-*_Hp19Q_t!&Uz}uGNClTNSd)#|tA~D&d?Oi@i&73=2PD&Zw5c#1Y*?Jywr^xmc_bSXWzH{$J6TDU_EyE$L2M-mb&d!LmQp0 zr}K;)ah6U;WRW1;N7uF`CIrI)Yh1}Qu6b)5Sd;w7XGZ_8`UILGq zYZtrHTj(NyB(BdC>0kdrJ{h1W(Tm*iT%kAbISHb`Dr2Ou*N-tVfP@?gX~nu%Y7Tjk z9^bw9;m!lC+!mg0>!5fw`?2w;WH>10wy^}?==kYJ;MddF+t)9sU>BHtxSs2vx1wd@ z)kabQ5(mfhNE|lw(k2C7X%=NXX3tAe?Z)u{m?e4)KBh*K z*(FJ!XIe1_b@RN7g;AP-$#yagugWBGG`w+LS2&{q7J=BJEyN zU}vEJzmJ3;IrY~8ExpkTNnX-ew|27A=P`>=J*3Aw^jl6<#ACJG5K&MmyT8mSJ#l3)-4C2R{^0%ksUd~6_lp6m++i+=dMJ$2 zmCXBC#!3}7&b!PVQ8Y)g5yUIKQ$hmbOY9!Iry?HQBw`>6HYq~R>HKrl&fq?(FFeim z0C%ck?Vv4b&f@CcCQR7^!nI*XeL$1Hew4ps2HZB`DNNi~4e$hRvROjF>L zy8TSlI&s6fY5>dwQfHnmjow zY7bcq_!TC4%tQIx=aleo2NdVoKJ3LhT3Y;XKkz0HP1O44OxxI|SXtGb_C*{QAZh9< z<2XZ-gQ;yP0LL#9z8INlDvK%MF(hIUEWwn+7-QE|h#0Z$YQ`WU3+bA29$Ue~z=RtE zkbZwAlQXn%tt2OJ*`5h0@AMcWUpBW*Zx!HySQK-CIO%1&R!lHP#?x>pGPL9cIw1kt z^yj1pSqW`=X+Jiq9(pjXuNLYoT=PVUF5!qLimg_M#1v_EA-30 zy>G)I5EnD`;aIfndJ~!772PLxOG$zy@e_Q+U^Hu}cZ}+_U2D7FR%n|q0%^FPcg0#F z_sj;(_FVZguZ%tDLD*>}rDX7$OZc26w1)J>f8GB%J;aw-tML?Tf@oWzSF9+3>1iXy zH9nsOmjkDHb^^l4uxL|aQ^bLw6Du0efUFo{fo0M3j;v8=KB+tNxpUgF zT=Xz`!towCNI%k>Y2ffzq`X?SfOG(Haw>nQC5aPEinFkzHOY=|}%Pu#f-NXAX%{RjCf$RG6a*OT-`Rs?2o{5fa zN4liFcV5KG?k53H(iD6-Tt z1=R_(Wex^wN*Q_8KDN~cAL$3|j@7v!9koctR+E>gniMb4E-)Y>IHzRykwnpUn;9`_>EJt$|%+>!N+42oDD6GFm@ z#9Xmp=Nt4T^^)|*6X#5HA4jP0ahMWwtzGZwavvYpmt%cUtH6O*#-nR@Rf6nc7GjyN zybUL-nPN?G6c^8$+68Y{w~J7igoMZQGBC&-a(-+lQs6Z)MRh5~LZp@A^mqONUUs>J z`E)z3O#IGt>+;QqvQs4dMOA_nPy8d<7t;_|;caS%`s6lI~zf?QR-2b@xavEdc==?iSPXW;8=O%q8wgUm}u{ z*k}44J=NZoOy1CRD+%ixb-sk+E~uj9y);@Be5yp=%hF!J($HxMMXC8;a4#E-JZq0?zxb+pSM?Ag0cpBj?jh_-LqJq?z2+dm&{I;n9-xd%3E z*37JlV`myXSBWPV>T8&G2tOCbV$ZhlbzcXp0x!v*VGGup&DIEwcof{UwWf3K(aO3M znoiG_dvSND$H~*7PR(y8+yIB5D1kjfjS@v^Ph9rM+dr}bA~=}I+cm7>0IEn1k0Raa z^iO-Iyozkd5SreQ(zIdZ_f0G|J?7rd;_Y=b`hF8(VtPx%--bx^wrOO|^IdVem6*h` zbuDM+5WTCv&IkXm?x$qK_daKKQnGe*tX*-TZ?vsF)7!nuX=Ji`3W?>XVTKykVQ^|Mtj z=_asrNO&S~_U}KBbC?Lzor4WD1w9#sxK;S0h^K~t2C3~tDrp*vLe@}oP0$eu{m`Wq z%`}+mT9h`W%ZzM&MvcV98vj|#M7N-19m*psHh0IX%kDr4c(vD|Bn$b-JpA2JkyRy)Pl|`$;>h$awH_Jr|I>Gu(E3@TTR&ZPc(<< z%4D>vw3Zh1Q)+VCA6c@CgVcj<@)>)=JD}ap+6fH{nm|=H3;k9s1D6*ip5VXm$e?~Y zAbp(#j1j_!4#Zavrvn@1}yz+S!y~?u|ldJC*jZ;L(u}>j$e$hDK#>+Lv^!|mQ(cbLoGpV#rQosB4 z>HE~QLAX*oXEbves}deaygDU%=BKRC!h9fNTjjV3c=3GOwYz^n{76mFjb~5!Zq|X3 ze(6i+wN`3p5!f93R~+B6EyuO^g3P^1Fa}-|Erz-j(gkn@_ei1ITyF>-)$S0x4B@&R z1s4A~9_|XbCR1pMS7D5(pVDDxo;3kq4;6H`j3g|oLi<2+wmh%)@~@d4JgNiF5tg}E zmGcb6oYkm>=V?hTO>;PkoI-?DL6eAh^V_`m_l(&Pp;>)h4IMFS*P zC4M!Q#!+7eanf-qIspcc5##c_C^VLz#3_`Tm}$qeE+o%iQ20vB90H^hg$d#xK*1&+ z6ZS6Ul=XTnLDN+q`AM~T5rRO4)0s6le@IX}9YMT%VdS)ne&9wQZJ32C%N{q-)Wc?d zCEsWhwuZsXQG<7^Rj4?YgF#`f}GcF4(4eEk`%K*6|EgGzh?%uEU7ot%Kr;6&< zWSPd)T)B6E@q`O^5j^Y`OW~Z#b#LF4@EYJ2O?r~(3!#7BX{9Wt1E+om#&lG(7U!r& z<%AG$pNufoRvcCEG%b%Xu@_RnqNiQsT8FY~2HG-WeqPOp!JUJKsV}#3Ms-ss{;Y@j zoAN?d7N^zhtiJ|sq66LU?W|uf2@by=`bS!Ee1r@^Oys=fZrm-#o$C<3>aevs{krHb z6C=Z~%t5rfzR7~YCNhS8GXDfeI%BAn3_2CCFFO(D*Ei6ZBR|!>%*i!SDjWrrBK$w! zt=oN<#dxIn62YQed(TuaB9BCTnFS*%d#v+cGCA8veg@UCgIt2`p|jBkD>`B}X=L(| zg9JL0m~#>!kFdQHu8KBIsk3xdzompDYz$*4M>Qhr&2OzXPic{~TZ4=tnjkDpb!QM2 z^`SZN#nr1*U5aeaw#$s*I9j9aWF%>Sy$E=0cNO#@*-u+FcnCi9RYFLoKTkkI*Pk$4 zf3Wt^d^?Yp2@3cuLhW|_%yMEjA?e{?0R?B(5loV2=NUq~8%d6SKpu7)M@&Y0@cQ^C zHN`?LPp}kv5 z+|!algUzvS9fF)aS9a)qTWmZ&DxZ zravf4j!zw7E4Z}c0K~J!^vzf>UxT>b@%VmWV)R9TXQ)mRJq z%!1!1ZHvjj?f^vkOXrcR(OBz*r3oB2tAX}e7LRQbQjU6&GpU3=ipX{e!V8-20K{x+ z;2fU0#h;FN(C4nvf{J!-h)IuBo^dl~w}&E?_dTs>!D^E7S_#my6aKO*4ITh-i%-}j z&a+BEsfneDDtWE^xa9CgkXLU{GtV?$i$C1B#j&f{7&F(&K4ffg&-Ll=S;H`NCvSaoOduEXtAtGv2^rZ>CYAi6%(At2eX_# z2$InDTav}xEpeJ4KDB0WQ3`*iS$}wmFBo%IQ23#MDp zzKGiQY9zGZt0iJ^#EHyTN9vI*&Y!htMlFodqsyhqbjma9lezEeC}qf)$ut->(j}GB zc$g>sH&^DrxfK7+P5z!M^Is6ML7v=!vKz+?^$awcX#b(hy8R}N3g2j+aB(A(w8e)f zft-qiO#I#hu>bY|w6xF`BGE`v4D|lqX>Z0z4I=Ld6Ra%ye;z$}+FfFHIp%LbJppMc zjiWi~f1oJ;fx`R;8u|^2GG8sD0n=S7yEH`)Ete+tU$k)U4`nL6!alrq8%>Dyn z{ckRg+U)z^$Ra6Tvx@$`2sqfH;X^SR&-ZwS&??T4Tzwegs;Vm{8L`Go(PCBJ1sWU? zjYR-6eFjd|(nI87vbg5dY?VQ9MHQ|{nmn2&CwWCI%{ROR#!oa!jbNT}!V&d4o^eCJ zmt7h1#EM2yk|Z^XpLnvR7_vFxXte)_r*8nVtoh*`+qP|6cWm3Xy<^+EW81cE+uX6e z<9YM_>%CWXs_URTx#>Ecb34f|5nCv!7nM$IvSRwVO)i0oomfPhlydEQv^$kG-inDP z)jsGofiBe^&1gVoHH6L%;qJX8c*U+mIEgHkDUSKy_odmP~dyKP+YcV>##y zwzzLDe>M0R!-GQIs=-Z?xN~u`6{OOsK1-Pxht9O(XibRWW^H5tcZxhJA!42+Lk4Y` zZTqubR7q~JH21#?-#2lzGc_`jC=Msxrz>T($|#yRfFh)IYAN1kdl48bNd06$K6phDSY^|krHCk@yg8fkDxQQ z#Z((h>D51y^E4(GoX%cOG032Op5WBCboxlC(6l*#(d;v3h#4xz<*uXoLDakN* zg$v~+&eb7UW*aoSA19qg4gYE7csX+U7TDBX#tS=2>feIyB^8hiBSmLBr$`gQ(*Mw~ ztufzenp-9p{v@sG)G$p{;$4_+2fvZ;9uO0++`T{yt2UqAQM4w@)aU}M6pyBr2(q=+ zwIV=kY6n|iYg=fd=S(H)G}ApwAVR%!4_yeAl*}GWy!9A4hR4@R+T>KOp&Qrp38I@H z&Q|s!(-FykEK8-~=V%FMn|)o^^|G}^w8{w1l!@PN2=@ayQyM_1*{X?gE|$1H_|2AR z(I#|xO4%kzWE{9KY}?Q0WnLSwfegP^RD-&^@t# z!=DJYzNW6%L)}5zGbv%I9Z(<9cQ2tar5U#k`E{VX5ndC78oPdF38`nh5%A$$39Qi- zUWf7*H7KB*7rgP_5h@ZIveUHvv)7YrbDAVH)FK#OETu1lp< zC(nqRxca)H=X&jKUmn1Msq%$&%dz3_@bui10eV0PT@x6|S6eT$hH4jH4l4EKQz4;B z(x|V1KPAI0-&pd`5(H_pEXE=hV2cs?nh?aNsz|=bceB|6D-%TOlS1x-ZZqS&hU-2W zlnsPxcf-n9(fM5o4#YA!`(HTrk$jPpOFrE~aVEaobaeFmmS)`c{7M~f4^gOXZ|vJ_ zqq%(m*{+vBbIFX4J-^pA+Bl5`{#HBZHD43aj#?93;zgx=tHnbQmh9~3_$MJ0nhIwB z!T>oe$4n>LMNyg>yJL1aIM0bdS-IqwJhiNIrW$nh8ITs)`f7CgjVyRYbCx+qGYObl z8^aDO9y{?uHRKQylk54?4t+L^Bu&m4LUO0>8((Ic)jg7RA~^GI6+ zXd;@mTMrQaM99+AW7T3}ff}#dbuM;Y$6B8KM)WsmM~vVCC(!(f z>pC5w2|CPBh1b=SyC~sqFn;_Aq1AbYeD>Gf986q3L-d5LBk?jroa=3^@elC}hMnmdQ*IRT6@K(*dD zaA)iS$!8kXiO^^1r8y<^Q{HVPV~clEjR<+-~vJX?ECNO7{d_KRlaAr*F2N{*w~ROiN?Y_9vJiI+UOxBk_k6jk>fHA=MmeE=ot3iBUOe&SRARG zvJ2@tA>b$cS7WlF1D{#M!&2{AqRekwsdfEtvo+D<;IaA?J zS+M{esLxHT#@FV{0b>>x1~L=f%HuH<)Z3Nt6a8Ic^*FF$=i={wr;mFoGximg;TF=+0Sg z?->fp;Xdir*N?r6VZkGHqJKTVV$Ac*BQPp1G zY#sCa&Bpp?5C2#hOL{>M1f@RVz;N&lN!f`01C=w#jpr{n0Ln3kYai|Tu6NB!3^?rY zcpFC!xon)aXfPhs;}u`d1{kAIb5z7-#)t1IE8V{pb2RlUc;mW?nl>U0t+b%&qXJR` z>9Y~#$wWq<1kHyGRZ-h7CRF!Vv?&OsgMhZ$)Z_g-Dg(j&qOSbXO+6OC?3dvELQG@M z*CJsy=@H-8*HFbmI|GbULge;j%O`kopJb}59-Cd@kVc1cnYU<~?LGF*=&Ws*O=jzO zN_AYez>w0h83PuIOv*U|V+X{siXeKDSlKpkO3nJK6~!27QU*h|gyLC|gj^KGupSU~ z!t1!)a_2H?oaUF>Qh~^R81#ULE!DTQ(&n8X5qhsXonsma?6?v6$(_R&U1NLFlG|KC)$9*s1b;$ubC^ZExfwJ<)Vo#O=-~0PALerYX%fTyy@25! z0aNOPU+xqcAsxy}{3pTfs6b8JWespU`}O+OosP9`;*|QuInn$@e<`pr3PgSA{)wKV zykqBoh}Mv|z23GFh)E5MYgeOCS^5*SeN_+LrqHuzw3!cc3@3dB$k=nP+bS17We$_a zm|l23vXSvqb94)7ehB#0Mi_DGQ){+S9eQtw+=e!Hd{EtZ2)0ijKRG{Z_!m|OKKjws ze<2{V_kyaU7Lhk6NV`B=$L1x9FW$^{waa8n7}2nmXZwj^GrrknDvOGPEFBW z`G;pT7KoYnIPl-93mE6>?gclEK3hk-91pdJE9=5!KgGO@MiKoEks`DuF)uvC^M<}0iMSlJ_ zUC_y}2Nj==^_!WtU6Iz`=PzBQRCSvUPqeorFz{4)LeT-LyT z*40w`DlA)n-`MzRQ^v=a0^R@7vDd#G0g?izi++YGVcZzgmZ$@XvHVCfSDAMQnnG} znGh$2Zq`c1<@C}y@=`ILMriKLP@cw=Qr2w3`W&ChC}+R9P;})uMQGb0D0ay+0GpFA zc2-$@1(yLg84XaxJ)?@pam~PyV>w9~z{qI;Gh*0X9o7F_ycek$S?<^FR{6(K|0|^O zYu9)yq{XY;*TFPuPoE6iMib6K>i7a8$VqsC{Yx}1RZjrz>OuSqc=G<#_3=5Q0Q6kE zU-~;@9k0o=FN9~z^4^FZf5&we;$GYy$eAkyW+G!}Ky-*y%3l$elwu`@`Erc0nJiq> zpuCis&-SDbkh2_GOU)`MWTF19H-1)0H zYAb2nR9|M8rqeQi2c`gbKa^pu8a(e;>97Jp!4!mvzAditMQ!|CavM&5N~a^&G>%#s zF{;#Y5vHzg^Si-tIGSmz9~DU6xKT)4Q~)$r|>hf-E`@ zO$OgkYe>Nm&1#3D8XY4w3cLtZ^%hwic|{qo%=dR` zc-l|$=JxBgN!WmUyIx>j2|>C!KbFB`U-I#5&n^~jDxrq#tk=9*mVD@8nH0i|^mg$v z41L>?Pb_bA-k;_=5Utz7BG-zhRAC+NL?G!r3@N&5rTcbNCS_>|08;e)K@h?SWLA>NHakRSXy{Ip!ZujI+@}Svm%T zI;7#3^2Q-NMKik0VMn;c_BQ%3MtxhO8Pu(a+Jp!B%wXd6SEa_V=RBLyxI8(-A>4+K zc4*3-gn)38s)+UA29gue`y@x>Lv1q=xK$Wk9dGQKYV4Zny$zcEpAv@E ztU&AmFaQIfWsbnRuMmaS&XK4s`_x7!#iK34`#SSj0Qt-oa=Hq2 zVI}tNf^%{-H3d4Fg+Z6H16N}W(P)JN7h}mhs(|RTzK*n7Zt=gscwe*+qj1_f z!s*tDvgx<#)D`$f|Al%~;eVOQ=uGGv4sH;K9m3vdMDHH{NfS&_trF}VRa5fs7?vHQ z*42~w(y+``KXTkcu~so{TtV2DOJc%Y-Zf>ewhLNBRZ8-vRb;X=I^j-TkyS71Qm68(}hrP`6Q&sZ{IE(XD<{ zuT)d0T$xYo&_*gL94pbF&q>e5$d1}Pq%B{(Ly(;6Sc=Ucliev1$bwpzgc8Mh!)|pX zJ!IC%XmDjM2s~;_kd)Xb6@A!}C{lPLuO*#u<2|Y;m>!fqe4f$Zi06C9Q%?G54;31G zJhoT)IP6L6QN8=!`FKAZUv1pW_fd)>XkGBDtYRoW>U`utLTee1P3=Gepn@hiYhuhv z0_cGhZnvWBV|hRVASy?m)XINos;vjMCoY=Z;h6DZ zcU7woHA$B)-Q@4Kkum}1Q)i?Q%u>wi6xTknI~#S|W>W_<}t3cW~ZJPJH?s3Q5= z8t{(7l;rs1DMa2~P$zstb(nya*8nY!MW{WH>;`!_cmnV+ZJa&y;Tfreq+=y9s1&sq zIz$m7YFAhWcnnaH+N{=^U6H9iIM8l<4z9?qc6mS5x9`PLwMwm59S# zmZn?<+DE$c0jAJ8_=Y(H4yT}Qs!+vWrjc+iY09AX8tN4mZy#G2Pg&-CIe%4q8f;1Y z%02kaBq62?A6~2aJyH(pkC78q@qSxy9U&`0qE~)b=+IO}xfEQM?@)w*$ar9ch)pDf zi=8)OgG)pg=P&E07#ix2Qo~UoxalkKI^H{(}*|#v2#Z9ZBOQAGT~Ik(`Lz7 z+>NeZ+Pdqykpp*ATgN9bd2*y5HvLa8Oh>+8kHkbD3J03G%AS-M%Nt!Put|wn) z8Z*|eguSJj>0$Cnp5xl>V_^n+CHbE7sjvr1sBsGLW(07#?|2O3se~-fM)yyL+hj4@;6f zq`g6m+l5bk_7wgC-VI$k#;D16@2w^%rs3S zmY&PD>nPv3sD9uf?o7c4)=bM*{?L2TP(*a}eT(PXnvr(VJ{aTB1mV70#AP|-)TiaN z%nrzJ;+-(cdFhibY03l1ji2e>xYZ;zt2ZyZ2qp##d$f>&@0^u?6DQ@-|KurNh-%G( za<@0QN1u&Q z1{GB4!?m0JD&z7=b^=?%p8!UdCJZ(8&qCGt*kd8=`(nd2=;OC0OAOl@M zF()ku@qyfl+ef^=^hji#mjd2WC@vQgb7UH5j~6f|Y_eCXy(x*jq3Pk1g*%0;{A6N6 zWmI_fz{Ul)iU}>9t6(GjX>#Dx(JDmvtBXpwCQ;7 z^p&v@N2~WwZDzk%?4LU2GToO0c#1ab9s(>3$ls*Gil; zxsJtZKfEuyl?GdVfwbBtIjD7fab&CS%vK%O-Hj8#N%i+?4zBzfy>8A-?fq@rd)M?7 zsvp1iJ}%Yp@Rj%O{q4MTIm~ljA$S?2LzoIe8}_LmZ+iZiVNphJw`7xsCVdARvec&x zdJgm9F>B7RE%N6b(|88(?d9r5PX<_@y)wt`<>CvWK$zQAgIYBev_6IWRu0FK7IioM z$B;3Y$j|j!EH@IazTd@7L>tfqr21)@eyX-<@5Y$XZKN5kAh)EZ*M$`Y<74f2u&~~(KwmjK9!EH?)rh^@-DAk8~EWMULoUAa>W2! z%Y?PWGlsgP@&$q6Zh2lrxA^MOF7~AG0!*9svD|F`oln^RAYYkl;9JqbG)v#fVf9Ap zI8GP-9ATl*v;Clj*ICCO;!b8tFt%9P9wKjC2gtfwxE%h_&m8$7;lq>pA~?;s>{X-B zy`GwN>Xkn=t>2cB)Dc_bUwfmI>aSsb_G_#W%oAk8_-LI}X%ZN$&@%UgXgKwVc9?rS zqA#a&>csO)c(Ps;KkUIwQTL!}x{8|n2lA^yd*9mx0<=n_=)8)D3w%5$_ZAAu4*ieQ zp$7PnO;=z^8b!vE#mlABhbJRhzeECG1c zP}3PB2h@8#e4Wza2faYx;E&zmTsomx)U|nre#}HP1&iXjzmeUsmAvDRUNKJO)O`94 z3V_R(pr7yG3dpH@V%rWj6#-GeP*7x`r%`&|d%FvA0H)_1yzjh~My~0C$2)2a1_ds~ zsYY07UFOxW+{0H4k8=i+m;w@f!*G&5PXsw=igYzT7n;77{C+DP_3keV?>TD(J6qkO zmd1?IX<8p`nDz_P+9#X$)kyzv~p!b@UTuBQ-Ry0Fij1OsngLn^g+Moe> z*FI;Os)GEs$^yz9Wt?RTI&sksIF^3V;B7Wc80H3(ZJD9x9SBp^u#qM$d>H2Sl8zwR zp5l`d5XmbYapDotnHgC{8Fij#B5V|9C-87gUcL!B+SAqQPwUMHG%Su66}ynP_Hg0> zEfnLAVhHu08Di*G@E75x8Oe1eZ7kbcTl$ zDcSb1WQfsAvAkadQWpoz1WXr(AA`>6I5HT+fW`a`J84* z&PaF(lO)GIL3hgqP86i|P1BbyGDV(kMw5eg$zdqCM6Gb8yu;Zh1Qj%s?fo|YpL9d6 z{u`b%lnn1&HG;3ft65Ue=9^!Z-11Yc3KN(MlZB=0vy<}7VTETm zEn7&1uQoY&Mv0y_M3h(g5drA6#vq!K#(RQ+UJ^G1t= z%xMQhj9C$n%=MpIH>79&zHX$E30rqk3Zv1>T2xu$F2$&Mn~zA_io@toYol0HzCqZ! zeeiqmg0)1Q3Od=Zml5q4oeeK}c_9at)o~oJP`qtkKXu$SSInz}fOS676a^R*7GR@m z?oe2(Z4MJ(Au`l>PpgKiBfyx7KxNFQS3jZ8GyZ{ff*N3l!Kg7Uv z9;`&z^lA(0cn0HAjA9hhj(jX#*FXJ7g!g)2H;!zV88(4a->|U=Vf@d2et|%n_(0a; zdQOA>qRNU5HQqnl37#JHj2*u!)wLrq=3;z-(Lc|@A-dhB1H5Hzm5OWUKIa;vipd}Y z`gw9xmcn%u!bm&~8Q}ejHUaD{BFI4n0>FYz#BIw72S^xX6S}~n+*H0$z*mWDPeo1L zFO0cprKG+FrO(d@rcQ~%fR=Py9Lx}2UW(|8}d?G&|{MLuKsy*Xi;vm9OgKvtii&xS=L%#W72}gYgLY40UlV5qnL+cL7%Wb zS{nas>GQ-pzH{|*qqY=nIxhZsE^zK{52CeTu+vlzdyanCB;`@X0vqoHal{ni9*W+Gu z-Nc~1^9547laTvRq7+2guACj0c3kaXza2_oKp=Qv!? zIaAS+(b4M_$Ds%N=Cqb=kznk28DF$bRiF9?v7yr;C3op53 zS@r$ou6>sV!n?S29l{qw(pdKRr)t(_Cbp<1TBUX#S|=WbT&EsyQk_FF9w5Y0v~dw0 zPHBsuvqB>oR9&&6KbypZ^?KHiQa1^dYc$jmC~$28-@Q23ERw7!E1|xr_g@}^cp6DuQ_Q%x_9FV>a9OAy@Y2X##5v09b-i#hB z%Yf6DE`G_;n8QDqq+?Egc0lRg_*gl99p3mHLaS!}j`LGU(i0}jaD8xnu0SQtxG8N} za6@oIQ9^JR*Jm%%TV`grX1B?qjOGL-B30%@=0quk#*S4goF?vnwjR0_=x-wd1agvU z4YvI(!nm%sfZ|5L?1#;>Kz~pD@1jlMjW*7QwvCktEhCtX^maUz;+MO6RL^Re zHRy_{+Zo+JxG(0aFB(JlQ+!{1kKNjjqrhE;g&}5KYZ$9>e{`$1mg6Fl4g7zqbrZ?mI9D(KqI6}2t$rM`$)l;%LsCj16qH(PX+_VF9xs&FwJ{xL=FL46>O>Ht7ej@cD zNJ0BKuSfNNU<^M{wXJb!Lj~^Kq0+|aWS}x@umXry6y1P||(YAhc5-!q~=7i*YlqU&D_(MtE2(q~zo6lyn_>0gb znK4%4r>{(Um1M?m*#TBQmfMpiZ+OP6YvQ+CZR$rUba`iXmJB4rf3g%%EMq~DtS%mA>0*~4 zjSC=$u`&%@4|XwJ@U=x+w#@qD)A{BrIx&vk_Cr=soQ;RZA)CjFl{QeVBBWa}j5 zI0IK>P@JS&9Kkqx$~7gRSJ^0*=5nv4dMXUSEX}TCRPp^x39l+5B{>M#NBtNOEP{-t z4Z5R)cPC$ae{Z*1BpiFKJH3qz5ISew;y)dmbE;NkQnMm`;uS=5+7HuAzgM*1;#Zcu z9Z!IrCIve+xa&Q@W(Haptlxik9)ndnz8G9Ut83?BHzJ-hGyS6pu$@^HzOO8mG{kqq2yy>8A%W0by1q`$y2#I>URH=?&Swzl0 z=e=TMW15J6rXQMnpYeG;@cLa~rQ|-xL+f(pQIkz}3UTZ}g3M*6R=dm*G=ZCjP)*jB z`>Kjwkp`;rppr?57Dvvx+7%I4M0G?_J2O`QC2qyS$$CB1Ur@<-3?DefsRhSVJMttc;oz@$94&MGkpZ^EJ2Eo=5MFlO!^79oR&ySdBb-LG)plirU#@hs_PRJ&%;2Xq(tB{g?o|Z!ZM5?b?*G z#CL_*)c_9v+SUMM!7<>gr#e~im1Se5|MV3y#tsrPRzyG_1d7S^1i+-QIHpVVEyoJ2 znFS(cTY88QxiW4(r^Zz7AF|s7(+AV@+s4k=4X0l#--SbHL1=*|EURH5D4$6{XhLYd z1}gvfYO6jf6N8>F9tsC08IkX3f6^H%cASY z!7rH=4>^bExO(5kf-xf5?@#L=ECpB!M(7JZf5fI6GEZ#FM~CQX4a6Ks(-xe}8BQ9~ z3bwG3c**XC0@RUB&BPzOSo>J|CJ?Js@Zq(hI+<{sk0|F8mN2U-0ZNl5AiNCC4+{ZqD~Y4;=kY z+oUtwUe1e12z~H<@b8kKNjfSVM|AMi84jPu3d=n;H2rj)I~xdH2;CoMz4*QMisp*y zaAp}g_pv8CM7Am+R<@IZY)q_7v=FRE1isL^N#6p*wwLI&xRiL5b-~CK+NCh6yVzPr zree$iR@rol>;f*JbwNOj+AC$01bev892*w4C6*XB~hEJJYJbpj%6YHx2*O%8D&W6MPTM zfsBZapT(TnoEnl|x_09oJFX)-*s7KPTnpr&t55NJ26v=J73XM*pu*?TPnOkvA`N$m zWcz0?o^EojqXqQI~L8QWg}GEHYow*ppRRu*^WZ&2Z&fY{IBhk@Bm! zys`WIrC4vb(jyVy@T1^3#A168-~ag2{`3-LJ7qbgiKw9?l-_Rhhi`)ks@%5Ad1A~w z13rB67}@YMTWN9XylxsRyQ&+TYi*Isx|y}M#~Ew1I3sjsuK}AX$jr6vghiX z5MxVM|0BpocjW=02cZW(pKN7?OZh)?`5QSFc`_$O;TqL!y&NjT1mHV3Nc0(9|-zD2w6Q)BM1lJUtPOvn`Bfz)8 z{WqKb$#L}KpmuOq8itm=tP4MzaWT8_;?SOa->e^k`Tr5Lvdlc)$xcD+tdcv$+PI;C zFn}-^zD>5X?5)Ic#dbv()kw+ztTFF1>r;c%o!0+%c|R~CoOT!*r-TvFWxUPp9u9Ch z-kv7hdZocTpSY%4I)RGp{l_SQeL~a2`rix_EaPJkfTy0mLDojFQ>kE^Wl7;>ThcjA1kxL8J1oO0BIotO`49fcf>RH|RQ2bT$rczH z$+RPr0>tPMd(YUL;kb@At1^=)zp{=eR2KI-Q_{}n-V_0G-?Sv+Bni~Hk@Ch|Qb90^ z9-EA?eAPQy;Cg;uae`G5e8GN6hNjb)!WEY$168pp+(qcQazk0p7I;iE)_Y7VSR{Hx z8fi{n%yZk&OGi*N@7C7v;%DidMvgFMS^R%1x>h`#&Ix|VMsmiFvef`~Gz-^Piy5%WQ-jjha?(IAw81ewyT~w29bkeeueQl# zW*ng2VMOaH1DWs^ff2tTcT;Ylu;%a|&+H{z63pb4WY600?u~hF-3)rvig}J@O6h)* zQ3st~sXd>Gh?E@-R%&$D=2>#r;IV8cK!ERp>w@W*8GJQ7Q2uWn(k_19&irWdN~D%G z{JNk0iXdHo+B$E6;6>&-1(0hg_=pWtV>PDTJl!tZOW5 zG$GYF+v9yHhyENC&k7F4t1*inrJ=(%O!YS5BST-@a+evA=i63ib%PZlDUqKueUp8a zNL_5Qwk~5;|E*=SjJ1&`+d4HkowA0Lv%Lz9nApz>+sh88=j)~>Pk0XZZgbnq+{KZa z)mYaxvmY`YA#t&KoCx}$wZ^v-E%g`S|Ed1rzGO3#)!3VL!%Cu-H;uD7FAKWMRWl=8 zgB$tDC=DZ{UIlcVkpaJY;;Du@Ty#==cP*aFI*NP~BhDD_)xJust_J!`@#%ocfJ&^k z2D;0zJ3d_7BmNb^u(J8a>~qGo3P!&ie`elhW7W{?1_}Qz2UiJyTXiUaJUv2W7&Na49pN`g1Sb+ApCC!)Szia*W8?n%fk> zBg7n91{3qlB&cVcMx8??HAS64jXL4)YlbrL(&`E%IH>D8Op6q`ML~V{=Q~N-C1hxX;(PCqBFLgqi}G!Wv_x(^vd@(Ht8mp0a@xR zZ**?D3bRgk7g^I*+Wi~V%Zwc}t_UYEWG*S8NDmF5dq@!iO9cug;z6<4sQ@B*splmU zW<7p0A{a*Yrd1ePsEiIN>K=RF9$hLmzuAxv|1%+q^guy;&Ja{)0<2U9ygf;WXpFsq zM{{bs=(f-Zhvn;RZo?Tx@}>-=bT}Q#W2E3mPZaUAK4Vn2NT{p(@1W7U#E9r*Ca}FpEXoraJyNLE)jWoA_Do)(czicA~M z7?T`%!&thrrPUsI1eWq?axhcSr&Nk;!JI>bKt}9>Cu=>y8%`JNSzkzIINz1Ak$9Na z)^pv`D2f89!ZWoXx{&v(r5qP`Ait!IGok25i)}Wzyg1dIK+J9MtCb)G%-L~R5IT*7 z@T4cC?C?LEuu&YTZ@bJ`5T;2PfTwPU99U+|AZ0EndRSQRy*r{LEP&$Wu0R-8*3ssv zDdJ3g01{aG>SZ(f5U%^B)NVk0cJi(mHFvG$^eB-8%dstlY)8TJCu_!IoZmI#=z7<(p)!1B*oB0K-5msy-~>+bs$wA_rwPPV1wux09D>^KX4a~{w{RYo z`SsyKJ2qEd)O4%}o&N#V@I>^m6ZqxGeavXuvkV#&*(Lk7L-pJDsq;AvZ=o zOdl`38ciRHVm@;`2x3-3nsmN6Ak72}SDYT2vwdEHP3C6j_|p<@5h)z;l_tP8I@|Da zwu;4A1{~QMDp9YFUp_c~I62#Fe!+3hR|(?Xm*GiF$`b?|T5Lf)yc?Q)m_M#wR5ZYa zxCuQHUCNzaVu+P*>9crZ)Dai)mr6b3@wlhzTZwN|wVss8L8$cn4%>=MyX3IkBI64a z6?()`KfEL1M8$7(xr7ekf!9OJNE^}_5HJ44QP#4$TC`3mjG6>y*ik!8#mfu*?)3R& zox14!yF%yM>-70BRva9B?@vUN)$Rf{^3kjFN8E+$QAl$D6HyhL(IQ}$pmRpZD7p!l zCBW8y%zUS=lqgpFE0&h9wTZ%}8lqoY`Ps1P=)jDft7`zHT|M5|;C=LU1j_#x4z&bI zB>;FhickO0oFu5QNc(=SJO%CY$fxO3XUUQ?Dq@Mej7(AL2!J~5Ury*W3|24uNt7aW zi=Irk=fy5_hu$5wS2_N${O649BfzK3i%~&AaB%Obd6@~LGTW-lWz_?U^*!G3;bC^v z5cOkXui2z;quU~F0EFjfGor?5m9;8djbgF&;KIL|CNQ^FmFys(o@H&zAqt)c^aI z1{TAnz?58*HPm07-%2@GPnPiq+JYu{U`UqUOgZikmjgmdK|&spBt4G2bH;L?aeq+u z431QstJKDIKpk`n`VL+iPiNz={Z=DbV7bp}JX)J?)z3-Zvo4%&@mpEMNh*8+fEx2aCijgtYJ*{ zXPx#qS#ne8SvuLSbV{GOJdI+iz7J1^xQDGlgM<_q3Uojkxg@pQI2{OEs7289{1QDn zYF+qQnkLe>8?1~ox7!$?&s0{#FQj5ttEqa6SrF*Ji&HkE-|r3nLp0XMMeR8%nXo(b zGP&v(v3If1bCg@TAxwh?kvDmlQg*j7^xy7;Zjg0aW8IMT#)R&B^G1zZG(ywbuJp@f z3iJYS|0lcmN}P3CIa-gtfJ^i-edLZM&%Y$Ghd)mT}#Vg-GpwTkLe-*T~OaY5W0pL9!)=~X?o$eCH6S-anaCLjllR=ZoR6t zKCEfFcQN_7o8_YMRm>+?j%&n(gXr5CZO|8ZNO<&Eq_AeZ8@7$1@af7E95pM?_e=NC@&Oc2T=ziKTW^iWPw1Z|u6<6IZcEOanu++5&fQdG`^5^~>| z;4d6WaAnxv75qzZB|C0yfs1Pww|>`F5}BupB89y>eA6Ck2wbwo3131~!g1Z_c&PJz zgM2MQ;#M2!lsu!rgabV)rD@`F+APCt_UD97Dy7|j5>b7dW+S?`GWD)u<~b?Zxk9*( zWYfI7HUu!qe_6XXixB*lQUjhJ{F9#Tx*GHm+;K!$$A3Qb3i(U7oHD7H(zYiy(zN0# zP9QOBRkZ@z^i5SRO=!ky1%@&q9+{tdCUItn+1HOk7H^Y1gR2Ho>>S$U%~Ljw=~;o# zNEcNeZy9>0g5TS)z;ib8z$+k+*+Mc`e_R2WJbrE&3;YBb5t+y_jyE1_X7M9UkUm9l z9Xd}`I$*&FT1$=LNAhSvjVZKFtLXS%-1~Ul7VZa7XlD znQqZsfra0MpwRN{{k#Uh&&}KjZBwGrISEiOp`J^+mL?hZ?o;J$jmlNv21afQcs#;6 z@zh4gnNJymj`+`$ACBILr`T>!c2fhLVi)Ug84NSDAi`x&^KAlSR>WJS-*L085>n=dc#jH zU->BgMzpL=Lqo}CKvTh&cP*5Oj*LrDtq2QKz`a4rt_8C{6Flmhf3{LDfph+Bs{(2F zt9@DG5SYGO8)I)ygk466#-k=nfE{j%!`wPuFkTpt#JP*;=mygtk3Mu|$97w}$)9|6 zgnxmiRL%`GJA!7!)Mk@HUo$*+qh@U$&Mc=#mV@Sf0e-!VS=kgzW9j-bx+DPoE3tMN zt@bj?u%J+cBl7QoX3A6FVOK@5_y9bWYf8W1NlUYwJ(%`Wms{_Tlk}hYB|VJt&WHo$ zfjDN-DD#2Pw+Vc|meK8*A%;CzIfB*9Y-DOok1u{r6i=~L5|Gq+_MoO)8gMNtXu_if zkIn&$M5#K_=!#MKgX<{h$3w6dF|hwb(=`TJvNhY8wr$(CZQGi*ZQHhO+qP}n*0lTe zz4v_)^&=}{$BBv)RXbO%y;i3CI*`INoczZjkomiy5!j>u`_P0UjDLOvP{5oKM1P@> zBQJE`sTlx7mjIG`lH%z&c_*Cwskx#nasF(TZ$FCcp9?*t_KPJ!n1Byre?HH+ecJYn zo|P!tGNoKiFrF5Mm!Ia$1>F>k+2a&_#KQx%ktFU)Xb9+p7;&Q_ZA1m(1aWMKFCLMD z)>fXdk?%v#ZtUOao0u1)#~a&L{(8dE<6iD)Fg2LGXtV_I3)evtI=N9@0(;}(t&q6n zB{GefKf^t`hm4p>k4m{N&lbla5U)wm#q=mS=SS@Aa`Y^FZY%podwt#3j)gipg-v9~J$q~I9|sJZNVoG6 zV^d*hbP6y>FAlhyW`U++VmV~jd+KGzLjwq^t7RJv3F%vD%{d8cpRNqrmf@Hb<;K4N z*?%DcOI)RACKkqB|E??`a2ud(vFUuT#n=?J_(>EtU0k}heJx&%uK8}lj(*C`jKPku zHq=dN5`|<%kHm=J;xsGF!wgIfcs9My9ybY0wMx4Af_sKCWct_gqJ2mWCRibeO_t+00{lXFdgM7u_v$3CsfWHpD&^pSr|> zr$4rw%I5dX0mLA;hWSRO!Y>uf)da7655I3e!Ys6e=LJYn`UILT?v4O>`{Kr(hp}A5 z4G2cPtt_mS{u~gu#**;-fh2v2Jvw5?Tq%HwZr|C>qg=e_ur@NQZ#)qU`-r+I+X=;R zxdlgu3eAn?Y`;34cloT>uJpfJMw?>gG~`2@^X37Hy~IY!%$%HnuwBub8;~oAbxPou zVnHyoc+BTbNFIa^{Emhfi!im#+4gY1RBS36@P=FkeVz&V{5zd{A*0;U-jo!VKDT;3 ztXjux$DNfrDwXO4k9QCqp}Qr2)wL?NrabJhd9TC$)g$ixSi{IrE!u_Vq4b za&8Ax_-7xejd|`qkSE+aw-Ju=-Zd^G%n*b0r{nz=e2XXZsJi_jP0*-%i9q#|Yt*PZ z#UT|AdxYrpep~}gXr?l!AjheH9?VN;v@gO7~f->$7k;Hg`Y_4-~TC@U!Y8e~a^9 z12+D@K0bFfn65kA(g>J_YB8RLERpGuW)OX$21%Fi)bNpkj2J#GII*j{E&(C044Z7~ z0LIRUz$IdrVM8?3$$sf7JZBEk-uRx=8|oivfg9-kj1ds#d@{Ap?z36^HsLrAPWmoh zLpV*262Hr_l~7O*Oj{m9+*uG3cf$A4{8YUTx>BU0HQGL(;H%*S19yuU`qfO&rhjOdz!JFBmB6jI4|ll zP7*Bt61l0D?lPHhkIdDIe5cDvd`KW(0O|jL`cRJtZ9X%zLb<#0M-PA#ZvuSNV?&*f zO597}lrBDBOjWY6${Jw;$i6dr$E<;hCW-87`gckPc2-&gBLr)-fx0C2leRWu8gLYrx-+?rjgQ|BSgoE* zsU)<>jp3hR=ze7FX9jewd04j<^xn{s9RQLj5S(1it%c49rK;65Y zC#k1|bv1v<3g$*a7}~%}ywPl1&(3aRVmmRK)CbHx&Tv;_yph%Tbg1Xq6DM~V|ByMF zz1+M1Ls^9ib$fuuo)dtX%=eAi1a0%MGpp{_4C~)vu6Xz#Qm(@%=B98Fk``(uJ1?Yj z28aI?^%)`W&;B`0ceXF!;bWw;$$+6dDXz@sEqZ2_j+*{5w)uj%^vWKF6*I){>$&m8 zwYO$NMwbbJKR;37ZNZoGK@a$BeEI?(rNs(Fs=eoH97*!nZJ=Z-pJFsOt_Bmi_!h7M znUgwZ*~Get_A-eC1vM*k!^J*H*e?PS_*yw17PkG}$B!qhN4OHozj)M=y}7_p$CKDp z%^g$w)}pqlVPGh3d87#Kg|%=gXndJ(69(ww%(auZY~1Mv@5AWZcrqgPY-Q>|^>FM? z5to9FXU1If#mVXW1h^H_G}D{xOl|9+8VEXMcUSH}F##cDFLlyhAt6(5N9>zcY(W@X z%xhbg*dAR#ZOKaH-vg~4;HGO5dm`J+@(ggJa6I?-7NnttYQWl3Mw2c!LMu%W%`W!xD>~Pj=Ff#1sM`lU#=HL*G^{bvv?k? zjt38Yypm>jMkTnEFjmMSbl!Sec<_8m0P1%Q8F0Gxe1JpSO1ZNBM6zt|NiL4_1niH? zm%n}Pva?k2Cv>l~nw~Wov+F#xW3o$I*fm|o8F2}CnojNH;;mur*!^0ueIcG}{9XsH zpk{#owg$S1yL+BO|CGJ(p;FN;ZjtweD101^#GQ$nzRZvWl)zJf&rQadrNohg{51vq zlk*hg6W;*Mlpzcip$|cEMoE69!4|T9f6tv}MQ+rfP8u8O!I-QJ&?=B+K%u53BKEL`04r2wRg-jLC1tC(%8k%U(epq17Q$p%wg|?pY=>>p3&LxW&V^ z;b31s<;1b#rFD+ENXhE6Dx}A#kNpfYd0f5$&b>>~I-l2*4gr*$!9}D~5+FDSbX^yU zCg7a$mlv{G7P*U>Y8=emoJ;VoOU!teyf!xe71YuZ*?HRu`E^2jR01fjM={`JIg#+0 zF8#au55D=FR>54hDdOg?u{Ojn&qVMPk{YQD0^hO5p3{UUyl4{5{=-VNHkYlZ3GSd&f#)+h=t6?d+5|eGQk4k;kt9BoC zTvhpFQ*C(89h>*Y))oZXj&l(n#_*1`7Xj5YZJ}8=YI!1!^J?357hIwPw>r*6r0-A| z(&q?$##$XltCOdt{!_P0(?WmZn#Eb*^|zvV0;vJ|TT592+dc4FBKS=2;4}!po>C)} z3;fPwvmhpgfSfyL5y7<;#C%a!^sd!*Y^Fjr_m9JfG1#0#7We@M&+LR^YOR8V$EP=m zj2>;7$Z0WGn0O?VGe#ni`Uc2{B0xqATstrLq2|Y|5rH`U$AtLc#{T1+hHs%PhVgU04176vSg96o?8MiHVkSgl3bj4Y=k>F**Cdvu zf_dhMhDJW1sum2qI5TA|jex?luG_MpI^)lHTfKE^O0eMc5BF4n#g~*;( zMd6g@QPH+4&~GNwJ2^I~*ljK?VUDK&whcRnD&ktiY#Q>?7G;KAyWR0b4_|Ejc}4tN8VkaYPrDB9z2Q{i zzXL?y#vGY`P)pEdBrF9hdeo!nCM$|@j1_algGH(~n(M!Nm>itiN^Yd(DFl52Yy-7q zXxbOwI}5$VeJZo?|E|BomGSt@ULE>UMkap|GTIn@DqnB(dg_z3XVBx`u+i5eKF;#8wgB=vkK6unQpqnVS!p|d&yk<4@9mUxCE4e%7a2An$I|SCGL&xH4*T+@!p+aSJo~2N;;cCa_)q&g4%!C`QzyFUt=8e6$h{ zm87P03cl!Rm7#LG{0N)O!MA8hHR!f4aSjrLbz*qKa)@~)*tDGVT|0L=uaO3monS!C zX%bHEJyBsYu1}kIX-{;HDXQsc32#iHn1z!E30aSOPYK`7UB6Db-{{^AI5A_!Ass`C zdLJ%b1W#qS6J$`Imm>Z`ev3tgg~(}2mUaZ-G!(w|4@Wx-^g5TMCGlBPw>=*n8wQj8Z{jT14aUmvswJG2=?&)#+;mV1)g`fO4(bLf~mbq!{4Ns zurKg4B>(mc__pM$GnO_&z`P$9Sq+cI^DeXWquPQ71?!EpcB)x|4gqWf)gEpj5=-Gn9QxjTKviI`>P0Zv?BJdD}^zgZDZ zhawvi78bjxoRu`lm>T_BTy6k`AyEH5<(X!E=+LgEzeWE=&ObRUb$#9k#+$l#|H(;2 zJp7hA`4@!HMZC>!?&Fqn$V4lny>^NM0x=KwXzI2mo^e>_U|0VwG0rcqvG!}#8;G?; ziOO{T>|9_~o0q$*66LOpU8mMVYX|ct7Uq4)_1~JWRyX_QBth?CWS=INrFj6>6&JPe zYWfi%sPx7A2d#Su%L|&~Nyyo|3(bWLo?!owflb`W2@=v@TCyft+1h$BBorY8lvPvZ zPQG?sjwnGm>EKRw4Bz@jKt4ex+|*H5GgmaO1Z0f~l;Zf#>+oB**&B;Q)I-@QN5|Z8 zy$ltO&@^*i&#tp}=sYqrrZ#N1CTwROL?sE@jtpq~3WQcX16I}G${0yCXmXaqwKq0p zNoKGihEJ(ctfpeAY1R6?re9v@Xs*0C{_5uhz!vU7!^|bV6WV!6CJIj&sqv0VqsKzy z#*JiY1`WPGk1T6aD0bb>ETqb{XVAQBFQo=;uWtO(AbIcrs29jwczrhc!3}Bf2}jS9xZ^pkYa}K|;OMgumuRSd8~qWtLKX|6ljj`_0(Gl3 zvdjO`s}|I`gtn5r1!*%dEZT{-U~5CC9iE7IV(@HFb1J4D`gy**CI4n?&oW3wCPizo zPl+eB(ML93m&2et@Sv3Nd0({4((&PXT%>3i>y4Dy_0MH6Amg1%iSXdsK>Rty-pdj3 zY49fKx|Nc+BSrAguak^`&67e0qsX7dEl0P!gL;eKC4zIcd9ldm^`XvQg-uv!n1yaZNRo}xs=d&#%@e4A6@%z!6$!(C zGbiJ%lGlW`d&ZOvBq#E(+v%V5izm@aMfF286?A|$k^X3o`q;*eAU?AXWVJu311rpy zJ6D+3*;Ww~QZyy2MoL;x#K6H`eM-u;f1o@ijRASfRWLA8Yb7fa6}LSEmCAB>>)(l) zF{T2yuvahyu^e6Wbjq+gc2M6aCgnS2QuoYR{M@N zXn*gWIhw%r@@aFnK?XNwPSfqfB|d!ChNTVLlN(*ARD4MUNny}esw)sDVxmLL33qU? zs!-ZmIF=suN<>*g>V#m8Uk>n8-{%`1o^*_q^aSa!UJYH6;JUCBUpRc=j%6kl{IR2N zmxFU{KrU)Y(1U8dJH{_L=1@nxE)1v%kh!23ffy+WEAB_#!33JpMy*%r?=20zL`3^R zvsh6x(?k%*&Ru(l4|#q2rqQjpKd&DvEwOK(zSv!-jA%C=)baI|C3R9X1QZfEIMK0W zL<@IG+*JM>XCb)6q{gIU8mfj%*+f={1^vx-P4@Z4LT&qO{f>}{-|&ITKD#)|m=Se~ z3cmn-t2nCIc|8ax@@wYA*1H3>i0ea2fkYgaN9_wm=ux>io8n z%+(61T)JO*9FNiNmU@(fIi;TeZj zOFV`|KQxsbVPVYXX#S{3XL^fpN#QcO z{Nm$>)4Mv@PunF&gr~a`kR@^y|HEJP*Ug@DzY%9{zNtXA>~(c5^AvHSyt}qB`C3w* z6DyF|Nq5 zUDzk)r+)5s-$G|!SqNJ*)tYQCWgo$IVW}TM>}-kiu9kTY5&oKs{KD%sztv+F(j)HN z{mwWPt>Pp+aDVLZ;{}kF?%BN3VS#7+p(3>poD}}0(Snnt`k%7y24k3V3gPecgo?iQ zd?Jm#tc(PrjO|_tq7B%q6td8FbS;}X4VZl(3}AK=i1TM2rmTZHJ6vY)VGk=cRs0nQ z2>!*ZY^+3?Dm@}v(Y*(cmia4YxnndWKf3ncQ&>z}Zu|@j07$6-Keb4E;v=4tv0f(5 zxP{5(PI*})8byKr+ww}bQg{0+xF<>h{SNvLYQ|PUs1(5H;kJb*EwB+;*o+fV=_L8C zy()|VDgWr%-D4&W3EvoLM>f#+z(81kZ%M4Ijh#;qlzvwmeRJQIyHkvG2cCS91EE3| zP^n$srMFCk#?1h}NAE98)Ixq|^jCg8VmEf~Dn!gSV{Yau>fcp+;39k#vCDhc@KHy5 zwVYyiSaq%pF7$f(>?Pt35v~3fpuZD^4j+BrV9c}COE&0_e4E!yA!$O!<=!`BIJmtG z*Ua_~!`5ew70p8eR6KA})xB-b{5RS%c0gq#I0tkullyKaj}0D`2MR-nP>2wh4maW-rlt!5k18czS*BD+{}R;$ z9)r7e#CE!TgO^%KQaeug0JzV?PB>$2seIJ_y<}$XNbV9tyd_xFSd!;NkJ4gq+9ZOa zVcjdUx)Hr9{MEEp#=NAsv0TK`h+l7z|4*@vd&?v5Dv3njhl}p+FdYSho9W=njbf@>bVAP}5^L}sRdk*|jDiS}g9Fp-3Yd9HYlz)UKhx9Ja68U|6&U2Ry)_leE- zd;Rt&BaAIa#gH|mtKmCVK=s`G@_R!8dUejlLLMV6)-@vOHCis{ zQ;qL-B)n6ID7BIF=D@Tgxvly_Hg((nRIip7m214HVZ zAT6^#bRkj&J$v{#NXJ?XdzoE)A`Gr8A@eFsH^K22fJ)0Hd=3%0vVA#6%AR0^(2`#O z4=`9if6hB1dtJ{cyCtJHG=-ercJ_K9F=dss0U_|MFUI_#8Iv#*%67gH!bj1lJwd4u zt0JF*PsiO3g9&l9aYAG4!X1z8riY_mWNlE{!nM^M@yh2UEaF_l9Y`@QYJC?MSet+I7E` zxZ5>a-3V8jKunv!>e?+wK|fpzATlq z*&RL}5gQwKppMDqOX;%L5r`Kq4;@~9J|at~!&WU#6R7zzS|n~MtcimUnw+k8kZNrzL9#cSFttZmGxk9_?KLmsM<&khwJldOX~7;I zv8qU2*p7re);9Zq>|Q<(aDA9qJaLFyxEBT`>;YAXOc4DS1oE%|>^obDOTE~)wc|>L zbgh?8&2<2By;8#hdxH}WE7ESiAa_~`)m>N^($PL9*fKDv*SR0fekDvJC4i`LK>CXx zAom{M3_<5p2|T;~AeBhTzEA2Gs`j*$ryAN(ohT#^^V5kkAuNa2=a_)Y(rzx~00ijW z>O1X(QD#B*)Se*&LMwBA?1Vq+=7oa7Fnx@78$x4cmF!H~Rn+F5>Z`MYalx1^O7eUW z)h6E0O!I^J^-OGoGGcF%hcDarvH;uU%C6d+?39a~xoR1Qz|m`?04RQIZV`J-VLaML zA%PU6`C=ojDU4snaG5y0e_A-Poo+P`!J5&4zPUTQ(JctYiqedVn&7G0nqoXXt&&C= z1aW4PXo3eiI#NzRF`#bMT9#SI;xZj9r`3%h(5i)e{VoT)cMLR50f_-FMmTIkXy+ zF@2Qh|3q43O*WqOQQ!JALAup(l9o}GYn}HfVIMS4(K&mREl)Fq$Db?lQFto6_5kEw zAoESgn)2L7MF-gDntTV?$>=m!GqO z{*F^_P$a@64KlF}mV_l{553(ia|xWv(aFWO$w|R`gIC||jq%s)_xhzk%1(jBWt*is z`F%L0w+_4V*t|S(jy=noc<^)+FWLh|Lmo6`1;YWT`GI?)5E;w=thVEC!cMe`eLu>^4R2m&2D4}QXF2Xz3;>&9H z#ON3-tj0$B?91qx%aS2FmqNVOIctRIm5)bD`C$tnbZ!&#x*?4b(MQu>M(6aWZs8%= z8%AXWk=@Y>roB$ve(L=-BPQU9W>w_f!69(Z0!hEI*8td>fXoEMxXQ!5UQRQ0k6+G! zU2~H}@A_8~ebZTfy_D?)lf&t_@kb1wQUYl?Igvz6p6SGub}dvk?n*_kTGh_C^(O7{ z#F73JoDAW|3>5#8q^}g-Q=mdhJVR_6Fdk&a z>tpB>r!JGsDB~0*Nc|V8oH@NA@3D_rS;G&p5>Ef`KM?gzQ_?)DQWZ@82>s0WC$R3_ z;Hk%VUq21vysUndgoj)2dGdm-8i}T&ub27mL%xJ{IjF)(*gekB&5Bc(mA&wnrAovD zp@Fkz zp`K-P4$~TuKlSGx8;qV*_r9{^=}pYDYA1@B?}{))zfB&Qal-}2A2mBB=gybEf%pM| zV=v@Dlr-Jkic(R>ecnB}LLbzFSK&9}`>Kb34+G(g>=F@nh%^uj9_;e%Kh`Pl2@i}o z-K%z=;H_Cy6#I^V#nhaJCG^_*q?8hh=+;Rc}P;eG)nE{Q?vqvUwX z2VqIwU6EWTXj8wVp7WYZvvzZZFEJC-C`@!`oIcJc#@8RxIx2HbPfQk|B zCTeR*9@rnmo#9wn8PfMCwaB%9F3JvnKCvg`P8_&6=*n*6W{I0X@R&`NyA;pMJq z5%Ult9bC@m7sAD}h`aoG4d6>~Brod@2iF8Q3=Z8IYdVaWt_<(LRA(9HUVlu^#o7hQ ze|Y(p80J31X(?tI5(ZkNTBD1^5`-q4&1Z=wX=iLAI)POWSqCqCi5w{Iu;brIPn4>^ zWKLEvm^VaMI1RKm%naGY$1tI?`l`5xUww?Xza^W=;}f{ldj* z;h%4E$~E%(dwc0Y{%s96;KRFhRfUgzCb+Z`3gkT{iWT1!zLapZQ6dHvS$49UD|C zup7Eim-IvvJQ%A+=-!yp@1M1Fbwq<7#8uC*k_C)rUiBk!28h*5ZC3^3*HGQUL-iyG z)e8DN87kmnOqioF(nYd8d`SxkS378J%DRV`tIbFjyZJSk9q&|<;W`O!&g&MtB-2xP zM>OhzfjP-NVB~9{-f%S~M9Ua;1Tm;>AAtMg;VuXvNe<)u0?}HML@bdkqPK6)WQE~Ev;qn79e-sGT?S1xUp6Rr@0Q!3v zMA4 zQCl-6(YX5neR44=?ytaFU-R^PbLg#Bm|mdX(__I`c&mBx?@>URcV7qAA(8fZ%vItz*$XdL4zylF#eh?IMNgi_{UJ-aO;wT9eaNv!uC zvqYB5LteG()ZSF3UT`mxLbTyD)yqnxGzj7BEEupp{WrZ<&WnrcfztW06 z{7#J)`I0_=ID^qEqf4yNrQLS*RY}Pk6u)7(9Gn6$^tn191z9pDa`L&9cn(fu8;a;z z*Hg+EK?KZkb#ZBG?ZpKKac>EXv69Ee;R|g~F8Of<5(2sX{|d8oHtn|X(_&7?J0U4~ zLN|n{$A;F{{YhZ25w7Rj`bu&~m@k4^BjcE^VUce{c(O&s_MC9$)yNL zGW{k?5d`1M$+)VsxiO@ObpNQlfqqopqdzL|TlwKX9wwOH@e1Vh{hZn&I*c+{nNWlS zhYCUBFM(VVZ@>e#$xXb(UMsld{$MDmLU^oA!?3Y(^|{U8F<(TjxxhG-wut;)e67oM z%r(8sp4iRDpta0>%SsM~1{NY4DgIUBdw|Wx_?ihk7?76Iwai1QY7|nv%au7*W!x)) zJD2M`H54-JJCD8c3qu62N_56FHPg*rIp5`r#Es(>EKP~>z~2<-2zWRswUAV zG6dD)lbFhCXZ<3bIPKwbI7JV)o1x9xGSokfaV0h$z%+eApz3dsqQi4Isy~PFj=c_1 z-lS_GZ2h%-*nRMn^d3p`0OI@_TQhE41HzNq6BFsC3d#v*;?GYkr0hFhYqgv#&DbvK z*bSFOkjb)~Q}N2%7Ob)R+$l!lqYq#bga87~_ghy&h?*W?5QVXXNu9PW2E)hwLdFQ9 z69GAIpZxN6?y&w=V1e#=%AaRV$BUkt!`Qn(IQA*+&8_0boHC>1tmYfJ}%SIf@&X3?10a1C093E|+GuU%XO--6|h_IDnNxO=7EhH@nNt^qXKxNmnXutF* z{Pg_L$}0}X$raV)l=3RFZ>N_PRaJ(v-IF|X3C^#dRxOoRc_{H!R*H+2XFl+!~pt{(;8(tnE(%L9RLK3}9fBsVdr%=I{ z!pl#y0?Q`*m)!og+4Nqg`I<;T8W)Qu^CRt?Dk`k$H5Z7n=UM-vHXqK=WEWE+LW?A& z%WlNafN_6bbpnBqUIOU-Rr~oX!)+kjzrNX%i%4xL@WxZRGG)oDR-Hy=b5%?W?&{K$hk9EAkEAGPiJj$?%Li2 z&9GWdk6K47!CqN1n>7~P%01c1E+y{?kxpwe^xBLpg^#z|F|r~Lmpx|9o1GxzQ8bU| z=&<8&v~ey%|IE8GR`YbwoIg(PK$mBYng+ykWThr?d~uot$Qv5^+kOc=mT0zx^eKgH z)!Xsdb7vZ$jLDoE&cdXeClJb_gk@#AECP5cgqhwiM<|4O4rf&gD}HV&*idDUkH2m^ zX(||{CNGScUjB-hU1=VyO>S^eEY28QARjV=vJnWllm%4fadt( zPDT^@pW7t^@exidej1V(IMI3ob(K;1U4(6@30@e>I-IP^xLC*uNeN1ZkTZDZ~ zxE(Ug9n-LY9Jrm*{H4S@XytsOK~}tOd7|z-jt|&>7R-j)G-6VeApaAG%E<>Q;dk4y z+(EBgQ|i_BGIFENG*Uxo`I|swo2mbV;cosW8qyVITnnZf?zd78OTS!;g}D}*DZ~-E z6mO-RxD?fbrWJs)&0r|XcPU(pO%BqcvobV+p)o9GXJ)>*WLF;Ze^-;Y7O(S_X)i$j zfkV_K?{k>KkwVqnq zGEnzm#deF#S*RT@kTl=S6kFi*TqUf2ZbI+tjSkZ -Us{-$@7#eT%$+9DzckgYc>4GQXP!|*I2tvp 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 Q%OV0e6C#p?IskzG16DP>^Z)<= literal 0 HcmV?d00001 diff --git a/build/ABAP2XLSX_V_7_0_2.zip b/build/ABAP2XLSX_V_7_0_2.zip new file mode 100644 index 0000000000000000000000000000000000000000..16594cd39db24cc3f7b5173e24c63a8fea8b237d GIT binary patch literal 1483039 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

~Hk1N%m$g;Mmo@9+71%+4STQA!6By}0$$k{9^ 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 z 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%0Ac1t!WyToU7(JPx2nI`W52Jmj=Mh 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 h9<6I~eYv~(H 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

hf^uG%#pjIr;uKD(yn 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∨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�C!?2NBP`AM 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 z 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 z zeM&UMuuGiRVV@OiWm?JyK!v>aNbZ@rY z?7L~x-0?j>mUpPT=XTM-cZQCxx%#YXk6F_XnKIT%W-ap^<@5EUTXk|x3Uj05^kHjG zg*zqc)^kS1g~p}STiNauU!BW*6$h-@=PJ$GO-eQT$HHYGvu_)vK;@CQWsO)<)dSSa z(8zSBcHZ&Mw#h}a)EIe|iXSO|Zweg4l+K*yRa{1=A49j}TD}A+3fbax%dP7EBt;Af zM6p|jxZcTMYI6>~W+}GDWRjapQA*(Bj|`1u3KnLCiB!I*LsX2`1KtbV^_7w#Lgjsy zbHGNLqZ@&SrYu;-+|*`uNy?Y3%AxXE%f6J%!V+R1S7hj06R!#{%mOw{ukBtfwK0tYY^UD{Am7ai7htN`HYAEQ@dti5#i@~ju zPJfr0!Pd?JoPAk;M?>V=#&}ZZ<9ou24DQWaU@06kqs>I;g zqg}Pp3({UL>;(}Si!iji+X*Rt@E@YqFSCJw-a^G4kW|vWz*ug^3s-(KrQmAnYqgrj zT<-)HF~~cRS+dEL)Vzt!o?@mUK!=^B!D2w~afj2zTe$B>1tQDdr4l3?o#Q}mNV-q; zfv#<)B5rcfKspgu=9Zw%4UDr)!FfTUs0qf$V%-|8{h`>~7;0!ipp+qOBHO-hbFSqG z3?LL*w&=vP8@`_YXkSuIoXRU7Qfri@#^iT!O~7HVW{(}|q<)ab*eZpOD%gs0LSl8O z6J)>5*c3}FzRq#uMbRQWPKMKMUw}!^zGK>eGBh8qPS0^zkub0wH+kSpVaUE=cxoA6 zGh{qur0xqrFJ^kxHBTX5q-`g-nrnnXF; zlZy;=Ckk{&Cz+rvIa-_2oi|O~R~6v&0x4mK=lPV*fwWQDq;7L%5{#{kSIGJ)<3%XF zwbT7#@wHk=YCdqi1G8kiI~d)ojWE_Doeo%v1S#K7K-WwYY7uJTvTayV-6(wRGmvY2 z?9%k=`zle_I~il1WyLy}RbIP}MD)jm^`{d6rh2S4*Cc;(i4+HtWz7bL#ittQf#&BA zslI%u#$w>mQYF%@zH@RjZird47=LvOb@QgsHF`Lq(bL87t+zepZ2s2HkU~wcy&FW7 z$Y!!@)*k5w#)3bHDb(Q|Q9HG(XhU5?q`sP0(lrslhk;;08M9B8g%|B(Q&PuR0?Oe6 z=f_}hTByw2+W1+#6daK=?S>XGyldwGazI2Zkkdlo=Z~5k}s;?z-oPq^W>8H z62QLLiERnZaduCfil85|ywAPahdr6qf)ea*h<-c~v07$0qPe?qKrsVtF~wJ|GBDMj zFmJ@PrxKm(VQje4$G^o#yRg}%`gF@0s43x{t2gwL{(3F@I)x76=Z$%DH3O*`=<*6Nn zTjgu+5)VvZ#SpdeNJ-N8tK{h^o9EY0n<-sjq!(02VD6=8dc-^w zzM0Sn#2(oy^w5Key6q#+l7V3)R=*~A_c@D*qor$;rA8GYpYH}1@UB_O;9Mz&R=*Wj zU<`E|l$bQ!mQpJ05x+)DnS(J)_1GVe`B)%`-WX zJ9*P`K0@m97DJAcTBiVpjVj9~-YjE* zhXUuYX0C-|s_?tkqo4H6Lm`W(PfAjsuBJX3P>9Iq&fG8I%1d2}w`WU~>vu%lTsK3e z4=x_Z}Y5XGd3a z(UdexLZ#Eoq1fH9Bw~t8>hEA z$Wr>KrPlC#+Vp2Ee&)5DN!CB&+u1Cu5W6UYrE=P^loW(fR#>u~FZroZ`r9lvO)#H2ntYQ<$`y+n%aW&39&j1u!t66ZgWcp z!)#ZdSvEaZFIcF}Uzr|J7Iim$f9K+a!B!O(m>CTlYrE8e0IO4lFNFSpJ9D^9Yv4_z zSqoOgGTxf8zNri6+lL*LMa&X#x`DK#aiHDYnxtncw)qA2diRWq%19vD!9yET{dgFi z3rT`bt18y8ua;y|XO3mLu8)5Blwr?!FdZavFbwWes8E@-)ug{2P#vpJ5Zf>npOfr~ zJF-Ei`=HR+UHJ(&u&eAns(H(K%n@a>q`6+1d5xw_6LF(w*;m&}nCTWzmVlzZL;SWd zyLH$V^FvrI9+$@-;X~A%2b^AboFyx>oYcS%=XH<`?~cUlTxLr9RNtq5z{^Ql z=l1O68993ZbTBl!Y2Un-yYfi3;O@ZTL+lA`LRUKXk5S@z;U3g`|IJv2bXKdwZO%>yUplpn zTvj8M-b%F_l>M}ElwLdB9h2qhbTqP4o@CGPdh}6{XkLQm57Y?;`WmG?W>0KI(Ykf(N%NY%$z%ci3RfEQXxIB*%bTjG zE{DFWUDc;_)UMKRj*GRr{@5m{j{8k}`Uq(nbJq}(vK@HUyc{mNFO^eWKtIR?R@S|5 zr6#YG;9k2^p2z%n4dsZe#MPg}8t;9y9sUScTUSVq_s1hhymQA|twq|+UC`C@ZM2!L zra)&pD3QS~S<7stVbC*LiIB710PwuA%IF6Y*2%h*46xI}iFx63HRPO;1FH3&iY>n8 zy(Zq)E6d6tbf~pKsnjN$bpFRXtBXzR>zLd^g_&KixB`mh9pLw=l*9w{nlfAJVWXGdzoq$N)M4?kA7YPLa&o}+=loFrs5oS`;`-Z2x zn3RCovU2*Oeqx*g)-CCGR#m(Wl^g*%ai$4S^4uUR;gz3&9`7%!1{=^UXl+b(xXxoV zfR%v}WIsDvBgp$`jbNkL1a8V)F&HWr>S$WXr{t*~z)33c!{p-Cc1=xQ@jSNOM2T?@ zTi_ytaj4zi^rliF6<1-?J0oM}E}5ca`5v73Lq+*Q!HU)##oL?y{h&Bg92I={al=9AEl)tf297iC9oBoW0 zRI08LPZjDfp`+~ttAneHmGDMazpPa>>XgP$S!uB&UFJOhMuYWZZ@^+W;6BevD@(T{ zhJB2(wqO0BA6`b6SzWf82{yg2Af@yq>=Vk6d{1P^=3Mp8=W$~nj`q*-*J(Esa<)%= z3t7R0&NmHw4E0-lqXnnRn1W%WXxav`R-b%MC)>1++ZU3t7B5SuBV(IXmS8|xle!VW zOgc*O*)8-ydQVFf06Rd$zw6dgM<#o=LZtOwez{qiqsPL=y9IO^-4#!u=0m90g*UF4 zHj2e9a0OQ7img!u63GQ@D{HM2GjQ*ma_dFLUU)ES9xCto^k8{z+NSLqgoL> z5nL~Vt*4+9Zqp_pZm3%DSVFS|GuNwU=X&yIaUJ<4jYGw6+?LLToP#@eQ#04>GErxZ zPGQ7}y9e^ubGl7irgxnOil&KAEQ-R!+`_AZr4+0)<4 zhI^}Z6X$z=$7%F~`rcz#;;Qj|$)v-#66sx`9?LZ`l4&ip?9we~4Vu~@*7vMX=p{wR z`9Ry|Odg?7SuM0s!%#CM3t#35R@4cYSP^Bq5W7eabKA}tg;YxzV;b%229K7lO%@oB zT2k6v=Ypfe*4PAlKFh&vB32$+uDiIJ;O;_K*Qs5wzU}%LlHOQ4hcxRFT(AEgcC_Ie zb-424axcUDM!U4D$wshaJ^Vo(&4QH05FT06WL&RnO;oG5B+dyF%0pKKGt#!0G*REw z5JDoJQ=T?G>FU%SDBvFM`5tG$!ex;6XT3?u_*o4E=x|SV?!y~cQ#jVoQzD5MKR|$z z(x$+Gq~=s4cXFh&3W_5x;Ld*F&C4tve3;N2h^-e*`o;lt%h)hP|NXs!!UQ!W0%z^T zyhZsN>8MmiuHglW-F8;1j4AuZsn9ll*}jgN;h~K*DEpLaipf;{P0O$wOQ!1m?{MCA z`UMB8s0!PM&}e~jQDH(f-Q)y3&Hz(EE~+1^Q8T$Zqh7EUZlSB6R_h={WSjz(zIX;p z9Xdd1=NO6o=z|@Wp6_xC?^W+8uxytBS%ZV}@O}NZrijrsTeSW)Wj%iEMihaS9NBfF zi#S~dnE;ibY47R^yf*hJifg*@jn67+$RU|O#`GNb7Mg2Y|72B(N(;H8E?yq@^YQ!B4<*zG&ENzB0(p4k{zI;3P99WzUWYy|&(6(Ux?`?a!tG z+jCQ}8Y+w1^W~j&VCcf{AsY5&L_BLpLC}o(0+*%SX`TTGCQC=A5dq|k+n>MVD4B)_ zrlp>8dW+A;;N=&r70T3wFL3WiFWF_@_7(&cJP=&RV$jqLlHKduHYyd6Ds=q@F=7o9 z*!&41L?rai)2l1=hXf!abtIej3TE4eK3rg?souI<+LCK}uqD*~*i;6ZX!FoB8+wR2 z7-QUM7&i2Nb)D}gh5a~_N0kD%^nP&S+R_^&CJM)C{2*bDr0q&$1$%u)ZxEX({PZRh zP56(2G*dOgbl)#yQnv|dzO6x1xE4VOE4B8T8Kk1@BnbD34PX3vwYa;l##bv7H6)v? zPI1z^pmt_^BCHkH02vyYJ9JOqt*7dr#9Qe8wMp^1MUsT?fi%ul;?%t%&SgmY>6!El zA+1#C`%_G4F0Ret6+U963@qGM6Y#hRS0|PMB=&ry_&z8mbjoX@ahPwWR15Dd*lG)H zwUsQM5{YS^-AU3px#gjAa(@m=!6O$Of~7Th+f#t@Ya;u^ z&UH6?ah^ne_m>I~B(qvcQ7IuZW+KheO#N6f!4c1$8lNwZ2)}pus%e*SZF6t2?q|mu zO04LcYrrAE9Ze!m)0>_g8z7&34^pF`HIzve3g*YKUDp=KASGAcOeCckxr-{5vMX6yc(polo*IgLcT*}U z_DM@mMA*4!pydQ=eKpfW?8t6{tK*U5^MBD%_xoZh%?tE75X$-7m;Il)k{1#6dkm(dQ&{&~vcbM`SNR8aYfNvk4M_}M{`C((E6-b>}gC z+$&i9U4hea-$siZQ65eu|FWEIeRL!A<=kqK({B7JCp7G!d{R$x^5v2x)PkIv4mm$; zjF^~!WT9sjbGk-cDV83gw))09r2;2Hou4Nx^p#Ss@W=nJacM7$6|3kUoDN(|7CSgQ z$t-w6l8dd>&84(_f>opK#(5b$+1Z2kud#_zIj-uD3Nd07G=lSsSj79S{(n}o&0=nQf5uZ5b^ zU5a`IeRC^M$p5I@ELHJlE|uw_XluQP zr*(>=<|O6I{EHpb%qNQu-Aml7HWGHBG9%YbsUchrv1oWk;^6EV0Gp%YP^?|JeW4Uz z*t^-8iB9e_@rJojSe>$zrD7NYvczh*89$(}ZfF{esd*Tb>sQ(=lt5j%8^NtyQz>hL z*eE_%4@Ez_m+$T(;iBuvYRcYN+~#v!jQT$Yga1n&`K~}b^90>^*U;`yAz^y==DQ?3 zZtMb~(8mrum6#b3Ue(XMmaEAeB^2tTW|(96etz`V28mgbv2F4qICILcGL_dySdYzr zsb2oyk=2FP+jEy&3mx>3CKkN@k>|ZXxHEWzJ%cf^J}m`zctU#5(}er3bxhP6%QM9) zdtd4gl~grp zWUw~;kXZK6VWBNQI29jsJX&%;TF;ls!iqK23@l83G7Nw5^!dQ-=B6A#$QO&2`o8W)R>pi9IHGw@Y0v>zY8lX-}oK680wezEmDkeErlq z6;UQKE?#@bc`fjJ;~4rE=>d`tZ2DX_)G5~}TnIQx4!}WX-v4LMi9!P#+R%N- zg=!=IcT7gBB-1G0V+a%xY*V>u6JT>nwa?vqP9Y3$jb|74ia!MF6}Q7GW0zG7FWej~ ztXYb~&rDS}&FdT4@9IGn0?Nq^&6^x6-mb;k^=AOu1(Eul&l~8$d>&9vTKz+_;=E=rQ-ey>D@HNq=03g-9U=K=xNJ2+CtXKXkN4cYO9^i1`T-DNn zWwj@j`E9&_a18D9)Urusuim@Ha+hI(+S}I^VMV6ym6u+{#SFW~g+uA12v~);&XEU6 z_(A!`r58!@oW-eB#j~w9I-chn0})~B({!O5h=tOWVE4E5U~c#7-Qc8L5n5U-TG#e> zUmX|Y&w*U}1ImBIg8xfha>v5)5jWFHZ4D#Cx`&5NCS!P)Kz8cbbUbv#ABiL@*$|ZOb^=k-`13TmRWC^e@Q@paj{PI1A5AB%0aDzUgPs1w=X1Q#wzUUON?izPo9WL`-}OBBT9VFMl-4bnoBv@^_Iy zgYdorRZn(-DEM$cnb|FpgdP;;UH)^bA)a$`<*j|E!i8zdqU)%W!@+qcjmk0H`t|Ey z?c@KyTKxYQ;+Ik0qW7n`{@(q$4dmqe`!Rl37X0%VZwWT^le9k_<1s)I;2UX%ClWUl zZ37y03euy`KOJ8HE80-7&@HuEcshSDHd^6&x|^Ukr}#ucQMCs%6OCNA35O77MD>9A z25xz!oSCaFI#uzeV-DZQJd)RY`~A@i#Tm1E6U|-hJ^t;q7FI>X6XgcEVHK_F*At%S zw^U#`e;i))n5V-lLwm?x$>kBMcuaM++4|Sk?O&3;4lj)sK!{kjrm=sjHqv)*K&0S( z`k)+qxIWafEWP&v1)b+_)r@=&C7Nx3BUsJ^-zr4IRcF$G+!3;|U?6B%QK&kJ|0h5c zrt+I3)-9uMXf)mB0>Qwf$|#nu{N6CIHS*I7&u_d+UKZwHdSSz2nk2wBlg7{6OtJUrlfmOq)=sdmzw zIOy83J9h1thW55D#cR}m*UTLa>X=vv|%_zu0u(+a|;(iYlnC+Y_2 z76u0nHv6@(>MsIZ1*i5cQz0wm95OQK7dRAAPwBB&b*TBGXR|6Fv_rqRKe27=*+a2W zCVvcYr#(E>b8Y{l!S4RIkz22vO;mML{$NfaCtD5>{3~GeD;7t_tI6+PplyO%>l0@4 zifRe0CDy6z51qf%H}@CB9>8g{4_j>M8w)=s2fLJmD2lEN}Yr;oK z21^O5TB%fd@OKl*UJ9F6l8(El;0u1(b88+QnKs9)*UW!|t}r_fxSF$>IeZE#LY{*P zXMw4wpaMu=S++)GdBAQB8sMsi4;5LBvxx0nbG~p95PmH$e3^uAB0AYTV=HG@{a|9K z&pwT#>v@^TF4}fCh`YO`qUHRK$@BD59(v=C@tW`Fv`!EE(;E+aU#5{N|F_dfe_w3b zeDR#&zMjDS?AdOauNUTphkS}Als>T6iPnj5GeAor8WDaNZs)9?6LeL>$-1BO=XVH! zi>c*ee4a^)^a}MEl0wJqmwtEFY_Ma~E%#Z)E&GA7QrkuOuF{i7<(bM(lY2AIGRt@G z-DBU-8IkdJmYAsM=6O8%B@LFCvLG-SltS*kY%o z0tU8jzN2`${{irXVP1YM@$kf{zGr|ZUGiUPLv%a9eF?5KKX|+Ryy!HW&w4Vt&r@sD zQRawMvhgqz$oReSd4FezYO+CX69301@py1GIucx4%J7(OvN^Us8Tut|{QE@{04p=s zCHubpaR4?r1DQp6F`-GSl(ui={&-DnTcYh6EFhUC%)6(v#Jse4ZwpshS-!@tsUX_s z5TfnL63nDjmgS!7i#9wCb4f9=JlyFB$1P47vp(@kE?|7=;hqyr=7m?!Ql-+lu^9is zaWVS*ABVQeHr~CQRwwWx0>ZxuBK{2+7T|vfhUNGh7#5$Gc^ z!c2J`+7S6~l(JDxC`KZgA9>(zFuBYml1-fR((7@vq6YVbm>PO?nAc{XY)>T6R{t$Q zD*dg`Kw;Yn$_K7m&KP6M07$gB^v<|qwrX>_c2>bXm}v^Bumc|i@|0o=Z{A*}^PpMK z$-Q}#?ouRqTYmE7vN`J%qQMK!*-eMo#!R(c2Wx%0bqN5DzIAvpB5Cn)pPW+z_EN~u z(d!|HF1~_9{VRX@iv^2NK9?nk(EjzV8;XYKv9Iafj0_?amL8S;D7WGbYbV_0P#b~c zxAJd~j3@5UekD`&OXRi3>t`17^!sD#{*4_fglN}5=DHBB*eywhZd#IVlrkt(;N8xN zs{f2Uf5v)Kr+SV)&oTv;?&l!RrS~Alq1WbuL5Keac&wTIiG!Pek?S*2Cs?!Y(yl~P zA8sdF_|X~HWVaJa`whgW5%Z{kpZDOh|HoP`)tSPr*oA}J@<-3=7SblsxfCMlhBt}5 zw{u5k4b!mlC+#SV*LLn*vDh~9y{N~(bOEOhkr{|JXOE?rO~B-kay{K z&$181ud(08_m3iodn|CV@u@Ohi6dqzK(e^~Yc?9(&ZqpXj?E)WPF6GLA6J#gGt%!X z@p>L~Dj=?z2!PU2Ua=o~h7HBnX#UEt|Lgo|qj%VlX~?xwQbrp*^Okm-9Cvl8)GD<0 zh0%owa@K7hG)icSM*B@f55lE9cK%d>R4Ltq zn)yprc3mRY_I$~_3Zy2qNzd8uJk3sgoj@< z{5f~KN`i*s%?BxDANe1iN%1n#)C@sC-qd@%7KmJUM8T}))Q>{(CHtgQ7l_$eXy^S72>n*F*FLOhz zRS+D!vLBE)d5GqUg0ubp{(h;poBie?HMS=2KeiwLW>FSv-Tav!XvTsP2tS|4Pn;Ii z`L4a0kf)HFh~ew|vNVHHPFq0n4fgEY36u6LYZo%c7BL4ZD~tCI-?qXVu9EJs{^f5e zA3WLk8=1vG`J(dgFc{P|(cb&?A|{p2U7Nu}AL!9WpDp;1O}`v_uTcgE3`lcRv|gbrW}Y0pLZw0rO?% ze}}sAka+z9&&WXO%~bUu}D2A^Zv8v|KgN`m;kj zFkim{jLdxiCX$%r=hM6=g9O(vdAvudDy8|YnNV8}i39KBA(H*A-`I@i>?s%Lf+;uq zN+gHn1h4kpWsg?xC1CzHes?K; z`#;6^nts9e;`e{V@$pB7e8ebMcZK+z%O7OG*zF?Wg+| zRn1$ls1<}j(uj3hA}BD(6!c?r)NsdgP$%?Wu&(p98Iz9n$_;jSucm@3>kx$glfAMc zmd9?0t)`Jjm1*uA=$Q8_M)zNm1Iy3gY(Uau zvW9hkDhy~P#5XHs5B2ACU~CSR$sGY9T9_Z~6uh$nK?Oj^3EaHgZ%zogqS6e1$I#o-?p5PHr;*h3 zgGeRkiYDtG4nT2AO3n#DB55eXTEWgmx6TqV4wnBs-oDOASUoSf2$1k?a2?L9c_$@$GW*pAPNtYeV@B<$x*TV1D4fu44pJUa(Z+=hDmE4Mb<{+XkqhoFH! zu`6cG07VSYUQ$3Hv06fVB zsri4!b}ei3sH}{#41YhEnDlNpV2nunVnH9QJtyR&E_2c0+@?o^X=g~?0*3r!Xcr4|zb^H^B9Iw7=Bhc+DCvUV6{nF&$p&^fK}s05@<2Gm(tYX)@J<)!zH4Ps6G;53OyX#p~Dcnyo(?m zejM161}pT_q4){gyL<&rkUEQduGlDq7whot6}_D2=f(6kbeR(J5)tIJy-=K+MmA9# z*`2*|{UBp8i$H`ztihHBBdt^H@J`J<{e{gq``dUNt4oT5N#mx6^FgiN)Kkld0RcH; zapl|C;xoJLB@h~x75yt8Qn|w-v^eYYAfZ9)K~+69$Ku=MZJo>c_L4t@JtvZ-RUk)u z(J)lS4W~h)*`WF9L10yGv>g2}fXdE`UcwI{2rMSbKbiUDlYl)jbM6MYQad-f^T{Wn zG{~S1<6r5F`xpkQng*5ny~}ppve(B61I;TegjO#6{sNJ67$24{KOsKcC)IKchvUS-E>2Nm=|eq=BCZ%Z zazg>F;I1x<6npE(V8?ggvx|LXR5;Cbt5%_1OZRv_@Wg2g_WljR!l!8CL6@jWk>zz+z|2)-1!qjVf;5~SGxYA%&b-g(C`u9kV-gx5gBe~k|&m4T^nm~hv^alqk|0!h) z28QSas8+VW(Egv6ZXNzsx+ODsf2{qdS-38K3*Rnvb@r<1I}h5z_TUI!J+vZ49`)ys z^~dCI-UCDJusY3^u!Tfa8(1R+It{vPJ=ksb_pdNhV8Qpt0Pne8Jh_>6Fg2l1p5aE^ zVF$a7r8gaUkb-P}vjAQ!`bp7HCE{yVMLNFNrc4Gc52zf95De>nlbF_kJBgJQcEaj= zT5hXkzLE>}+0~%Q#>~o@^XcS{DDL%5vc$k55$wqg8slv}!(|*Kn7X*r)g^sCLzvar`v{>XjQ`}>k0L&P;fDGk{vux`~6gN7p$&rO}<`h9p9lq z+{H6KdN2M{X#L-k(If-Ep+mC3z#aUwv%Gx^ zt8#3%Scx=v`;D~T^n6kRRmQD-pY55=b5$EO%G;wOU0|i?OE`E_6;7JAJdzY)bf zO!)6oR}R3XKaz1qA@fw!epH^7jz8wlUY!mTMP;xjnRN0d5WS4)9X@eO&hA zM!dq+>nQv?1jXO)og&aqpSkvG&&&oI<7coT3jXdT17pr^0AUV+A;3T>jpVcRprzy+k9>CQnFm`964Pc~SCLK-PZkWxFn$;Ta*;{TR^^dj(T~ zfsJD3)OxHuFtWr*bwHb>5UwR`cQofwFnik7q*_jCQQx=Xfiv(TF2`)#8r5lL*Cam~ zyE=1V>A_lGk-cT&Ik~>Q_k#F3+Q&{7^=G!}kqwm361$^ipss9Ry?H87= z)onnZg&rI$6#?qcSdsbZ@jchzi5h_0LtM__!4Um+X=eC*X{IjEJGKKG06%n`K5}#S zWs(s5l2OBoM#V|I^Is#m$0S;B10M4aI-qK%Rs*p0mHSq2Ac*Z)X5DQP?*>jHJP0uRt}XRD(My5z|M(ND>^&f{c)5W&a=Lz2lY*^gKdKs z`V@)RiMR+z%q;6$uqYAVw)Pkqpc4&lPuF z!!Z2&o#?C1_rUv6lbXi}z+bP7JzBG2x09}ze@)%}3R!LmOOSkvdue{`#X4aiwQNw> zI|;s5_Cb4mumF2Fj%&NDj9=TIGlq;(IsL5Q_*B_>;YP*j@?g6Ea99uTyG80gC(-P_ zo-un%xwwEi_vLBrU4Mz?``BsnuB^!xWxAtX_w+4sEy50d_pFoBtJkN;noMjCi72Tn z^c$tm^5OJ84&i4ZQ{g`pw_B2F_`DRi_jUa*lR4ZkHL^JGUBJkGJ`FR#)6?LSI;(#z z|AQELg%s9*g;WasLx$!{aeHb91Q`=aXWr!n=uE_{odqr^xDfac_94}O!bR3Oy> zW7P_p0gNHtmSs}7oz71THLOe?kap0%)9?ir)rsk$t5ngXDA}!1n7ZPce+yx6?rPvF ze`z=PErqGlnq5aB8FV~I>6Td^+T~Wh8=MrPKu|U&y|bR2x@OaS z)U4bEZBb)kae)Qz+vtCei24uY^(5fs)Dn6IhgAN}4Hy98yCiaxDhSpQVv=7dx*$9} z;yV<96?#nx%2))n?{5*pc$N79lR_b>#g}`nmKmU4%&)Fk#6LKvIR3@_n7>UJuzUST zx#Xa>xAaBWn96MTk&0hojEU3in2xB#4u>||I~qu$q7V^umZLfHr^|$V-P|2?x*c3k zujnKgl5g9lyT+VUXN8UcC0X#4Nq3msCq%Diz)acB2ap`$AlyH&fm30{AxkjKQ2<| z!tZQ0Z(dO2(zZbhAx~MBe!NvKqV4bzqQG7E8*{htWz@fD%vf4Lu!b(rdWRav5l7uO zqQAyOwQn(d!itkZH578~#d^qIlr%JYK6wo^X|}J@*@WHHd*3Gnneae?EE5UsJE9C& zz8S>2>?;tRzoY*|hIhDF7q_%tkg<__RL()PK9S(s%`iN-FE= z&MEd$jcoKSUl?w`6uwQ|;U)@S8vdZ6S2v|(i&@+`ypYjFoP zPP};V4OC5y4h9&3ZLn!vC8+pJPH8zf=7mB>$pv?ouB+&0ezp+Pd(BzA@q52zVziyL116vuN|FkqZ`UFwkj3)jI8^B1$E zdHHd@2#8%oj?`8)a)m^t{KCj2)9>t;}DKAZyBE zRUN@;zP?M*V^R7XWlY^L2Q(iWXznO)d zXv+vxRUeAdy5hn7PB)W1_#Ey>(y35hEPP#P-M;dQxkDaKz6at9W{rDPL*_6}Evn18 zIS>}1nkcalrp_smg}p-0mU#|G#dsB#Q{k@4tI6*cr$lW;=mw;DpSdHYaU{u| zeopgIqSk}ezVQ*Qnm5_99K!5kn{WJb`g=#;K|<4~CS?Tsxq7^4?#IXlE%)GizM{lv ztb^^|Qeg$RfGFYC|3}qVhDFtNfvO0I2uL?5h%`tysC0KTpbXvJ0}9e5Qqo;BFm#vX z&^^@9HFS3j*YADr_uc3IInR04UbWZRwf5S39XZamHh_1P(7vejyo>$K!KLjG`&$Xd z03-7S*X@y8ABF_mL%P^P?e2_2M1N+Mec~->iCCa~@J_3S4HI}Tr_6nO!en)HN?tC!CHxee7f>nv++U5WLq4u|Uo z{Om^&X|Sv8rvkAntbS{-OPvyE!>CrdKU!LBwt!GUjnYHv1D8WkvqQ~W0#{hxtH4gC zppVKJ#i7|8TZh3-+){T&VqQ{==Aq5Te=)8IV^|srhX#l}^=sb#s=IPQyHp;;y?Rl5 zu$8YZ--+gD5PgvKu`&B=u7Ghjc`P`~Ba6jnSW@x#QwkXlvD_3ve)A zGqGSHwuI3RaH!ta$p0x40kyM$Jlq(i=5sbvHMTVV#z;1+mNRF+t%U$kD z3;Y!ANRhb}l}FhRTI?V6dS=}y%?2yYY;c?D9!ONJtUarS?LSlQs5e5EJoj;WAHw&G zjIT8j#_dPfqwB*#vI!5HyBawL?{#S9+CddQHj=EM#i3o&J~%sb8aw{Zi(P{9pT5T& z{k*6i`di#(iIp>uc^f?y^`zo{{LY12X`8O0c5EujYb}~!xN+%nKK34QE<|_x$em`u z5l+7QRs4r9P|=ql@}m3^btb6!p3@|AVXFPmcL-tfczP9AUxvCc%|qxu9@A1yUIk@& zJj}`LJaP`4!Zxc=TSv@}mUn5>CiMYi0bo)~2jjP&xrs~NCiC#N(u;TGQBS@f zzr{eOdDo!)70-5Idr#{CljvEutTD9C^fnm@ z(6$$|TN%B{TAvOjo&A_hV@CMc;x5$bJ=>9Wi>E*AzVEUJ-;S4nBtp@B?B1Fa%=nTA zgq0VSkDdsQv!BRmo!6!Wq{SUC-5`Wf^~iQKje5LraUGmX@7X_DYlqm*dk1H4Q0q%K zx@A;kmsgKIsK1Z*sHsO)%Vv)={q}o8uP%D+j=LwmccXC<+598f8sM?kc(b@P=x_RVM+{iy5@~OFTH=S zwLdpTZe)>rKWBKnCB{Jp%p$LBuQBx>i^7OpL)lB68OAN%-L5=pi(ao<5We%emuC7l zE>L+&;P}46PP+k=a=ffo+E+S;k65pqB5r35FV0+Lf zqr4iZy;$-0jhf$g?k001$6Ctsu`Yb^Q+_<=ckHT&L%`Z{tV}Z(jq(b9;jN#^c87HA z9Y&#pEOj=eiemi3<8!P8+ISyf0O44~HV&WWg{b$U@aN>XzQfWJFi6|JtEn^6!jNr3jkr#_RIs}>c#UHungaY1D3C=7Y*OJy;DN@Z>go67~sk{or6AZQGe1Wx0*S9 zaLC-xK4>!DS}yzkJg3Ms7BZcXmKE}UA+Jh`_Lh7n&EHjt_%`3{aJSWU?DX@#Q}cJo zDFWAXE#CiE>|e%>H`apxRzvmCXLrx@SCb#fT*d*=KQ(vp*|u1t*sW8@wb(Y)u>gTt z#5no$;|;ln>deETWb)Fquc$=E?hZGUzcW1(_3UqNeD=7YngIE4Z)^rsTdPoFbRO^3 zNl4Wj739-S=3y6pRglCm`s}(oW@{-tnU$sKS!;n2phhSYLDk~l`(+M-=kY+NSoK}~ zg`&t$vEd>5_j-SQ3qxU+`x7*s-+B2{5gIdQ_9rEI30MHmpT2|Co5&VT;bcuL*M(Kq z0@vHj6%s|^fZv`fmZ{SR6iv>@h87!?Jm5!>#5jTdhE3d~oim;TTAu?dYQTD)>SFdF z53<(N>gOJR?>Pc)?Etz2b_PDg>!@D2C6*Po9eV7*oC(J23nT1ai3wFf3<0>{qA|US z0Ml*j&A}Dd1+>Ml$_AzfrIg;-Tv}r^8Cbb7MYDCp+x5jpvzO!yt9i z{}P5@#NVAw&Oa3UQ2dwKPRX0wDg2MBU>;rDufxUvm+bEx zg6EyQ=6zKZ|4jz8WV=^#+`fAO>6bOWAR_v!lYtn#yk1cvCjML7UsJ3{WzpD*>(BTj z8rf+v{;R3=WJBBIqvhbj71{v>I^)ymd;gn)m`uM7wC$aj?Z=qy){i2$iGaV{UWp|p zpw<${>m=U&@sp}SieA6tvz9tXQ?SHRh;!GH)G$>kllZ*CFs)> z95s))4Bhtg7S>YDsr>S2rut95Ika<^c#4+)Hvc@3tG)x_i(D(#$kJ2%>VZyHwe*In zgt5NDK$_r+QZGp%W=7|pN=@$oU!6uVw74hq&p-Ee<{1)vX$oB(8y5W_>8yh5P4p`t zeLCMjfXyN_)B`I=*+W0TO8->qGYLi-u}s9MSuKA(QItBi_tdW;56xZco=lw;j}-8Q1A9w z(cq|ENgU1|`CB#qW&`XOp~zHcl32!RB`c*{cj&jq-fX&f`RRSuZj$tnCBjcQMEXgj zz8hmQubSbYu|{zcnzqk`ZoR6v@62D$Zm@%R$Zd8gGlIWwLvyhz?1nc*)q&T4jsBDi z$<&djX=fQ5pY$(t4}pV8??Cz5RB@#gKd>PQv-oKDcOLTSg(rKe!OxM%wS3a^+iZ3V z7jBUQ5yHmTo_=h$Z^UA;|1QAQIH-1lE!!yNB=!xa#{-&!h_gKWY*yaCs`qpFgezd8 zk^$>4b7itg6Bs%Ka4yCg(bUcYOSTNseNqaL%94J|fss|#m!s*_0$ zqeE8X?NwX3HIDde6VTM3M~hE--by8p#eUB6siCxxe|fW@l%8l=xX$MPa_CB2-bK>E zKDN5SUT%`dStm0kyjs*^p`4nq9(%|Ft_#y&TDthf1d33FdpWP zL?|C(W+jOt*s5(d6K1-;=#-UneY7whb8O0`yw$TZ$x5}*dAQL-%zsmsRV!RH;x+_@ z)Z9Mr|1dcKtdlSA_`o_kbUq6HkVaVl8W-KBRcT*t9LPTy z727OF<=OfGZn&2?rx|La>x8~`6$lgjM5}dCc`cYc zGwsu`=hO9F0_x8FjWbG#O2B?=bgFsX z@SWwIDCyLch)jAv={cG+F%Kp10lQU`DDnXUk+=9a$0Woofbjl*-Z==;Z;uG;EC)Pi z`pH8Slx_7iN13^&EdH7P*t^9SactjnsTe6g$88vt*pMfgvI>0^0MwIO%}C>o0o}%Z z-Db4gQ{to|s8D_R47zKgKZ!!mEZT0C(zq!_K`EUr;Z?F&alZB+^Z3N$ptb^QQeXMWQtxl2Nct zflar!{3R&5xl!~q(TB}Nu&zReoL#i@fo5dYGPb9~`Isj7By{s#Wp^FcMC`&-epWfL z-X^_DH>+1SfgD!PS6Nd+v6`%<>(p~GwK_9qNX}~ABlgT!c34Zn*9t>{o_+2qiky8R z5+V)N&bs(CP3>0na;+HL&adz63< zf1_u6QY%O#&E|L-Vi(3#M~l`(;Dw~8Z!u%wk4r=Xb)>+GzoOYBWl{oo~&ehZL>RsfUhhgfE zr%8#;ps$Nxpq6PDFVt^S{s`;SU~v;K^YR?`zFf-ncBS(|tX_SSsBXp7`^h}b2C977 zMk2!QmmGYQEn~a+mf6nVO1F$&^X5`_h>P3{i0(+^cy|4M(#@E^te7(rYnhmIv+h^D zL7mW+-1hENE>WA|Oj=W(F$*bB9L=$Lx0%_C$7WaEdDi>b#|!T!MkRf(?_9ob zDTqo0&m1_?d!Joq?4|19LXbb#4$QN$Ris2M>ZGdmnA2pM_`>9AV;048Y07 zw4vj1OHN;WrOAETGeU6WsR(*Y3`gk)z>@M{VYk8m?=(=+)vP^IIV*uU9_aTiXU5l9}i!z za(3#AfW)(41D(ojUBjvwSk7*^__01Ry$##iMIRmRVt>*%kw+2gR-GLY+n}B|U*lDr zWH}B=3CN7USH#bR+$$;f6gMcDXYdl3e~KB9Fez~p(<& zk=)ERKWubuUw#MPzF9rYK0T`?*8=)58tjI9GnO`!Yl*rD9X>V)1hH5(zj35t36OH7 z$(5>xK zp&xVbT#~}j!(aln!sUfa6X$y5CF<$nd5IW#X&P2dN(L0%^q^g!(UO97c=MSKqAS3H@578K~x)?TgCq;_q$7+-t z6GNdfPO8ABM<18c&%Q_4bU8f7PY>|HpD2 z4e|_|Mm3T4(A+C(oiPHw2z5>PR5oUUb$o^JxDm=1a(oal&Coh2hu9A~nsSVtB&-s}m8qVe=w*6neGwn5l`EE2PXcuWlT8MlEXQAzmLw z>c|;wbS^~6kfac-eZ5jtzu)PHJI&o;g~pGHXKt&G7kbB@P}%fEt~%)NGNUx@}%M2x_=CComF&aA#fAg=TKY!;l2ebNzJ3OHxj z$uytwYdvXrD{LI`cv%Bv24GmEDq+Z%Vrp%azfyvDLjptkmSm)F!*)laARrbN{jkY~ z)R+>A55`c56(xlL+B#LppG^G2?d59{b<}{*Ws98o_VmJb@2?M?vtW0pY7Io+| zpK~gme}4a9tJhkHbo*SyJ<1FKQWY=*Ok*=a<_7GUlmhzFF^Gzdxd27h!HDL#ruw*z zMqdenW@O+sfLx+duaBy=rdY6TJk>IFqzzCDPHVt}Xg!Kg@NLLG{D_$;J#~YMIS1eV zhPtFeD#sQ>M{B6!4R}??)1w3;qzlNeOJlNoc>El?()5cpbd&W?tNVxHIxSG+iJam+ zf7?Mz?biBjgInvd)sbau->%ZsKfKaUF`%5tBjq|gYj@)E@1-;lq1+v>yHevZ)?0n< zPJ+BCv5Ay3syjBvrM*kO@=sat6f^KToNB@B2LGb+kvwLN9=Cu&sPh)f=rroLH?5e^ zh`Yxi0hC(7B>&Y_Rq5{@=Wm1oBCqjgzIGq$Uld^aM%Z4xi^0^BV94xWK=bcJwbjtH zTq)JLhRlB|cMqleN;th`yDtF)kg9(&Ixv^9%Q@ZavLx>HkhPQ6wEcSTIV{6M507o?29L5t zL5JmH-^8XSxm*EXiouw;t5)l=NzIn|6TBnF=bJR_Wn6eO0gedTv^&2%K2=iE0HQX1 z)D7^|YzktI?HSO#=R0|2G%{QUH?;w@($mbeF^H^1FSlM6*(X+~>*31lh;7h}NN!zu zbM~WD9A!;w%YUC3(T%9|-_5?g^P9Hd6svNU4LN*M20i6T9K=XfbY&`n*l)6AC3@Se z8Z^D<)j;3ewK4oqdM)-NjRETGs%Y0AkQW#0_nyKZKwiM;O+37M!UL%z7H54(;4=>F z=Sko3Qdvm9K4>0xA8H!lY58ZZjtKx92#x(O{A+99YE7kneO{od9ni&JlKQ?3r)~nW zp+)3m+W&>r(E;>{tU@^&=b4E0*%%D<0~Ld66Tc9#BpWrh;OuhOPNDx|X?Zy$fNZPY zi?d|#LtVD4q+n2wvx3*HS(4rdPV2T zKq@ht@98pKwi*!H$*1H}R_&D#t3gI=sG)2VzB#(_nS;WJmRw6grM%#9?bbSef~Bf7 zQ_YzvEW*~pgpSpB8TUbMKbopU%k8KGDLn077P!r^3)vR>S*evSHaZh)@z+CU&k7%R%ygi{ zFx?}|bhbN@v82mT_A}oa2Zk9Z{u>N-__b~l)#*bfV#u8GVaW9!_F{KI7c+vg5q*P1L|Zs|L2I0m)|V<%PD55(XRu9i%4m{dB|*|7hO`$ZOJbxfA{#x`HREac7pPxA3IJfe8GK zmZ}f>6A+781MD*@P-HY#3O=StkF=mXgFkgI6(z+9bzLKy@80J0=u)|&GS+RJ;xf&f|a zz3yrZZ2tMk6P`nb)uMkdXL#Xf#ygwrGc@Jg@!KJnR5$;KBm&`G+~?6FOZC*3pjls+ zp2~3q`{btES3}H(7uSy}U>_bXe%tA*e$(i(0M@lByFD2XPd;Z(ri`9;wK%oCr~m|L zmeJOk)Z^a!Kw1qs0_uw-;4+OZl1PZb4b84C{{&S-J zjz;kqN3=>N3-%6j_^q=BZ`8gIpmu%Fk+?dndUA)>wrmyy99=GO9G^Jn{jlpR)YZ49 zyPxfeS-szvvLSA)P8E>8WEOMXjxQci`P42+ix;c+^$6PibO_iGQSGAxuM(dZZ zP-0jXag1cc!oCm+)&5B!tMpY-$+mVqjYD_UVm`i+rIsr6vNW^!*fk^m^^EdueHw35 zuDW5qVYeyY%y6&JdtK{oOS4Fs#N$c+$@!>It18)QClA~ir>4|8XG4{(kjUvlPI|-cj5)ma}wXMJK#SXVNt)t6aSZ8U>aI`*q|)6+J$}m3O^u;!~;Kp zmUx2hEfWC&K^Ts-ns(fJ121oLjOkI``6n;q5r#=29-7z#Wm7|gqw)83mRr|njUb-& zjf&uBBtJi6@i4ev6Z!{RdTD(b#GQ6R3s|3Xy~gzqS#I2XML^XWj8j+WWwhoQ^U(H9 ziQ(A?Tf zz04}fo^{}!)q%wIC-@dCo;iFEp==p7m9Y6f?>gQ7tv>1yXV)(pNxsx!VD4p0bbn5M zY0Ug1A4&I3)GX0qdTewD25Tt$gv6?ct_*m;wEqi}BL{5F+kinRSz8PPg~$dHSIbs&_h`rgWpRhqs=BK5!0M3hAJTSZ zuB&2Y#P@gQHqkjfxwlX4g|YJB zSe6AGvOJ2x2JNlVeNq016WNSZ={Xo6Z0QVwW ziv*0C@hbXZ`&v6Jpi$LO%V4l`QZw{J2#Y80EoeU1rIzZjgW51__cG>jQQThr<}c9~ zcYes-RE|$9%`Yz>SZx5|6cLO>vNq&b7RMayJE90T@ymeo$O&GI$|pT87$ohXvBFTh zJ+po$ujzXfFtCB+$BA2mY4JYWpd;hX+9ya!W?bzLbsTn*#K95I4l?%H^7`+>IrjB! zjEsgQXI}`xHM#w{++vvvlz>;-?sen_)sB@Jy+16|U>W^ZTIfrwAmt&$oxvc_-$In< zGK4g7ZFZX@?WFguYf*UC6Ll`SSSB95B$DRpWLtRF9|-ESn{PK1$>3vj#WY=BQhBKz z#J4Ntx8K&jvFu#Ean1de_kf;B=sBJ;w1yP4&Eo?;lk?-$C z(jCPIg4dT~&~%Q>;ltR{<35t^r)!>7{p8#uRF);kW1`qazuMy6OWyhGK3aDxZL81H zFE+5cPSi;qL$$#i#bLUHF-1RoCs{&&jvIXQz$8ug<*pYZ0ds|C+dz#U!et8fHsYT= zP8jc}LcXOG5yn$s#7KC1mQ45GQj4ZV=WM%H|FSrnF+x^F=tT5T%3T|&g>5y}GZgt; zf`44?s&X3s6mal|Lv*?)hdeviX40Ex$7+iP_BRG|*IZXIPWWrH(D8qC=T6wxc;LU& zQ~4?#X`^InGxFE+6N$%r9~s!j>Id=sMcq-cb3tzBSVObIlyyHgL*Bj{p^)T42Te4G z7`7OLMqPz>;`w^}i45$zLrmA(j8<Ud3i{@ny$DD;TqXS=&YOJxH628E7zs!Nk&RbmvSNN1qj|sLiv09 zDTHKL4m>m+F050+`D(hW?`9L#_SJpV2_)UaYL*wdy>0xPxytzFXIXlwoDG#r|8{4( z=>}7iNmt?z?;Mp%bIeU~*iZKT$x79WMWat-+UqD7Z5!&q$moW$zp9w3OXfZ(0lt|-D>>rxZ?7B5~A+=_9f;m zPWoj>ztUt)d4@a>n7BD*AX!HxUEJABULHPCC9AdZ4(}n#-*JSa@5!4#k?%C}ZEvE? zmOfG);xs=YR+9q0+(82XS@VS!$9@#fHg!!0qHU=*UOfgoS-n`{}Qn^dO3voOa zBAu%cCGjdGN5P2v#y`%r?xKzBnjme*raGT51AQJhsrKAnU20l+$lLL8Wv)|<67^?- z7z;Mz_92<@jE754N!GZbXPyfMqBXp!F!ub);x|YaU&og{OT)LZmBaocBo##VfbWe} zAwnY-wTHW+_T=wR^(;#B!{GdSIms`K8nfsWTa@p4lMaOJNwD^k;AEhof&-%%P=cIB zw+*Eo9ps@{9gmllhL1x&dXOvAi{)~v_xD#@Cuw1mu@=+HS23mvjGD89dTyNtAlU)Z z`vWhkn;&A+C&HDg)w`4A+Up*lICp*+k5yEX*~T*Cff5!sUkq+vG9fO0cL{#yYz+y0 zUeOX;0ZZvNy|lc{wDISMeyZb#ynT2%D)ubM<^hxU4^Q#l-Rzp!<%6cM%E*P2=%Pe6 z?Qu!xoJGO!jTy~U!&GIW8%tw|i*a4@!}lT)7|-Rl+WBnP<&($JiU7HCr_6G}#A-<) ze<`*g#}h26_i3VY3-7o9|f3v|{ahz$aVTFG0_Z|(e_skwxsVf%r1NJs5=0wWk2Y0tY%y|nR zbL+C+@}!I#uGt+%pn4mfO(6nS_zZVECtURx?JJ@RYab*QxmWw^&P3W|8yF4k<@O=_ zeD)i14ygSB(QIT$`xJYD)=XW({4p4MhcCJF&73&$9b;o=Vv+J>dy;8z+=9JW`!2Xt z$=5@yMbF_;Ai#6)69amgJEA%*Q3c`ePur4~!>uHcT*YVUgC|$`=EvH|HBoB1Gm9ATwZ@}fH zpP{hW`@~9bH?fj>dPvpFMrQq+R&CfA7$VB-S2gb*Y*(#8Ts6`$502j(|FT%2e{!p7 zQdJI!Jk0Cv0%usy)=PX?|VZ<;XkX_nT#2Ro^2erY! z`V{1ST4E4xZs?FYI9F;MA#=Z=B~BX|BRI1%o2mAB{7b3x?`drrdh>mX$x)@Yv= zWTCAyYOgsALhdxa@W+uM$gA1-Opmg0xPR6DZclg@l&aOX12(9POK-|rK&@wHA^^u(;X!pYO6N+iXiXwdM5J0F-&QeWN*ZBOEz`%KigHG{hIZb z|KD*ETSJxg7r7b9q6McohAJ!(fXZMhk$M&eX%Zrc0yoi$;^}AkZ*&AdnEq7lhl*|y zo>qDf>|_GAs+#vppHyy!alCHsN*6*bPA>8^r;dH2QLn)7*vono7AxZ>4~XLLynA-U zHN5loL5{~SD{u38mTT(7Pn8{*9Sv8)XMx;?e=;Vj5=wu+b6^v zz}g7Ai9mUPyK`{z>w;QBqd6&qTbD)T7~;ipVjaf$v@qqFVlD@=SRcM41m6y$__>7v z>Xn_g>~N2;aK}4(-6Zk7XX|*SB{PjEH&$G`G~ptYTcnWNlH)|z8^agPmss{srq>JF z2NfHO%grmtzskE-6A@iDU2O~HLcgzGE?`=SGA4Sm;1H)ULc*teS$$+ekCDRW)**Z! z@_A~E=;$84*JWA-0f*$aUeiKEID#p)R$Is767_N5XvlO#DPXhttW!Bq8+g9?)lBU%Q zH4l@O-<1ht+v~jDMTb%~_*==2^JgF}E|Lo&W)De+JHndotN81D+_n0(*;(&hG>8p= z%GxInF9Ik9ad*(?4Rd83><4eq{0_$~y)gSMMwt%=jB^Tt?2zT&y1HrQ2)JmP$hajr zM0>+y?-I{GI$lCnaIa|RgNd%W-um`{QyL`wLfZK zqa&!>C5=y`agUzlpwhe_$Pdx(7T|}lmFpfEb+N^c{tMbDY#JCf|L2`M+`>JXFA)6{ zFx@anVLn1Zl~r`g&T7Kc2mmDV*jfS1H?bK8-T&e!sh85Id3T%jc$d=O@jVqQpbhhE za+7(nLT|x0ZPv*A=Q(km0Agwt+`t*mwFPcgtZ?)uNxq*J`ng$=Bt5b96aVzXWr+YrshkmT^Ee znw_o|FBkB|42Pd(2@A0@DanS2igNn8C1_qyvuAl&{2~u%l#)MGswGXKpxh;ddN(lV zBf;P()@VH51P*7^E?^lk;8G5o5hm>`bT9vj$_S`KfckO0%vS zb%hb;DnxrUO$2nW`RMaBANQvXzJ@bkI2ZXILr}+g>0pOen(tS{nFotn)xcZQ;#UK#hI7XP2 z5mq)Db``N8zL#L$)I@i24<&az?GY$?#}l4pilWj@t7fo!(90lPcK@ASw-{Wk-{E_3 zUwTEa;l3?s>Lin1!1<29c$)dOXE;3{BKn}%0=(pkNUU{7x7`IyJjPBXr<^)DQ#+LT zy4suRSNP4VjdMXSEx$~Jn?~v%RkNkZDquckIFcqlTU}ctbUg=g#NZwUTi0FBG07-o zDfZ}PM3{Rc-|V%eaYD$L>sDiGn}3ejAaeERSdCm^;&@$Cct?#?eJL2?@Boc&L6i{J zVBn6(t^Qw2hU?YD06b=R!vB6CnW5!d4eu^c5IjezJe$a(yXZ`Kq{Ma=_76y61KU8MF@-cQ2@ca`H z5ctMdtJHb01^PCG)r{h;sv-6dQQL*`ef$n;2k933y4wk>(GjpclMc-3hnQ#}+8e{g zFXawnvB2x_2WDI8IhNiw&JVbSPS%y5w6EH2!HNw;XsCGJjHj9CwuD$U3i} z#bo{Xnm}4UhPu;GG`B&#gD2AgU+iXk4NT#t<70H-Y?M*vcJ@q6JDILp~M|srM z$@MQFq~Qn;{ZAgu$7npGgalB^E4#)@?aIl0Vs0#rKLfM-X(B(!`DV>PzAXB~uD0zK zoS@weCWKPCB6FdPhc~(zhb^0fd<7SJ&Yrl6ZYYR9DcKP_FSyRIs~SX6=h`o?cnF&i zvz`QzGiv)KwAvVIGXbSv<%eEg_eItpB<#K|Ev^fpQhl2xhCV*<8Ys{`yXSl;-wKUP zRDG?pxeKRq(`iy^tD9QJa){PLFQk%ivm2>Rv^joeMFhw)P8F61Uc3YQ7%0zFkCT9Q zN~7X7f4FmS8x-iJucZ*m$wW<@J{eW2;o0#W{kp8oWXl^VWLsR~Q%KiDel!~gPj8tW ztA&;BZw$^JH%?)k@ISQKntzd8OwAiL26umL*;RLDceRF~ZM2k{anahjcY)ySIsy=% zH>Cr$EkfI+=io}m5(+M#g7(XABEdvVc!w*G^yj?H4=?h*U-z-7>Qi3iH6+z)w|6F$ zPMWcwRr~L#;oCy>@l9$KWGkKUxRWPm4sT0WW>TAW=zlE>`EwkWjSNKTwdydn5rGPE zE$_6DuZoM4Ro0gY?RWD};enD!;Z zJxjwp@x9jPM%{%5_jw99w%??TSo0!N&f;hW0ZLWD3j^))Q}?=7MBEw#(4oo@H8V}l zYm?!iR4f^blSV)w84>t)%;te%zbwIVXlcoq(O!KliG833s`*9aA7Re|o@hWfZn~Jq zz^9!z1K+SDh_6}9GrWP*J4AY+N8THR6LZR}fdX$FwfhkUyVmOQeHQhllBvQOTL!u# zh?&7i9*N<6;~J4kt>4w?p&wO;-EFsRPYzdO`TWK{CAPzP%;SrspYx#NAq-iEGsvc? zrhVV<-8Q7M&B4RBW z(a4&-v}yaSJDSHk>9OaUst7tRpt(`c0#(V}UEG+c6Hg>^jinJQTG>vSXluJ=+OtHA zG^(QWo->%W8De>Q!XAaxqe#ZC6C39^LD3X?zT z6gQs8F9?47uu;2hdG70bSo_r?suE{*{gX?Klju4o?8*rH>9AaZch_}Hhy2&`Xy5)vt_h;bF-=dYU*Qyfry)QhrfrvcvMb4Pk0zC37X3Xn5 zQhoYw60?jnmli9pohkoVirJz0sG4kJ`0iKBI%SMei+V=V9Ab}Cc6M=EwdUA2vg#ze zDKWZ9Q7Ztwz5|z?FlfcHC53y6g4%e_>nc1y+1IF$isk5KWmyt>Nb7S&<`Jhiz-0o2 zqR5&sW!Hkq0jm;sb`@cT9DZl=eq_DkT2XT*^6i`wa330N{iNaDPgNbTB*f5YkaVw0 zOYFLs)bCi^+fJ7-lx&{vXm%-M*4c7=HB8Vm;%HMO#wqzzAZSia+y$!##QUwM=+_zC zt1s%=qHaGu{Ki(m&&&YI;>Z+`);4x`U=|Y&I9Df~rg)0*8EkMkmk<#X`mfUK?$2m-hfUoT zXUcie(@e@*vdpx_-3)mm$~WzrDAel8pcS->XZjWj@|hlL1q6k6OrZVA8SpOn1{^&* z95>`(lIuWMnGa5K*An&)Ri2vHHXL5Rso&s&e}&0m5xYp53Y2-!g$m8pZ3|xl6mI((Q<+Q>OLP z_CyDQS!;_aYa11(i`)5C2NTSt9mjQ}P3BkxXyug>A;2H}a5fOMYCz`pcd^dwfLGEx zh^dXv1?7M{Z{6*c@gRJWW{xU2Ar_YlDLiHq)Wo73LM{Z&_9iR>l7glRz{}l@rx=WZ z5OEtl;$YLB@!Ht!=Hy#jxlwXmZJeHnnVVlc`^gPpjnDNtqt8=tu_f1ERQ(ijhF-sHlsX46;|sWB z;?RiX(Cr)44$fHKW8SC+dr%DniM7F{qVChh_)3P2&w3(cqczu-(NEHk81JXPZ{nFo z4>qed_CbetC$_$P%^*J%Nc5+it}GdCK86qwQ(Dgty%Kr}9p4+r0Y%jczIJphU(i?o zvizPU06miW6zHbOHaPjE>8AP!X}k7lvn26f{5(DH3Wp4Hbku)-YKtkVw~2iF zzl=$3wdZyA&sTQ}igIC@;n~HA>^cUR_2d(dl|C1nKj7zc_6tPlZxvnar0Sk4dJBfq z+!5XaeRl<_a~q5}`U~XMZSZlW)SCzA94##@Eoo2t3<;ErW$StKDN|QxXvFC$;#JWW z?#@G?q~6P8Ixn*}@uBTvu~{I3(| zGn8d_mzN(|C+RtX?XXpMKSnz}^k7sNXe>!xy`^e)`zmlpFn&Gug_4;%zt&melLDHm zk*W96`*Y_#sl6x#>3p1UYpNkp54Vn)D_hWKed;iV14S*-&r++SdE^1# zm3vG@+YlChL+c6tK?i*OQCt4#%fMS{7k&~WVG<6?bNlCsD*eTQdXYD&j*WQ}jZ9SP z1EDr=4t5klgx0isqJE<|i5ZbG9JFA3gT4!Z;>*!p{X?{&t)o6_?LP(PPTm+CJ-mWM zqZS&*INZr=6ujnUZOD*;4FZ_C?8TF;ETo>Obs~73suC3yNK-HB5~uxb0QR8bQx#1Z zpH}*egMX2EATnZR)fhiEmEQphs^BDOM}K6#U&r=&j_3ca9#6AO4BYXjT-DsYB8v`E z#iXnQN-7nC2T(WC%>Ul^3_@r%rPd2tkYB<_*8Urxi}k4d!FgmIKTV@B@^ zD>&neE9j4yafiC>jN!zur4>pJjkWdhtmPxxDZz>-yoA?3>|e)DCU@I5hzdKzMc6xR z)tbl|IkPXxZ&q2(XZi-sG*oBJC+QpDR9D+;jQit-`JT2af7+h(B}DL^j0ZJ#XZO+s`W=}}Wowtv^70EUnvU{Y@V1?f zNk)A;`EIbT67K)u>aBy~YMS=pBqSk$00Dwqa9Jd1aDu}E!FO>&aM#7fKUv#?Y)OwA!;Q zmaLech$z*vFvgW%lLV}x%5GQbENdFCO;Jonl7JrG0*e(YW=hB=)mZ9kN!W=5Zht>y zVxU%(Bv?Kh?<3HRQ*gveZqyp%f)^^X+j*5f(Q{a(7lp+7xB$#^zm9**QNyjIQ2&5j zY}zL?ACNEL(I8J?EZdM#ZO+1B>cjm?vVJZ&uQ}!Mi$z{GF9WMccR1)?)UYN)^%G0_ zaLyR>!}HQtV_ndV$P=De_rVF75l(NJ#K)M(T!e}CNi0e8@vxtv@Yml6^VH8;OYl3{ zMkiVds2y17JD4$digvwX`4sHYF{`L{zUGwvcgoo!-QH`k_n=#mYb;cLr!Z~RTMv*? zlPw2j_d5xs_n6ciJXQ-gZV8Z-iI?<-nzpM#$HfNBB+tE{lZdrBS1$(@#%y7*H*hVp zpeQO;b_;lHU1Ln#x`aWL8f{JPA1mJ7xomQKl^cn+?kZ5R`r5f9xoQS{D7N7MQS27F z_}%n!VV~W0L*4zqA-i&_DK=fSO;i^Q8Ac*vM>b}Mt(dCnGy%F_^Nx=oPd%F`?G{AF;0@y zN(?|_55`{eAZEb)Ff;~KQ;Bg|GogzR)Rw-g8Z^-2D|V90>W>sG`8&Rp%ZEB^^UT#w zEu()X=h{!1CRfnLqaApPWM`0So|DZeIU$xDRN?JX{0GZDTIUPZquZxO&@{60(U7c0 zvep$#~PNSQM85`6r8<_i*%8b=T2;croLG!v*G>!h@zh}DB zx4!d;AIAr#%3e!VDlZ2>uwMss)#JsavM{2cQ>TO6AG!-u%6n}LK^-3UJl6M2Wounz^&2u38hYlP7euVo zV+Bu}vP3zHIa&;OisM%rvYrPPdW&zOO&__4u--*d791xr?zW)DyuNwi42pc)i;-9e zl$m$G+`)a2^83<3RG8 zl4<%Rgh*^oPcFyv3#&G!2wx^C-F^sG1;oW7N)&Ieg9t#<a!T5hiti2yy`uW7oqoZF3ho3khPbRJX1IzB^lGVoHmE)u4HTW7T z;KiA@7sj?zdj2H_YU0mgJ)To4#pt5QQKSg5T4@$1=)5t_9sbQu;{(+0q(`(O51I&H zrlLA7DSrr+eVSbonG}#2!q2_@kw;yl5jXbMJtT6?7cPY;ne4abOY7 zur#Jsh>dMNYDVHsrgrwe-b>@vmGLc!=}8F0kTY1l$PkZ5I=AFnq|GbTAhU_xLSYqAe!iNi#wrmqf(uwp%1z zi^kkjvn?|RpFVlme!o0__h}&P7%b3IJKbvOWTLQlEgCs>;zOQy_Xpx_uf|tc8FfTN zAs^+5K!)c*3`=Qul^J6q*AtakZRhvhy-1_1DCC3VBL9{tALfv#-=V-E0@EaB_c)oW zQ;{SA%?}R#9(|Zgb@zfYQ`&t9KvfNE+LC*fxH4#(xYT z*YSirF(yqpGue8{@%eu}t+RfPrGASOQz_QZ$<;O4G=>J4i+u-El9yoC+ET;VSbaWH z-Mxl^kVacf#HKM;qQ@bKAJbB!M2ZwTj(#=qjQhtCkKstTgU_Z2Yucn0^!2!*r>WNM z=OtCgGIt#gqN}~liCAuq-TqChnpOeYDx`9*Wp}-8evSNf zv^rjw>!~euo>P+#9Af}WpQXgW`*o$KLd>;lHQwLQl`d6&JXi;Xf=HlYDhhb($9l^c zTXxOsHbb2>GNKAi+Zo|j{CO=Tbrg&!uP3Xq8AlrvD~TYQ_9Eb zuv5-`-m%0oNOvs{2K9Hw1)!cEt{WZwIs{yn-fG8&!_O%f=;@CZ8+VIeV5>HFj+qpW zyQ(g#@V>y_?PZWQJp{}25kR+oM+|nsCCWw+RfxUyABDee zQ-oPMKK_w?dlX&Ox=^s=8=B%Kw{6se9&24#Zi1z>&RHv0Dyfq@oTAffiP^(0l3j-% zuA)3)VR6S@PAxi5qEg2(B|jE3KcgI}uq8QhEzf(otg~EqF)zYzH-^6JU$SaBv!2Oj zt28mhJdv#?1TPRDxxgy<9IfPUC8Vx_QUn^WUHAzXo5soz==&r$qD~C07LQwcerz1? zA_Nt%TGQAo6;N&0`fjlcD!-f@+meDSq{##+Hh%kK|-;gt7FSUQ+TXCr)ao%EJpK*q{D$`3@-0h%fWM zTk(*8?_Qi=<|+Fep0O08_^fOkQafulfG^kQVv5)@OH+zPOkrq2P^?ca3f#y zI~{vjPqt<`*Xsy_^crM2hzxw5dae$Ktp{{yuu#$90JAJP zk=9HSoqIlCb};LE9PQcXHpR=G*BAJ!pwpRc-fZRc#HKYstt#q`{gK=Wpts(fu(iE8 z(ebku7Ha>Qtx%^Y*e}wJ@Z;ul--+I zJh7Y*`({! z_>mstw?E>1Jy)vGMH?z9sX{LV%L@7WG&FX@K&eTpNpm;CG>liOs8BB9H+~w3gRh#o zjAsJf#d}5!3E=T^*QNEns(#+nrh3wx86rKXapyGA!Cp`k7ZKHHC5Q1u`n<*NUXhrq zTcGiX8EMvcTe7|w`gM7SSa{R&-6T+&QeJKXw zJy9*>OI}h%1G#U_SJowQwI@=35|lLysa<8BAVgt@7OJqHUd$~CWc^9l!`0HdN2(wT$gY0o)Fic# zP;QZmsMe;fAj@#4k~Y0CoU@dh$e!CV+4k>4U-G9XF7(R$7A{i-!9$Qa0Xj#JcgEP-m!jgp*uMVGRE|DWXlz3 z_;~6KWydnDd1oSR^VJoBtJa7y6^Fa~*=5{p;INB$Mk^(K-&x+i1m>k|%so#D$T6BS zHQ(mS&zYl}P-PZ&AHKGg8CKgf78K18P%cThxb?u?R8Aw+ddhPKdFa<$O|mflnnRjS zgxJ+@B2J>pW+oNR4;YuM7-1AtV!vQr2YTP~!Z93eyA&|5{F6?2} zdV(yg*U-7H(3u{bQJ;QJ_wq8HOTU?Qo}7mi^vXk0i?lB8G}<3Gp0zHo-O<$OljQk$ zhSDx$M}UIWI-&!;;v5kXC2@HSkK|EIY=4*3ILd2UOOMLO7+ z6v`hi8E6izkVoz5@@XvLE!*P!7^1XceRJ}V8+^(RFF6Ei(mgh=q!0GP$rrQ0!PiPC zw+Vp5fJonKdXpa_XlEw53DR8(J4LqYDksYcO2*5Tg%Nn3Rsd{*$Ho-h>uso;MB5z} zKGo8;Y^&Hn2wNmDcrr~x`%-30l+k7u(silRlwZyki9uW19d9?QdeRI>$66+o4a^u7 ziD{VMSJCAkR9=@Mu0Nm^Vi7Mx{xiMyTZf#$7br;mbOVeDh83Q_N(j3?z#z5aef88| z_QvK^q6=(DsXZg>Xf?n~drRR>HqIRi=eVN;A<5PX`b5^AqDTA50#DZpt2gZ=ihR`k z5FT}Ey!UVgeWnZ1kC-fi%5J+jgX+pa9m7f#&?6agngkGI+5Egui}U(wQwJ7gyr$pw z5)zixrvI}!_O$*MBTrHQxNOWG*`IiSbr$0ZNHK>;z8l#yKF%&&2wPelFx;xi;*b~J z(w;7eUxs{)jqLx=ImhPx;@E%F>1x=sDcN>>ald2qG;>-Vb=r-VG=Fj4#*_C>MNkBi z%Ez7BS(+` zWT{o#n1K^U#uy&hqJZoC`*Zh;h9=F5Zhub)bX?DlY$hB$mO~Yn~Uov5m$D>lJ zXhOgd#8!m#KIeU5_mq5qO+AzE!(nULfg_8n&T%FEN&RR|!;TTrmzgU^*LYO|nO%yb zjr*MOode7-&ZpRZeF8G1K0j!YJYuv%pp5IoWgRawLhDO!wFo;MsuDlgLjTZ?7Qeii z{IGX)(l9qxOEUd)rjOd!s8dk;v;(NQ^lhZyHpj!C3S<(WvF4#h9JsG7VA>hZ`+af$ z+DLlI&!^I9D8#6WYhCo5AN#{*@+C~qjyk9hNVMJ0K0<*8BkRbZh^jE(qziU$mVrf) zeR^~~^G>^Yvt+zj=P+0onp7(1av9?a_2cHOg=VJNjV33(TF~y>euq0fbdr9nw8YwQ zw~2{SS|wf*PU{8=n%NS#;xpy*T%g*m!ArS%7UZdrSWi_8)dErq2@DV#AaixAKRWY)dNzf10c$7zOI{IXW zeWS@HU2JoZSp;&+hdq);TUL^D0(Xu{rcni^=lSVt&g{>oU>1-|y+q8cD zzWUf%Xje9)3MUQD1~88xbgHI(N;irGS|>Gxm=A|#KFnnDZUS1I8b7;VhXsq;@S@LE zaLsG2)X&UVk+DrWQW#O(=qAAh00FMpkb`d%p+bPl82RS0z2qty3tNjzK+E3>)Im6b zIA#Vk?tskRQ-_X^#GbO0*=#{uzAmAX5FqgF=hb|}7VJX~awt*=-~zhyhWr&b#w3Qb znX(7V}IZqW?oH^q7^tzVKfj=H)rBdBl(F1BHEi>L>TTspr;>=r3}=BrsU~fV^FU zcksRYx!+sLDL`n$sB|fQ>*0mdmrV!EO^^Sz`7zM**!_O-;)Z%+Sgb?brjr}&SC#7m zxLHe$&;a{GSW}KG6ixpauDbbhNj&y2+a(OzzFfBAcUAb=PrL3V)m7(y{13QxW<9$> z(?P!OEsd-@;~zoM$JTCh?D)gzj)vT3v&jWeyhHF4Sk?X$h?|4L$C zR$JdoBV?Ywr2-%vketJ{Ixfk~+5CT$J2ycJxAC=(4clPPgNbzzhUztl+r6K_r zGt*|I=Zv8eeKDkX&Gb8b{oS9u5qpwU~-t-DN<<&l-{9$_;eIxCFqcOQVfT!uOv1_hxGg4mD>lUusN zkw0K&p?q9X``w)#ilMLcS8q~}^j16~eOW9SNrXHb35(z-!qW3P|BSQ<-o=Z|%0ulP zwYZtZyMq7mNtN4KV)> zuau=aO)FFQ^48rRnFtKWRhXf7rlui;j4%;G^H(7KEp<1rkxpCB>sB{9v3HrNAJ%slmZ@ z(C@pi>Y>)&p%@(2KY>SSCdjH0!P)%URo*)ST)L*q!1U2JN`70m3?ab z7KfXHg+&bdSA5LkS|BKv{Y0*o=kzT?M?_LY=vZXCy&6mD+sryW z)2X|~j0HsO@Qb9VJiIE#G!Y>6qi-=`biXN42f4k6$sRBkwXx#39@ov2`Rainx-)mN zuW#6++H^lsEyim|(nR;~cirYnu^2O{X|&FhCeBAm zR|!@@36FxY5i)5Pd9s_No4Vz#XU=+kg!X^dt)nIQ_gbGAxVL!yYSQeiA+omw$U}Ko z?5$?QC2rT)r#ST~bb{G1RQM_GvgzH>+&`TdW1=Er-H(ygY9>XtR4zRR>P^N;`Y~}P zX`cG$;m}$lEsswxVIZ#`1e@`jT3De{EY2VHqcn;pL+%vu9aG?apd4!J-@sW&{>!wt zAId&FpmUiQ7?$-dy&|eING1xJbbV?dQyf(r>_v8*~H!A z14H#scH3CV<@SW#vv(yB^d7n3!}`YrR_k)7O0Bjfy43n8opn88#t0Q;F7{9=97u}J zMhT7jN&SSytpdr~5?c46lTbB!anp&Yc#@KN~^PK-Wz`SQEeX_~@FOg(Y_fyBm|F!-o&y=97olWIqy@OZo zOy6}46M058f-YZy) zMUvf4vS{WxSX6mx1ROs}u6UjdiW8zyWFHj(+jIGHNv4|lyBYE?c%sDL1qQ4-;e zu9i>1-?0Q~@mV%VY9sZqVk*K=#+wcV4blhbw@PuZ;=PJg=G}xhIU7KkT~n-&N``sh zcTrz0%Y$q2KuVdBWi(qoRR*8tF+bt#s(MuJ?;}*23{qo5FC=0#8zgHkeu5p;Su|kc z+d-GTw$`I?3a4Ctd6=17*D3E#^BUP7G4`#~=Hn(;>XY<~aL2tFFA&AXHd3XtVfc45 zBEyo{?Rg_&@3&OB{``b$@f}RJ<@E(l`)|7)46m!k_Pu>{kBra)KTK1MOKwLBx+U}m z;OYz|J_eH5R~S^-Z|Yo(<3&{{neBS3#aUyJbb~;!0*8E!Q?7w{cpyd~{fsBL;%8ji zJSCmg%A6pabI+yp$LU2BwWD88E1p+w(s&Nn#4M$^rzRB^1^fQp9BGQ6lFjEX?&|+%uq#YC zcKA%r0Oo*5j)L0OO!NS2g^GnsBvlapq1!J(+M1p4I=ntPZk@^&4&jgv0zLEhLZ&&)tM3OmOwy59xt0^5UqMc4j@@Q z%3y+wl{dtoY5yWjq?`OoZ~W!n+lRKN7o{ydC(2RV-CB{Oc8>90i{# z^^5t6ZJQ;8F!lQGq)TY^AW^i=Fd_>d*r9O?!1K?nF7gcHAU>%Vm^Khm=JOVpiv&Zu$Dw0>cgC$`JTUJQeW z32lSw66ZQ_+>{qFXN2TK!6M@dX2kIA$26tWkj!b%#VRfW*?YIJVsHKls=HLwPb(tV zNcAz8>=pQ!zF*kG$mtduM?x>G51?WS0GVkmgJ(XQe%TY6zS}`Za)Y17oY4e( zoI>th#RaFa%6Y%|3fr0ra{;=^oyna0H4$U+P;G=gI0@+%aYH_!;%oE0JFS( zW!4|-bKiPlQ9|vbj>0fzOG1Ko5)V>;xUB!R zXTNl+iHKnv5N^fjg&o2uw6(P7n~_u@R9}$< z5>?fkvj(AvI_!?BPaY9O&UXV`gyaC4zI*550^YfVGPmc0O*IKIbU^`|mh=&lx1gRqE$jxfoTgMU&Hfo`RRcF!^@OcWON)Zp{+9w` zq*F-09bWRgaQoT3-jNt>q&#?*+Iy3O+x4a~?nGmgWbxZwS%Vi)aL&*8LFN12>)l^1 z0iKB1nzbWa(HsgxxzB7dPLOpW3Y1yxZ%G4P`%8=jo7OsKOhg-|I6)zG=U! zFD^8M=I1AyV-nhV{&RRI=7nBhVaf`3=k*j%9>wq$)0xWMYh|y(&4N05$}8*JKs=(S z%}3J>?X(w*XJ0D>uK#2~Prtso6lO6K?XHkGuy?nM6l5f=wWGeo8w*b`wSn&21}USH zujw3)sa9}?vJ(A?Bs<>rWnsO_O! z-ymIVnq!(2ErQZuHNAW!k^w82h67`BnoIG{D$@eGW)RlX8$r;FHqGk+ zT>~@7t31CPYhW$aI8}|m^-_tM?nCCt3M9NrwlldzxB)B#6g6!35|%A>5Y==f{sT+^ zRz;rLL-jOZd=sd=2R#?!qEPF!o#o^ckqe_CcN^F}&RP7Tq1-2PAsO%)h_l3s--nPa z4E_Qds9(Kl1mZd=#RP%zBBP*~C>oG=p8ms!+9sJ$^KbeTmt>}Id$w2jTJ#TD&{Jr} z&lQyL9{Spia)rdbyIIk0B;XaR^mX)a-W*c%roLIgkYKl%iKg*# zQXRA#3!g^yqZ)*?^a~)ik#Z$_l?{=$+r_nFDN9gYeTAJ8c%wG@0ItUj_d7}O0s}Wr z;jb$u7@ST^pB@7J)m!ZrR8YdV)LhdL^9@432bA6T1mRUpKgJT?3;Iu=&h5DzrGUO9 zVeoU7c-eZXqELJN@_!pcCpGzKf&~nBRj;d`RcFYY{~N7|_WSpG>woiGPPHH}_^>3$ z1~OLa=P-{yQT`)hhesOwC7JlAyl^(3rGi!rNMWA9_f2bp^MRCn@?JULP%z^WQ__0p z<%8h#*VqV)NxYDB5vpI0ev6#txtxm=ao=@TcgS_+FmHb(zt@dR_XxiQpEu-ZT>fZn zH7k)*Yt2z_$b2aaNF_6F{Rw}rWbteK1B7$9MQV@Oyq@5ylh0k8Y%<{5o|HqfSz{>E zR0~jFZH|}ML+BYe`V*4=T&E*D7)2|G&>XuHy`+>G9!e^m;0eHs#X{~faoZ?Y=#Icn>*WfXc3;O$*cKgk6y z0JBSfG0Y2F1)nU}E^@UCgL|@t-1{=Xxty7%Cc&n!&3Dd8dhYU|ee>JfyE7DXnQcFA z{T^A$AxS(x@LdcgQ6w0Tyv+58q%s8N*-dC5U56q%Sr7uJpU5wZDe4*}uR~wzey0Z+ z50;m{tE9wd2hq8t_?xqEOBEwcNzv704gu&yn`de_PE-)YMGeD)s@$7|R`j%HX*NpHMQx0-9;`$8dLaE0Ep z$5l3jyX*d-Wnhk&IP$1|z>Hk43CKEa$bgiSN8gC}Q#7rKYM%x)xNmo#0DrD)MuQu1 zwJ#%mnyj{oM!Cq#==cr#n#OT0g~}K@4Ltv(-+hu_diS4Bniw3&^epg_ZgCfjOoHcZL-Rcn1=U>2lPMjZan=M$Icqv17zLD;B0GW`Pb}e^~D0yt$4RdAdrpXtYHMW3Eq&4ycUm_vI*74g#dE+dg5^iR8 z$X$=<>=CAB(bu?wbFU%&3TqQQZj41&a@!oo_*W`gWysUN ztR85LT{i{)O)p?MJqMb9{d4D>@z&-x=CUntTp^v5srk!C{=kjq>+Jme;_s~VO1IPx zOX;&UHht-(@5h$fokoXrN@cmX2P0Uw{k9D@UAt!SRF8WwF|#{eM3z&l4-;IF%w6+@e# zSp`_nd~e$Lt0{cJ0tE<9n^Wi}S{jydW?<~6wkeSJamItOeR#8!!}NWd=yfk}h0Pjg1S3u6oiEv-r7>r`+a_C{fzGK= zK-VovC1QB=)i8p)BJv*h&?2lp^0KAt9e3I77r#BF90neNS+To7gLyb7<5B%Vpqg#$ zw{cCkSF_S%nr4auauS6Cg~}tjS8grkNTDR>FZ{C=PD@vfgApei-M)GrvZ8fP04;MO zYNtR5Dh05$jTs6ULX{6RkzaKPFF*l9ZtS`QTW5hqTpNW+0`>06*sWZHNbi_mh!xO5 z#bgjMi~r$*`_j?RG`{x?VDIT5Up)Z^Dm}-p-xTc|e@Bf2eCvYSgM*?$HO%?6R%$vz za3Pe6`cgw5`ebzF^aBEj8$u*}WKlF~M9~c)lhTQMsP$c%YH9PG_rtr^pFkq&V>&$E zhGF2jfF!V}Vqw1kgi{x(b;eD}mv9+eAtD-X8Sukj$sfP?xU zZ?-&R&4Z-Ip#ixi2>4u6gff^sI_b8CO`ZFRdR`N-3zR5qIK5~L?Nqq291!__BjQpl zs%z{Qii=qGq0?6gF`WLNEFA4`N|^sQ(!|=fQRy#6yMCLV)AWJzXJ?JFhJ=b#Zt+K6 zyeLh_ah~>iCQi#0$!mk*{i$CZRZa_@)7I63mFu2q7lZpr+{OhWD3bC#K-eyklEXcv zuA)LiZit?6b8oqdU#_F&sjNkDFeBi*) zz5Svp3V8+R93XY3pW(NQZs_=#Phx$LNlxIU#k{pMW0I2^HD_&=!c0zZ>-7elh(mS{ z{T4wI{il`W;h8ay5WmnV>!>f);%2AnAzahKtQ56Tla%1Q!9&{$THeJ>8yARt{4=Lj zI{S5&qQu*v<4`wGQQh4y`_!>`82bLjT3D7(LB=&OEIU? zJi9MEe>LNE3k?;|=(1-YNn@uE$Suj{G|MBvlQ|3K>N`1*t%)P9*&M-rQQ50d1iVcJ z>uyfiN3bK)>Ms*$zoSu?(FHV(d(fX$Ch87pA$j^i7f9gAtzxPv7}vC9cn5HdB}-)? zm5=Pz6_v^mX|KJudLaBr;iEOxOS%#zX!S%lU`xZ46VOqA8b7zv|1P8PC**RK3e2zm zP?8-%?UP^WgmnnElOvkRkX)9@t+5Nqp*}x>;rf}B5OZ3Q&Brm-j739BZA9Ufngz!< zFYXXi6<=X|JNU1!?=T)l6iYXr%_{^~2p0UcD+f{v2o$aRplb!BDdwhkwpIfHoU(RX zge8F?Du*UjsjxENmTA7j)|*~ijt^ETFVzh+!M`6^8q~To#qqq6nSvs*qDwvPpd*v1 zXMU5Mj(@F&M)#qGu?V~=hp(=Z09J)bRp0J0#|Iu9A;JS!B8|$Lnhs4V;N!rm?Mlr9 zF~jS{v|)m6-}{aX?Z6Sn)(+|#{Ho7a=r{^+04SF~D88soS@fu9F-g*@ zA*|HQKNRk6;;eVi+4XayEV`j1vu(5OK|)cZfrolxB4_FPe19me)+3neujth+y6M8VI_H+o&P0j|Gz-5U77`FRFtr& znB~VCqA?80l1cfAFKbd2Xv|dYS59Wr3<&PV`kPAjlAO+^8aHks=iz;LT8JR8|IXO@ zSMxI;({C~&$rJxbgsBR4nJcO{$P5u@$UANFqB15F6vU9mi-4Fs#yARTs^#ZwkNP6n zpPA0wy_m2ZWTj~J(uzdGd_*M0s1G-s=B)o|j4vcvC(gd|9Uq_=_A8o_L^ddkIW&!E z>0&Lc_jA_&A-Ju=`m33^Ku$O(?e_?Ksn6dc%w$7KJP3Cj#qu)#e$DjM65;ec&(9-z zl`e|)8Jd6~XTLBDVxe1MQQ<7wDj2SAk3=uCehWu6SRh4bWTzW`!8ZAJSX3U&a#VPm z;B@Z#n-J)>sez&GC_#_KA!HLmpDm!j=`ky+KNR;MKEAY(#I*{cZ`)%jD-q_HF91aL zV*P1$7-=m+X%FlHf0i^@q3Zt{RF7IsvHm_jQ{zUP4!tt5c}0!fo11B2V?&B#<#T$Q z1lvfeW7fxLcGbHd!#kMG1(@D`T^3Pgpu9^F3$WAy`Lya?6+P0Z3)~`q}QxBvt<*#er{%b6< z&J|!8rw=_YW$6(bRGL*~Ek=j+Uwn7J9T78aVSUs6UG5OFbMbARVz}p6I^u@*? zH1L9)heu17^6$9s4@2>-egf3<{`Jo(vlw`^eE9EENZ&SYuLv&9@j(5RB6ymg54ER} zFDUDD=lU43d1J?yH^M1T=NLwMhmPnf9jr$_NiuV3>9GH28VRo6G1E@d=8&9ct2F); z>c>FZFRbB{*|6cHG^w%AWwQ>g=+{@aR@#M5>)<0%!mDi!!+hEhVw?W{IU>5t(y1R8 zw=5EVnBz|ad&OzIPgl8y$KaYK#0`t}GQY9mS(P-3U_#T4>m&C;;~M#q;0yOp4++tI zmy#>fgm}Gz;h$>}h3p_c&3WQoNOLn>wwR~j-&mU$r~Di-eE$amp7Ud&jjbv>9AfeR zc|JqyB`!z)9vsP3ZMh4N%~T3w`4|3ucFp#7N!2Wx=q%Y)*X;>SBN_2ppOR;pn@B!n z&IzDAZcctCHIiNiilQQV(F&tt-qbMKLt6^MxQ!(BcLN=H1pkGBX1N)=Kc)?z3gtkp z1=B7H^az%Hg=6iuX_1FaG$1p|Y2PPwO5oB7a2VRN^6Ek6S6l6oH&%WGv}*O+fm1Yd zDV6Lsv@MEURP0YIHSKofq;U>SPw_wtmgw|x)9iqwo^Cn=WCQ4)_M^Gm?&1z5J9*L2 zttvZ7Om^|Ye8qKWhQy&gv-ZWqEv$vS*!ryk@*+_)!ANnMi#CP0D;sba%f?X(7WI-8 zhtP{dkVxe3=!c!of)bbUr2hX@(eL$ha(&gO=fex^86H*9msin;K#*K&VG67bPOaZ( z2Pmw3E`xrefIm^iB_-6f>#1d_M6Yb06ES8CQD-*9WHtyQH8Y}Z1HO+DBygqnyf5n@ zcDJz_@kSWFKtcoZP*&-XM@|`bqqJqB68rNc(J^q`;}`4h?)?xos{x@-#^;QFcq69X z^t6H7wIHY+&&=J^#o@h8M^mdW!cyd7mK1MbfY09Y?JPq)K^X1rto!~uth6LLR)|@$ zbzruU$sphZJ!)1q-QShcy5nzuR=wd1qvU$bFjsxRp+{8mE~qBHhX7>ZEpWZ{cKaI@ zt$y71zP6MGQ)#>Xg21hBZ@2eQ%uk42ZYScD#7AyLA7x!kB=jW`c`Vj(oQ@!@*as;ADG8S(~Wv3hv^oG ztsz;?UZiH|BQ}3>8K!rIz&T~!P@nq{FG&ARu}Ac?!O0M~U?eOcc9SRrU(l*sdDY5Eg7`;ABDEt1i1i0kWb`SKwfgXY*qj46?Xubm$SB8x>{vzxxFzH~K zOY58&-F%TwG1d9sHGmtq?Lxh2f8InB7F7-;;5O9N+8Ct5t77hT9_boGng8- zlrEk5?9z3xt{uZJpjCafOT$X-Qz}WLge6tPqKv@nP0l-x8G>-^1SX|iy|^=}Ya!NN z(op)XUnXn{UBq8Fu2BNGCLx5D(h@22XvAAyFLTkL!n9D8%F_dj)O}j02#+8F@LXS@I1Li#to9unJEwtwof z+rB$c`iD2Mb{ooQ7w3C?W3?S}0_lT2C=-XWE^Kk)(XGmfb5}==Rct)INhTUvmJ6%+ zJ4*X^earCp7KX@g)k8J(pMCipJXNKnMOoPP{dbULlz7qR4=f|!ytdOXSlt9zg#Je{ z=$G?lgoW!*UN#Cd?1N=IliU5cH!DE8Jk1{OT}JSX?k@mRZ}sVdeM6`3%^c|^&U#o- zi!=RV42+Bz{BLW{n^oY|EYPsNed+eo@bez5;pc}5(=8cj{#<)apcn=tcbqNR#)V zc>YWEF1;E{{fbHSN2vh5T@Y0IAG&HfnIA*0cWD0x`Ck<+CslB-pYZ-uLAFX8Au?^> zBCtJ}^gJBKhynLw8&FJ(k!AmNB9gD`eP|(mcOK)LE3ib^OSaOI>6JW6-`q7pZ0Xkf zfLC+$d!VK+Ptx0Ubog1(w0js$2!3{y=&x)Y8OqVK4{u1YjH7AE#<9kaet0p+boJ_U z4&$ov2a9ogzt|x3kzUR{uX-Cgj1*{Q2>yCJnb+ceI5r#P7^KRX%)s0G8oNNM`vXg8 zp|ot?h+#|(l&ybmZQnP_Wq@Q=G(hB4y^V*&CJO6qUlB_`n3Pp>Yn z;2vV_zp>qaa~CSIg&SB5%y#C*7aX|tX5jIlUV?un)s&OJ8r?uMNRQu%M1#Q%!sgpY1X!3d{Z2n5o|85aG;SnnQo{23_8w=X7?m+VOe0pY}1oz z(UxVr$u@$=6+ueQ2=t$(pfF@7A*o{0*!wL!=Gf%h(#bTr|Dgw2+4v?N<&bwo7PgLh z)OP5yc018yOMeA!2xg50h;)0hSf?xxF*@c&W#6keWN!hZemu206GU#5aDiE3pyqGw zPtpx)`HP(B0KB#DToKVWsZ3b#7&Lc#2u%5UpFPCFlz?_9oke=lb3{&_j#Q^xxA zoNl?h{p)y7b3`FYTtnWKYvA4cBTBVv!}mZm#+F~*vyH_^q-^EQ+Y_1-=pL^zG32?H zm=F#CcpFa+Cih5lgi&AD(%`xR3#g^oeKccLQ!`Bv9 z)V6h<_*{gol@LyYp$V1Bit#=cX6r0d&%vXm*2~c1AYJ@gfb2QziAPgnvICsr;#(_Y=#nP-8z_X`V(oXC!c!+%o2_dRnx*mC^lwfZYhz4U&|bxo@YD^ zIzfaF#%kR$H=rPtS9E)CHZQ8TG$)}!PJVbDSNcSDlcuWE8DHv7z-s~ z&ToJ?S?rnk!4zGs?2Ud;tJXSpu?y~;#ZHP|~>F+l42o) z&q)*|x?l~y9D3|j#bj#}NhA&j5?gEDlIiAyM&guC?pO)UCq+T`pZnTJHo2qp$JU>% z$A~!e>90CkA6GAI4My$B@DP<&(SMeNB!+9sin_Ccq0!DB!?S(I(wYbz->_O70WzB* zJqD`ni@-)pp-P|)UB@k&|+b}MG+C9@lSUf4e0}V7*<3ST8J04NY9;!)frCk2_Iw5?o zMd!!nluU@dQw)EbV zB>;PQXn4>j9fzH*Sa)cY3j<+g4oXvXe&O52HnZ9N9C(^jM^q^vD4>tJ3L;yz@yqx6 z_70Ut+2>vrt%(yyqh}xSQbP1_lrbxaD&(X|(?iVt&p%J%HPbtHDVyc?Fz!e$zc!uA za~YL;G9cI9)Pw;vX8-WnVf{O8-|pS|Ue z?(e#O^t1efX(5g^d}4=_e)=SmxVp?9k%i{=sq;xTb-eqCL@^VGgVQHyS6$Yx>RH*9 z_!l=cZ_i%k!xep^41u5EL|^`qy$%s4vOm+uwDC#bX8D{et!<6d5{}vXDU4^?mz1)n zZXHUi&89^+E_Xv~6O~8mw)lcnwOOXSTP=Nb-(^LeI}PNZeeSjYnSrhF?PpU#bY#(! zE^NR$ZvFWZ`Z2vXcNswYZPGm7Y7S1-6yhY#G`c&CIE1pnmbwp7>7Wyd{LngYBV@}i z((dwoN=C>wCoNET`0x`10t%}yJKJr>wNa=Kb4C`-R5|y$TAKuCkerVTk)d7C0KEH z_w8?Y|GV>P=6<-(oOkBFXU=`joR^q1e$whFq$T^vDRM7TJA_a{Z{xZjx=+W{VP-ms zS!at#o3whTUFf}ams6!~9^~6=^93|3P0O4Yw)f!26#*A-gnfB#3Jm$6VD-a|Qrekb zDr|x8T0tO!9p(Yz+LwXLGas^z$glFr5Cbj@*18R)3 zi=u|Y7*}1{?KOtlhgb0crusFS-zw-dhnlgl^HK$Rf^7A(V{v8)Qo`Tte!32r=_hSM ztnQjq%Otv7qbzrrYZgV^7gp<8-Z^u+C6kM8PI20B@nw4@Ju=x7E;(Da=VG9Z#-Iud zgLqO)xZP};G?nwBwPzs2(iKKt7^!26Ejooji2pHKa#Bw2eY#JKdt?X)cv%=&L80bt zTnr2bE;^HcNqiw0Vy96!N+ddG+j)*xBDh`2n_ zeTuGOf#?|bzjffUDS~LSJ1{<{+d)qV2}6QOE5ASsWaJlbZ%WyN=l4L7gQ9`&0kUliR=0a}N67mi(q9s>nGLh$!?SnD%TnVX;roHAXH$(OL96Vv;%tM@ij6n*!{ zZL0EzvCrcFk`Chmujb=zsK@{Lrwj>Y&SIN_L-AMBT(?*E&;7CrlIFUb09W{rk(K3% zLVrn&&8BC%=M8-N*^3!A)naWP_z~&~cS}E}#Y~>02OoWa66B^7^fkqil>RJ9#q`tS zDvOFUr=}kPPgwjhrSPc3&!+d)k9(&bo`QI`(yX2#JFdvA!gtQ|+f||;+AqW^M^d4nrf?7Xi= zxgxmhWz_pK7H$kW9{xe;R|N&*H0tYX$4uhpAI!Z-zXVT4=xPtz=zv^4uw94^3AMsa zaQX&)_E;{kHAFuiuKlIuto1H zeXHVGwyfF3Qumkv@2*7@v5)l}stG{YRakm6Ro)qP6!8$zAlR;tyHY7mL{H2+(e{z0 zVa3xkI|fhmS&Oq6$cw~thQ3F_3 z2jrKw$LDnHFx?M-Z6BEy*2NnHZP26|_9R1QLa!~dv zEy!Q0c?+qWK{3k);Ekx&Nj0SzX7QCeFsreY1>K0qZszTz`|!_m^>uClh~+4Jh-bH` zqu!_U4#IDWK7)_JDC50X`^1Ril=UExufOtO8Q z@jk8Q&q~CDH7DtA^{R)|^>Om|N&|*j9e#ouT-LO6u?Ox?3)bsc5a6gEx!Fx`-aWUC zuWz!$Ar^u*{SlIaJ>JVO8@OY=N3Oq@k}gE%95BMZZZAk)UtvYNddtfE-Tmanm+3Fu zu>Yf3$D#SGV*7tQ=vZsbd9518@^YcdT^Q-t7c8DvxE+pO5h1~ z)&Xv4E`_dnbJ!PF4o2`6Mp+w+xXzDnKg4yO$f~i~X|a)OW-qUPCGs`y(-(jL{7+vl z|3i$VnS|_)?oJ4=cr=@!-C?BWz`GzT$;&l00-lBMt$L~5xo@r}EQD(wt^P>!VM0YK zT(+qT9F@wYu%oP*T@M{Dw+R&DmqrLIx|db}ZIW%}PA9}td>QiLeEeB*tmKu^AJOG6 zKS-bV(Mz4j$CSviU45tcD$P}(FcGyJYp*&@ED1j+l=X+5cY8l#ymD`k3`IW$kT zryQHlH@&UK@jh2w?To-AMMuXy(}>5Xx)~i)nT>ztLYXvpa~INA==)2e>B?m*G2Ykb z{B36me{e^MCimsYmh2~iqjl&ysWdQjN;#(!^I%h>4SyBh(-E&a`Q3b;fb{vYE&D!x13xP&EyE~L1-NbY%H$5c3wXil+~<$#)j(EB-8KA!>B5$Z-_61h<5#d*9G_xtol67cq*!5tg7YkMk>`t zYumb?-=cSHc36HY*+dg48TO^eQ8B9DP@zAkzPzA}l&Zm|g=g$lnHX$=gk`+RtE&1$ zt%~N5`*aE3)h6ntRpn0J;D3hT3|8Yac|!t+0TuqJz6J7K3|!=1cQ}a^vh1PvN$eZTSumke>5MGN+F-oZc`U&ud+q%hk-P&xlxvXtJB=e zZspE3fJiKu=8|!|b8OU}S&^XE_pg2mPv%XV;ri(e;op;1!4k133ceNX*I(;veiZAn z*HR{m*&j03r5re(6b;b{){#Z_ac)WaeMf`x*~gFN?l z0fK*-(9O;iuV?|4Pltts&M2$2M5(bi721sV$nLoT0$#smMa@RzcE;oMtqa(0ghJ{? zxSNaBC=TmRdSuC)cV(@YeFI_(j{W4CSNVmbZSF8z5*h|#Bb>dO3_xsAn}3AGpszOe zb@r=r#}+N?Px8m=6cn3mN|5f?C09sq*+zw}fyDv^oyuA8o=Wexf=IQppol*aOU&H+ zRr2B9${X$QrX z4qsc5gCE!q{6E~Im>Usfm2TbZC|$FfOX7A2a_o(aX#s=)7>_*3R~Mn8^g2n}uPSM* z23GLxQbMLe&GrROa67euAUvl>6BtWiL^k}0m?7cXbTo&<7Qgtu+M1IZ_-0Bdeza!& zq@>Zu_X;b< zNu(W;=HE46%5NG@hwWT(ENz^YNm?dlxAKz~cdIc+Ut%p!?~PYm32qr(2pKyW7Otg>~*@?W2Yjmx+!zR+6zn9D3U_;l13p1GDd$+|LL`O2m5P%N5xH{$h~Sjq*5x&2IL zG$m4BH0A|h91eTQl9`@uQ<-TZPI{nYwg*(XEK8d7Y(%tDm1Bj?EY}IyWSb8sJV=C9 z=WqF=Y_Nf$JO8QBy)f^({Zsq@enI}_lB5Z??o4XeMy`7B5NUm{NVx3!9%J~ zYZ}x&75iy4@O%^PNX;~?Ma;CANX_R+BrGV}Iz6r2{3Edc_tMh4zZ2F%#XJ<_KVvGh z-<>}**W%6pD1{_zU^;_{j(k*4M&`4zIX*DOh~^J^-!LGkMm6qeOtUnx(je3klLR>| zFs3WOa0{3;v2q71ZSvL5KpE2cFk#aWi~4|6_75ww z`#_TVRqo)@Ubd%iFS8$gw=>Vc)&lL4_%)by&=3LEQk4))Z^yJVI47XNV5Zrs%iDjjQphP=9I*T&1b%`FR zlW|8l3zJ)u!zX+yC}1Z#i{C4(Az7Z2YQvwr--4S!p_Nq-+kSaJfFR+q)u#>bqQcDO zo3O<(F0&wTZzVhfQpMY*JXB-2S7@AMqgj6R)rVSpPYv^&E(#ZW-7%;j5=WDQ#ngjF@&h8va*p}&(U&_LHwjCQ^1^&*<)qaw zUNkiB2!EC>*Iu+RIfwN4YDufa<_xi{8d-%d^k%YwMg1>ig7IC3o02Rk@Dxw~KE`)g4B$*y#h+O93^ z1u>w7vfm~7KqI)%Q%H}C)@U^n2-WU$;~gwKhz$ z^r{Cg+V~10+bvtjT=}Jsk~vKddd*O1`Dt6e??s_qT*9(I?|8AgijKH=@^Ai&{gJ&U z|H0AAG4V;asY6VoEa3)9KHzC3;8oUcjH8!bIP4sA{D4rTPTqC7VKOC{uZ}iq*10on zm!MVTa>>Y911TiF+aS{NrLD;%|7J5!FJV&K0ks40&2x8=XIiwq{vKrj0}JJGsP6em zGk;gJE^uljx^2um8y4~l%d9lGPGwBf^(`dejwihTd2eQ1URN)_-q?5gT7=b)SO?2^ zc>zPA+o~>!M+WDWpS$pnmWBOywisNuF5QzTc?vbY>=dnW=(%0)Ws4YYOZ?7M3K&m> zI1}}I&~Th-9v*jk8@r`VYZ~gzaf1tvUJcuFu~y^+mt!I&L(=&U#$QjR%+Ka?_y+P# zIZr%%bDpmFQc%GZ_dK?*Y?E2d+*L7~@$34Qbhlx;$bE0whcZP`^`*#4rcYeMJdIBj z)=32q?0R0nkMZS|j&1E0Ff)O|DVLGw`ft3?%7Kv6w=F)_rgH?J99t5z(kGn9p##3G zs8!U(i@_={eDa}D9&LcHl(W~;?Qd-@6xWwaLcSYXsdW1aR&N7;hts&{6df{&qNxJD zfw2?LgR6@lh?rl~8WLxpoV=PMls{of%_(9N+Cn=E&<9X^vDwxMs?p-iOFOiUzYG9U zK&`*t4A@6ER8ojqq1}3BrqkoN=77GLjbCETR97Xv(sg#OgDqbu2^(+pZEk#*(MPGl zukiXBI5pZtXp>yzt=wU|o)PhzC9_Jj($@R<#{`>~w2zv8?%REbXRVh3qg`V7tD=L8 zoDae$W(T&%*|AN|6KBYJt!Snt{~)1S*}7N%fY>Syt`(5SN&B-MBEZ-|PJ{)dEfns-nv=R6Wy7!+a*T&g^g8?UfG z2!?ci>b<^4IpS23`rmB%9zI{*52Ci4`aI!h&d$_@aWHdLCtlIxr990gf}*G5YLGg_ zHn^59)p3A zKzQu`-97S!&8f|WbrcJ<^h;<1CvCMBu=%&k6Xi*obr@!(KH1i`RF)_aX(mbiE-D}x zk@?dp-LU1}!^J;{i@O)K?{dr(1<1;FZWVMk8~$cE`b(N5PDbUJe3T7?_xI%wyCd>( zs!QUvSI1|pH<;#p4$bGyYX^dv2`X>uZ?G6;@`f=Gm@7hgAJ4b#CxnWUEiTQGCzxfp zN1qC`Jou#|TG^bt)TzzY4I^rqEP`Eyh~43(GQDIu$qYDDhZ=~tR*PDuzHxDoTPx;% z$<-4~D@}l*A3OdQZM_RPiqBlZ~sF4ev81 z%XZ%>xQf9qn{5a_Tx?~*7);-^>N`WC{_Y9gO2Vr{ucCPOQXRX`k9a5+&T^df!`jbe z;q;5neWoW3)c(z_lDmR$4tvKG>inLZkNnv>eTOXYBWv1e1bgG+55^R=Mc$|`S#-W zHEsq}Nt40!1tg6w_zDf$2Pq!B?bXMi+Oh?F z^-`Z@;aQc+Lzlyk0=a|wjB$jI>1OrF78jLoxBeQMGxH}OM!1Dk=gdIEn(_i_@iKkP zqf+uLIu|lfZ#8CidHLQj>%*c0z8XQEc{;j!+O72I|1+dhl$g0 z(d!Q3@_Y4NmwVm(U3d0!kp;C<zmD{qjI<3}+L>;Kd0#Js) zNniL44>M|_&&$-;bd}=JdXjQqB0?=R7NIr}YhDmDu_=YKI6 z!r?-gS}l389|906biaDw9~~pT^F46c8>6I9mvncD%n!q?$5~?PxC9JYtXX`2B{6Aa z`9~T=GWn!UYoyVIH#l#MVl3`j%{LfDuGG$d${kRoN5wWW@bu`W0jeI>dc_?J>%%ts zX&9qg^{Xm)@8L?TU<>S z6wBE>qh7M+x?@341;ENBoXAA=CR)>T_1-wwyg>%V);|C!AuJYX}{$^`NgtR z;0b(}v39sFF~(H5aeK>B)}A4iMgH=VO_6}kFCBoi&}90Hj72FJrz?d!Yj$V171k;d zER`3m@j2rASt1u~;04zL`CjHjgndHaOZ3_3K3A(on`m~SXPSzCy)|Hl79?>Vbg0d` z(%?_Nn0KZM>#hE{ToSL_ud6DRLU;^)jQ0RGC8nMj?)=Q-u8~a2GHxQop5)CPMG!}@ zlomE)Y<7tD9yj>JyM9%h)%}`>q@9$Al!ip*(Uw}UZ)P7uqw_pVzFvNS%GCVWQ2DZI zy%{0R$DWyBn%|gA!=vJUmSQ+UT--tyZKW-AXi-(?uQWtR48-#EroC%xALStr?S=iR zBSGCzZfd0VtuzQN_8E?d?PgTclWqPPvhK9DEZuZ5tll|k+tNHp8YZQk6`Z8244r># z8hS=7&pXvya$Jx!Uvm!Q-Zp9TH+ph$>f*w7xxG+&a2MLNf8>oS@5k@ZbOM9xZv$-4)> zUua_WO6Mm=G{4`_lSk5qfn9+mX$;svKi;{ll#;>v>kb~;)0iXeyssINZflMH*!{A9LCKS&ip3m=Q0A^!Bc#U-e+^BORvi(c4ZFoxG!;hXKLGvq+ONU#y+-m z%*TgRgzmQGkWGJX$DQadj;-QJJc%)jjd7SVNZxXPA9+#m5{eK39D!G==@XM>x{UQW z{oO@`lTut^+NqZetXp}#y;aqNDs4?yzR{;(ugG2fRYgRWf}oh|Y{KOW;SMzq)Wes1 zQJdAee!oCg0YCe++oBf2J<-UcNNJ$-{JcO^HS((70P%Hc3myquIb1Q_kC_|-&fFRf z{oRR(aDeECpWvr>5ybKlFqSv8R~lRY+?)Btcltz_XJFtNbQx-8DFo#gIE3@nH8jL8 z3=Af4eH0V$m#6lW;83yFaa5~m@Ju5SpWN86wOicScubz3zvsw9F5K}8xG!mObO6)S z(~X_hH*ojuT0c@uhBqr&^Yok^+H?2X@X#wdO(xbTa%2CaY0LF46Ln2oGhupUp zb<-%B0v()}yXvOYsMooeDp9pbBnY% zcs==o%k${jA=mrU??2jn>qB>S7T+8JpVh%-W%xn_!j_-5iT1P+cX5BA5`9m-JpNpC zbm^u2QtqD9%o{1bU{(hyDbs2R(%;#CJUfg$p9BPq)j}p*FS5g-IH4myG0%R7R0LgP zX-CLUGwJ(4=1T z4xDFI?Pel)to?HbXqeLXiS` z>4RH3YTvVjnj#(3&()K26`_AZuhvfWdDh(wbNI5IV3v#5RJ+QY$vdyJ>xUw&q|*|V zg`fi3-cd{Ri-FbYZf1a98$*!BM9N%6M)XD>i|xkItohrJu;M*o6Z#qv6RFl-QfC*5 zntH=<#}?0)_qYPGU#&K0RO&J$05j(0_ED&>x)L6+La1NLFkcHJ5$S9v#hBw$n&aRi~iF=8R9Du1fV=CA`}i~cElciU&2pZ{5lno z;;*U9pho)9OWhQR+m<1lryE>#u`R&L`lc{UW9Ub0I(_3W76giXc%lG|hl za#N#_bL|?j?QUVN2_O$n%UH`ExM^(|SxT(#?;DKl#jUc*I{sNYY9=g4WR=zg`e!3B zPBxF|BK_OYmM^#TK(=ULcMh1 zfa-OE5saWSKf2g;0zy<8vR>+S@snOenR{-ykZxG+>LN?JYEL?*a!)@}J1X+N6c)*NEoMB$gT8M~R4=H50TgmO9WRTl47hCn<4anuX z&#I%=owJ&PxUn_u%@_3N7>O5BFJpNHILWyS7}i*&?OVeZc+KW5X~ z9KV!LqU@9NSRc4*^FMyeV5zKqF|Hax<9BR+UoC5d zbaj;M@E7kc6`q&8A5zGR0L;$lRuo&Y>Gf{7d@Ob1LwTz@$B6vtldgWebL5-VZ&vLr zn%c9WB~~KJ&}QdGRD5B*v%eXot#57&*SN4DXqpkqf3XOA9kA^QW4c%+RJd4$Zvozl z;bfEa+TOH<@u9PuXqva z=@Lg(|0O2*inxNH+@ZX@xfArpZt7P^CNK0uf3^$f@9b|%KB2dmSuG}TrK_inGplds zcIIKRWmtduUb+14Q3&#OanwXjBQmS2tSkEF1yZtolct|E%$Z-$GK`u%6t3y7&5O4d za|RftK02oyUpp~UTWeA$p2pGyt~I>cm6NB%YO#NHif2={N3qvQxU=&6w8KU2<UW?AGbdhO(bi>#s=$E&$d+P4<$TP9TR(lZew^lx4b}NMIEU4upIX%uJA4VnJPSSA|1D z*@oHwuFo%Y&-s~OkMsC*>OHm=v!`u2q>CM-UZLMujf_ZLK_P9-MhOu*U z53AY>lt@^r1)ej}uannu%+~HTm&@1R+oDMqQb9>LVt$9$(}}*ouNS1$Qe^HutilGF z-m1QE@x6ZT>L;~wKkfH2^4im%@yd62%$PCdJ8 z7k}3_irYJ&S6pnOq`)Wt2KD~-s6?p+fJaLAi>hZA&=e7KI*%!FG-9rFZA|RZ%MUkSbA=%%e!d00A-TJ+7E(0)$qVc^q;Nh9auE8 zyr>bj0C2yVIIMJwf;IA`@Tg}WVK)W&Zi-K7R#`JLd#|hp@>N938@XZU^|Ls$ zQO3J!tHbmX1)t0D;sZ(WfLI8CoO+f=_-TX3r*pBu%K*@LQ~XM@LHc${;OzR%6{x*X z&DWzkUYZE#)vER1!VI41D4Kav9#Jf3Mt@G4y*3O*VnR?`P0`{Y)zV>atfKV~TB1Y8 z$`&DeK-HJPA7*qPQ$(|V3PiAdjwFuf&Bc+=I^bSGn;f;+8K!EbD5TP<*79H(q^cx% zc#s?uCM64MT&0zDWXkvv)mCsCuKcl?LxQrRd7<2K(v0ikPQ?OoiO-je3VQd!$Mue5 z+f)QcSM;OLJdR|kCNFmv3}K6VHH}QZaY!I6Q~B`M2hRly;j(dQ*#6ywFb&d6xlGr$ zwYXNgSl3oEbhDy+ak>rtg$$Ez6S;pDt6LVpWjBsjc!mmi_bSVH(7vNH%p~^OyX_tI zU-U>j>$$2o9<%~S#qp8!A*=9Wt~;N?C)_+Di@e3q0f#O!W@cSjB$&y=rb(Jg>R4u* zx2E?o+Tk`6_phIvbOQcJvcF6U8^8F^sTe(n_QAiAVO&I$;Hca690xc401PofRrZTl z=xgE&;yi3ssr_eXw;DI-u63XM*m!CuQI2Mt057&9x_52WE>T&Yxk_IPTdkw|OY1!#i{;w!B@e7> z$Pl%&hR}=^VB~(J3-e#VV2kX>)!YdVfU}}F=+{AWeIvW2W}jrqO*2bOi>y51J(1cS zhX2Z_o*%ysYRr_XY#HDd$KnIB!z*&sg z!?()hG1k&6=>GJNlepC*T%O}(9d<+jH8!3{V0tfVJY||5kGYVTM(> z{=YnxmYV%q+ZUtT*)PQdo=9sswrWeQ4-^>Zi#QFOw<)2@{XV%`B|v{R19D>%{^vNUm%HvWJiBtwpR} z+)fhm_=t7yBXA#EW2L>r0Jw9`+P13?Bm5>HZ|R007Q?BxfawoV#Bst$X}o<>2h$6h z4vI4TWxnR#N3Hs{-&+qajN*Eq)g{d_)$`mhM^4kKU(h@R5MNPCZ%}B>h#{7VmNMxd zxO_O5L{xGBq1nI9*L5jjMfcI$Wwsx{lR24xxsnJ|V@R*vqL$c>Pff8n$XTU@OGYUS zg+L1RQt)8G0l37!XS73;3cXelFG)@(m_8@>MEx;=8zWmCYs53id#uTkCgVMmp3yzc zH&ybE{pJwZB(7Ml+GtD&7d`h!*lV`f$>_fF>c3kvCh$*b>BKWn{I0lqgWeQz7^PCY zKZw*Npb@nAe&FRZ?iq7x*4WnYVf;^Cp-8bgDGhac2(VuP-D*z%&C16}(!&PrAp{>e zxmm=%L^~x|bAzI$j9_vTqPFS;wdY*aFr|N8ZcsXPWn&n+SgB_xF9>LO(afb*8FE&V zps^op(b<F9`E;==-8}3}tZ5!hlP}K|Y^DSq z#mE3zv|@XqTv1muynKOTt6*=;e6OE0=~;pu`+(Ng9y0J+)w8s0+UI2&YNlVP6f9u) zH>t|>dd1p{w*ML5!exO_mKc{cvX0+WnCH;V*Qb;*=c8aP1oM?Uy)qvlq2(uMjqI5n zJI@d$wmCBJ@Ub{i{9@tAK2cfKa62WbH3Q|cykE<^)?Ghqi4G6+Ja5%$pQ@~~*px%k zO{z4F{jps#%3o%l;Ap(0=d~6bZ8_W;3!NOu0fGhLhGx}`-1K;p!NfU`GO3Z_v?ySZ zn`-Vlu$2qOZPAxBz+&&~jP0Vbj}TQzm%Gi1Ov>i7OwvxdhlFEieMAIKse{MBy$t-|K?Sx>j|$dEd-Oo z3c1 z&IZo(@Bvtt^ejQBqep{o(-+MbUuVF?$<@l4Zr_Q@KC$X{X9t*2YZsB`7aHr1T~dGw zx2c;OJ?%G+dFxstRZZbONC7_d(T!oNw99_-XLOhI1y!`NHL^G*nb5$9f@)DCb&~nz2fcb)H8}6L(Q&Pxq$NV zzIqHa$$EdDA%z1d0K1wVb>@Q;Dvgn6gL1vl-zxu&s@@|X;G*d?ihz7Q zE^^j4Lz_k5Zu&Wj;|{V`xnAMODGo%@2Ywu972}0=wVoY;EAorwdh*S^|e9SY_@HbM=t)K^sov(f-8E{2jTCke(L5T@3br`^8q< zHFC=N0O)Fp)gtZhJu5yC0mW&Q@O+L;8og-Z`Hx!4vrbM)w1B1c@s%f|^-v09{qxZ< zh)OpwMq1zb#*y^Ii)!3*?Xf4U=V$b62r7Ai_a-8Lq5KPE6ZYh~UV3B8OTWb}pHN0~ z+|QlD(dC|&7kh4i*J^y-GS(he;)^z+s1ZZufPvEc;~&b{+`A+E32LJ=6CqN&ddDF$ zMM}EI2hyyKwM5a=cjz7Be={muE;-LJNWjz6zWv|&+RyG5Y$N~2tL!hL-R9~8w$4yvZ7oF?4_zK~sc=SXxW_sg{ssGuv(IwvQ}ur$~3DLHu^5vnk&o*s}%%9sW4 zHv3Gae)g0qC$n?uh)nqi`V$ZS9aEvcON(|{usM+6ZaDU8kyLSn-{YS6k|*S`m71!a z&E#JM`9!qySve+Wm)}pok7w+EX}idmce%G#(_$d88{7(Dpz-aCL(Vl}(y~FMZm>m& z4h4*E{x9&UhGgpM5;qz%E#(y1#=cQ!%@Vzdc+$b&t2lH?Xq3DK2~5{x|=t8^NTvEp5Ukg15m<~>ey z?u}OZe4%$9PNN+j^2hU0u7xj`LN@i0_ZRv`(TKk|@GGz3{plF>ZHkt#oc&03%h7#N zpr1>Vh2X4Hux#B-wjn{~a1JijY9ZKkbeI}>W}^dgehL(E?xM_HV)`uc^IBi8R2!*< zpO%f1u#2_7=WA@=jMF4^%*tR_HPgXoORsM0i@@u7*YjiAqiEMZu4h79 z%jq$Y$fVAQ9Zs*-{R*d1Cv973CjO5{$jvO_Ka~=sEQCOTN!jE*Gt$E3tC%tN|ArStkEnq>)>eu3 zwvV7rzaAtoE7q)`u#yGZpQZbfZO>e>mql`SAY$d)FrobU?rV!7!VAXnfBfn{Y0>ei z2A!ZL;jVK`GySZjmi?F~c{ogwGKj+(IZcB;*cGYtqfjG(i-R7oDKaN4ZlP-OE_$~7 zB3_$pv--txQo`k(&*5Wq3uf;OPe2 znV)|fO`}oldl}zuNv)9T9+iI`0U>B9`L|42Jm_KyTO+3c?KEk#@^4*^U&s?&I4DbW zQLoTyKWdGz&%^D|a}kHpI^!~R;sfN);2f*Xhs+nYWtJl+RYgOsb0hsyI5qOO52ihD zDK!l@4jB)djefMTPyRF0o)sy8kACR#O4}^T7&3|NDo^nlx0d8FP_s61*&c{+V?bY) zsOz*ijEtFoABeCz;TpN5QBvN9i%wejf?jF8gH@HQIxH4W_NF*1(So>;VClKKYj)d7 zITUYcR@jb^SK|k$a{g!CY^ZY2%VpR7zm_l|abei#O*Eh*4tUPrlO;7k=}lI=wlz4Q zLALK3oCKTX=MI#zHv35ea*+@1u}zomarwu8h6aAmk)5888SsC5s+bSmI^5^Ws|!?N z6J7*^qK7|^&KAYr7F(Q6NeJVQTu9_6Znds&=D=AU$D^MmCsxdZSD!tTefN3} zYv-`=|4VwFZn~b#8$E@cNu!b<=zI_b-hR9FX%H`E;gc5Qm?M7e2@}BF18d(Vttf79 zv`h%%B@$g?iZ@*{i0y}H2q$}!al3Xa4%2GW9$PC+ktSLn$IJrdqmEcb)_sUjNguQF zCx?BHTkue9pUo_L;cIUfzoj#;^ddjt+=XkM(PN8je_J$jMD3$L!N8gqRQ_2{JrUo; z!Ven>;l+!~hZ=T*olBafI#Eb%`$#8aK1{La-8a@ce4~vXZk6%GL71k$)wFnLEOo9e z7SP)|-Cha%Ns~`xv~j;r!~N{fKFsmKilY}zVo_FosfknI_+)UA`Fj32br83PDw)ym zM4p-qzhl&ug-(M-&=U@mnQrLOuMX7P@v4*28*kMqR28k2TS{7yDQVvMd5%wz&(g;d zeo($V-R+w|Gh0Bpp@IRrS>+Z13x{z;(RnDuXa<=nFVu3ly0%W&Z5{v=G$!KHi{gi!7?Lxaumw+2_YT!) zu;D|!uifQg-ZbbHiqZNS?`*TdF1~?D*^1Id-Kncbsp!U)9lDhgRK)7?r>v)Lwn>n- zqy~(HQ8db0V90CKAfTw%O0Skgg@7Eg@$}@J0#%#}yOVJJP(OKqOI#6|36VSlF+S4;Z9Bl`j>Q*PMz^87=>-;Iol_yog>5-S?*F z%Ws0CnpW*MTXvP0`@$X{l!%;7w<7FHrRaCY6WOnte8eO-&jOUUN$b?pj%Vl$POm~q z^YtTgcg9lm1fmYo%0CQiCx3$ad$7}{N@NQns~)xRQT%mGE`5)Ye|Ga&E{`;LG{2Mg zsF54ial_K(4M6!-8OC1Gxq-Ix&P}L&oDJTBES^@`$&ybfDK)$+|McUlp6kB69rkal zNnxV5W1%djnt&eORh3XN4fBH7jw*_3>T_*0&qK~a(o&=f^YE(k169&%7wzF!_rJly zKd(4fVcU@Vs|FnYES%ef@vednbP9?}d{n|L9X>Q;Qjzx* zdUI8k49`j!RvG2oCmCvRZ-SWAyZGuqLqELLj~M9p3bThRIO^!w0kv1Fbg6*Exa`5I zq}3;h*GpGRit8oD}Ggp zS@1885Y=|@0fX}05SYUh!T)~8c~GN+yjL>t#v?H;Z)`I$`-HQky^0|1j^eWCM)d7U zaaz>uq^3vhrYFt0st@&dHN5LnO7l#x7svDxZ$zP=CV1*R3h_dWA((v8>@-GdVn0_M z=lob#fW^1!ef@Wn^PScAEKy!nWAZ%*?z|GUhMMm2hvwu^%GR`qO^~ToB($@oC(jd( zN;5vqAA_O}FuL*+3$>fABFka~!MMRCL-Te0ecyOhNtB61$yYark6zn^B2^+RvHg4O zWuPFd>@X}_bH$W2y(UlT%$t6*P4R8zj89P0>CX=f$dln!)gAo7rQU8;(OR*Hizs5Z zu?qV5_=9#oajdhH*2owg+H1Z#TePcY`F0rFatgj>_V5h5Uv4rLIHut~@lcdrgYC`q zlj#+yD?f3^rRv>usp&y>0GLCun|5wRr7?!zbvP0}&4t=C7Z08aN4hXcpEmm=BN3ud zC{P;$Pcm}6Rt?trF0DSKcCDo!>xM>O&UCm3U2toLZCfORx1N^E5FI2}EWBTOOFO13 zLg(w83mdxEN9=`zXkYK#QnpSfFa4_i^|XBLGGNP2(#$n0%q>#*<%R&vQOfy`ttO4_ zF?F@H()FMg_C>bkAryDicdD5bcC;tquXg+ib$1zNO7f5I^Q{e_Mg44ea-b_%`wMXbIf5%UNev`jg6g(o!*u~ zOq3YAnQ#++?)9Fgmdo|_IlsQgopXK;K+IfY4XnRokik@eRkx2*>g3({!>E z%GJlr7pEin_5@*|S^EC`k9F^hMAs+l$<(imrEZ^o-}bU>pTcQ-2iyFjf5 z*0t1mD(>KzxOg}F2g#s+;EqQKg)_jJ!zSY^4JFz<& zvgc~rO(5@7d+Tis`i79duofEMY#Fuild0&04u8%wTv~pv+sRoIH#p?H@2o0A`r5XRnawdtlS!8%zb|)!^#XHv1oOJRsE-I z8h(udWC=6pW`)I>Rm!#heys1ec6LE(t*J9rXBrGztfVZb!B|_SsDh_{X5>r2eD|(8 z)qRXF8i4f?6XG41ILzze$J5vQiLl{1M8XRBQ620XcUB*yFu$fR{PIBqceB)TLDa{M zW3%G4jKJNX!m`;(Uq?gk*xr_-+I32+(oAM{h!M1MnS1a8y}t8lksUxX+|E}Y6I;(7 zAlu!PyLSoY4zU{%f#fnSarboUA4#NdqFky>G5kW$5_|1MRfy@^Wxa3bK-$eol3$O}hwtW5? z1M#{K$z~2b7yoG+!Vy=Nz1;l2w% zm&x#R%2T{41wA6iq`%QFk(TlVSBb~PppMN!M|MMtC8*!=OAmvUg=Yp9m%rjpg{gIL zOiFs=7H{H^aGIJ=i#8 z{fZvQwbqhJPggzEw}-&}r5skoqw~^=3}aP#^nXRWkCM-`GSl3^wr9mO*&DAv5zS(t zXKze~H6_t`j7i$6GVR{*^qkCrw(%FyOZz+uhZj|1 zTF15aZjJ}E3DZuEybm7+HTBm0m<<+`!mus5k#i1i#W`iO6T7}yF*TyYF~@Tl?n{rR zFo?eyuaRh(5)KcS@99ObY(&&@|CGhH=1aHhZ(HjO9)l!0r9>F_ttm$$-}SwFGc z+qQz=ng!X)G#8ZWosd34q!=rv>jfhR2hZ#9rKdH9&o|^31N`~t>iOnEK1o2ikBxQ6 z2W-{v*QF+GO{ytllBtR|jni%v;q60yMLT=bHi74xEe$XUav#Z)dhc2Dz$xzjd#T{X z>^h6h$~PzK5)zm)LcjLKg_s|?*KRPCpo)xn+pe#2UGRL*9R(MEEUaPfQcy_F3F73Y zvUpv(lDPEoK}{cb+(l^=lej0>vhT(K>vt43qgOf7NZQx=`ya0@TpBv2lSlt&^2MGA z5zgqc3R4i7Cr4nr4R@|H9LElqg#W3w6`!5P=EsEOI$~eErGc~=9&9bWPX=O-*G|qU za~hkO1@tj*#zIFkm975K9iiA8BZ{*8Od@HhN<2q(vk@6;?y9VAi|=Xpcm7fIy)2y5 zHu4VOHfsK@HvDKoINI>rgWBwE9>w0@vvh;sP?HL6X7AGi%vko~DEoEzo@7f;F-ff4 zdkL8sG|kB*`_8wU>JJVxlEwrbKsq_4>wnqBO+sY;6K`(S2_BIQ6jf`)q49&k?~wkV zjE*w}DYhHuTVESY@U)**8^G~x(ov&S`?QZEiR5OmpYh}51o^hPIJD9_Vsu)U~^+Gf68!oAP~O%@j6VeB+c^%i{suZ4nVL()am_qOlJ&-m!z zBK;3$PG1>xdQfMBEp0X_L<3*!nD*dO(&olrFn;k*O<3FBDJ;=#NQd#5ve+nI-Z zbD9>t_0p^P=iQTe@><74U^dNJpU>tkJQa8+Q1X(a3-z5(sTViIua!D2w>xRl6^v@Q z@?;Pz#f82wqe!Ekquf}0ty^1Z7KO^n4lkdsQA4e@Xcn0Kj5)8``?56Q1i%FyNqeN> zZc+)Dbf%>D)Knx7M|)j41sZNC=z^{_b1QnPkyjYni(B7qWWfbeI1J09TT20Z%%Zv= zi|ZbyDGxicnbf?(654;R?_XhlKU2$Itr^{xpxUkJg9Z-M8*OL9T++-Vs#!*q< zM5maz1>V@M{y5tyXvCU|HzpbHFGDMsS5;an7!0+uPyEdA+td(UB3uvQeRRW)hT`wD zDYhzhzNEQds|W6A0LkF#fB5pEvlWe%-Z8m7=tFN{CY8KsX&#p9?o-@e#btSDdco{#8O0IJreZ6W6nn)f8d+75O53YbdIhnW zglRVzw^3^tl?Ro8?J)d>0($tB3=_VFGfBSbrQbegoD80P1wt;GH(_Gvnv0IqBMtLB z@wVsg+T!x&dg^yh6Nou93s>8W8Ajf{nz#`ku4-p}QQ8lW_#<|gIQn+5D?zrlbO9eP z0;uSA_QT&>k#p$nm`d*3IE#oqzGzSzBJHe6aB|-~(PcsEY`4}pW{9)qGcl-NTJUE- z^kzrFZ|D}C0zS%Y9Vd3KsP3<*Z(I>95#2avQE-x>Nq{{F&)N=f4dtj|HLsr~97A_3 z)L@V}T@l~Y%zubV?+Prs}$w~MxomSqj zj^(r_bZi)lHR0ujA=%NE&25w!lcr#zc-lZ&=779pU$$jNpOm1C!lyw-L4wuw#rk+DY!X z-=s@rd|);{A{Mdlr0;y&Sess_03V|&3^B+I94M;F_nis+rAhwoI zJM9b2w9jOGg81Q*mNAZI7~(yWWDM@{8!>(P&*qz=7cW4b=VjJ6PkY!?`^0PXR&E*n zv+Q*zoulA#4er@u$!0PXJ=B?(*stq)_{{Cq*39FVRnwi*8-mL3##zkt$%g#2AltA5 zq7A{6Hh}~Iei<3kP$T zS=ao++k9%@AXmQ%LHsHa$|U(q1Ne0Guo$z7vdP)a$KMh~=dR}mGHnbFsHj`7*{J7E z#L+n>FYI{(|3P@P=ZY1+O!T1a`6iaTcw@F(4cLe8ocpm(+sv+3M9m28R1&G$|}L97Xs5 z7de$GEon3JWf>fex*{TqtG4rXEKU7De-_W-Zm&v&JGy)5>WA4`W>myq>&hluy8r&y zl8yEur^m==$%4O}OAm5ab#aWCt?@AYX}6mK+JVmKh@HHULBMhheBL6$Z)yp2{{)>{ zOnSnj*g`6kZ9qVZjSNm#v7V~Yzn?saZEbjvrzKVMT0iG3D02R(t)*Ciq+Y;e%&+Nn2w*`FIxJ~soujUfNnlNmw>q;elw6{U*wvqFxAxB#?>%2 zSCPV9R}y~yAS07v(4@eoG`FC1s7A(zr{Ig9%nm9H-TV%;A9}yLFEkuWJb@*$flN*_My^WKg%WfB* zAlMdxvTN4`*O@d#6u&|vcR6Zk$^+0N2Lpufo4mG0krGUFj~Wd!4mx00wO*-Uh#t(x zul1$6Ori;x96YtDKVTg?S&e|@QELkjcpP<`M!ta;LBWMfRKA?KpnhATIy2pUanoe5 z`i!WZuGylyi`Y5qRFLr0*#lEAveT3r|1w#8P`RAl(*GpgVm}+K)qH4s@k3{x-xe=81qRdEvnNk}Kblt=oP&{+ zVPtt}_Yvas`nPm|Y=8sWBbxnu8W`>3lqv5RRAtc(-1JWqc!XQ{&%-S(&h{ke-cRm= zY%H-`Xr-8%Xe&M2ej7b8E%-YM^NjxJEZuve_=U+^Q{UMMGs2MDi*x}xrzLt5(BC?7 zuhqZ`d{^0&i2~_sPT^JOzunJsQd^=OQ5F*WnN%%>v+V-H0Jjd_9NvxVdWi>*=%kZM zHP4|F-j3Slvxt+JEx5z27Liw>NQJn za|mj&*H?evZ>`Q~Md>Rw)=@En7;e|W)K`X2Jcz$V-H_PBtml^4U$2LN;7UP=s%*9X zdQY}IZ>X{!;k?O`#l7UXv^(h9Crm6}htJagE>^)7IN1i0!kg&ZLBP=oTJ?z!yu z9Tz3t0TX(UWeuW#?G z-tM+tm_oD$ziSdR%eNM3o^s!Hdk9k(iqL9#=3_p0?LAABJ}MCzcU5`P_heu>2{c)I z%r!qpx*t;W3_y-y9(mgT`l$Rf#}|wEYAxWYeQ zZpt~Vilc(@*DDbt{_5eI&NdfbWKtvxSl8F0Z0q#qjsz@|bz6}X<0K<;fQ6MUz=#j@ ziu9qjtcM@N)$Gyg-gJf;i9?6!gyz=cxuW%1_$XHeNHpk?}qP`~7my1g8#~)ix3HRVh#U$4XYsRQV+!Gsc z{2DskDxBoyQjmho!Q4#lxC1ebl?HCx)h#gifYKi(Vgthdg!y-WyZZ~5N9@mHKw)(y zE%s^59VOlE{)2cy^dqz`Ct^@YF9tRQqWb4f2I{6uW-n>Di82^)c1?C(V+r_R=A zQH`2sWgPm9G(VFfep)*z6+Jth`Eo1ez0zb7g%y!IQ&sNpEA=dRvfPOM;nsHxRNPy~ z_VMD^$3nk`t4_&gerhpD&uzGOdGs{HfaSoV^)C%!mVkcxR^jjN^FXEg(UbSyjVnro zwHY|#i+fQ2gU6;WfzsW?;_Lx0^V$=I9smSGEgX5%BI9`~yL+@jiieTNL5d}Y_?8D} zw)ucMPk2B`DRqK4Pf9zo?TUZn%?+=5`%Ek3$wp+ZqW`Q2{u?sGrztNk_qEn+wu0Dd z)RQwe=3+|0$-z7j?X8np($PVo7?U*exGzq65#NN#Dq_1z-ytSq_?TOiwsc$flqgre z=>isQ`Uy7ySniLSW7mIC>ATc++@HujI$aEp=MQbHld#rE;$zknxd`f?-WM(3%99-8 z8Q}7$&}0XO6~w-!{RLaV_xfEnsEHTzD~|#T*-+bFxvxqqFU0ytrA%;OVT{{TA2oyc zQ+fnty(Z#CsXs@Q`*1^|uX;vl-4_dhxyh-cO#LGG+I?x(tS{$~SF7))o|~=VK5^Gg zH$CSI&rH8M>kCk}zzSK{TG;>OuK}^NV(I$cId~S9&x1ZS*ICR^iYc+Jrp^o^%@CGR^9Z9|H-W zT&aYAvF>7uT?ZQ|maMO7R1PU+S(#SJ-;^4oypBzQcC-T~JCpD=v9zJM`WmjcDSw74 z_O5Jhjz>HVG4_W0gZ(k!tinqpsLRIY8?Gh{FiEJPYIcY}auEeHR#k+23_w z(}heO8>a;Y$l+Kx#hj$UmqQ4uHYuz*H&sYE*QMX9lccB>lL4E=@SK>E9B&9n6GLfwO8oN@*wkBf-K!M_Yr-j2>W}O^u zZ@OUVxVumx5$1h=wuBD!Mt;qvPWdBEq>1xGwkbt*yh2Y4lbaLW*|97i_StJxx84iv z?vuIee}Q zzaLsYTzy|S_|l1#*w?&UXgin#Tu@SDdkD3Z=zuWLI_Gmf(0?7h@V#`}I%EEKEL+m~ zf7@N980R0`6ZM7?k>Q4S24iW3cPAkvrwOmIp_rXFpZcAS8Kv^u>RlXbo96YyU$Mr0 z$ojz=KCrr%F;kC}W1?yY)*Mzu$pN=M;2az};5-Q(#e4IMSZndevy_-ak0;lj{^5mR zicA>}2xneMad$I&RX1aGMZYsFv$y8`$rgaBT;7nxOgKHxKIC=nxwxGA#iv7IW@;3+ z>0r=(xYVYa2=aMc@A#zH@mKc6CAAo09n;)=rAky)$Lss{NU*(4;AZuumxR2wEn_Q= zT{t1=^)L>)E|u2UDYB4xL&I0{)4k4N;O4LHEM9Z3OfL^Au=ap#9&NVNS~bz(kcVo` zX68lDl?CD?R@?VaK7c`;ENX;J3+vHq#;#t@oX}up5@wBiL$$8o3foszrZYpA=ix{< zdyCO~f&&F1wXeR`P|AQO`?)_P>G^dwHF@5qdbPFfB?+f+OL3_cOWs45uR7aP(d+KK zD%mxUYbp!T4R~ssk9^LV{gsy)q=kEt*;O^fM)U#gK5UmW9S1lSdq&%ozO9Kn9%?uf zKRKo3JW9Uwl&Fvh9o=X)m`9CWn#4kGgNka7pVuP78f6K4sDB}+T6^Fbj$v|b%Lxzd z4s-ZM4B$W7pC9?&&F3|~jjVQdJIcQfxZp8wYyEfma|Y;-5?{zh5BR=9PeT=nj>-B2@J+@kp1oTB7@Jv#zh^Uuv$e>ZZ}@6i}R>JDF< zIp_6Wsx0egokxTb-FRFB>}J=$S@$DlkD8az;0$2?Gj!$)l#J3(mFXZWjd<)9VxcZi zukq~l)W#0tF`V< z3uDPs)T6?^n|*CHMFT?}Pdx|%oEcDJyrU((zx04vay>tqj?;j5Hj;2pgqdpBE!*}` zy9c?P8FWg;Ac#Mr{{b+X%Xg7f01tviF?08q>%7lr6{cYE6T`24MS4VkcbaC6r*r%w zsZGVRTh7^q5`1@D3Nmd0)TQL9*$|wkZol07cOPy)_j_3=&uZ|RpKVtTEk8bk|(a@yuql*2c1 z$V*oUC!T)tVO?>ja-xl^cHfcmi#pdGTz{70mg?j+8zjXro@{Z=6vO@Q)dKZ*%l8@C zGWR^Q3>io3k`^d!g)EY`5QRvKH0e`j7D7SfyFV8XQD*cbsPQ*v3d2u5yeY`m=}hvfZC8zCr^JBY8T#WZ^>$d6 zyQJDM$0M)zLsP<~qU4V`%Cf-L$vNIb`63B&eR>wH_>kI0?_paXH-RYmGPh6D?O%wG zo!MQ4_&~akt?&1!gx3KkhmYq3x4UtnJ{d5D%T{K1*<4FifZ60*Q0X z7T4^>4CbT7)Oxn25ST&s1b^C0=rXC07CGRh7k+`V!}n(A4#LJ}p~qO17hRAhWPwA< zD1bhnl9@xq*-#2D0`o3^H6!uG=2=;Z!>fA!atgVi9ZLHKI|{3V{e`X*&gyrA>sOlZ z6^92iwVZ`r@Rmd8<^*pSoqcx?M^kkXr&|RMezAbdxTR?&?UGqNG$(<8=?0#|<`lV6 zaYIN)32cH}3I;ptmvQ?=w=l&dg@%?j)*m^6{Tx>FbRbhQ3Jzc0(qDT~tgC7Eo}Tre z9s9)A?D6?wficdO9%Nn)zweAX7YoRZ#-c2S)xX?PTrhSG#>ii)J(pRf)^>{iV4ks? zL>Zi3qdhbbH-^;~qtPe1DfpYWeYGLS3h@V-f(Z`(iS?gZ#C|oum@5aT=sSAk?G4-1 z=)yt&_@gl@<9)sc%rSP>3{W*nkC6CkZy39g6y6Mq{cOr@CK+YNKiF`NKXh(uQ$JQm z?PQlBo~U?}?#_Lc-?S6=Goruk!uO7ONWw*R;Y9Du>)lVNj3>Sjv3p-(ai(y#(u`#ID}A>!tXIK#NK~dzX7} z`iGxgGG{PN#*;2ERPgpcc4l}{&V(Jf{{y^sOFP~)Z}YbHq^f4+T~*cXw84HxrD|G@ zB~KxbtmfFcSsvvPeIa{dc9HuZ;N6@*>Rk2ABxa9p2{Z_R_o3gZSw}tVv4}LLw0bmv$8Ix}N<62|3SVY&Sv#)y_{hjL{ zz8$ZUgVCt1ie*$0k_fP#L$>^uvjb2&V4e6B~d68K5g3VRgV7JW=Z}q!z{F6hP7qI(so$j$h#%(JpU}5T&DP zI3#8n5=nK~?FpD0dc=PKlTyr=vyQfYyX3bX&Vb>PNP4@8bZKFl9gb;n^X!jt_41vI zY}tY%e%8a8J)j;udN)nuB=1c9rQCj}17`}VKx;;0+PxzBNR;~%8OzT%w z(SqW$Jet#S3kxK(b?^&!x&q7>Nt$f?wwb`H6uuz%TJa)MmM-o;r6Jsj|S|DKberkhG`yTPdqn0PPI5fROCo zpGQPTYSE9fR}@RA4aST~K$10znIWg<9$95wx4jruFO;@g?e`>)ld3zgyS+Kt{y`NZ zIx+Za>pGmDK3@2xFS?4WbOiJ8di|s^oGi#PYjcwAQ9xrEi%gXDHLz`L> ztcI(Z_nu8rb~jS|5r&`be78g3UAaxXLQC&?+DHl{ikiZq8X5*8-i@_uZ_vowqHu$O%2T{>D3ffYZXTY`&Aoe&9t_%S2Sif zQy=L@8zbJTsGE1ex8$cJ(hNiRs{yqP;SUd+mrQ;OJswvB>(DCmget229RlEZn>sfe z8quv&zNTB=PcQQ?9NQGHC>~1qhQ(W;-uY@CsvX(at@x4FOHK(JP+Iu4s(T$BJ2&5o z4P*8AE2b!Ao5oMPcTsEx(9i()&GN6o?G?B^FR^yM*M<8f(-&W?!)ID&#QvUNxN64L zNb!mTwLJKJ<4oa=u)VtZMyspi{~V#>87G?=*!&L|&9?rJ=<%ifBVk;Ni8cD6_ zsLwqevie|n<XECT>xk^Mm=%7Wh-;BS2`G3_33d%JF`!Fl(jOnG$FVp zVJfFkj<`!+E>g>u>`CIz-<6y&+uJ9XudNuR6OouOX<~3i4^&#InzeC$qn) zJ8(Imw5Qe9JWsA3lmkP2WzEm-tPA(`H1sF$s-`O>Oa?xmHNrmXX^7vxGcp+Jjebia zmoIMK!ONhpaFA*zV4U$fe&J2R2;SUZI^Wszj~ZCPiqnhJdRga*6y$ZE1Mg?%)xheK zZ%v`+eV^FprLUr%ip6ms`TxEUEb#%1sh_Wgq8u4ppT|g$tAI@TdAkXh0!JwK6BcnB zsaOnZ=^3v#nwa92Ed&9xL%M(vUtb+<4Pd)m%A^fp03|k`Ywta6HBJ(`3wUVSQ#wt(h0Y@c3s>>lu6nH zV7;#8WKlRe%$EAaU@jg{ZYQtU%k$XPngwg*TQY4j8`_m+XD7EHZz8%`o{s4{og{sC zX!&?^NH~BwP!4s?aG!+g{87^y{rSXEBnHDT*)%nZelPfW(9bje=Ho0UlO)$?ZBza0 ztR-=0;Tph+_Pfb#ry+?~3U>o7S#+638nJem&4}MEC#p$tww*hn2H`!WZ@5-}Dy_HG z=~PCCn<4c8#~B;gBwtBk@x>F>S|glv^f6nPT=4UDb1Tv_=^HtX7>YXcf-n+{3yso; z*&P?{0kEcYF3kw678Qrl#lG!RA1*A%SHUlE*+#P8UIyU@kOc4p7cEzP z9~EqmdQpML^IaIg<6wRk6;1HqwXOXDr9sjvMxl&4*?lltSbvU>a>|*X+hU+|U48nz zf_r0(wi>mzPi)DMQJp+a82H?tPX)-lu=!P}O{1%wEJ^S-(q#bG&z5MQ7Le^C6M08L ztamo7MF}g;u8SNqyJFq;$J?zFEvT<i-O95$S1@SwI^~UVh*st?**mb?us^at&(HH|*ODZJ|8qq*f0T*s;QZ z!Xo6Ei^HCzs!qVX`7W|Wfu5Y!pWbV1SA0Hk8ni3fsDiU5Z~YK0jYFnhHgokC@jM>n zh6o=l=j(_-XH55ys}c$!AK`r)Vek5=HpMDI1;y4qz7>6dlQiE%`n|%E**x~op?gCL zI-0@4FX&ac>+9b5n8x`<9=*JI;@3BEFD5u}=2wS{Qj(-}Lt&rI3%bC6Re^$F%) z4XJ3j%h@=oYV^J-&f7*CKYHtLO=}&WtHCs)ndr!Sho-woKT`iShP;@p`Bp_PtWh}t zB>HL2xu&i$h28dD^mVJ|SuYpA;B>O`US5sXfP&R!iQ* zsGb8++<0eU72FXO^eI3j@h7`7f~C? zh1Ua%PP9iL269vF#1a#bmy3qmko$Ce46JV^TIk`wBS>*bAGc5p|6jV3@hf+0JzFCb z-*XEjU%JP-1bcSb{e1?^YzAozwzQiH$vL(}|CxTwwzKF#|rx{*!CYQD95_90T zVE>7^gQ6zy8LOxA7EKK6I!BxAz+A|rSUIrK%aUPSJW)Ndh=X-2Zj@DL$~bYyl3!r> z6$r(1z$pjK-2_=vdK#>}a5-9ZiL7~E^CmyGOq zJ}6@ch^4o>yuq%PtbM3bH!F{!p2)v`-{bm;Vf&vcbv=F2m=O!b>}^n1j*7>nuO4dk zl?|h`7$sM)5oh9&bO{?t91D^un%-eToctgqR8r|{t#JLp+3YoDPuGX9{M_oPfP~B6 zJ#-!OuYp?{u4spF6?0SjS8YwHA+(qup^71=oK%{8pns|AuV0mmFs+;VSex=~?^P`- z_oX#8kF4m%VJGKx5gE+nE}exOv0=B*VEP=To>K15+L8>?o(h60zy_||vjyr}$*e<~ zWKU><7-{V+tf4)1PmG$g?OV2cBxv@lV1xtZRMyljyonlSPhvNGzy=%fQcer&2i23+ z!lS8Akl;L;=PI^!<-fkMa+zD!~+>+->=1^~-Y0k|l_;wIL*Bnwhk$2M4MY zTufTCVO+p^S31GgUV(o~G{xym#%;`W{Gvx`oi%|wx@_G~na;y2-P6XLrk<~3cT3(~ zPqHLKh2eansi~1(Kk2UWMr>TsEkFkEo^M$7TFXcMv_D+HYdve(elX4}y3!&ye)PAb zgJ^+z{HC}?o@-DKHQ=BsW$ULQDY>q`$i6ea?MdA;Fs+SCe||=ob%_toRGRrkzvgE9 zM)5-YGg5FbP-y|CcUIv#b%kO8(_-bfZH-)o*|&-N>il6zVtHE+aPBPjgu-_kcD7Tl zU7-EvGN`XI`hA~SwU6_yP39`#E&`La-yGGN9dbFjcjR~EH%m?XLSRvQ&~jsdZ5})o zpP~5QN5&S{#-E|aMl!+^C}THwcDXCGj@KZq7|H1B_My#^SDs+h*{rktkOFKEpI-;k zf@$Y!x2TcMr21WmW^GMw$2(++i%fqBcPV#5F+NQg4kTxTJG|_Pn zRX8d@u1RCM>kKv1wgz^K^2%wDdF2J=wos8=Ym=Okf5vFxy60rVLjN}<%(~Bs1a6(Ggys?N{Un&!H(B`z z-tGL(R2-im`TP|tyS3Fo(nROBv{e4m91y8j_LCJl*1O3yIg-femT zIC1_>47`UeIpV(iRuOx`=jD~|A2)>x@xR9mI&~JS)O60cTmv+hOde8t4Pp$6<}vvU zTXJLQsE*3U9LAPB?#4mUCeBZG7;-Ae(#i?Nx&F8u&&+kJ7AQw)2jljq^7%(1rDcx| zVG<&aXn6*O(H=^ksZ;g_|MobUlKPnHx&R_>UIlUOHwZ0NulaJz$o1IrZP~hCm-Bze z^FI_?v;144?MgN*#cXI@pI+=!>Gt7o;_6f-iP(M{6+az&Uzg{hcIV19x8t=lEII7k zx%ki0g=f2jdDMAg!OL3JJJ0V?lemZnS6)brrLTAJv{;d3RL-}ULYgM{x`lTJ@JnY!EyT?hF zmHE-dIZqvq*Dl6ZR<{ zoZbkJR^P3kdz!)nDG%)_ZJz$7t|*`j7Asa$Wz}tx0Zs2_^7nDsD8C^-fG3*X{uKmP zGWN?4eL52zH}HLfh;~_(pn^!e-IrEEEVCve6W#XL0oNk%UA{;Wh3#d8t+4S1C|`n* z8>5h%w^l2Woko^Teq$6NDm6W(xlK+xKp$~R2;_QDcF5rZsZzEGI93oN6)`;e(% zDfy%F&_hJo;EsP*kQ_<}0$9-=o5(!;S|__$O9e7U-wl~9T~!WEM6E|jtvtUm<7b1| zDU=15@HV~7rfM8k8&tC;I2X;%$MRz)^y81d3|-l;-5=yOi||mGVUj!-7rYZ8Q6S^D zVJ09h235B?ZYeXSpV6)^qonm7$cP9w;FQUibn+F%u9#PnOA67QjP^+i3peG2rpfm6 zJcKCn#At5Re!hg?W#FU#ge`KXgF=wmMpsmJ$hUJf!DeE@z{AEcGf95|ET?S0B>l@6 z9;E`78HRx_Uqkfz;?V)=?D>dp!JZ~Un{}sO%%xFnarw89pv^!ob$_K>fK`y*EtjuC zr;o_k_$_-0f{@$XDXl%M-a8)DBxqcdf8LOd)JEk2YCUjOA%0$~E+6bZ4f{>obx{ve zsccq-_vE>J7nV%&1I`>QXONFR$*1OR2jWks2i|DNUK6$2sSHWSlWTtW6xkV-s#JNs z6TouTS`vC@AkPMz(RO5_Q?h|ZlnY&YkQ|95$DDW+AZx29-?8YPb!dT@>Y`z;3rzb6 zn*QIrVkMyNY*qa$Z%8>{O7+ANOT@eS)%jd{$HiegT{39ZP*5#v*ZZ#u+0Z}sj#;g; z*)G){zjWzy3E_8X-?Ne=^BdT95#FaSzSd4(st+Qu5xQtq&El*H%(kj#S;uhyy$zp9 z8Ml{9!YKqyp-`VxF2V&Eg3yf1nfaU_18d`2sIWCZM1YjtjHdkCJIZh{O16`!*Vs(c z1-5bv3riV^^`9|wvVq%R-<(K2q@}MGM}-`Qi=Fd=+7p}!boPfP*-E=EuGPT z&-Hg+X`L}U`!;F=1v*gtjp7y&F3sNqm6u!Rj*p-i!m^b)s`nA^%ggd~@f-C`tZYlP zGiu)Dk-jUEzLq`s%z;eiZ7C41Id!vFnsjebQT%Yai%a=|BsXm0lBNP>N}?v|Z_*s| zcgxjBuF*HF@TmeR^)hE2Upy5h`ux=f>pg4}zq{x;#pJDt_a)O${y2$ckBB zn)2Ou18w(T)Uy+tts|US`BU41;LR$^)-HgD^InAPsoqD#U+STn0_(Xfa-TzwC4|6uAxzJKU*Di}A&F@FP@3;PvP3K5e zaf)v{oX_!s)8;DidO`%wch$>Pu%U&*L+{{}fr52D)&jXM>c4w`jl(|Fc^hZcyxJON zpB)5)XucxA#MWmy>tCLbw;I5iKb7)VEEXR)K9tK+SwozN$-?*iYsN(kK|S0j>hJP4 z&TELzQpEsm$=SSgu^AQwrSJIu9-{)^(?WSm7C_Q#;Ys%MfyJ7Mm|T;tCS6g_V6!R~ ziRNF&>KgdJ8Yo1|ETbE6M5jot5W{ zlbvQeN%YXHu%b@4fOGK1u^P|~rEm$cG1nf=woZu2%&sl6NgZ_9);U-E?8P5tHu-9X z>v&N`Y72R){=RK=GR;=Eh1y}<6fJt9=~P_dzoON3F>6eFGW;eBYYu~C)byJ-KXY4& zvmjmSg#AXo0@cv9>7Rd<+E~VovDlD%W)|!oaVOEd_gA=I>JLYEC6Z*kHFI2*|9}$B zNyiO4dwO@PW}mTq_xxf+cm|5r!QHVfrTwz)h7^cbL#k=Enlp3WX@z4KtRZej0lO>5 zGYRiqbTE(5^799HUoxk*!ag35-!J8~g3w*x#x>`K2mc@iw*xqJGnR-;wf2f0?CL)E z!1#7frGAK@?w+1)ynd@$wXJ9HONU#RnKwb)o>Eg>=1!kAuueOS%bHWaRbDHxVk;e! zG_m(1d{?isv2*gNuZBFzs5V|X-KS^g(bZ{S=gB*0nh(UPZNP98m)p(!^VL-sEW^|k z1V8pYb&gia7M#8Z#eg6pn>|=t?h!yjv%U<27Vw`k^R4PNi}k`O-` z2pf3G@INUf|6T;G@xRi3J8`=wA6&25A()WkSlG}y2}}AIMN%@?>#x~)u{f2zWncOW z8O9Fw(iV6Y-6oYI-_||Z;OLyGZLzS3wy?1ES+lxS(5LyDaqSvY);bLx%>-0pdfZdG zh4KJbmM2~A_@Jhm5U7Zb=>y@-@KKYp`soRjxv_mFrqnF5`}dL*nxH=25ez6 zQd>t`WId%O6O!b1#KPWW^Hs)kN;t(F5bGFlCZuY%IQ#dbyBrlV04tSGd2KnsiN2u< zTpJ5OBm?y3AhjR8DDomajrKBd>?cn6e@q-B!tv+k9c(_NWy?{p9=l5nB)SF#t|!iTx}tH~aFkr@!1DQVHwU?znC4C?%C6tMIz{d6|KR?A1Y0u(6*Y}z68TP{qq-tE~_ zm6QL>jmi2o0(H(VO>}8lnj|!9Jf}hICmczPiC&4HRJCU`>@`g>{}THG?s>#wc)^Jo z8s)w5Mutr7=BVlx@BQJf6u=!+>c%3PvHt@zINc%ryt;D@Ve4%j#ubBIR`(4c181`* zzMi7&vMxHZ&NsAHYEgJq&S{I(mfWH1al&9n-$q^&ENNCYR#*XTtNK^@{Rlmrc=}yN zz5cudmgVdL;GODTv)aN&4$&Kk^MtMziUbQllDD3(b6VNw2>CLEc@l+HHMy*_ej1D+ zqJb|vE$V2m8+qmZMxxjgVpT;=e7xhyIZfQN zIGtGX;Fwu(IY|7{m&8G{#c=Mvs7%YndJu>Wohh+Bt4-1LFGZMK$W8c){6M%2+4b?e z@xYs&l3+|(%eDv#chL0H?e@l>F6RXyL4Kw?oS|!gyZ=@_*?6r)@^@_fzM6-mmIAKX&b1y|2Dj_v)(EtE+phHhQFx<8&BQOl-s)%ll9| zWhMW zkM+`Von7JC4?ggzw3HVH-xFw_*+&^=bH(A48F#of7GUuSH*wuH1o+#K7crCIwGtiR<~B{^BVG>$d3 zbr#d8DdJ41cGwwyEtK7PL!n4A@FbIH7@ox{Y+EX4fvi9jr;R1`JLqfHmZOs1p|}zq z=qEQc?AcKIno_#`JxlLnpVUg;NL*Z6Fk0D9a3nF3PMRL!+TP4qmKk@WVx*8hn%)}v z1@<4nYO}e+e&xkH(xmNT<{ zReo0$>vE6hainfIFEKOhMokqh+-SN9A7gll&i+)%=FS9tx!M|U==HvCz(}YyC(Hpy z_C>(R3iim5QXpI%+Y+^Fk+QG)Xtz`IH|MYxw)xiLmM@yMGcZwAMU5X=e)_zso~nWy z(>ZRwL5zb<0B_s%BgXMi3*KHVQp(1+SxaWy z8NbZ(%d^g5vN+&f{qrJvGoTfbt$6hAeF=7oDAvjccMUcE_Xq59y?WmcD{b**Vp9{5 zoBCU9@ebbzx> zE((*JtSogckzy><9~}c2y^}XHg~+Wo?xo6drlB2$OCL`SZIxkt^v)+T*QLO~wG&cm5ju7`y? zNyFS+6`kxfLCLU#JYBkQn8nnLXLrB=xnpd*T$Dq%!;Z$OK*A2 zW5O7t3bgTT$&eJkx7VU^Q*Bbe)XPm|+Ra!pnEblnu$hSA}ipqR6no4IXh#&7;2 z8us42Z^-iVclOz4>*J)^bd7}ruJb%|1A?lqA=BbLvkPU~k$LeHD(&en+(NIiR&-8; ziEQhPMmV*{F>XAzj{}xQ8?H8tmhC-4V$a9KU*C^!c`KwhOP>98T+cJb#=pfBtAbyW zbtE!cq>ho@OV5A#LuNQ1+GpDu@Y(qc@`nmL|H;L&VVU&yAL_PM=P+kHM?DU0;?bn( zmof$C^bJ_4?%THX95y_}ULwOY`o;h%6k)na7a{1~CU&yEx;}^Duq^E!E(SFRFOSTg zZU%!VzZv~!)up7zKJx=hqkNKfKz4y3%S7dgdq&5miM^#Vz+H%N;oAVY!+xX>k?AK* zJzo2&4~&?ep5z1lsyivh^aDh1V%UZ&HB1Wj0ErkD%CZSj4B_7CR~6`X-X8f)Wm4Nn zB<5L`i%=S}``Um{<@xGOhgza%g+Rz|!yNEB6aJLJtPKaS70`q?*DVaTbQS1WEsoe? z65az^A}h^2nwu~Hkrs(L~0I;k?kbW<-3SRgRz}{ zEs)yO;8&sw{#`3cC%xPW6n|qxrCA6pY<3#3WF^;N4N%rT@8c29s&70>H^gm7&FuY9Zq zsPlG`?eTW+*gZy%Q;`Xa;!#p-RMK5V`r)nxtJEFtH#u$=7T8th= zluOof%u}@)3i=@_ma%~W~z|R zM0Alefkq$8Z)|Jlec@Wn87JqFA^&hlYBl_W4UA@*xvFOVtNePcw_rbd4_BkBf0Vv3 zUNZ!1SY-##+h-C(0N61k!GlB>(>pmIeQ4?0tEb8;F~Z{yFQFIw)HO@)t1SEAy|uFW zlX6-JcKWVtelSONyS9GANXFughCIt}N~8wfSGlPp)P2HZ-O*L_#g{svmCdZSV=o@d z77ZKN$`o_VidcY~VsZ(6#M=2sBNj{3uinnS=S!SDvF~*2ZcA~MV8dyFt|4f%&>77R zByK~@PqH>C%{S*7WQjMYD7sokt?U}w$W|xcu47>(2DN?1-(e;6qQgqr;zij zIRKA>S|rn6Ea66YAp{!oPH|hhldgojVgj0S1uocihvMJ+AcaC@;JMx6(9F{4hH3o= zC;QU*rL5&o{ErI@r_+z9AGOD!%6tnyxOztI_WormqmWhFfODJVw<;_5nU^i7n$9G+ zT|(6nxa4`I_!{zWS*1w1pk@6A!!23M?weNQZU^NhMy4~Jo^G5cB&^v+Eb^wke{wXN z)VS3R8tg7XWGU56bpLh;^Y2Ki{onfe+&1U6*BM{0!Eg?~wKF?TvG$d%j2mZfpLaLB zCwmt)7YpjbDxMa(l!>cX0gZQ@#!PkdcO1Sh-rn~kcFUIT#cjt#Yft(Ti1?xLBWe&z zOLG6e%BMVU;Bv`EF#T<&oUh*5f40cOAErkz#ZCv499V9GiQVwgU`-g>HQtV=DOlJw&47H+G_U;(suJbN+!Y9FNrOdq%0<`J99+A&Ih zLK!78zU2_oG2SvZ*tCh;`sk+lmC+A#KE$zn_OT zC!o7glzyJY2cRn0gjg-=^h>3XM63;ycv59Gr~)-JP&e8sbYb z91>+0a`;<54&g(h5@@pFw!#hS_*c@bUOfx^KVT60_x~R%1pu42;6oqN^X;!uB1em?a!-Neat*|AjR;@VxeiiWkF0H*mY`__ad7FeS}L_oos;oGc2`3HH@ z6bhUE(4D(f2meNkW&l%mSR>wQaq5<+s1G|QeFFBto^kWs_Z`Ai)BxVQzNq>loGn^x zfws`%7i%C;-{I2%h2Dov;ZI+eN_*~>oMvRJw_4t@`=R2x`dL@mEP#lxt}0pnIX2`9o3rqKcQDt4zoI9&d+%2yM=ra$8TFhAlFR4-AOpUDpC(j zc!|lfXaC~C!PfYPN)%YE-_FJR6N{$)^_!3M=`M&-ou;6^{z<4Xt2PQ~S zi}%}veU-!d8E}Y~@lVAmrVdvZ5Vye<)|D(+V@4wKB-~*0RVB9x9N)-#jvivE$+usV zJQGUem(?Xk6VBsL?vew`@pUCly~6t$q{J7O`ex?J#z1)yd)hj1fbQ(tvbF0nEPKW` zPE@`i`D(VqyWi;qNAzHsL;RG$tNTfkidJMvbk+^QRP)Bg^NP**&0v*di-%Up_P*ATunnr1>pYctqrl>kt2u zr>(m0r!2lVLFcDSp!!xq>FSbUl*v09O}$$2rzrLZ)Njg`dG$Iomfadz`GX!7*HRyW zt~I@H`UPFYEA(*7sBj&sL*zO$*ub91VH_1S8GvMd(B^qP?INHAd>iBJN-6RDrywt z=0(KIy}l$TXJewbYqqqJXaCX8o1@6B>b~Rr@NIL7Zc05PWn}$JCoFk%i!SvZJPFwZ zbO!X*BKz0?JwU?0c+6=|&6v`+hN|tVYC1#x?06bp2gAP5ehvRoAN)`fNU(%OWj{TB zeC~IY?>275C**NQ^)yJ18lwkg4=+NOYukqweK7yN2jHmFMjw9Z+tcR39k%vki9Avc>vxN|mq?JKWld&i_fr}DvT~BKX6L1K z=Q??=Jt>&VxAb)FtN!+OyQcdXKl*ObgPz(k`=Wi2c9T5a^@V?+(DW5i< z?G~2{Ri}jHD+dO(a1>TLF|(g;xKitS7vn%qW5;!uNzBk~&TgmnLT{3c44HLBtNFxc zq=IDyoem`+s9^jgpDh+fwD%?VRDz+hGf_AXsv2=6=hNNXPXe&mmOnL>gZf|=yvRIG zld_M|Gi4y9^eacSz1iF6Km5~!;?wDTet%BYkL%S;xI%1!@kq9$Xd=I03U#pbO;H3a^ejl|Bu zCbOR3*y*z0LNw*s_bz{C0Z8BkjaRwcHHi7Z9m>ka`mg6kAxX=&B}cF6(z|W0XD1Pl~TXbFEz;_;|1E?2y~NQR0>;um_dr!Kl{Wu)Xc2f71yeCDaad zYXdUkx1Cpe?;L);QH*MyB=W!6FZftS8`<=$NFq^P&U%qR!jVbA>XJ%Rj1kE-A4ey)aMNb z)~D$v=!Ee{;IWRe;)T*waV5b{LIj-<%c2IAmdFOK_r_|@i<65NG6xbuxkNiG+!EK{ z$$B5dUJUCoTKUjy7C*er7uN^9gw zg3D+d_Ci1IALaRP3Lh~wl|%q~)6tUCK=jlrsw=WP{oxinhy70~Q$nQ@J8JX1ZsTjW z8{TO8M2~ONhx99XG|?qe&l+>ZluIHHxmpRmVlF?=*{u({r;UNmcJg}gT7KdP?*3W8 zPwTCbI-{0vySt}awTrc=`xb5Hde~~@DrsLVW4{v@LCPKaBs0%csp#yLt?0@`$05y6 zztfkpF>wFy?x2(yhX-PFqK@Z}S5LC_7OEm0T}QbKtk0O&^u?=(NflU11_`~G-@)a8 zB}ip3b9f5kV*8&j+gMAsUYt>z^-dA2p-yu5oaTJ}lO{wsHm@p8Hskugvax|J92QTw z!DuOKxzQCGF>&_0k@W^DRfmeXP~V#1)EgBGoOmk1Tnf?fcW}T_+3n9Hz>Cs;93KSm`|=9_YwT5$W|CMu zj~!OhK!mR+E>nqP7taski-W8|loSQ4<+&P`*@#(7*D$}&%_IVkVPdjoiP5~n;T8#$lW+-mMSEFA^gh7ZJv zZ8sdm1XY;V#b3k#AnkotP--YIJjtSSNV$}JP+CqG-+@0KnefrNMZt+fEiCVVMQmY` zON`ew3cv7DVDGC~3L?#wiCPz7q!VfdbEBT(gxAB}oRb8sFC7q)zo-7_?mN=2H8Nyv zfe$Ph`P`$_F7ZhClz=kF{avRoeciYDa(lRLLZXcs;qF&OBfmq?K+`Wa2M`JuPWbhZnMMlvf>lQk_;~_A_pp5Kwuz(K+e~+Dk3kw0^Ft6R}Z#r{P*h#w8R_@D>31<*_n*>FNyE#$tPt= zjq@Ysu%8V=^s}aVnQoMsoQW(!$}{8Q&A$Lw;->#(^t+j(xk8pRYrtIFx5 z3yQM5*@Av<*Gklt2ckceV^r!lk-t|7n6a&DA$?Gwove7(qyOpl*~N$bSab*|TxFUGBDIlU42bSXCTD@aTGW zadm#&WqN-#WO~2aOf;LMP%ztkm-+btnd!C*s=2Y;DjP^}yRUTCEV(;l0b30z6l9fB z8T7Rr+}ONIA4R$&RfJ0~nkE`sXbMO)ca~+PvGpZzmVSZAOjVESJrPe_Eml*F*RBXO ze`0ew-r^v|ZP-9vEp%4|{tOrDtmjpqBnK<`U>>y*pppo>3+KsPwnv1XE!(j_kFJ>d zKl{@r{FX);)hp~7d2O_LBVZ$yB;Si?2d^CMZ^5z~^*tuBsVEwXRX^n@&tA|XfLe_B z{`c2?R~bkJ8CMWxydWWk zZx$b_c8UdyccyN=leCULqG(mDsGNO*oQD4}R%?i>O@%7MgLZsXD6@dr5-jbj z4SV-U6KwO<^huwt8U1TFXtJ-S{M@Z7o{pcH%InG-iu~b;46~4F{rAJAYTV5Y=1tyL z2BjTyl1H*qB$=(4wxX{oBZ z=Uv+js+@MZ%t4ii^-p2iyev#aQ$8Y0sW(x9Z-V01-Z%MeXaz@Il%&iKeZR@7X#df} z5Bhp2;^3KPs z3QMw=O=UXQ(UFRiiZ%E(vZreKyDqR+cvJwn`SjXOkDtp=m*Hj3YDA?yNg3bwiWKU- zzxq{r-etqX+7B{5u04D=y(qHhG_7F1n^ZVZUQ4z4+zcY%yvkE zLtS zOTWIVQ7R*tA;tqiFPRnV;XcnbN}f#K34}D-PAt^y5`WyVgvu}#p)f|tQv|2bYy92! zjuNl@ou{p|dlQR*RG8wC*`@W;@3UjZ0bZmfL3Pp1`apOPbZ|BD)sK;p%{P6ngSlEQ zFPw=p_^4RJ*Lij|5t~!)AN%X`o}cPP3A3iAMp`8e92-_ET;^W8>fIPGiCSD5G}BC7 zQzd>mxc_M+GtISyQ+TY!Oiu*bkX4UBz1@yHCXH|s6-X}paUmLWa!e#c+rmXg>=7yK zul7ZqfEu!6zruuBNam*t+4+Jd8W$7YL`FO)anzd7WU<^-H6#Ft`=#bH8{`~LL^G8M zxU*QW;?+Atp+0-00Z{32aD!~z1706zfJ=T6m4srB<8fWI2;e1iX-HF9V@gTkXUJl2 zQ_Y9!R^rCxa3@_L_KuR2mBp8)3;maX{i@tb*!s}(OM(#^%?kf)T_Cg@+j806jTA5m zqPJu%>tDM{qYq-auz%D4cP^8fJDlmS!T)pj0?XaT)URu20>UZX+&2sMqwYeNx#stb z8aKfu9c3W}9Maw=OOA=DRZRI8?@DT9y@W)K8`(8%j=jg=*D$9F**PT3l(23pMTWn1#? zkxBPy`G?xT7WGRea8Fi)nDfDTX6T3S^e?}Sh^fXOoj*_d7|6Wvi-Ag+CYaJ_K#sig zjoq;YmSA%zQBvQLcU_tAckw@bA{}`F)*Bw@q7OHeR2?`TJs=fa#aK$k4@c3V6BT3n zP#i61;lm^G;}5p`jgGJ@wpV!}lHLH~g(O8Wo{lv^uW2NCQH14=yyZ?S?1Z4f{`gbR zUh5~C&JrV?cR+%_P~>qs_iwy;muEuBDPbBi;Izb~gDMtAn31gvlEJ^UOp5kw ziX9~r`p~CU`PHY-vcSe}z3nk6p8!gVgwnu zETe4JlSfRdcIMn)w|ajlEuL%rde*!glKsihAO>$^mzX`PQbC6;nYJll&s;0OD&x1* z72Yu+m0C+i-XDoqd!&$8Plk4xcLmx<=)QacsmH#*39`0^G`Ama`D_yTZ55Xw{jVlg zrWLe?1Y;rJMXe{pj5oBcR>3_i9gnk1<8LiGYmnuUrhuAB#3BuX_NFk65LYiUzt}gtEh-~GB&7LjjH+;>xI|TtzhZWdSEmWSw54eg65DfI!PId)W&q?u*tJ~JOg`p6d+Y}EHI91&9 zrG|ZKs%@seLoK04qCrriAbx&L}db85B9SyQ%9GY;2u`yGI5pT8Nz&$jsVgN zpYz{{2)fFXk!qz*YX;!WM1PiLYS=VP9Qcr$6s}dO#9A@9TkT}7&1h7!n*jAMG^GWy zPAE`oH}J3%R%oC1MQAIrW>)K)UYuxGX_fi_=VHntzKQBF0^wp{waCRxRx_6_s|{_- z3*$`S$~|w8R_Tq&Ms|C8@dQl!H13Z1@0*gf&a4elO}$Oh0{Tg*V%7a_OQOyUx91bk zOL{(7uQz0Xr#rBr$KR0ufxr``o$MoX8SgHOLCX&b*1ARn&jf3s6>fRUj-p9dPocGv z;DDvLO!skx`BRk7leXXXgApb<#& zalVB#3ww680T)J;%O4kyUjDH^`-w38KoMDekoM;iV|w!T)fDNAo4f28@75*w+C)Um zWMf68Kc*GCR;F+uUBIPHVIx_WY2T!-blGGn@Mg} zGbGu*hvd}Ro8MZqw6@l)4wT9exW}jl>heve_i9gg3xz`(*Fvh+@g|X+%!(W8FAq2O zW7fL((6)I54bA5RpD#W|KFX&PUYtJVdmxL2kCd7*JUFZ|bc5VVk+V7BL|k#iH*557 z-50s1Xb=|kSx&kIx?ULZJQ`7kY3C}}WQhd65JdNLLsUlBgQ^A4to5#a0v|4#S#1nN zXBO8MHd5mJ-@VuWCcscVOYK!mdy1Ea{{^Q@UgueDhBjWjfJ9P(bT}<} zJnp3Lw)vU2w;AwkDTE|-RVGBFyqF;wp2uTu7P@Yw;;gMES#~U5ME-7^Prt`SZrM^2 zM|*tZkmW*Lc%r#5N(0>ipC8(aUSxyD_Yj;2FcuAMNGRuz(^zNy%+ zyUF+}I`5lrA2LUoTk_a~qAWs`K1%OJw64yi3@UlkIcHdojA}EPKPp0w{20iB+cvxc zh1)+o1WyxmQ?!GmD8RH+jO>%UCD)DoHd@s5XXy##ZbRz3&e;XY*esh)ENckrIP$7( zHmh#v1zt^;4-ZT@JQ01CpT`Z#_8YO$EOcKiUVvlG^WZ@J(G}!2?_dPAJW(wUX2~|1 zj)%LwyqXz2_F*-asI+K>Jw2l2kp5B`n-Mn6!b_;fsC54uv>L;(kER|MHLAkom`d+! zf4V=>xTgN%3uL1aCRD#FAKbJP!LYt7sd-L($Wh^Y`jr*YH!Kx(?0zOv#1pYqtVpq= zmW_EvCCV`>Cb5T4v6DAso@Fqo;nV$Iu0RY%n9=3BD4OdP{Id0_v#|m^0-~+iMC>hx zZ!`F@E@i>AysY49TFx>D!EJHM{1g3oI3lV`_xxwr<>x69->yc%A}!0N2VyQ*-Dlp< z()yoG?WNJz{o+KTr-G)<5Ip~F39~T1WhB0@=ChlBfJ!dZ#_6N15vQMBIU?9D3`hol zjypH$-}4!Yfjk>TyNgXd(djnXhrXJ(N%O{dyMrfUu={>=qqa@bG%si)y{ou?-A(Vh z3#>ma5hZ^1XQB^nO2%Yg@uJB9698OXy5sRM76VWUQh6c+8EkV3n=F|04jfS>ZIO{@5rP^*TJK!50)Tq`C zx8(4f)23LfHYe|5vh-!&8dL|7PU->`OWUWmQ0(3wYOkZ6^$WBIlkxu$ots0HQ%0bD zx!tNag#3QHe1-Ni1A+r4(_F6v!o2m@cj|gv6}HI7E_B5z5oGo8P@yf=K}+)uqk_fR|wH z8fXCWrpHH^5|D~b!+H|I8qCI^b(i*HzU;M;CZOsH{;u+Bq9i}UwX$@_%6=Y~r6t}8 z^e4p?cLzJ8u`IP|5HRP33AIQPkfhw4X0t=>AnSxqw8KsMf*!s%dbZT-)$JmGE69yb z8MGwv?LCO;TiSxk%NVq?2*ermdUfGByL3V$->#Kt6F|z0XB1rC;Y!?zJ|}qnJ{*oc z#^?N}zbX)Ndc8s)fq8v)*%g_6OIi{oZAO^sRiuEVwyT#TM!Goq3h-EeBth!;#m#Bo zu-eI!-Q%M=Jj0mFYhT^_(mbmss^N>DVoeQ7lkPoAaws>^j3FoxKQyhvwY;p>tKNuJ z13$E%6B#Ilv3*q~GGmun^w=F%_4HObeWF`^-X|GMo7u3i#zDTbm_Vc~lAUZiHmE-R z2C#L8b-k4sZ=l3uebSO9yqX$62Do>PJb>rIpSy>+Z=Iao!9dttumgSkCf)y}iNHu& z7_Wi-e?p0xY{?~DZU}uDPvZ6eh*_pLoN~ zZ%grs6sc_QHGd$_c+io_wx2tVa@7e$_9BEjYYfOcr3-o#(s!J>;LJ&vUCki+XT5Jg zpxaI2V3l)DV~&b0v)hW{4lzBbt-KD%HVPMP^B8rH!Cgm0>#fCgc&alh0}@+%WVKP9 z0HpGZxYds2_Fny0a#6I+jrQ(MuX>#k^{w(6LaW}YlmQ@HWfTcz1IeIe4 zA?F<^bS}j77eywt3m*F%ZN{tv#A1WT(u?QF%ZA$n_ddzyJDYv>YlZSqkr0)IMHfHw zb8B}uyY<_=e4cRK*o=D=`@7bFJa0QpOpa435c); zX$*d(>D!eyKo}1Iu8yvK8|J{m5~ycVmfy)MD0V+n$>+-=DFO77U`m<->1Ce`4~=H_fuKVbg`SBkGN;$ZqW_PuJ&2~IG-bh z5!W>Wix#9<@hg%l&oTuniHIiV>297XLBggp-4c@sFwR7;;n5mVW>_nH+5nBodDqC; zF>4O9{ZYfVaM-ihA2k)Ny_vch=N5xgD6zJ9=irQ{8SmQFOy2;i@dThnjcE5diEDwU zy`XVpasTW22M*Q?=d;)P4P2uL`6PQlI7>+5K-V^8m!w6DbQhE-Zy z9iQixT)iWIDyQ|!+ zA4+GkvcCD3*SF>P+wG;g%$sEv@tp5A+|?GZ20n^a5fG=g{^L)j8MVrdK}ek$c?Eb& z5NX@KS*1k+ATz2u`A>jngt3YC+5cGOGCkILTXM{R`RwhgKSdYq_knL;zAJk5n%*|e zo$eU$EQV5g7=^!c>6V1eUh1JWB~$YiQ{5%*%p#UX#!5z&x7$sM)hnM&=In=<;o-A~ z2k9STI%AmZgGc_d?lV)>UDp(#Yl|=0V;7>o+zab@av;^xJIubH(R@hpNH_r{T06RZ zXUbx6SgrEi&#q{zjdrG4MtV5b%%DLm`-QRB6LG(8_7>PyB$SeOk1NadnfG8~=5DY_ zL4_uNwvqVvMGb4k{H0mY$=55b#SSa{tYvv{1ML_P{!$l_UuVO|2iIDcsvUmNb#5PK z;iZQ^$-0vD{0%DdeBI)mJh0sLDz1qnu@wF;FaKg59P?x}m2oMQ_bc zjDM(ilJC5V#1Qa8N%65PFQK7Qyzbg6(H4IZ)cx9R7djT=qfeyPjkruRWCP#l+q=jX zxhV68fa))a7_JVmqPHpL`H*^ltb+1bg}P_24-^n0+&LZ4``5t1)yekokr>AoAv)Qm zKwr+)kRjmWo{SM{(`GC1V;thsxH3bW(nuU3fzge6m#ExjYQ&APw2z*UAXZSFH7zbgq9NWsCT2UE2r4(?r=Mm;Sb@HQ@^w&Sdhn@jpunHrc4t&>d4p zy7|^B?7PG)t;Dyw_XG7L`mH`Y0R;nsXK^wb#xE-JN^jyS$6F&u^FHJ)bzWlenEm#B z;Ooy%OIxs(lo@i@3*W;HvpX#`>I>lKac-s9X?CnD6U9{o>bwz ztm5VGeR&aUM9BHdU9K6guf=DAZkAuJf}8uCa83*L{l=WC-amUHK(fqC5qK|Di!TQ3 zny%2ph7fZA$8~DcI8eoOEP9A6C$9X`kHaRd{?ZJyl!aYxz#JMd!>P^f9d~E#XNny` z0m13+HD|wRr^ijdncEd#L{c>{%d5THK8o(<`@MZ4nAyH_RNj)#s5t&K< zv=%m{WU6?+#Tx1aoHg5gI-pH&nXy*D|4oe>5hbhF2Q@*j3vx2Dq}tn}dAVR?Uds z!~+D(Ynq<+vGg%c?;AT?zqw9DNNJ(kp2k(rm;IwD(I4S$+VIo??qUY>Sv+9*+~42& zG|seJ=>-1I?CrT{OE31fYH$izvoFUo=jPQOP;r7K{G>lW6?oa&2LmxSaTkmcU=Nw-lqsPlD&G}bWNFlp)$DFR z)KSpvPx=oS21XgUFT+HWGA}vi${sNOjY;SxI(w7%-<&}`yKWO9?b~(9Gp?Ng_pz3C zmWp%pFM7gItGeRAQ5uY5?ENj7i)P^mCg;{pH|5oTBsQ7UjD#^&z~s_?Y4=GEX$xNb0HZW1!L`8-|x57e*O^c9Bd`TX7eyM1*Vo< zDPI>~M}Lt^NLFI1$e-5dO<3KfM~S(%AxngVTvCUL?$xssuUp#2k~Ufg4>$RMG+%37 z#vTqcfKUX-cF1svT=I7jHKL&z7zaI^ra7~6StBM;=}N!r_O)8F;~<dCyBhyL_PqF*?WT9pJngQ??s_1v>lY;Q}A@^y=+&e_kQ z;R}VIcP!S6Pn*(zkC3(XrAB-x*g-5z{%+Ubr!TD(?uBi^n&&5DzQz$C-hOMCvy7E5 zn8*`55O7hvymJfOqXH!(t@jHv&<{7`gST||r`WOGl8 zFL*Y@BKF@>*t1RNnRYQhflofZ4fw(`zLo(|22HKH-Zmt2>N)=sRSxnd0{)*wcDq_A zf6jRVv>K%GJ=k@ILop_*K6ja znAXzF<+Zv2&X$TxcSag;6We<9V%*&wD)u~NX|$qYoKvb)glDam=f{` z;@ef^p@$c9>c#z~b!qR~tv@quh_Qup&AmT*GMYl`~@`0C7xz@@C)d@3_KH}BxZ zPtpJ{rm_9VS~SNx9Ufq6EZIPt#~9P$n^DB@N{5(lu5d;m^>M~$8rNf&p%F5<_LM5$ z@NI=rq{}1*EBt&1?)^gW;QS0l(m7E_f_cIBc6$ENxElK5Tgy{OFQk{*1J!4WQnds|FS?n}uLzabj$W+dC zad{PXaHEi>MAgZF1fZ118qdxveNbZJ9oGw#Mw64nT2D$~8dMcep}@3XN-)=o!wT3% zQ9ZKkLvA=Z6B0ZG=Zv+GNfTr;;}$>S95M z8-sSW7hcoJoqLKU-X;P|uKQIy=4R%4({v+beq(&fJ6TVC{9GLkSS6(hSF13U@_N0d(=jKKcC#8QakgsO_+m}JzTJ=BNbaISRqp8XKO-SC zw+7-8hne+~Cko>O)2mubV13UZo@tBB_{UF9;vGWg?<*C~>jMEv82gz5r<$?*7UrUe zqg1*?A_5~#!p_}$SxVtqkSD!lmFxK_hw?%mXhr|w(ZGqSISW)x6S{K7j3 z-9IJs3c$+D(i2;vva)O=+*&Mo{IsljU%f=2#<~uBI)HDl)<@s=@(*+7Ge~&$Puws$ zGWBYp8f&6hX3nMVSy_}Hh$uu~zQz(grD@w|k=ttHA6(LdBC$9Xru?CoeQN?VP#C&N z7_Fom1M7{OOAjA2BI8GNIY-?CcG4gCEfk5bF7BLYlO zhN_*sTxwu2dJejAXR*>H8OFnQ74PKooK$RkGBxpCRgOEn7PM&QyL79f| zrXY5Qa2v75!O-@{EV9+TF{9M)a$-5zN69DUS=1Nh6{?foLaY?dwp(iNUECBAg6ABf zw|Wm{vAVHdt2Y^FsSL6(=WF-ReRJhPDcCGosWwxN3E4_OJu`*CKG@QriN^P609pNj z(uKMDg}{xEm)x$OYuk`%ofV(OCc5+`;_jlQ$CM>y?L6+&rJUz*7EMCyS{rWfwb8dF zn!Z^BN#_+bUmrN2^!+2DqtYGYwv97qCSV*ylCJbS!|P1VgxHK&8_)^b${^gbpU{R3 z&dHsv9V1rr5Y&Zb96Q*xajB09z3n!A#uVAcA#iggMz{ycaLJmw>QQq2|1j~EL2)iY z+wh4&@Zb)?9fCU~xH~M11{Qah#ggEQyF+kaba72^x5XBBch~Qn_pSGPo~r2|_sreX zGc{G$OwV**+v2o2pUwrJDix2$yL`V+ar<#5T&*1*H>Xt)4FWp_gaO5rL z716wGcel%zQ?f)cvbcH^u`+k0Q~1jJA#d$cX7YV}GdA_*Ix=^KRcgp5II{*<{>kC? zeQ>MKwV-EC?mR<#{RO+8$XaLb*rf1W8ms&xziu} z{FxYLjzPybcM=9Zp^k5&m7Q+@k=(t&j+lO5j?D*w$1qUBOqQgiq%boe{tH3=l=syh zEJ+a;KE8j9wFZ`IG%c641I7eYlXw5}^<~sqn8{Cc`&(6;&UXliv_`7%e!&~oJTFh( z7OXdd;Qx^e@LZU2=w=4;P#Qkl*~q#pPzH0)E{t$82;9B_oGti$7yq-X)O7zfa{v7i z*@l&`*&A_+?&2~U#C!aFfr0KGAHVZqW$cciFSHhdfV3&X zqwzhQRl{+g<+DQ(WkkHi^F#A!lijX!ePdL1aPPmCxuMZxhU0%sWv{t57ki@1_D2eQ zBq^8y7c-V^>|x;w_lYNpN3tTVD?=|tyM80;R8V5s7u?^fij+}oI!8Hh*7*;IHG3sf z-pho`^kJ!rN4L~a`YU{W?JT4w`chTx(Tmw|v7!%k-hPH|?6qy-Hdy(XwBnet%J?mI zBA0D*lF3KYt4)3FuyUW);R;}1V|ZD#T{>@_>Fl5F$;_T7B7I6gk>GW%-{-dXTq68}HA}XZ?!u<0pVD!m;{PqlL+hi=wCUJKIJQ0Yb~IDmK2N#bTCb+k-=GO9!+?@XV6&4 zTkV4|NkqKp8#YE4DMPHwHHDA~%RE*Rn3KIlx?VVU;w`Q?)eCn42*>N5OTVjupEIP0 zy-X!7)`fc*s!&Q+0=f46Q;VT$UA|3=Jz>Mj(=hn% zE~-`T(x&7yCM>{qs`BxCyD!jCk#F&s;z;PgoswN* zTVkYy^6Q-7r?c~e^HoehOl_@{CHxF7qG!qh636<_V#?-sj5z5b7%Nl{PGu%X>c#gSVn+9$1 zhp4?wbpsT`rxMz9V?KZai&o_33$%0Qsjty&tTZ)P0N788;{#6-`=?s$2C8u5fOweq zd8+}bd~Z+ zH6@;}Hp{PqB9*1ANijCW3 z<}`(MjmdRsCd#)FM<{VAY)}n{p0#HlC?HOnmOU8kg=HouEqwPIQ~_CKC$;U^(r><9 zE$phB319wn*h^nAJ){WeEcTp_*$X!%ne?pBW%JAXaKp#bH;E$p4u#D+TBq@fqTRoH zRwB!@@rC^Obf3ZQInw7Tywg>|*(0QKZh^OGul*mKqo~^U4OpiTQTKUC1FC+I{RM_} zl&pZznpbduKDfsy=#oiK{JT%qLZH5Cb!V@R6lD!eA|tFrY;B6y7gpQ#(WUeF3l7D2 zE}z}*YThd)5RDSyffZ1hN<*>EPo;iS!4tA>6Z`_xFI3g4GZkJnSAcw<{$NMEd5Yej zr{vCgv#R@$^XrSC7wR}i_ZS0dD>$jnWu+=L1pyheF9G?lJuD6j6C`x6!P7XpYi4l9-H;y%rhK z{ei*~zMD}4IncEZ_ABCT*Pt-$&an1~hVd*{(KRUiB(>T_LB$bG2Y{tTcET4^9*2^O zt(yO;kI^pDgJ{YYe<7Hc*VE{SAnrHOdl8sBNv=^WDOJ$DP(K32@5NH~mqICrA^3KW z1$Zr^7wfX{Uu=4rnnh)7KBno0bP`Hu%=h3N4*n*b)zETmqpEX?Ra;cr9u|9}asMty z{JB`CM}-Tgyt}?I282O2z{V6i?Yfh8Y`5QLbaY5t-Ijoqx$4+8C(XTHu+L`9L8tbD zeRUtR^R#;-d#l4haOu}=>(@BloIqN_)aLqunw+Q1)lQ77l(cac!VD*tR1?kfkHmJt zAhJ0PSrw-s02q{M2vRB*HMZGdnIi!yt!fwx`Byt({B#BCTV;kq{pvN6&UG;!!jop$ zG{Hd>y6YQ{sV{ud1pS8^-*2(mN@8qF?*&>~L0)zZ>-a=f?Kobaefx+#8su3GB-i5Y z?V8L;NneZ?=;?s>RoZ>PGDh?i*N`lG4YavW|1}-pkHmtnrAK3#(o|~=%XW(EHUOR2 zLF&~aywUJ%5&8AodMqoBbi<9KT)yF<8PV&zLtR*?MF;B7+G4Ed9NP;n;{~QT%fRTEpSuBs1#)FfGkg zc4zMG!*N~p7i2+vm-^7f0!RK@qEQr&1YEVpCbVxiQ__Tf7a3c zNDim*$sUNSN|i(v2>+gy+-fu4iSF9-MU0mYr*~w-3)AP$%;9b6o}*vf&rG)UM|Xk4 zfF!XBBTSxx$}j9@mYN_ z-%`C0`IZrUaTQ&_&a#u3M`Bd2t#z(%+!5^+P!8^8Zh7kS5c#7k{eoP<_^2DP zHMciTLQ<@|{U4Hkp!8Yv3jNA(<9cE>(6VnIsp}catEz@P>F2p1ynd zwTgV_7j()wS|ZCYCyKP_rrbCqOWZ=nZvIsg+~@P-iu@sDTwIP@MyzACpTT%s4S@y? zY2u?hniTWD#@Ti{NRb}Rv)Icb z^jD|Q##*y4a0eP$~zdHs7YoN z4h!eopR1@PWvS0l{DyqXY^tFR;OoUv1z3?83zyJJXg0-<+$+k87UPT6uN!dklh^3w zYx{f!XW^-hT^y$3ySd(a5xa(}+Dg3*m&YO*oQ`J<0H-)S%tAZf>XgqEaxE?*_zjj-snE9S>C_Y>>Sj&+G;23pjR@ zhxmxiwwTb^vBp@(iEb6Lm*)=?w)c9*Ej)CV9t@Ti(PH}i(nWL7?0Y?QA|-_+_YF%o zg%foEk^dU!Gg<(*xt_)_gew6isz!mc`0H1ST16#mTq04Y*5QeIl|)X6>tk6({LlM}^1TrQVo) z{n}`g!E>1OO^eD-rKGuf#M1_OQ5O^3*+DrBrBM~HF|n`xT+(6ohq6sN8>&l2(O0_X zgO>9Km3FgtVzi6&usCludWuR7YZPu<%JsV_9dwktMwcc(c}5!=mu(O?t+U*vK1?kedJb% zAskJ21QTp=+d9=jpo3DjEnT}zx^AU=LyCMCq65wYU%;_I^eVB7HVY}q8tnzf7LI8x zTCQurPxtU|>O7P&zIX<&?0PlJ%rNBn$dJtjX29fO!P@n{{3U*c%%EzI&zl&$oaxkd zE5BYEkLZbBT|z*0x;XlF$`oEzlp#&~)DiiMvJH2oQWkfq(sLqv$TrO?z?|y%xBw}V z-Ou#%?Z$Q1d(c*0*&{8{-_=0(e?Nk1%U)=SXo9qt^cPBN^L0v?C3W#dQIgFpPtl%$ z@Ni!po1M7b6uygp&r&@@Z(t0CY{;v}4QAKTiBYW}G_*R8Z=on|8ai~#2>E%cy4@=>NHooFouTc5Jt8cRKLgrwlKv6Wf|4%57hlhG@D?J)AVD`AJ2Sf< zQflczt=cup~Hyn^t-dZ?JyjL+N^(*NLl~d7_Qyrv{|9@gsg^nswRwa(P!1l$(ujAVHgn# zZnZ-l2~-zW#%`*m(x0>0sQ&@rTAkC^M-wY3vsBxEwi&GX9^DXs>03e}0Y*2|@|o#s zZyp&=!uJ`aTXBpX_inhADuGnnYU%|11J^q93QgpgLj6nSWj;p#79n*;kbCjolW@RX zI6xXc@0HZjB4gZW8d=c^#nZtO#BKRwMLr?cUT|@hTv@&xDajCg!0BaPjuAxu#SsuY zMwIR@m1zzor0u6>$M}@m{{0ibS&#!C+gvRiI7`R zajn#BTJ$LQnbZAyKi8Smh!W>;1Qzc@Pyy0HGVs!F4$b7=o0a>--aQ?SX@Q-$ZClO# z@^ewkSa7_ZIf~mZtR}4~AQ|+{d{IH_x{(!#GXOC_&cEVUgi*Nsut9JcV{Ktpz^S_^&>kce zhfN#(C3;AD#&)&8pV`uq^6$J(46Iy&4%W|7d%#1ep2d5Ycpxdn92%19+GJ{R@vGx+ zU18KNX5K1SWJ(*g=O2D!sUf=#eyYN5#-fs{^OZTGQ;|PsM!#y8u5bh&s0O_7)YW!NX~p1%F+A3Y57baQ)%YOM?Pc%_^?+ubLyK zdPezYDxV{>add7p;U~flYboJnLcWzG%E<97MED*Czh0V7MqK+7yUCn%30v`W2u4D6 zswM?$GYFmN{BJwzKM=@3Jr}P-@;wbb_h1jpFI~bXjfRym%ItFcluqwavQ3q&r+1Uh zga`O9qkrF0D5T50yy3OV$=ANP0Qh~SZNxgW6Q115Gg z+icu-Gmm;DS${~t_^lT|DHTH#%{jX?$wQW(AAq!1t^>POGkeN?96%5Viz{>X59x6V zmRw_AauSxl$(E%K^$fmSl87p_XsyEO$d*A(Qn?w@pqkvJMnJ{~OUmej%RaD?Mclh+ z9?f7#8q%NQyw^3CKQ6epV>~#I$M|g2SvewRW1n z<7`XfpUUSU@RCFZF*OjJ+wk8<)~c6TE&7ijxeW;`$>+w%Ir8Z<+S_+}!p0=2^X z?}Bx~P5w^L?L){3pUwcQxUc07^c}*upb5cy+TC&2{Ep_o?dd)Z9ZmGZSG^VP^5-|O z%U&1xT!qWt+hnL+kUW|TA!EPw;b9WQ-F_EBIx`g zi+f++{QwFX;@j2b#$N1KbTT|=S`4+!#lK0&+txvnQX^((VTr^GVs}axAXv8IjdH| zg6-__+nCC;2SAhOU)LwKEDNV<&K7miKjUBeaK2zQkG*$TSp3s-*D@%pg9`uXtgK0f zcRvUb*xFYqAuGc_;mFe2j!`@7;t6S(69d8AxNZ;$N&AnEWkBaoA_fP0_Q#?b$HgxBII&w$n~jx-BsP!BarM?S12C0_|wG` zarAFuAE$pF$9>GV5gU&DwuqWptkOVH#mWInImP$O7Ns_Xz z=UB1gl6{JjN0}Uq&*N}E`;A96OD}XQ14(GLG?$FN%NW+0%Z79MmrNP>I_>19*ATKe zm}%Qan{xFLCXM#0dc2gxgIazbeCD+9EYY#TwjG<<*rvbFuWi|7JP9dm25L&Xh*{^kTh9L`WhqPh_j<4-k@P_4a%gbL-`r#Z3bUD zd1^FN0wjhGRq0HW5a8EX4N21B<7(?b(;$m7_<5)7ri$%~qgn;(*e{$1XWr&+-X#~a zwCRftnX>mR4ppF?_cWGgwEH`lZ##`{1sXWR;bEmm{v(%4}A zNoKjD6sXs`DMLUzBeCLU-<_eGqqWVLk#;++EnN#>h$auvvP*I37+w2FaBCkhQ&I~i z5EGIcD?7NBF8TO#DOdj$c%#LJlk`p6eIfN&y7m^8mS9THBC>(kbTwY6ie1Z)`kOXc z)*=mV5;1a)@J0E-XH8=x_t4918XX$B-tHsJtQ(n>>jfj?4N+FX=ur)WL4sp=y%YN@ zI*fI{)jq{RK&B{PPiO-Uta4irw&qyf7zs;;B5%p7O~uo0hG9(JXXE~iI7m)vPQIyg zc(zkSe7)r@c~sX}uc-8)CO7I6Do`KQ-ikaBi>GTP4m#!@u<159*9bA9R*xH>w|f{ABN?u2Cm;aa=*zd-H&b^ku6Ny63&G z|0LF({u}FbJ+T!ixg_3K_A^@3G9tRYZ=B=nz8GHCTw(w&uMOYr>R~s)1Cjrq;||vkI7{PB#@s9|_a^Lw?|8~UZ8Y(2+?)ku z+9^px?`_P;7rGMh_p>T&Z>Oe87Nf?zPlM@rb+eWx7wmBtz)(_c(Rvn)op#CF-`!kh zHWR)(I(S)TnIdyW&f5S>cneGGP{77~v>_9ENA16>Zi{pv7V;Seet*GNu%`%B0v%@q zv_%(dZEP?y{9Ef{5c)f-iY8^of%J5+g+R+vBWMOs89RW>{vo$?PDJZkUC-w+dy$5V zcfR+bOp&$((%O9-7d~_(-05_cC0QSbQZlABC3INCZX0{EcYMU@b5FwN|C54NwGkq~ z^NmD14aRNl;_#UvY6w+#x5t|-ykQXX{d&q!T}xU*Xu1bCFk4d+dZe3m)M}sYaoO`# z-LieUw&_5-{mPNhH^`;nVDONPEvc*j4wZe}x~$*!uxr~G0Z5^avKJ{78!oYo`aA>l zVVn4EXc=!l7(lIT(j%$}v6dFpbF z?~lW^7YKVo2s}4YmWM8e-I;8XJjz;v+rTfvkCE54<+r%n?lktZ66LwDYW*ugWoJGm z*NP5aZiUdyyD_!01jT(Ns588O0l&%M_gEfZyX+x_bB={oj@|iBy)8A$*5LA(HUB`J zC5h|QoPeLUPf-1W*#|vMd*iY5!)lmZMAEJ6UIxE=+(vKf z^BR^L+aQSBf&E+!!LgFsFeRoO`?Z2FTt|9tE9^=iMtD;w-M*8VWlXbJmyKQ0I>zyyZ zBU=UGdCEua*@u(6_e8;2*_q1A>{%95#D;G7npbiP;FB_ab9qLY4A0j947WWYHCIqW z%yXLnN|yGlZ&jJ#+uaK3dh*)ED!Z+2U7d)qgltIwzvo~M3|-AXQG=AN>b!w#0nQcF zzRV68)%|nt&s#I=CSKwJFSBDWR)d-M^e@%(qQX@vj2W)5EoI}tH-%lKci!;m_VHmZ z3!-za7v3IG);aB2*|KEqC9WCtTfquTXjM0+jShU(D6ssqS)qkZ?}pBAO5R_~9C?Jc zDRq;?OoD}#IXma-6Xr=Be9m9_l8l*{17q>4OwT*NwT}AWLk4ZKv|(IfLqn0?6p|@P zOdo;v^pG-m*w3BZ)|k9)oerhB@6C)P&&I7Sx@E&Ql+r1=sTDWsiMhi=ctI6>xYGH8 zR_D5Uu!?M1Ji`vX+K4I|%t10K;CVn5d){AS1%@l!b3(;+)GTQ%)qIo~q1lZQLKfrM zLzghyFAoj2WcRDVOi&RGEgH#cvi!`34x*LQ-fXp}RvAd8w+cw(W188evdeVNMlbE? zk=x*Wbd-m?56>_2cC6}_9upBa6dyXukE;b~Cb4kopWa;ThDSTX8Oepo49L~2m+_Me)MHMboH$)nHUoqyz>fRg?FsD1A=O~7Z0Cglg ziYgRkHokF_lNsI*)wULTQxKDRU;c+g_`9*411Yu2_j)?pDXoF~Bz6$LIl4KWx+>%+ z@WuxlBkZNkDaV0f@+t1_Q`~X(7&l;H-39Gz`T(R;j57uvV@AzFVLl3Sm!Pi&%l|9V z|BCXzBDqsjOIODmlN4UF%*WM$km>V449q)_5+m$sK&|#>c8yVy#~$JHFC72EF7j(x z=?mKb@MM+Qn-mcn;|gpk>XbI>kVle%jI~P%<%{RfVkCdI$Ch7^;e;g z9GNpM$__A$=gK9h1@pxNpGv1x-#7Z~UgPC! zz~$BJbW+FJW!-rHCwiv>U3#gDrE+`PwkDaY?EL7Owy)2+NM1(Wyl-hD-GUy?dwhS3 za2}7HiOjS(YY4x0)ai<$8gjs)PLJa-PqHqsEZ}$htE1oQ(`vK0Em!ptlx{pn90Tom=3r%@ZPw6-^QqqSP!gO zoX}p4Odv=!xQ5c{Ds3hG%5JgJu3Dvw+N>Sv3rg0d-*R8Mh1QQ*vsrhi7jx72Yy5V{ z6|f(v8#in0LdN{LN9E-MK3;1C{?3sM`-GSdBJ6M+c0x?J;>IHcMI+*#rarZMuHCvn zHL#pVTstOhJOVuk=$&AWscSsTzp%V2H=zca#RQoPqxAE}vsi|P#5ByYgDbbh;NUsD83j1_)rO2O^0%x)%ve&l9zg_ljXdar49f zdxLg#CN)05>nM%aD@Yn=Ra%42TKmij9YHn4*iJVw7CCip7m(+O3?iC<*Zr*)CT~@7&~YK6l;0M;ghs}FAdXK4L3b49 zanY+^+U!lBq8z=CtQH*eC^EimtFhWc3m)&ELt}}{@u|WbC-VS5y?!K*q$ARY{|G*M zm;x4>?ut4F^&L{bs}0_KqPJ5?RomhO7bwNVG{yWNJ*XnT?k>S|#PY+yS+2crMNMKG z%6BTM03kk#(UhC^)*L^ij+%zQ^LhOBIEGDw6ET)|QJu<##uJw;8v}9UWvLP(7GB-8xB-ykhK@Nm-Fi7(qU0tU)?m@}w7n-)xJgzH&rHBH@HC1b9W^XeX zui_b5gm@OuXR}hubT&h}8A^2d51WIDEdGv~0BY4QPGWqE3$77E6U>FlrfW4)3eiOm zb;u)wow?eF}QK zL{%l+=0k+I{yy$K@*28j5RKZa5GH(>I5PAtKLPD>q2bP&8To_)n8~xlpZ)$!FI@Uo z0aGX9%QDsYTV60Ly`IF6rHg1(5D`ZT1+5{HuWLk*5P*zLQmbj*U499JSSbLiKA~<#FV44^ zaLY)n8qbneg0x$)Tr2*ymE!6xImk-J6&Ej+qq6Q)uX{oIsb!zn1GC`g|@uec2_bHqBR8 z@CMiyF;$-J)&y?|Ug(U{bU9481&jSn?e7~pQ&DK)jT`GQ9=6>)u#!%bt_(-IY^Vr6 z*SAj_MRA`+If*Nf9Z74l^_% zDjpSgBxbVdmln&|R;g>9h1q@YFWEd_MbX%n+gPk-F<#DtACs5RS1(Gyqenv?j>rD8kwmU|%yf2LXDOn7b z%l?i{G!VVrT%p;8_aUkWN?Ld$)cwRCYVy`zjPUXqu1RcZ3cgJm;qjjtJm0eM^H0?0 zjLnq^wB(x^KOKfC-1dawOUK07GNi*JR-dT9pyBG_(&P1W9B+r7nJIQk-Zf?WvKluP z*G6I=X4C3CUT`_^m9$0}T#gZygPEsjDou=4wY`Qs-akcm$O^?lPY_;Ut2~R{54hWy zz7pu%@wL1=`Y;dQ=9V(J2AD77#_(I9)izLAjmNlw7bt0#wwB*|(MD-tSaW;f4)@0j zhnPsTgRR`bD0iXXHKu3#82cuN46TA5sd)P9Czo-_b?auo8~f|)>XJ-n zFBd)}4lhf~P$9wYEKW@PKtIi2={+ut7DgThO&QvwBM%~?fTGItO#{3%Y>^Z394ihH zY;l6to%vL!P_O|lt0zkfPX^ga{kfrbjs+ZrwT2~}E6uyoJ7?) z_QZ+zZ;ziw!3Uj@6Mc!!9C_d^$ADSU=@uj(kKk2TIggJyj^vhUMr%uPhgB~KkGl#C zK@4!0<2wx)JBEujdEx1~;SH=FQ=}NM$!}C2CRB`*cLxiOj7K z#0%P^_(WV<2tT~XDNH&rvjP-CNdiW1>hlY6Hybt9$%2xY?5(O@5EJZZRV1LTKeeF4K)W1HsFGk-|1O>jjI_E;F8eK8tv?tctO#Yt3 zLz#_Xm(06FQXjvw-nY2#=wndWtyL%N(=Ouo{#c3#MOJzIzCM){c38iC>-qZC5DI$A z4ZlH}a_p@%_JNCcjw+RJf|E_Sf<%A5To`j85ooiB+Ca1lMalR-2`UI^b{gRDX1m}3 zH-`)ry}LC!ESLh!nF8#Y0zgawwoJw`Y`Z|V4v`gq?}+CMg2!#paj^`>oQ4ih_NS=5 z$(43HcFwrnuZb22LGol={{PkGNMNhpY=QtlJcDRJ-)up*7%pdHV)Ngoopa~4Lipl#{{q-l? z7eo{4a{the)Zwlh!S;v^uv~)M(VRo;9dkXR(SxKt0C*s!{4^M%9V$Nm{sR zYTf9p#WJS|3&|L6_pTD}RbU5Tii-t~&wI2_QMagZ@J6faRUX^vlnZyr7C)qBMuDyg z{3vVfh;L<2?P+dw)M`0hR+A$Al`r(hD($Z?;`!U@>o#k4;LagF3KhURl(AcZV$Hcp z^QHXi7ZWmlTVLz0T~&`CyTK6p7otDJvKapP7wltH9?l~1&9=yby7=?n@%P_@bqL?H zys0F!p+Y+bt!$xh2)nemA-)+RU;3h{H%HWwf@vEpEt?nwv4|@3y7kBh490wn8(n%^ z_4%(jo&)P_)1Ct`MJ{RFcF=#ziwAGr=gM?O@OkmJDcC4yYn2oJYSOCH&ZA>F3g1`(7b}U@CtsXNiO3)k?w~2WQ8XL*TouiU1aUd->#Q z&MU@1zNa7ng1>fU7R>hrXJHpwvvc&%9E~dR%s#h;`bz7G;>Z;Cq1ugvnEarN+~S26 zXiqW3gcVgiveYxq#$oR#204RFTqGyk@t4nRn{1I+kx|hQsMOh)si+!119RUfNpN4i z{V6S4Ys`pBJZDiMIe3bzqYvZ(QsU-+@NMBNN*nefl?L}c81<3lJTibrIM_f;m}aBp z$C16FqJp3i09ah(FsE(+s7;fmqo>DLzW4>X^2nh zodXH0Pc7&!Y3SH4DTV*->XhtZL;fjQ;yKz!j2NV+H^{)YX-`&UQbFSwY*#^NJ|Z`) z8}aYFz+rI1@cA|$lIIROVvxdO5d#~D8FinSJHUjf(@{)btl-tM@MLhzV^TIQy9QZ` zv*D$=r*3aIf%E3`D_u#U`G^#aC@6;8{D>38N;Sp3vl}r!PNx!*quPQCDj@fs+DLn( z{4bd+Lx?~F>3>spsQ>-yc9-yx0`;Tb-aD)$NRSnF(kHFu5AQ!#-pum3IWC$treLj0 z-bq;W$!7_KbIUg*!qf9VFq}ss=cJtrL?f>tyjMDsf$K{j0n6 z;|p?ky^PKBkJrS)$YnUlM5GHgG${YgESj7&9SYJ)KzP<@&vH)9y0q%D{B}#Z`xHRw zEQW0Gq3@J=rVP%p+&nAUtUVMn)0)~fRrPTS&b!a4-R^@kn!Y4sEtXf3)=hEr`7K$3 zukXm=0AIA=rcz;rz_zyeNL*3&nEEE>r7TR6kZlHA7Du=mjpI{QwY19%iDmmkq`c_i zDkonrLvcxt>B)~v#4j4>U(fNG*yS|I(JT^rofg#;?!IteT0a0Beabg+SJrGDKe1gq zVTVSqm%_xBlvZaMxn3LD%7-+-M+QqT%UW#4ZhOC4avYBG@*I8Y`}QJuI%uW7N|Eag zkoODqFnwIeNZHXxDD_}yBIl6DU&KN|SiWCUkRTIiADhfrx}-m~vJ<6$-bP)#ucb{a z3GfgpXPcDg zGJNyiqei0h+dQ$WCR9>X78gM`b`GJWg-$<$$2r%(owXWU&Z3b>*NL?}l_{5U`U`?l z7se#cNC(5vJ5o+~%EM$w)zNE1_8r=P(Bu+^PJ8-4H*K&JK8(Q082<1(?yn>yt-m=@ z3as&h-h)c;1InSJef7}t^aj$WHBPTj*|C=kwq(LkpYRNe8DWKVAr-Li)3OUtDh~JV z5m)*|Y&ch0yhQpPt38QEWFKC3>@pPLW%(^L&KU=@yO5PmuP@DI z_j&sjy2~p5a(;WnWt(Kq8*qKk>2?g*;%O)^wHHD>fXyeZNct$eHkYq>j<{fSRpnHP zs8OhP$b|*+-k#)UrNQ>d6e&eR)SQBJ0xHVh4<3BbMh5C&!%M&M3jLj>AUE-gui5>` zy@EoW~GQ=YhY;tx{QrV$s;8cBQ>yRVTL0f*ZMx)G&*`dR14;b~ABF zPo5#-N-A2I!arTZzmKW^t|jD{E5SDEnOooWN zuE?*FE6XzqYu&hlKT{g;lxaMW6$ugETEtMYyYq^k)2=6K?e4&T+b zaBiDx@hltj=8RlI(6m$sJz}uI!Zi$NJ+iSc%d)CgA)!rJXqkO_qC&Z9kUviwRCZF+ zO-|=$nMh??BGUSpKA@U7Vwni2kEp0cV@=Rr(hH7^4>s*3?u|^dlwfI~@<##~`Kwom zO(H{rhD7u^?O<$)yN;b*dlDl(1+X+OM~IiB%d36;5TsUSb>IelI8#;BMn`mRd)NL_ z?FKh0_7EbGQ^RqE54Vrm~Zmr=%|vk&>9 zCL`k0s!9z{HQDrT5@UItX`(v+Xl z3Q*Wh%S!#^z5+%S36*o@b-5iE)iA#`P99?%hvLM~A=(^i6Vn}l-B7pIT5C&7?e{U$ z(37xL_idI_;k_;B)-S_-4|5y-EN$$HF=&~~DxjuJp}p&jKTs@J_dIJaJjHc3lCq-u zXg595MhsD3iu)Nm+g^;XNi;yzKj+r>{>4E%=Z+D^M|gPmn)K-n=Tzn%j!EQ3qJ))hhW!5fzn$HD3>YS9!DdovMAd3cu6VO*-X{ zOi%azt5Lb+BH?Kzy9E$}4`6oBm6htJJr$4ay+1S+akgMBm+?UAmoV=Q-PJr_uQ~M8 zWuF#=QC|L^C)Gi7VSJwdhd7OXxs)><1+xd`Uc)ZyXt*7mcV<1Qy@ngZxwOh_xa$E{w&eYD9l*r2G#dKwKh@?!b+L>%iH58NAncb zo$zi?i+0JRWAq1_6Ew7gdwqpS6#tT>hh-b>3SC4 zkgDd+S_@KKicEyWsudQbBr=QmR85=5Z!f~y>-W*q*of)2=*!=~dVV#9}#oVwctN<=v{xGb# zJ2)8o&3!+JBer#P#Nd2ZKhK_lqne5jGLm}lj+z0gEAgdr!`sULT7VYr7V=X_#0?+M z1RVJNylAL|r*JYNkXwpq8-KgyATaA^!Dk6`$>Qd8(aA#H3?6fg!g<7$r7ZU38=9Ti z&$6$19_&J!lT@PL>^#HLN-t1`EV*339ZP=}h5x{D4KI6eowBYM1B+C)mhQhYHsOg< z%ANk4Del=#^py}bivENMk+mTd>h(Et4dHq>>s9pQw!qIj#&+i*JteMMKf9wU3&qe* zm7TSxpo}JN5hY7KTLpIhgb#Mc8Z&Ux@(gM4w7OQa)l@WXZ=%Bq7`d#Hu+%O~g(Q%r z-$CgZt{Zd1OcK8HVXj5WQ66^~M1YX$PDg32!N2${9w}TMCgXY#Y%{AHV8|oQ1I9Qa zzIm;f+Yx~RRcWJoOp%gdZT)IzoMjE;74&1c&DFI9*g-&;*Y5g&BS4mT%_Vy4AUc(2G* z=J*Nc_<$95s0{U}L~9`Wd@M|aGB+*Aw$uOcno{;B`-#i771DD;Sc{|o{Hi7@A{bm? zq#m)7Kfbe3CS%$FhhdiM;)W-Ns=#0WJ35{$d2A2=|3pKp2Ofxq+_Qy@kFD~ApWn1l zlYTiuHf->C17X$YJDPIBGuPf+2-#*G9i;$a)iNx3Viv|G%JtSVWjMgGl4&4$Viehw z*);sQ?^7pMdHz^NcAhXw4)ae5Nglqf)O^6Ll)b9-<*4i!pSa`}O8);?d&{u6x-DHa z1PCDncMtCFp5RV!hv4pBSc1E|yA>{lLvZ&L4u!kBbCR#`{&x56+ui$|bDyVvylbwf zYR!6w&b7vx!+{g(g7qg<~CF- znIEgTHQ0=USK>8Q-(6I>p=NMiCfG&>)z)xD_rWv0XyUJBoQo>?G+^-wNngUja6+AexIE>}xCMoYOTD}9>bb-Ak{J~`$Bf~cj zn!3s5S(Ta>UOW$5dv5B0Ps!01fRuxAMW8~BX5i)1}EjmV&OKHT{0Pf`>1|u!?>Q^Fo&+2 zS-vJqi#l`JLDfChw@c|D!rLINFHhCi)L3_`%Ulhv>i45>@Z|)QTKC=(F(>OX$b9u6 zx88OE=s{je7=Pd=6eNAj*8f2e1unxB4mwMQOlM&!{C`kjl-V< zmY$2hefmpPj?hV}hu=bnE!d(C^XPC)JbjK})w(yNh^W-%+Y959Yc;~ZD z+%v2?nf24`dEK|c_95W}SDU}{a0T(EYsc`1X`fcU>po2_N~P`r46s|Pqahs4}mTKGjXXrCEVBBcwGD8U2`>0%S}xcjXM01PpH`5X$>8B5P1$L>);MR4`U?Fg zZ7qa57B>5PpY1(k$H*p6n>V0c=fQDa@MEUxb z4perNhwU98C`nw1?VX}`o$e4p$TyA*6NfTE9W^nL!DhB|m(C-v^(&W7=?c+iP0M~% zH2b*%1Cluf3;U}O%NpF(Qp4wT$JSrLBiM&7}h%w{q+@1%K8r zamm*ME(o3osbghzSE;Hp?R!=hrdKwo->MK(gOA@7CsrJ`$9?ZCy)RqKc38;38 z;n_^f=yVS3g6DnGo0jtCsKuUGrw;i_4aREG(#=+i zb$opIQc50lcH&rVM0=(edhpGRx-uYc;o+PgK?+}sR`gUxG+bFU^4)V-t(ef}Vvdnl zQ{d(~$1Er|t&XB%K;snFn8(nKI%2}Ak=5#1bs!Fletn&nW>{WumqyxbkT_2>-sxlm zcLOZXX+_Ut3jfyIuH7E; z`?XJg>eW_WIgt{oM+Ddu%F==-HlL(nDYRqy{2)Z6Rt2yVnb@I56|(Ll$!3}PU%pRx zioO%PXD{rnDMi%T)!3ckTl9a$cn-S3&!Ezd`OrTocXAlm02azsYXiDy$cFYwhm2W= zKPBEu4rSfOPRSZVps#MupQsnR22YKTngnu?(du}V-{-rhga_zx%QPe#oBE)65Gb&_ z4gK81hvy5%6>jw%ZqMC|>@t_jF1|W=1AX!;%JdLln`Q=C$QDW!H3tN46D>VMaZ{RyoJ4T0XvS32SCRXxRt_0_ST#lm^^q z6C16{k)zQprxH@}-~|9b`2#&?^}f`KF@(a!u1b~T|H_F3$!MBfS?RTfnRmzxO$dDr zsrJvWxIUg0zgdkXn)B{7$!Tu&dK0`>P0RFZpz& zc*6Tw#vkYdd*Gm>oTn0=VhQV$q3tOxU9?TE*ZB3farcK?HRCW29!DC7D4C}{SCT0j zGm+(YXv#lANw8D6iQhd7hDTgv;5kOM=d_hGr$Z3OSFp%i5mx(@?z#DmS9;Ee=VYFA z9x5$bUw-DNeUf8i7)X6rHLFZUPdE0{wyb)o=eTii^y_@2#l^GQJcCsHY2zNEz5!R! z(Ct#${Ft+KjrQ0D&>}UZ*Y;Yc)dV){BVrwXC1s_qiHZd=?o*WUWt#B;9a_+fpWZAUbBkf6wGt?XYmU)80y}!uH~YtY@lyG~V3(Q8Tspi^hdj zVUe$)_`nC`o%&1wg@CrCp9kEG)+0?X0{wmReuaQfRdAc$-F8$xiqH9S2DTS`=R9y5 zm%e$(r>695EN@Ebe&^WoVaH}YJutuUV(i88!L;*Cj`82hwJAR<(IJ8KiC_W8q*!y<;*he>i>^g;%|0+T-MuGkEX?_>yJVA9VD0#{IugUVO%o(GL0 zL*xy4l9~yk;u%nLz~{_o)8?K`U4$A!(!4Ab-UdmkboPrqKO;ic(#Vvdb0^0kQsPdX zr)kA9F;cR*Nmy?ROTgt;?*;0sQi`ZPKh{866`?e4TYQm$N2MU0_UG#sgT>ui)B&)~ zSnK3*)WWP>tJ8^A$G)p`RpBgJUJ+$t#M>3_pKa4}Qzf!3=US~L_*EEIT7~I|2RmP# zbd=e2W-I_@=ICW}u}s?q9$FqA3N3}R3|vr!uTcTL)rh@_4{BYr!VlJqsP)c%1U8i3 z*$2OJpaX<9J+ibaf6NO$hv+N&V9{LrDHj-9M!s{zze0bQ*H596C>XACM;Nji1bFX~qkWD>mnAGZ1O@Wk29z&=!I&V@s1wBA+Z3 z4|XR2rFfeO6N6Pm(wt0o9U@dZKgc&!p_mXQdJY`XB8x9GVhV|yEoHB3lwe(v~LhJeM`h~JQ zM%B|fHwr5S-)n_%h#J)>@ z*3wHH0e&Goy{0ju?2$8%Rl14ju+pexLJPT#09lhCb`(6d_I-E!DW}rJ(1|=Al3wv! zbQNLR;;&znE3|ECJ73qn8R%^bNgC3Iz2;!uA=^qlAhi(ONM4hWcdXxQZ9HB7HmU{d~B3hBV)j|{Vrx_XQnhE4Zc^V0w)gPva zz>)y1fqBo)9!ABp6VM3XFwrRv^yxv!@fZ#d>oG$&R2Hgd!P_OWrl%Mu0D)_)Q{Us= zT$|?$dai8rEg_(3=iWYEew48po938MV7lOZjF$rUYlyx^eEtWAk(GDj}=+RBnFf5sP+-o~F)bm2ml@Va&{O#Zh_6)e|mO zX}`4{yKPQ8L49H8_l)OvqJ{ZK8E@v5t`}qowRTi_VkG;6s*|foG>K;!D`t6l5~y)1 zu6`7QHJO6ZT<-Y{0K>!*^qtD_&PWurAK=jXP!~=ZLh=mBjU4qL=jyxoqm=hx+;Uhf zYsm|(m{$TiR`IFJ^Mx6aXutS#4>z`p9d2>&LDm2QvaGo!9tM>LECHJOyMpS#DwOo` z?@~_*%s#|q)ilW^9{#K|d~_odb=&ovrzg^@ZQ5E(OEI$__l`m!O*7I~rCKxJr|Fcg zug}sI;yvYL%o%)`sQ1;TEOp*hct@U_Hd8cYJ*p~(UQBDjUG8Fvon|o%Y)>t^+8#(1 zjon?JJkuxYD=3+EuAZzV9Ufzkcoe8Ha@f3Ytjp}OxyZu1eg+$lcthJp ze&9-+w!a*uWX%lFHubX2rCP^IdeoWx059^Q9isYjXrG9GiFm}fD|Pl~8x*K9q)$IT z{QWpuopS`f`zubnZOeg(F*p#ocV*Th`kqV~6|O{!t4)Tu73d>cFc4$pQQ4)4ciswCxEp_z}C?g!oLfBK?GBEX86_H_zO+poA!Ap2w zeKFB7zg^{X)E4s{(v|OzYhy@uhR+FF!;>MZe32;yRVN8GkV% zm?MMd7jr${(GlW1Px(NLH-+C(ELqIG+32U71>cF8aUpwG^{M;X$djtbto+*#;Lg=W zPrF-4wpo{ImuqqJ#iKQClj<|G%uIpkt2l1nY9=0>3A2)U;1DzSNS+2y+H7-b;58}G zUMbbYoDxi`ARVu6zyjHRXgv|KXp$j5uNpmm&2H&m!kM>=%(oF}5S&I|**r4f?0>jk zA~DY(Uc7gC!OadHUw+e0BEUH-^wjsG;r?W~aB?>EMA9K|q2&VNfVgwrU%uMbzEtbS zRQa5W{qlij0`vc$kFTKMpG_N}U=%F{SpL2X)2OF}5|m5*kyuwMDF%y}o4yeC3ze!$ zMiW)?;h@z)K`tkH>>AJgq+r{-b?m7w6POeMt>mnD-~5Ymm8`_!IwcP^+6n1x%~F24 zM6<$w4uVd`3wM2rUm5ijje_yvVH_X*Db-~@6ZTRa_j2h6(Ez0G-(2Z`phq_oVd7c- zUYFk}6p>NVzE*W(PGW1Yy0LC~JZXM?@-84Td!o9cD7`4H?}ei_AM#MiZx|M<>zyHY zywK-KZ#ftI@?z*?`pC_Vy<{08b$sv8@DL2O0}9>%K|sF06)ZjO6pm%WSmLs?VQ|uC za#m;rH%>mW*--1xGDJ_|XN&3O`V#$z>9wvS{buEj7q9Yj=ig>7F~I)j?dLbp#8g%9 zUI8gFpXcAVFE3W`Jx-50WIisRbB(L>=x=)^UaJ1z0C3|tyK z=3%!en+^;jk^X{RO(zE^CTdh{C4&id2sx?P4)#c>!0_ee_CQ}k8V}rEg)=8`Y7_~B zzZtA3ageJ&b$0G+`CU6 z0cyY2`(V^*>8Oz!OOH%X>j$ofXJ7&_DXhC`v*M#Ued9VU;;Rzg!Cabs5AGq|x*Tmc zxGbA*qvfm$8v`2t2UzVD95eAKG~Id^`a#Akw?9jfaFdYJ{A_$SsN#d&d{$;|f7<=7 z_(j6GPIZ(Cic+LR#QY_fE3+PCN5Lba&VwSKgfjDfMEMt-#qF;9&N-gj zW1wQ|DKYz`eSN5l9D+iMLmQ#CW5s&LLnEo&mhiB!>avUVkLUXANT=&1-!J|z3+f+(CL`eHyXDtk zw;Q-ToJ~1Dhd^P~-lBmVHz4%|y(mJYOm+9nnQO~Vc79LoUns*JGbxAB=Zz&jY-jVDBEFFtLON0{0FKd!_)Nz_EolVhfxtBqe$4eFCgP! zGEW=0N8EUeQ9E}A2`3tLT(v5n+W1PQ@e2MxPdL` z5P0$Af1x_8PNQGwmH2-S1d{dtiom2yV3EHUovXIZTa+LDzqo5$;|cnqW1@_lp-EC8 zgiKG%o%A|rx@=9#{W2^q``Q~JMB!t6;dw3=3+)#Rm7>!~lFc^ppCnYRD?GSMB=O4N zV;IQgJiq3jFNfE;86to;9+gpHFZ^f}h>nhkj>(1yG3PmLYB7QcE#&v}f={Y@Q*YDu zq1D4wa*eYWW%fKr&%?Oq%|@PnG?aA#hKyq`5cFoOE7wYTk3hFv4lzDH{V&*ILsFv! z2{<5~7q0$qf~%wbFej#CzU%S9|DrzpC+N%d`llrY6oT*1g06osG;O<5{^@;yB97ox zmBH8zSD6d>g+>To8O2)i~=nNTtmS+s<^7ogFjH*RPZHmDlYW$E+-q^wg7D&bkSCo z`GSp(h|ES=e%Otgf_A-6O*SuoQN}ZOR?o5XCePFMmA{-&K~ji1I$ja(CwnD|QrM&C zpQya4PY-Jaf6i&%V+wdw|JO4s172|bp#u3yQd{PqRJ8v^1%c2PWY%bAX>6?^Y8c(m z$HM8Wr2{tL0rT+QG`RrxD4}75Y~?fLp{}8vH}Mkd8&0g8|2x6wzZzU{bz>B~6&kZU z5BsRS9J6UC;lVAK-}|m1Gto6Ex4YCWaG3JI{#3Bsv6@bzmFhIpCpqBu*Ns7Xi)l24 z=~?DNx7zXomzG;)F=uMPePa90RC8~X68++Y&w1wlIsSw4Z+|Dq+E>upwo)LBF*nelQ(MXYRVEo>^Bg)j_xY9=sL;GqsIKJ3)L?1k+ zGtmwq^xgcIl92xaWS{+&G$M;Ehfe-8u-K}hz;si8%*I+7(CMaro@AB%vIoabyXdT- zYYP+<*Z!@Qc?JK}O53yVQx*2-JojAxUhDqEj9d23J~q~Jhc8j_6&KZldBUOXx~i^; zx&66r!HbkP>#GcE^SRZnGTOWCGZS%VS&KXbMspb~127$I+VfHPOCAgN{0&3oqfAE} zk>eB~X%?%_$1b;`SIFdRpqKdunX+t)g!M}zNy4p-Ch^*FxmQ>gzsA2V^#3&Y>go1} z4oYS@inM>w(YaE)Acqo?cjhp&n*-8fuVQM~G6ds4GEk63NY@ntzc5=MP0_?Pd zU=KIGJjR9cwp-{;1d^)c?thb({6|Reh%(*Wxml0xma+*;C~d8oSYun$kH%qUHNG>S zgL^c&kr|4a&6L8>oVVG+#Xn#xLN~s3o^g&hAi}N7(nofxXG(YDX|kK==1VX~e91-> zZ_H@M(XU+P`=VNEf2^NNk2hS?I-dv&OmoE_Z~f7pd;l1^lAwJhockvD==ECr-e)uo z((Oz1FUKo)ysjx6WrS1K>#K z2KJ~#<1N$0nvEKJ;0wP-tcRL$7G|m)7xrK44JdaI#oq=M9Toa-wk$7?_;URax#sqBnEe24Rz{keb%jxGMt6bNVW$?1iKc&DL;mE$vQsCs| zGjcV(!FNp-{V`1P@y%gwLENY`F_Ja#R}XZ((z zgjw;|+n)|^*#*!yd?aRD-7(HHW%hnz68!=Moo4oM9O&2hT+9?3ICO@WpMGhsvYBQT ziS}@dHz)J&d!GGjaQKD;iTjq4fsI|T6Y(~q9m#ne!|06A_PlBRDZ3kX=jL6s@_LEn z9bryKDFrUx)HW)?8jf1Vy)C6|@)=((OM^Vzy?1nTL5=)EWRp+()p%{zZSayqTiJ^2x#kEdW?$@7&v z8aoZN__w%6wIq`$=V`cpZC!fZvVOMhA|lvq_FFWuRoHaHcB#}bQ>>zR&ML07sz32C zEjz?OD03QFYt4XM{<{7F;Vs{pOI2~Q=nUU;39Zvh?K%CTd;93(t=YkJa*KM?@GhH* zdC{2VCv)f0Q@MjJ6Wqu-Uzs-Lvw^vPaU-)%R}!qG-h{_?nSRf9F~ZCK#a1f$;f}pxvPQs3NtVe-*1>elm=VQR*Qb2A^6m&TH6}sMoNRxsE4$nq)Vg-8$!vez+JsHlj(7X{wf{;4JYd z)Wee6SQU-RlU-l{-A5%OI8=%L=PW0JVB~FspphLhv7?|=&%3Z_jO6ipAo zsrK+uhe_-fBCx*O;MqRM(MGIwBYgFb4YI!CquVKsKR>Xm%qw}mZ!%tt!ui#U{668h zgE73Ydz3L)0SVwpFyn<6v#xBn%*`F`*463VZHIkGP)C1T{BKY5 z`+{r72mawN>b!wVHW?w^aO5#DH@K7Lfp;|Z1uNYreqmdSC$ru1qythj?V+_6Wop)q zs_`cigzEfnnchTq8QFJ{+5bNBGNY_~CA2#(us(1~Fn-w`3Mq1y zX0nL5gUXztcos$H{o)mokz?H;d$kHeQIMiae;1P<9YfOtw-qNwWXNd9>r#@uC=5rz zpD_8gUnG)f1G?a3Q+-?G7r6*XAV-(C*A2aput1|W8w+s9qSP~?a5!Pc23rU}tv?wv zP97G%alp)GEP!BiZB>{URV!xm>j;V@y~T++tS*#j;EDj?8Z?2iE>m#xecq`BAi>O* zOSmkJK%@JM#_u!FDF3HREkXZ*&ynYR!tNjC@JYOoDq7!0MXbJ0;}&(N&NdA^8Ee)W z{rCw))lkt4Gb)?YL*4K_^)o_o2%9jV@I3{tvqJek!$1vxfDi`d*C&-Dd{6`3=cxVT za9K-s=Q)<9*y0ue=EoKbWF(ytwv`{N`xGNpNG9t=9%;Q5Mj)LT=G%>H3=X^?i=|5k zZ3I6$Vazp3%Vi~dE02?$C6>)=4A=)#ZFzM&H@DLdK7XC7bvW#&lPut3qwyS#Qjpos6WGcgw1q!~E z1Lf9hJYaE{$AiwFakA}pl9oix!#l)Acj0oCqK!X{B$d~M5)pmsh&(l3CA(k8AW~F% zA-~;C(%^Xa-2K76^&@~1X30fl-UVH&7(v5*Hw0lZMY$0NNHn`ASP`3(Lxp; zAWvfLCD$X$aFns45%&Zxw5MaRBMf-7H?Q9w55Gs_!RD>*_VOd9dvu5GY6;JsaUBYY^kPF z6=8^4P_}vf4B&j=k``5udva21R-pD*TMB`ecE?s#M8NB+M0?fi{oMq_=k>z>y3^N( z46}OD8mE-#rj;N6NP>n9KYe@m`B<{QCz7IKG zk|s5t)Mi{+2NPqpDJ6H(-){01{PF<7wJ?7!j?cve-N^SubSBY!`$kaU0`F#6L#w^2 zfGbdd<_L8q&T69P7ht>jXU1uB(gM2@5Gi|JjYOqQYap$nkkJ`R8%vfi2XsGv9M*)xT+H;by-t>#_5ir8nIV?Fu`C z}z}o0|N5Rf6{keOJCb_b}H8r~DT-h#mU*L$~{etubYZ_uChm4c(8G`0RP`?c}er z7^exBavAE=RQ7(8w*{`Zn~iB@iDH2R&QL%@f(!Yhn8ga+Vq#MBd(gn{;OpD`5-qHT zV*IR%jn>}!dQ1SFX8T*(T49NqvRpu*noiYZV^5C$rJA|#Sm{oNrJ|bB7*nGTQo+Su z%;M)_5eNw=d=hpeFLZUK5R+(A5Pra&Su1B>9ezt*bH`KYFWHs!;HmDjS0_nZ)4i{ul?};q+g;H zN52!P}CxGxiFZX=w{@-di{oJ?MF-DcC2QFLfdM%eC~$P5lEj(w;51^({y12n$R;;jI|$g&pS zC;>5q4Og2a`+S-OTkTm=mTSFlO&NNLFKcxoK;DX1CKzxB1Uy#lEAR_oDd21ZkXYu} zbXLR{)j1332TN8*+I@dWRGnR^@H=pnDezR%c>i2b8ShCNW_W$A&6#>sxw19tO}s5Q zIEXJ!zKbUVAOIP}%&Z%wN^gtk2L+ox}}G_2ucm2CxW4 zSuW+3JPrO#9c3tY^Z&SAgd!AKK-$AFxLJ%6xR05yWKgZMo?~$T z{?RFf-zocH?G(Y@71>*;n`h}tV*clRf0Qw0){1n&&L%o-qb1Ji4B)V~l4!l0shd7^ z=iDsp?q`OUUzOb_-k|Ff&s93(+p&;?Vf&)BQ#AwHi!c|L4_S5KBJ<#TFEUVi&PuIo z8YVW_u6p?^yWz!hA=m6v0EF;?5Wpu433d*x%gr#`@GMV7y}H$DOJ2gwO)lRw3Z3AK zZ7lAcQ$?Pra{-`TuWm_*UE8ehg9-=|@xc|9It+;xri2jcyn`SdmF;s{k<*DYb+bF0 zUTSp}b?9}viBOyI>P(G3zieNlbIZ5Q@ih?*xv_M;OA~b>Tu$KkJ;(e-rv;dE15{{E zVfO{=ClvFR7iG}(=O_?eip8a|kZYycZUXOZ>t}|Sjs!s`JCE@hw+^f6hYq)Xdak6V zDmCT@t`_1-TzsXCe7voE2+Baj=p87{U~Dri7jFx|J@i^@8=-Oy-TrDoWc;|BzY*d> z>3)-cJYU{^{3M}>OK-b1Z++$1H>avza99%cGesE}-i_j9pmv1y1cY71$gFfEt-{@M z+i9t1RxLQu9w?!CV{B?cST9&+R6o}I098BQ1adyIQq~R|zRPLYym^W)JhVQI!%@j7 zH0?fN+gN~^BY3wpd-bdZiQ`t*mAvU)cm?viWvOZ@M?fqq7c*+G-ax*^A<5j;flSthv6wxpUfQUR1 zsfJ-@ZmVW(I(B%w>vM!?##eAbdmdEKJ|ha~$Ci4erTWz{3>4@)Y)QXhvX852)F(Ic z;CcfH56#wX__V5@ZW|_jPL?sx6$z#LXm`SSC%6+9XW_-m5m@j0a@|)M=NA)Jg>?nk z^{9=y`Bs{WC(1!yA(o$}%sx+)5OuT4se=on!}1MRtV^ZfT@rV&qNC6aU+a!6gH>5n z=z+|sS_YnYh>EFgF&wjnJgFl$w7hKBsL%DG9T*E8-U2muB~Q&AE3kcSpvRnP2by-Z zZT0tM<+7MAE;NFDx85Wby6eZPtY5`hf*Hb(=g`GW*b7p}Ic;!i+Yy9sai;}Sc_TAr z26(>egx5fpJdU)}Ms$Jw_B#WjSy^%V28|3D%?km}v+sDyBHWL~=ona@Po-?Wbkab; z%K8U;(u%1^DQ+~&oChvp!;qO@H}AC=#Z+7sl-0l9TS@ml%cb`fmu!IhaCVyolSu&l ziQI;2-N2*vlGQq1YdigqWfJ$QfOf~2!w9mFldW^QX!SS>i%4=1ua2CTZs1|!$w|SO zLwH+rM=FBKy5y@K8JPrGjiz7aysDLY>d{G+rKv0a#q~NSj~MtHMP;?$1CM%Y_iAkb z-+|!nK^&hE-OchgUX|X&n#C+{dF+E;!E<;%?UGd~=qxs^wMwkBPn8^EmLg$|S=rwU z?6XHJ`BrB|V7DVHr|m+8Txo9+M=!0?3 zM-o2zR*T0^-lKvd6YaItCPUeG{?2J^t`X$v`M`W2-H`hh&-czwfr-SKd?-2lm)Tf# zt~gDW2WK&nmXDSF-+212Lt1_^2u61SLJqSEZX8Z>u6U%c?YDVqmYmhpFXXcK6nOjY*`A|{$73CXHe2y3QpUs1*#y4FMsK2W=;U<>rU>MZ^LcGt zGOe|tXphD;iVzBtN;sT;DppSMyv32v+pzs`!h;rhVKh+Ub730XPVB zu}~HP3L0!KLMVu|n#9bvu-P{1Ggs2S*WjqAcmmPpSKuqEsyi0p5JQwY&RK+jlnsg5 znE5m|+h*YS8>8@ZCk6ZEpN7^4{?{bexM} zkvr!3^{pc$nTcb2O6d0msg5}$#`1?c1+^&y&2PK8#047U>FfhJO z=7)J{grEL|+26)8-4htfU)};ugsSjTKo60txfJiFWfG(@iPa?a63=jI-(9tvEUN5Z zN5;+u8giF?ZTG-=n&TIe(%1UY2Ujq*{b+_GU|LOI=hX|wQqNYj4O~uq(%()9i^M6bX2}jOATeXjZmmrSjRB;us#=Vf z7?LCFfYc`*UpI6NyFZ)jhFOr*tA>zvy*8TejYchR{7EDuau1f*+xaM3v=5iRtYs^JcX@ASfL?)SmE=(ozRFXvp8&6O zp-Fr@dKhw{2ZjcF8?_|5<|e($z$q~mXf5nA2m}6HfS)$5vc_`uIR^Zt=G=^%1X7UN4=Mq1~EZ9_T4=AM!fG zvpTy1Y&nW?kMysVmIZZ&0cu~*)iqx0TiLsDXnqNEPHUboZr3c)Rwn))64pL87EDmp zBhglGn{lpFe<05_Zr~PG&tQe0hR6&jmgk7)nm(RTQIVx%R`qtEGnyRrmir7+8~s*q z@%Svk)Wk*IjBi^!efLR>#$0tBnTOQVHrqtc`QBwju0!Rc&w-|~`s#AsW6~9$oTqN@ z9*~av9xftTJkZ>kvx8WPBp_4Vzgnt>)TEV<`+TbU)TT6t$5RSrU+d};GRsp5=jbVP zHl4sa6|LsP74w&PW5&cw*S-E1Nc#=tiBHnYL4s#STN%rFwrcxEfg6g&;?q}nk-}-m z>tfcbdQxJCTc+UO>NQMv2yWwis_kZ3qSYC|AIUI&V^!+5dDXUjy|Wz9?Y1l58(lZy zRC*!yG-~wqf_!Eqemyh(hBfTC&bHu+?cCE%+rVY-`P@6YHnzOyf$uSiwKH#Ki48K0v@>I< zjt44oNzDnFf*;4O*XC`&iClQ&CgU9+S9ik48Pil2&zERz%&hz-=6bCT_${OSQyW(2 zTG*8MLLo`mMHP#S3t>IBT{NY-cy9Oh96zs$!NN7H5W6PIYuA^AlkG;~9l}u{I)O`< zap6W;?44Wd^SEL5q5p!P&GFlQgTsTj0@cV@y-s~yH;x``ty?6_nhgyIIKehR!KWmE z6GKPO0CnStItC~3O82K>tJhx*B4EuPxS@ys4l#4qNqAg-+^e2LG{`K8(iHf#xub6p zcw%TZiK-G4>7}RrlEXK?OO@crG6ankDR~Z(M8`;s^lT;gMx#7{o=B{}fptORY%>DH zc(2QBpieBx!Y`<#RmK8TcA8qtKvm0MKq%cw_{>e-B7KX1s{>Pni)M`(n-Nz20wMIc zy#@8We2xZh2}=fvlch@PIPsp^4E3WeNiOe&nZkWy-XJPMeK+Kr6VXPz$gy${*tj`c zl>_OCIp+!Pn2x2`CYBb4h4A5B?9pjon=ZC_vSh6*6H`;ft>Vi?@*&~Sq+#DLh>JN4 zZNAZSt`_Zx1$vV*%YiMJzy_dWlbL2XVuEc>;#x;jghaxzubO8eM^>8f%MNU{R-n6Z zFD~g>8@b1p5qPf&&-uG2aWkQgKbn7wdo7v*Lp1jf1^IpByd-g?>0sl{2j2DKa8`tU zM_Vz$%O}xi)cW8#+=~b22$sw##QvQb&xm8fXK{6$?az^}0y}lQansY>O^F;;pLf=C zAYO-V95Uk9rpamkKV}JZB84-=xc8LfS1CiV+>Ie77#XrN&ctFrlB>5vzH9E>uj%MJ zFq+d`XkbEFSUfF_r>TG1ezKC9scxbkuKaBI0;_dt$MIo-c7wQXsP|wUbBp9y^lJVC zz~^l%Ns3d{9L~NQhSDC|4cE8vm`Y3+()9gM5gDW5k>Bhpjbki;<(9lR=`n;&3QVPQ zIF!}$W3t0iNKvcob&Sb&5kpwVh?pyW_{u;3XkSIqgS+BWf=={7{t(E15$g$ybUcL| z#;4;MkYSa8X#N&x`wW?o!e@xI;?unRV2oGUa0Ie&wyFf{0EPFvvQwoRlIv>1WE-l| zldPQGusHBX#Hq7?R!MkuG^GFLhLY`Y(40zIs4N`9IVuLP#zr@prU_IGNj05CRg=|b z0S0SC+`0=Al42pac@P`930mSE5Li9WVtbnSLTHcz%RgwcOQV#haK={s*qEcS4#wy= z&V4n)EWXBs$|ieF*NJw}55I`Q+9DWEj7J;aXIL0d6EgHL&sd58)9x-KIl59Nfivio z0Mr?eG9erfezW#&k&>aB-5A^=T5B9itsO>*#8W#enTZI@JAQ)H;mB*K$!7~#62{&M zY(G+Lu!rX^m!9Zck|EHb9W_RkC#*#u8R2bM)D@a*Ro{7;$#8VAlF)249karxv3Bh0 ztxGRc_xV%q!#II8~nJRboZ$Z=YDVv?vr z&*FrJkZI{YuDRR!0Z#M%vkSdE6Pf75??h`#Vlq0V0h3_zEzwS$} zwyn2|wFS@c9q2b#sj@@9D&CmN)03U#-P-)J|2oja_xdU-a^zj0)Ys{MH^`+pAsj#P zg1Pu~;~|hP@9#i)8Fs_?G!i8)*LG90^nNkR<#vtoWSW6Vf94T%<=q@?D0d;_%IA7H z@Qbu9{~oNxq9j|EL)!dp5o+M&Yg*=k}&uM<|{3{;#da0>13m0{*%6 z7(@G?K0J>5r9y_WMJ#I~q{FUpM2;~uyavLFFf;?wjDGYqHDM1>ee#Am#Y7kA7tjxE zo(Eha2VbVVN+^w|w?5YEoEW*@q;Dgc(G=QJlH$=6#!K;P{vwSQl&n;EcOAnrrUFTOJ9Y4Tm;G&qsULSL9$xHh>|u*cLUdtwJvf7=CdyJ zI{?k`;Zo*6G{S?^S~ls3i>961P2#{~yr^R_RfLkM&jN>1Tw2@P5zcIj zjmt0zF9Kg943OO$_Z4BZ(YJvnaMen192JQdlpK=zx&@uTP7zbG<(s%-*U^ql4Sn85lWux%+(vQ+q;)3~D6azFIZGKO_=xk0`Uvkj ziz{qopM2XrZn2p;4#K)Y8ydH&xO7hTow%lfTULo&dRQeVvsJ6NYu*PnnOt?d{zj!w zdhT2`l{eiEvSR1mLS9T>j709#`yqK*+`4K$M^=fewsjvL2IefOQ@q~sLhCTaDu;zL}tYE8QwzC z_4mJVLnq(qx`hIgl~X3K8csBJ*`aT(Mj?cQDK{?fJ$(tY*-WC?fd1MY4yN=MCWT@d zr6-@pGa9seQx}zh=^LY($WauxD2XR)X)5XislS;CWqa*r3}`aJcO&cND_*nOTJS}r zcx&j}?=a0X_Oyg)*>r?H&GuBpu5sbK{32{A9*3mJh9%@p@AF8f#E2X{W`sBywp4M+ zVfks3`n*AV`cc|&i)PwA8=okBx8I33*WuG4*?nA<1&?q>m>KcNHT};u(fXTR&ZK+f z!Xw#9Tru&a8m{&9T{KI`Xu<-QI$Wcd_ocxf`7N9MWZHt^F0H&7`y;}!`S6!2{WhKt z*Cw@B2<~l0gIPcI3oYVC5mNaVL+>PfWp93b&^q(jr!kr8q&a-JkCXL9^1@0l7vp6z zM(XpQ=&%Wn)nJm>9~_PLPBo~o^*m5W_t;H&{Qi*XPjks9;bK2>?b*Kngm^XuT-wrh^x zC?q)Z9G+cpg^||!qUBXQ`4$hiNn0FmHoZ@>gPF+oeJ37jGq?TMefl?^(w3=*e-}s+ z5zf4M{|4%#S4JD&)1g848+f|hWbIZLGY@tro!t(%r^tV?j_bb#uQq?m?VxiRhq(TJ zGhjLke8q_fGqoRxE+LT_dKRR4G?Ao%9^;4(dtk z7rNb?T>H61Mz6fkMrLt?TOHf#0@vo4ZFfk;dr|y3!lbI=8r#X(Dq80);0MC{GGU31 zvVR;7>i1tt@CEHhbk|>BAjWwW7 z@s~d!3Dk|W=h)rfROrdoXd=`6;41PM*{MkHN*~b8&ue=&Ituw%OZ`dS`&UyrahwFD z%hbi>!6sYwQ3BUW(>~%JTSJKy;}zk|mi^S1ei1iMx-mo@J&8|b~yBSEfgvsC4H_5O!&360GF#9yF2!eQrE z!;+E1$Ssouh!yTQdp7zMod(ou$__(%qbrpyjp(j6)T(pG*qU7Sr{Y4GzaYaQOzEYK z#cxd0*1({A5w!W!XPGh%uyS_fDrk2|<+PPPu*848RKG!0dN?kSRq)Z=J|il?wpQQB z$GhV7#bzP$wAvLP!U|;5;VX#cDc71T3iKQ| zl+_|I{XhI-b0y?mR=ly}g{Z7*$<1w!fd+I36w+2go?O0MBn{84ihkrWco?KureO9G zx~)MlpF!BxChPq&Jl=lvs&?2ouU7B6P1W64AO=llo!{omdq zXd^$}|PoyavlL@k`{gb&Bler~L0@LSKKhe7q-!{46u`&4 zVHazpEzpPw5Oq*|A4bk)Ya$h+GB6GW2oS_JN1lYf!tve{c$h8rsiO;{i<42Lv?*h8 z`xdKn!YDNERmaB{2OG)(Q%EJ69rP=o5%GU<_LgCFG)=o`65N9(c(CB^9^4%k4#C~s zgS)eUg}bwG7VfUW-QC^oJkPiHdB3xN?Y+;BsjH@@`|6&W?rN*Lr$j_$NO$!q6?M1> zv0*qDXM(`vJ>Xci=qLEN$ubu#q*gCbgo&5$M=U{P6B2J)Lb#>FZ^WKV9^j~Ay#zOB z*&KfJ5G>-n!+O;)SATzLJynr1a#zHZB%HgeO2aplt82kazfxMSKRYT{yl$(8H%Dn( zV`UplU-|IST#&;Ve?ngZ332+ZULoGQp#T)lJ)gDCU&lFH$F}i+se083b1}u~#5!zG zC+6FDKj`iBeR;dNo{9D4Pl1jyiJtBtMoT%dj>i8ur>qr6zo+^e!*`zVg56H1pH8?+ zJIx?KymjF_L^XOA!L^bLH{c4BZLf=DXqhdesQ7OB1-=wg(Bef^c~a$K-` zx$2wEFL$*!6+kp4isY27`(G?JJk zp7+dMquJbXjGFM6a_Tg$7mH)T)a7CLp5W$RI&7b zMKT=Le$5kh_h5pQKk0_T&v zZhbRP54~S1xJ5>(1w^iF>uqEbo^bdFo<3d76hYjp97Of~?-@&B?a-&4?oGx&*XY3= zPPUx=hIT7pBo)_6w%4UrwJV_a3rf}(dGWEBGGWg3l zNnnIivYJ71Xw{ImEv3H0tUa+O)smyA*Syw7d8ECgW zjj_js5Xm#Y($oj5EXx}%%O&L2Cx>#BrzBY-QXGePj_ofeLYc+xGJXt=)s-UsWL~k8 zFRD}}R(G@X!Yt@ELW=IB4?PhE7bu_~e0Qfvi2jjAgTg1BrGo(o=9md{^D2%m7C*X852v%mzyd#881 zxh!kr(j3`m8JVT%+95`C+FBw@Vv>S~hMBHAcs|8B2T-G4unn z`$PPUr6yN0(*~%HhzjM2a`(LaX^#dn50ha{>A#TbJfcp>)Hy-2@#MSwzL#oDm>Y;x ze1JU09S3yh1_RRA20b)I>DQO@lP<&j%C+@|{BWMtIgL%CTGAU4c9Gi?z=CVec z(Qh)H(Q?_&Y4LPe>frvT5TDES1T@c=P@BcU6`6t~C*P^1jx019?{z;Exjj#|_3y-N zJFJ47THDq94?+|SE1VL}sx4^e3{St&0LOV*ez82sSwo<=D~ifL($0-l2Z4xZ?*5JZ z66pgI!V)e@#B5uv{7wyh243fZ(mIWH|9k;w;ruuIgQ9Td; zu2f${Om>60zg}&%y~clFYfAkTE~>oT@bFLD{CB%8ZEI5-&i)tL-gfyD>?4ipE{J0X^a6s)Qch;%+ls7*>WEf{cxDPmW=Rg^MoK&w z))HL4p{(Gmpq9UL$ll_k>&&4w-)U`6Ub2og;{wEh--~{8U9zPYpz?v`ce`fOvAx4?3?y|I{a~2TF z^dbPJR?)t$XS)5J%Q6d$xarwk?IU#o$k{OUF|K;TyUcdf2!%_Z_4-dpL%MaJ=WBYX z?G^MbTsa3S9FCw7@yI-7u#ecU>1P05)T)k@bkXVvMUBPgR|)QZV`l0BrCPx>_ehhO z%GT4S?BeAFSH$MWHdUyji~QTK&H!t*eebBg2hnMuYE?Gt?4RUgDDi|%NYKVT)vyrg9Y?PqhP<=F{@gI^R~e54;U6aZ@u_T1c`HdSrJv>v>V<1YFqJDm=jn%Z@0|`s_U7BTi9!!k=@%9EMq?Hq>S3di1DfO z;<5VnhUX`)#L}154yfHuyK$76mcVt?L`cwJqc}61k;tk0^wT5)#|o(w7DB`w<2V35 zLbcn)WOH?2o!B8=j8_MA4t=0Qra@_%wLLY?kQMd)XT(Hc)=PtSoI?m1VP`2Pr7vYp zgv(gV_*h;!El?r6YO-~ts;MF*PGQ(!&PSl%gdMu6;u^praDsGUY2=D)xMxM1L|BdM zQp0HJ-UPkNcj;MqEH7qR82 zggTYedDxj+S-lQIO|!&Tl?Xz=ex~_-^lI5`5C2i5AYWPMm{4r^t-HDL!fN&a%Jmm?j~~?V9A8FO)WQdj|TX zt2dWRF;_dSNR#S>K_2j=DL&fV9I?G7MQRyVZ(s0-oMfATpB68j)R?%)^V zW~6Z9_Ud~)p30o<#Av&tkKDQGhURhq)ha;2)ZX8PTs#wN-Q0iX)CF45aI&f#%`s|B z;4zNj^1blV77F?1yVCn(}lC|6^2Z)T0to_mO+o zAa%4&uUFgZB8d{-UH+KA*FPgQeeg%kL&DteV_06Oj(ymb$u!2_53?-qYEZ`Uq(Xcx zb0+=lnEkg%-gfH*!=?K%ogX-El0B0g0xBslE&X|G;yOo8XB+>sdeV#k%Bxetx9<-BIch0V?Fp6&#>VTe8ge4eGC2{7@GBa+LtaT#$KeicJ$xGATZpZ`Q%|c} z9q_tdqLu)YSF&iW9ot0vAN5UcLMojC9B*2 z>*B@F>-=Y|4^$kUUkT_J+(Ncktz(tX4DP=G`H zh1QzFRjTPssx`gcq2+iqPHH5qv1*F!D5z^ufzcH_WuKjNT%jpKpUDoh^@|1`gY#O_ zO){`3YiL&H_k+ty`aCs{QaV7*<*|%NeO!iaj8)Q>4s|3RCM1XAkDt}rfYF(kV%yx z(+X z$W&D2N$J~846TNr>)SM6KoB!=EVT<{{mR{(RFypEnl3ZMvl45$R-g!4e@bBA{<4#g zdn||Lz0fA*~hKDi{HBvhy6_7I>y22 z0{}%py1#uhKl*&sMhc4Nn@l0p##ehEVIxlG;XVYDtkX|q#}iJt2U&>fZ?AoY<#swN ziv3}7>~kZ3^?c$9kAo}nLDS*BDw{3IkLw`7Ior7m z6;GI2bLJITqg87BV?2jFf2j+%zHuKID$wi@%&_cRH>>|T86}!0i3FHkKnRBI{A(%j zf$2_wFz+zkkMoxXSv5P;{93bs+Kp7zw@k_J)T-xIF4jTYyGvwAZ>$1$9nUWD{M*=u5BtyRTZ z*PdT{9sXeQii2E!PCptK`y>b&o%pp#O%n!}dus5I0(Udgy{q zDW!7Cyy&g8wYb?X?4Y4ZnviTlCn!w@M4(7oc#Rx8o`o%|b%<;M1MhWjk0-Y_bQLl zAIn6Ja1*wm2SO3cVy=xG(;w3((nqRojvRv?aS3Wtw<4Q80kx#MwzV{YBB~4=BcaD3=Oi|*~UEqmjp02S``8ro`&15h5%s-&&<-Rt$&40MFlzgWLc}PKk4pbSHJCY~O)uY3%eN z_OFTR0GpQJST1bd)_KonsT1XjTfB8oe6|5b-2gY@*MU@(m%}-s4H9sOb4;>!6H%V8 zHh6N+_nW#GMq#@s^%BHRA#Ofs$Ig5Kv{;wUksvW;XpT2J*WiGDbWntr9@MBfSjkB~ zQj@R6POUoi~ ztddnO0T=b|18EY#fI%}?3`4kJK#vJS2b}hH&n}vC14?fc>m+-JwDJ&^f zrhQRu!)ahB$iFTTYV*_(ISO_U-R>ja2y4G-;=#6YH0|DDw1F`PDC3<57-{cM`Ts!3 zOM$xXbFAuT^b^}qkq{YOC%fIaKRw2M7M!#(Q*hlA=b>2x-}ix^6H^a$NKs#lu(e`+r;Q`>O# znX{rKeN6YS%!rpX^BvdNQEiiQ`zt0;He9T*3f(pzbhO)*&| zwOganpX#};u{X&VSTW)G)edlhkHY|(GPw-vm}X9$qt*++mYR8|77(NK2?MPjlH9WH zwA)*<&~3G}jee*UvBy+Nh|A(2>+LShNcbJzT0b(^!A5&JTIqovAIyzxqo^6=)mj;# z@e8cm{?no5H)4BY<{Haz?L{#o+*abZQi$||^wfmxu_PC022 z_+Y^W7VLJ3U*8mfa3!~*lpeT1P?o%IMa9n*?s3l2|3>T5YNKoR`!Kwy#YlO8qdK|& z;@Fvc&NR`jxjwikmzd^izdE96^nUMBGnLA+Yp!)%qtHvLxIRTG76XsQ16PR7%S>E^ zo=gfI(UO;`cYWyHQk~fRzURFA6accf#?6nJ&0?2MXhz8h)#gWjv(=%gZ=Ssf)g?~< zc3|n9AMQx5E_;kPQ$E|StAyp9Fj(_PUzj8#t4j>0v4K;HF8x|e{~@`~>+FZf!jgBm zo*hGuYe%4+6lv2=ZCUtAJ5%{fPG;W;4j0L54jslTiGhd7>nah1G0P2l*yfJ6Y)$nZ zt{1*Rc*MPH>5qoX#42+k4W@~Mv)cZ+RfvCcf8Ztne_&YCVvz#OH zItP)S-u&hkVDsz#E|jYBxKfL#pMPr@H}NS(R8Mp1X-TOlw}o`#xA=BdNW#To5;1U? zQPb9ThCwX*=G03R78jC+fx);0({X3b4ofZ^PvNg-R(Qh-7Z-(O7xE)jfabEwby zHFoTI^L&GKoAYZ%R`*Okf2fmq_g~Q)7ZH-(qtzi#$}1Uv!|T8>2{yk_BT9w!Oiy_)QgtC0YBd#m~6U~PO;a=muR7vw=kUKr&Me= zIc1OPvKP-tbOm`vtc6-E?HRSrq7hEb&^9UCEH`~twb3qD2k+ep8~!pK`!7WAGGNg{ zE>=S61hA-WxdX=YxJV@Er+cs{UatmhorWt$pmo&+D&ZeViYLJQPvy(=rec+*CG9}1 zxp7j4mu7TIuL@3od?Kqh2^mz)Y3zOZr5ym&i!}C(}>J zmYKVMUEuhj4nih&_h1McOC+1HRzl4k#+#B>lz4bS?&6GO%&Z;pwtIe7k}uQmrLwkO z%PHacer@m3@6FR*Vc6~QmZHgLPI5=*lT_Cws+JO1b?ciz0{o!G$iw`=hpe>6L5HJf z`gLL#z~`5g>!FwHdTU9*(q2Tcp_+3A;07BHn8v(psut38QcEMUI;RPwJYQbdi)k9I z5U?&nS$5#GV93JqQ44>)QcsQ(NUYqjdCWId%WATEG1UB_X;SqW3ocV_emRXB341Ej zkKfma3W;Me{g|uuVbUw|mbIV8)`*2>IPC9%D^c;8HvhD#VJ8{~?HY^vkA*#|FMreG ziHK*%mQK0v4n$;x-?h3(uSXu1^zE?{jXM}PRU+(c`fimyM=i@K5MAYp=mNKIv3Aw7 z`Lr6cNx|pp^c2Grb%O>LM)d{DOIe0ar1PH3Z%-Ad{n8yEOQG`A*>AQkx9{QZ)8-JZ z!2|cV8u(8F&$4_~#Ip*#LT}ZW8I6;o(@NzHTA9RBLsikH-<|P=SlbQ>vf(nTSNN>X z1|{;<%K4p$H@dcbE=VE%YFubc^lj#D@~F#am}gTBsI$|Z5&>+B{X~0T1zgx@2Md12 zFbzPMifs!ogiu_!sIxlzH|oY5TiqMr^mlZlinU7ZxPnug6;2J$89Kz)DG!vQb>10T zKomrHmyeMIzgy#`L}N+zA^uuV%4v7iW_1%v50zkV?QUtsLjksw#3K{DDyAqFcX|jV&r{>AiO5P zHyo)JX}t2op;ohjl%uF5SB za)~3<8g7`%eUjG#q*!PE5sa3}cI^=Bs`sCnEX{U^tSrxUq!?2H{-K{o<@JDS^hUbY zR-FcodgX5n%(A*bm2xyam4cN3`URZ7n@WU1%NYO{-(=1%@5H}PtU*{w=tccGqFf{3+I zwu3_x7<_*5%<@^LgJmY9^>JGmDs0-U9jw?U;sKV%^Y01oAtCLB=lkS==aCU>B@1gf z(}D=0hwI5))%TS}7aHsv793yV#pY;^O(-QA7aW!wcU;z=Y)7wnZ5T@~f{j<$57e~U z`k-mwVsX0zY!FMtI}7Me@^l!zU}UTE2c}1eRe+602w=v`mCPku{L;Z&tmZg3!^*5t zjCnfxn&@R4&yWPOW*5Hv`gaT4N$VP0BqwXxf(ssJP z7Lsj}r)1~cI%nWXBMZX9>Pm&v_91|A^W-H(cf)+608x8TxPncCa68vXpc(ex&6v1; zu*{|UO03@pv!}R5?h4zcN%8otRzpi#6P(b89=h9y=@Rhl3wTBBM3!O(+rGzwPkZt+ zFb9WX3-XfU04MU|=_WU9GYNlZDmhiAO@0PuMWA@DqXc%WLGz37fkHeHwQ&n!F=91X z_)5ixiY_@y;j#g(=Dlu!)sNCXaUw?Hb>E+5rUv!}3PFue_d_wCBTcn1vgYY|>Gcd* z+{+d>kJgwDZ)`HeC&`ne71N?kpDmcUU9a0xV!IA7wjQ7Sd0s-4hn>!&JQN1YlN%;q zYWEg&I)RI2%w+(pn1k^^b?nN}+G+Ylx$mv?w(Y?W_ye}G{R`FZAq%=xD?7_sGL8m*nklD_Rnt55DHKm1!h1B|xcVNom)VG>xUBp| zE0^Dk`AiRRLqv5Z11bxiPuIjd+S<#yzPLcz;JDa7uM%!y5+&DaLtBX z1*QjG;kcnAGREw?7gm13)=+Et?WCJQA)}9m#>JnimGk)QdKSiB0DEJ|T$T){4sTDA z!}tpR(<5=0J$T`ff5}P`V{m=kYQZJ!bL#aAU+aWc`;!i{Z}ZQ}ApI|bJGr`JjOV5v zuqx*@`m4eH`a9_-%B9{nuB<*c^N*%`C8{0VtFjvecpDW2z+p}~KTMw)olPfTXaQg;XT;c z!J#Z)-1dMUn42-ASH__!w0W=pWsVfiMNt0p`{`EQ@+CR^|1w8D@SJbqNg^gx7Rw@N zeW}nutRN{dCn0D_Asb0i$#O|GH2z!kXC|NetmpCXmx8I6X4MavCwCKIxBK+9%sV_W z1VqtWjim+Y;^JVM=~%2x^Mhc=gi6y`4ZX@;L||F#JXMLMJmWR%p-%bSU0Tt%jVG8& zwz3+#s*Y}wI7q&AbDo(KcDoKs+gyl{8VOpj_K%x%ysqg^J_h7K$J;2ZZ-_%~2YXV* zDw4I}SGLlmJmhW2BViCjaZG$I(36ZCan9Sa;0J$>dIGD|0RQ#zg_w#qW;d+^uCaWnz-Omq_Zlw}(&k-3o4Gw}iR((DN&8jNb0%Ye~3&pUzx=Dw_D$CAf z3CVqOlFQCW!!Tf|=a|%+OdBU{l%#FPg8~E5S!Pcw$s<)!J&~+IPZV-3iapJU03rf3-!?Y3`6?YD!cZ-w<1_mMX|c@0aD#@kM64}OE13E33VoOpG`fw98sPQKcs|~#-&4xxpTig% z1ke!?cJKLAGp~j+-WXmd;Bh!cv?4%8i~nTXA6H%XHj9R26d796JTigh-N3i%FCovr z_YtWRg#yb`J=DeoQQYt{|HwtJ!wGyCRM%UMWcj;EwVBzoaK4 zP1fm4HIKH*!pjPRS8<%9ipOL!N!GX;1*LunVctZRhGk0DNQUxXSjf<_s*QJ}F$Y`R zbgmqX2@M0k=I9qo;+fimuxtRV4+i0Jt^91R4B)k0UY>qjdGs$+t&v^H9QM_U4jfrE z#m)qQLebiUy*lBtGq%0sT(B+Y-*UT~PbYsC0u%;VbN@6K3`swTi6^jr;62CA^Jk?C z(epw3Y5@(XGX?VQFs#kubXlvcahIPguuV-geyY4{jkmD4vuC(fURq+qXlOO7hkWrC zCA8z^`Oe%m&#Wv+Vfr3XYfBJo)>ZFn8kk6X^EzTT*tWdZFVd`qDnTZiT&|Xp5;SA*VXbneI!KBapTz z+=QC-=WNjZfe*$9ozh&^f|0(zL zmyfN@`2Q6}SJdEtpy-y|ipZb`=WxvB{SUlSR3j{u*{`BO8z+HA!&Bo{2Gy6$byI~% zPu$2TdumF0*#DC}xuTK?KJdQPxz`WeyVlMx3@oVKw}e&_dT%_O6xuyiBTD zz(C?14%D})eU2JZ(AjH@Ri{&CMwNGM)D6-`@lx}&pc;qF`NykVcjpHZc8!#WUx(vO zZ;Ea6llptEx5G<6c6@tgKjd;hH{!aCs_Orq93cLy0R}>H65aoXY()m(hxq^CdBR+C zY``wIhy@#o{IJPABe|XS8#%a73ipPG55Pd~b{0pg3TmiT=QAMq3Sa$*FZ@TT_kV{z z{vWo{2!5|^kU6WL*qLkd8^6(D6C=2l$;2kp&^UW}o9TWrM+mrw>V1#zYF_se4{{mt z+iGCgpCb_CGntIlyf@OUO>^?mUG7ht6FWERikQ1!tUXTNN%rZZHN&6acLGbltlN** zKE`A;`vsR7mkfLpxQtfFs*cHb`)3aOA-yjBw2&J3Gqx^51n)y1- z|DBkss%)#N6KYTK1w3?9KXB*o>76;qBX?{Z#W@FJWYWOtm|{0!YP!^%=Qlo2o9CP` zD;J`Ao74Vidlgt1$c#5pk==0=zc&TJYCW>oanG-Ibru*Hq$RjozN4qgmyagSMeWzR^s+ zJkEG89sVKu^Wdynl&h1N7eEhlt5DC2VOol2gKzH+H$gn7$@=_0{ew#_vz_bY*1FOu z_v-km>%OhN{FI$i@pNWQihr{RlaO(Y$ME!`Bwo!uQlfKYT85z*jZyiH#wNyVdCPPQpTR%7Xx!TM zMF`V+T7;4RepSU!!EYgpr+{2Lk6Z?P+CbZnRl014%Y>3!ww16tbAIhbx!R8fN8 z$Y1x+?+=*5DWqie`O>Z%S8sGR`aQI^|Le2$e6kwzgPoPK^r@TPSz4Ln9 zHFwO%6uhNVS3rrfyhdmU@?utRmAbb4Vq(nmwWQ4XXaFw(?cM_+)3tifCqN*L%N`nx z3YHo3%3ZOmgY1YI7w(eWBc{b%@7lmr_I&u-WwEOVFp1Hgr8Yf6!2#{YBpWK`yrZ8jE*q9SDd->KL;&5B+Vz{L+p2howl>$%l6Jnz@{28p?Fo!R2T&ZPe5WJ4+ zp4q!Nc{la5dEc~JH?zS*nNRf}s>l5g9e!*qt-I#>y__5cg^I>F%WY2*#I(VDveR{w zNYiezT|6nL_nf@>n3alggRQ4fK=N5W{Z8EoTMtH+gDw2B;^PX31xu< zBm<9|H2! z^tk<8cns5NEw2{lGzhD$BvC_sH8-u;^XRH78cjleiu zl);7Q;Zg?*W4p&X6ONx|l}I|IyEE0(Ofb!St_+|CI?k_rqRu@-9#vJb;=0l4uxH95 z#P`utzsO*@dHrk^$a4z)Hs7@eV!p*u@O*VUF;vCnnpM>=<4^18oZgJ-dts2XG;l#x ziZhcYqa9MeY4-p#;S=LHx59U^CRw?ixRX-2F69*~l^gcO!i3Wt5%QWtwjD|z*Y5p{I8 zoJ#Wa_fLxuuVUDw82o(BLyj8G%oq8+%y)_wD zr#$&MW)tI7vHUUFr;m$cloWP&Fzm3@@HyjXgxB(VZme6D;Vtnh*{>yrFt}AiZJo z`wIL0`tS>GhgAE7uIF!TK0tSREqduFAAE5*3!pxKann>;^69jU(*CuYoszA}>aqhU z%HMAg{9|jI6a4U3UPpa(9qzHR=;}Mtco@+e+`s2RtV7@5k^b8OQrZ=tGr(L9_4Ai8 z68*1V1AjyYI2gy)5fc3RNv-**;ZFgf2dWa5rYrOi5}gNM$78C(5H)0%)p3M#H|}GI zVu-q`Ma@?APiAXm6nSmR?z!*Sl&c3Gp{I~G z97KBfS?-B<-J{c;?o7ZR*fQG3W(O#c@jWFq#r`CMtz37th&Fm@J1|2pU5gaPLOUR- zi!WK*8~fDYD_lwT%!Phs4BI>eUGpGd!MD)k9=|*jJJ-KhcdO?EPMQVeD?uFI!Fibc zFOo~;i$GmIwHmof+hu84niTdmCXHdMhM76uGTT#8iiWdUDi2G+{Uj(`X@BkSoHBN$ z;{CM&cg8d+a_yDR_DJ89vrx5cg%i=RC`Qr?fGq7dukC@8A5WWA8@?Z>hZ_%mP3X|F zbNE{9=4iz(=h0>#YOHqyKW*|Q8ZRNTYO^+qnKb?^+D(+BK7kwG(6wIoI2;ErpKBk7Un%T4=l_4sUE zk!`KoP#?)wcz%VpiDj_-Lf($fiE(fZ@5Em2uZjj0K(zy6ZbTvks?uEAOU1zNh{TDX zISaeS`{h`Vzi`Ucp{;nzmXP?2wQQRj-!RL~GHr^{Nq4V_7wXpJi|iSWnRVIdHm85# zoC_nmgV|u&1YFYNab_7WPjz8?kN(l_=47;O1vZwdvsGwnInd$_R8BEj39R-oX2#Eo zH@D$}vqaK1^exLRmi9X=A!C>0vQiy2I}K8BDfi<#%G?Lz887EH zD=Nn)NBG(DqS11zYkexaF0cHyN{jE+6&ou81=*la547a-v)=n}+ag%NYiDP z2Z7O6tXsSVvxNaRAsRr=E`juWMU`G448P58>TNA}|^xL49j zX$FXvLuEo8cH~YtoHOUQZt@oYi0I6s?Zfr7&_ooz78?sgJ2)WYKZ|XBFn_t+v$Yt0Nw}t| zE!f?zkg|=fp;PXB#V)76oQM-2I&tsRt$44rPZIQN`Pw~^zqc^*Hfl{lL^OILcZwk8#*QyYB28!`j$b#9mvjW77m$Hty(G7_D9DCOs2rQGG?OID=NU~~ zBl(Og2=I4|I2b3B1!r0T+|23OcMmto+od&c65Y0NGVdSK=Y9vBPHk7vkqP4_w1 zL)FhSCar$S2Cr<6SMW|J6im2KC{HFsMIu)~M!D$lUoBEE?)wZ!+tJ#Nm8|Fzq4sz6 zUBCz9;zC*ouy(aPX|J((3?A}Fg2oSj)7OHOA?3wTFA_3vpBtj$Km z;eUsycQo8J+K6n;r0|~^tT6tFFi6QEG#+%B{!I8w#koS9Gpu&!-XJY~)bs}@`9$NF zUZVTz?CR`B;<{qOX#ib9!dbnAC8Ypd0!0L|hx^2!$cQ|AoVH4mANO9gi&i z5oeGOaAoLEK&v~D4j>fU_UuT;(KrxzgYi7ZpK&i(&pW9w2XxjO zw`l1O3qR~d54#26cNbHV&G_j!N0*0&K4mNBx1plW=J+2RxbvlJSB0p%m~ZQX(}T5E z%0#tH$t)l1VYM}C*>6Au@iv{6Z_VuI>3Og82$v4ndyLJl0)TQrN5H5zsk%$EK&HVF z%xU>G86AI?PNo61(#flKuzUG@%~eZBY{TxdVAnOtJfE744=Z)2s@oopWc}$LRxI^B zf0sf06#SctcR8@t*0K$|@`t^3Tc}!8FypeVZTQ_E_V;tnGrDnXn@R92L z9;)m22}<4+|5{1Avy+Vcr1;#M?Tbj{hv&l2i(&AZMU8A83b(*@|tOI z#z`G{V{-<{qnm)d;&(J`6#T=4ZgVa?ByD`ja+MuZP1+zGw{tD@qBimEt&2P$MmYI} z=62a?$$3$tdv7|d7ou~qp1pMg9g8)|K?cUeKc@Y@fdL_W|eyA_}tyFV< z<>k;_)Kha#8?hNCGRW2J-uuC_BNy~=qg?{vSGlUjY|z7VZp9fyAXRrn(OEaD+OzU( zzliM6z3D(eePSl5GaEc*|CMvXC%DY4O%yp|;>CG)>Z1W?KO{JQf9j2@elozra6u)5 z{w+RA|Bwze5bS|Q%fht_CHx)ieX>ZGUZHB;g2u|R=3<>J51`>_55-Mi=i!i{EXPXc z@(8O57u@8eI9Y5fuTZw`3mmgBq;Op3;c&xAzkG&Z9XZZaTY=u?{+@b1DA*5W$43Wp z=69#x)Qw(Pxqk%32{*30ehI=kU|m-eM7szwI`&S%o(8dPk{10l0jB=h1c2tfW6KhvL#j|JpT{C( zL@ldm?81Yj$;)B})kYA%$=b*395Uk#b_^Z{@SmJ6?@N)oGfL@e{*zZDKSd?h1H;{* zIN#N&3;dg z>l8^(+>=YhSkUi4gRuwOPaNMvxHCGpvg6@d#Kc9L+KHM;wqss}wnD~NKyK-+(`C%CyDv)aO`9mt=1i|=!MEOJ z8u|W>G*ZiPm!}rGVvni01Y)tEzzV{mtAOG7UZfnCVwynb3iVTi+?0m1Pnsu1;v_Uaoiiv_ zHi4W*#u>J03#(gB!dZKXfl(jFy1HAKz^*q<(yp`%gEb7l=c3kzVpZ`H z@$=s55Q;s4b^@wiHGtp)ebbwj*lg{ediqpAE?8w&0!Y=HJKm!D(~wSun9+;xYUXoe z@r^&tH*LMXGP-&5L#7OI&w^eZoss4D`};+G%C(K~wMHn~|A(x%42vULwm_2*971pz zBm{!HI|;!xKydc}gWCiR9z3`V?(Qd<(#u?lm@bPDM=b!KJ4(&mz2n@*;^9Pp$7 zJ&K5%OnQG;>9ou^Te3R!Jhwr8>#E*t0xDY&aQ>R47q{gt$(r3Uo zV=y<~(m4M(OFQ?3x|kZm{bpKArU?_W$kYY!-aAMHQP?)?{C?g$U;nZxh->q?aS=(|#-{Vx%!=t{ll??|+0`=mWrVLUBkaCdsbar46u$VXyqK0SyqLzl;KUc+ z^xxQ`FZR0se*EJLZ}c)0An1kq_CguH;E)%8Mx2-N)LvZi{<(gB;oV>Ovlo8o-vQFU zV7H&5Hm(1vu7DX)@6`X^y=j?b;FX74Swuw)hHLUxAkO8XNu>mD)(PG9bTJC;rU`8GB1QV**yuH>GDGQ71EWEdeNvuo{fNLg!ePxk89NGSb) ziw<@7RT=@>@??CsPq$;zqj2qPf3S%vvIwx7_jEZ<-dvwbK)SF54O(AF%5T#Yx`fxf z^mhB!YVl6)SLu@JGkA|x*=BJC*vnjcWDC_wXX#RVMMc?0-cgcaj&`{6T2G<(0eulF z0jsSFH(;((-S;d(`g;MM{O6zhZ?G_3za?ACwM#^(W*bV)6=T!usM%MgmMT#=Tt4J} zGgRFr=t7YEt2$7?TLzdt1WNxaqT7yH5YW9%=6l$Yzvn?VU`9m>UctmCCiaHi{;^cE zjx49Xx<6GFmo>4vr@~evJ;QrE2e9sOedxS6;Mi)r)Nvia3OQ*kIC2n2n4HpiBTqOf zY7@(0spZGy2oa8V>y0#@Z`2Wl!Dm2ey^6M0Hr-3>iiDWlRw-Ap{Ns2EvA_`ZVG}Wg zy!+proVu^?W|E19>9__4LWe3NhWb{D4XYXkXNqrUl8J|DxxRpcDv%$cHnO)f`ymd& za*mNncq#t57ZpD%W;V=LI#X$CRcm{2a)|!CW@IfY|m%U1cq#{#t>RqjfUlt;1Jfd6cjeV z+JcPZ8wbhq0blU5@Sfo;ZRh-f7)9@hZk^9Q)7sp2HVH+;Hth(1X@S;`2DQFUcxEV z@|JB`q{8^U;YPo&dE%BKix*`nsZG>eVmtMxPsBM=N?LV8B33(BtvJKuACpLg@>!AaxLf^Y*$_`mE2~y{8y~awQQrRTRrd1XZP8r@)uk?};sUk4 zX%^|~fGA*XNs223^Du}Jqsm=0U2%xc1~l8h{BlN#Taz~G`)8ar4;gl}bBdiNfd$_h zzjt(P=$A=@?kreXf~7Wii3y*)pzN9|1IuMuacmiTKYY;AL3+@8#@xOw$)A+SfEj00_H1CQJy<- z<(_ViR+TqT&+tx)Rr%U@_?k~m;~+bYBC;{s)7mm!UL|*;O-c9&qOLjZGEPcyf3?4V@m7m1V-XxgN zj{e{!zc%fWI!;g{kQezRx0KUrayJvTQb9oMew1Tp?qQvEgXWYqUh!BTW;&qtfclaf z@V`mKp#I-iMN;w0!+m+h$VB{}Y?S(4C3;_qay1VGc3>4hr3(Ksby4`NpqpsfgVWTwYHzE=tigg?*c zWB5}75K>Oag^e4{%VpNxso0$>_wj3|g%yn()|lOC2t$nmZr_xZ9rF}_E!I%Lc)&f; z7ZzuZ$|M~`*y@0+w_XS&7|iyuJ3_o|^4~^iL43-t-BW&yHsPf|DRq@)FGqPzXL%Wt zb>*37$|rGg-!c%VQ0-=$W2Px$Qqca$k&qJ$?X@hf>JB;Oi;dwl59;+*E9ZAOXUO}m zM0LlsGTU~>oXLE=5Zf*RB2jAnbN)pHRiLL19)IteuoV~15}~=l4Yg6ddvukWpCZvq zv}igI7;xjNUZfs(86avaPBeI8`{xP4Y$Mh)@60dnx_4_D8_F?cnU=G9)J4}wdu>0Y zomQ`P*z3jg?z3&5&A3DF&n58Y+2v0zvJNuI-og3lF!rmeG!Z*q?D#R>yOn5fSaP%B zc-(n#*q&Brg2EE2$WXz>|Ka`*s_x6(^+e%~ZO@6b9jbi5F#+X2 z;5c3U)x*SKiYAG5J669`jych{6YgT%U#5n&VL;~7kZZ5Qukq-W(9xUt@J)}4tSCxBH1 zK^_r9R7u!R`iyDDh4C2c9|5Gn3y`xkvvF2oxF$EJ49FVI7|)^gPy<8PkknFn&+)BY#)-%FYAJjMr6%rPp&18Hc6*e zN}dRTgx=hazab6|m zE*tDt**{V$3Tf9iAuC5ZRNe!e-Kz&!Poz!~GoncIBo8zEz7$c}7AfP|n58#z{@9Rv zT3x^Ct!h2XH}Nr**pP&PRgEcaRS3<21vy-N8G-UK{x|(9OC=hhd|}W~P@Cyi_O}_d zqM)JYy$(v0z*}+LiXGvVprAIY5*%beRTSqCgQy(#3=jiQGhSPvs8XS<&!f(-|Dm>VS9$G#^f1bEMmh za-G--thia{4xgS40v%5EaNVjZ5;bCnM*HiCzqbghmzWQ7_hsc zjksNi)&u;6c(oTih)PTAw3qdfIg?JA>PsKWqR!8rQ21)H#~jN#QDR^j1c)s z*VAtVEV}ygjT1QK`*`~Q_Hmg{1D(MLKCc9{c|MRDDj;pF`&GA%R-|<5_rx7gSuwq? z`9_DEPe-}^Kbn1}S}n`GlzJ|Qd&8?{7iJf1np9i@Uh$^$mA|1-4LD6kqx?Fpf|!j!SQI1EKoleFepiG0#5IwINScmxueh5L)eg=pb_AK}0?x0+vs7RO05B z|048sS$-pH8zyuk(P?irF5X%CNStM&%rH6{o{-<%U5Ttq6>4itGy{s5?o;JIE!o{J z+6yOD+d2iHo)u>`R%a|&7h=Idz9@YPw$JD&I`dmL?` zOfb47{cC)w1AM~dQ(SVaQb98Z;20g3*@Lk|_bhQrb?{JS8Za(-XjBS3lb}jAn}8_5 zzXI%+2G7hi!^Zbj_sx@s)+!=7CygiuI=+Qq0GWOCX>3HCA?ZXYT@<=9#H zNJWVBDGmn7r%M*3#rh>FW;DmBOe@$h!+Nx$Dsf4zpT zoz*BlpY%g`bL{PAA|%zi);)KTWbL1%ejB8Z_2#QZ+tLxWHH3vmq-L@G2d zwSUoy%^kFsqBsRUDRyybIiZ>xF$I$OZI8Y-+R7eJ_#Q(gx1GRHY5rNqJ_xr^p1RXR zWmDqayr9k)=a6m7npXI?J1K5Q8NF@xaBdzpS8?VQ-You@5r^A+t)7HDUp9*(cC3^e zRz|Ec8euGODD)#%CiT-0^V3_-{W3$lrWHD0(hiQ?`Yoq^L6E%PiYH&+MP!3^3Y?z5V2{Lo}kW0vuEq`;wm{Ge@*h zLy!1Vr`)$DwcqPmRaqS5BxIxI)as#w>!zoE8C5sXyX<`IJjuq>KOYu}oLcrZo+HQd zRvP~ruL;ck^#En5^{)2lJfx+a;;uoZ`t7ZR{ev`0?!BAfd9+P29q(f1)U?|EUZhGe3~&`)D+jPW7gN-$q97Dp>35{dnqU@zw@aD8Hf5GY?TT3CFuSP*Z6PDRtvOsP`{!{t4FjW5)p*8Oz?;*S- zq~`(4=M)5w7GaNM;Jrl;@qc^N^ctRB03QUuT;zr926Or2+h2Sy^iYNDiDe)+*l zQ({^_Xz}ng@vwIdh`1lf@Mu{$Ds$C&SB;+$(*Gt)BUW%5%P&3$P3V+gtJlZrqU+xy(>+4Pp?}WS*z$ubdE=5#!ujVJ4 zl_3*U2{63#EeU;|ASY2W#98FZW6SKicPXmK#YXt)_Hr#yLD&`aC`dl=D>LjzoFrkD z10AO4274@K3CIFtAeiJ5Zx+%dAg8 zVXGde0v;=bgmaH%Oj1aV1}YIbMy@=XIv5Eja; zP?DVb8B6GAL$;OSLOFF*J;%_GRrgE_6|>^^9poECxSavdUiwTvEQVv4PI8dTa+E`~ zWIP}!LDpIfkEKQ{aEElW$d;%v%lkFP5A4eye>zbs&<<48%&Cfh5?tWReza7KO)OtA z_&5x`FV*DLH0^LjJ7Z_9M>gvDZq(ioh+972&Y&J*FriRo{Bx^QP96MFaZ3O!8E$Ee z$}s2`#(T=QZt%yf(&ML9M?hd#AH#Rv;SoG_0uH>hJ0^n0_>-;U_*Cl|nJ2kkBfMk# z=%n`|p=yF_x7HiwIEWbH-?AG)lb5zR*Q9E5zaypv2v#?ZXnR?$b^DOk7M1C15HOl~ ze-Lw{#&{jPtMyzH^5+gW2vp;dNT=GQPrhq8W9NCKPu7-@8~zlM=fLH}xHzY~Quw=Z zdQXq@E6MrobaJ{tn!Pp$Q_3j-=-_$U)Zxpg?>m`GowkZ9*It_Jpfyjg-S>_gXl&I@>ubXZ3vKe_eJ)^aOc&V?4PCq~DT*^BMdYR~3 z7Fw1KIm}9#XXP~LhI1W$pVkF$RYs4A%Lq0QTfqt>nz=?y^0LEHcU@`c9CI2j=LF(O zzJUL;R5wj>@{RwWYh#^Yk%l!kLI?QeVK{lg>%ZjI$x;ynIAA;gg5>_@sv}j3Jiis+ zxHDDRblx`fd;)`b9trjRBUF8k-=bL1_2{t(5%KBDddkUO~@YJUM6}~oE3h}$aqnFoZ6GrTz$7&Xs^G* z$0Ag1o$XJlYLLx?a_xoMoj1N+>X&S5Nt3!*`&Ym3`|j6~X`rhDIqwk#>l+=*AV_UGr^ml>%rJ`87U)@#{p;cuN;Q0mk0oE7H)h zeHlK%J4efW$(#9;R@@Rl1cA!@2>Lc@9)DrX!yCR0B0De6R?pKtScB?pJZYuS3K%kP6Cw>ViY86-+Ia6Iim#NGrLoN0BuYsY-O{Htrqp4A>Qb2R^ApCviIk) zxG6Pw%})=0ys0U&(}>P$6I;dUaGn$i7*j?9td&*pa+%|Daa$NVWL5C;J#WGa>iA}G z(p)WpNl{z|*nV_|*!w3FqDEB()yRNU6BT$cTbzo~cnn9-P%avT09S?Jm=9FUzAS*x zmiwjqc~66ZpD&pp(2 zP%Y?4HSRnopIW9c8n{z{ig1QWDRl2`V(t=(EN(ceK=1cRPRRu=r*%X8(LVN$wlU8I z&xC&bEWs!-V~t5N2R)TEYVbHt7#ph%3y9?X#@7wD=#6_+*7g=7#oJdxRsi}MAMdl~ z^#_Y7d}ICkvwG~+M+cGDsm+w^VBT>Wgn2F|b>8wY!T^P48u|Cik!fPH<*|=C(N-W9 z7A%Z4O%Z}Mp(9{wo)bYye~Sp2VGy}z1j?r@*HYG0UU8c^>9AES{A}hdVhoHU{VJWX>T;S9{u^lJh`dY$T4C z3@`W??%{Py2lX{l>&YFz`&t|)7+b7-Pjc_h<9adcOOUGtop8`EtLY?4k~e$;yJ`(gS$8Ha7GQd?2Mo(7KiGgzGh2b2t~w~>yQVsNXn7$44K@evUS zoS&ZQ@G2V9?sUe{ezQd9AFJNoWk2x|?nK(pzoc}Q7%bJbsVc`+mozk*_#G%szf@R` zS>|rZ<&hu@6wnjnS|pv8;{caZVS_8j3K773IVx2<&|Bki9r&`$%qWz_7>QgTGnD<< z<$H^xT4_N)sZ3pkY7|m84fqK4^?5Fb-)g&a(O5U0D#wMP-=*Mfk|O24A4^=n5nh>I zoY;Ztx_H!>WE|#V?(>b^dM>HLt8GYiDz}3#@5Je@jqq{Z(F{4=f+OqI*HAL+;JAf) ze7@HNBDg{z0fpO1kSS=FuA1(8SG^aap!;qEH~omqSBsM;L{(>~mgmqo++L;W77EZR zB(331;{#0%=)C7|IG1(+EA`=bg-N!r#3lP)1>VS z3X=Qcp%Q?u_s=kK24_OeWafDC#c(fLPQoPlYfe;`*Ne(*2^`aQ|3_tc9+uCsEFiNE zTzZSCX~L)B4bDEm@>Nncg1)j_07h~3eH@n`m#W%Xx}d*h)w%d3ho)ZpN|+_x4M8I^ zr>LhsN+2282%Rev|7m#klU-6&&_o9PZZs-d}S$TY21W zZ{+pw4@Hf?>c@G+C{ps)wc>5zXh70>}OC1Con=ZLPA-Zrkr4` z0-Wv=M=_f2OO^|e5U7`2~td40viFg>a>>76Ts0xzV*`d6M@a)5eO z96Muw*w4kDmad15{t`CX8%}x18#hsRajHFl{%fnAhd)=s>~d9*vx5EG+Lg}iYwr2d z;TWSX88Ln&-8V~v=$6)~y0VR0gWnvN*s-tDRyY3^E5fuLqrs?ML+u(_ki_TBpw-Rg zVksEN6TklChs%)+4!25)6zpw^z_^civUxE0!7h4gCi%WCRW6+qNy9vA>Vs-?$XUg= zX6!D`B4PZmHFe{zuxX8ZLctK5kHXRyQ>*pCe?xp8h$5LU)Dieqn*I4J`3qf6ND|eW z$#&un4F&J;1xIae!&}#NxuBkRLzh%^T7o`S5#LF#KB*iH!$b`y8$mF9rRLT+wdSSO z$buOmdjxkS@*(~L#@!man9XL=%FDe!4=H+LXP5P?+NJYM(3l8SORo@;N)Hp2+J*x) zRc=8==PVGt?q#Qpxk}B$;Ggd*DzFKYuvMz8Lgzs6WMScIE|Vn=cVZoEVa4=9%eqTW zXNuCgvd}^eqLEifXT4iVWf!fY(%3P?r=nt~96#A7r_!Z0D1BDn3qZy_VsmG}u>p54 ztHsy8&zNg8Pm$k}zSvoLNW1!{H@(!6@Y(-HwU(OweDtrQ1Gz<>erh`DOdH_Mtb=U< zq>^qhVnH%EtFOIsrXgbKWP(}E)H*{6@;zKatrR%vXWpTXT&l=Pr7|91%0$XU$3w2l zTm>SNkwU3hscPZ_@v|f=9vLqr4LE=5zbq!lXmknJ*=>}j!&&JBa6$tS$8eq<+}H4B z(mEGBCBF8KTl~0mPb&DgWDw@SO z0^h36-_nVaGwu`aXJ4v2jD(|sUD=Q*C6au|_ z#axzhJ94Dpi$FnKR-ZQTMc)*IfTz8sy_dPzC40qZ*QFzP{p$l$?Z=2o8+6@e^xEUe zNsyP>gaBFL0e5L#6KV4N_&$U=+tcBkD!6c|YgH)z_MtiSmho#`)B&uS8tw?y{b;bf zN`MHYJ;Y-Z{Q1Z7PH$maz_QIF8xfC50s)XUMa;6g%eL3P@*P2|=5QIrbja}zcUsvc zet>4hCq5WNTU=Y4M%epZ3!dBQd3uoZOYUu>i)&GyWg>2e&GWDs2woqzY5%7o9}9YB zSav~)54hp^vhsFPRTmLg0QVmkX$C+79KAEO?Cc?YID`?-MhhGlAl>eW;%Sdu7f`iG(xYK zuMsTGhoBj=o?;&P;mdz1#N6cN8K>=X$-C1qgF{x=Yf<%&uzbz7>#BRVK{(@?$^%O0bBuIzd60(<6JRpYK7Q-u^YHm zU^I8Qlcl|fLJ(u^O4~Xih}iCHq}MWo4JE(DHT;Hvc=>PUz7y~fE^)=d!D@6`=(s*7fKgdEn9eznZLvC`n*vyv5&3d(0 zvt-+Ea{?>c=UqMH(7kvS@6-<)0G0vR(ZH1$CTh*7dGzu($`>jlOIL5@Ihk<}Xh6vB z^n!&mSh~gLtqJY4OYaR=>M}PsXNpx|gLi#H+71qmQ*_pN59_8G^}KwR*xad064p%; zO=6?4?=@U@*ypFRsG4@U=GIATRHL6lF$Y5FD+F{5<71h2v8bPzBuRv3o*GR1yQ4p{i_Rp~Tp5J!R=wbCMFxnPkZyo3V!6KQ0eoBph7(*%mdW-f0z_Q$<>T z*v7`2{o-Oe(rKKqT(oMs)QHU6pOR0TWu?K5EsXqc`Sf`RKb4urT1|3hMPf2^swgXI^NB!Q_8XzL5|{LD0VvaobJB{Ka6r1R6~1TWs}TI23J zkSf?`I^X8|A!<9-%a-I3wAt*2cHk9>bWse@uV_Tc-wnbtA>~7@1!_ ziI}ycLW>1WfBK|rh@-h?T$cKv+U7sC4S4?AFK>(qv3<`Ej*Z%-={+=8MiJivui?{{ z+1+0&{rEkdZTYj5Kj`=ox8gOQO>Y8UH2IfrL<=|0lGiMuZI{u~ahDyHDY&Gd)23g! z+6{NYny>dOzxHDF{Ctgf_zK0~uvg*4JO*^k)5hL)hF#Ik(o?qxMJEWl zSoYCMtEi~64Pw;OUuduOZ{nd%xDE(%!Gw8Z*g;cTJ7cc4#HdX7JaY%c)mJ;-YW21> zcUF><3Z1jEA@=-iZ&C)Dn}!E95xH$LkM!S%08_?Ijj4F86nYkqbxcKU3Aq9XQ+?Iw9!8%kI($6+ckASx-Dm1>7qFELIyAlZY~}BXH8eO_=aGhe zapO#|wscbr%dB07Ks~XXYv#mIZo&|u@&5B~|D~@(L-iSou)&FS)7*MqevV*peG+Vt zliMti%5Dvj&VKEAB`@kg5kh5$O;?}mAErLe!F^#@HU2TwI~pB`+Je_!IVR4Sd1fOT zz5*>Uj@PiRYe0l^f1;}I?m3jwR!DvG7tv^KRHCtCkCU`H`@3UzN|FD2OXj+QlXUcg(8 zW*4BL$IS8Ygc;Rg=);5!HrEavE!rS-0OG{gW`4Htr`sLjdk zlqCf#4=zH1{ib>GJBfl3X9ZLh=jR559G_HLfV{E{^{9xhp64Y(6&iv@lpjzt>Hc60KS@N)dHe%4)e0Q zycy`e#nZR+n~!!_lE|05m8{)l)Q_{j?x|B2u?B3d4vtnx=ic_pttSJMC|W-nspuB# zL8C&rh6}^IVIn`JMVTKf4N@>GGqF!thgjsB4v9IjL-}QEQnRf6)|K!hXV)ndYWrM- zFPV59&RWPJ10lCty!kDrYX&UDtORM{DWlZ2P!6lr1Y(_DG>G7q8bTeuyK+CF7+(czcL?0oU+_s-lEl!4HY{uB%W{bxXHZLv{Pec8VodQ~eTLuu+w2Mg5=XA%DY{Sir^3J3EL2 z&Z^?7uoEPlg&;P4Q3Muhf@iLkJo9c!uH}`1Nk&F|;t5pTPcsphJpc;ey)U`8%nvyUN^C?8IjA2!C}hw#l7VJeuD9>9D&!zpuNw zfTgphPKOldlF~|~sB$~GW_oEbQXZOSGuVIhozV?V+74Q$cA>10_EImw?o+JG0RB~T z{l$L!Mc7=b_4pC*MzDWL(JkWs-3_D1mjf)Ts4SJU%%4|#*4@OJnEU)=s~%+9jWC68 zO9_LmqQ=wnSK|jyAq)u5XKyLtBp=@^x9WnBR<#?Evd}V6F~IAz|Hn#%N99MFBWcu; ztIWrrq)&BvDyUb<1CD3dYyziXLwH*U`FB~BnP`VI@;nqxd1<0 z)vjD~OI&bF2OT2V&|js(d``2A%4v-e5xfepdEv0Z)g5$j0L*{fTqjjYd4HR@sDTPF zsdmd)S>i!nIa2NcZ{;N0Q;P$BN%zYgu*~^u$>@i;%(U-{txgt=x6KCS8ZsVQ!HuNW zmwadE5abUSs|fTaoXha&^M10%=A(Ar8vj3PygzC61LWyh5xG_#(`(`oSTlT z2#XXks3RvikL6V0+S0Qa0p861aTYOSgJ!d*IFGjOsht}&?AEj|*O>r_fjg;@2Lytp zhmj0oh&213EnY3}CWUgU0kAl@NVK2|lu()!bp+@~eMqQqdCu@P5w;%xVQ`hP_b`ET zB9`GVR5TueWhdl@r>4cFW@~bg)iXdxrkyj(AF4X>3e!vRg7#~V zS)Qw?GEK9YjUF~TCekH?bDZY{=p)DuD7ZPb7~ZsyXUcfSzu+Jq! zVu`LlS+k(O*F~>OaK4Bk`5BJ@aC5`x0l7vZ_i(lG+ms7qvC-t05qH2s1|_-q2)NmksjIaGIrrh&8N ziB!A@Hy2JL`Ou3tW8I)%(}1gS=;OyQxF#ad0+vT8KPE!j%9>~R`H5wMsvb+AHS26b z5AMtj^YPt)9mzRS)2&SP>Bg7{_XPs25Y8U-Yb7MJI-CPC6VO6q9Wp~Pm$lXP~6b#NSk%LjjsuDg&4NY8bIV~_m zimrssmLl_?xdAjN3JNs5ZjBa1ph_G>8ICKVlpK;JxfM!6JvDj|&Cn%G4nyd4hx=tF zB9i}01T6xTD$-V#cFYbPK|}dK;_+)1YRQIFNf|`fXO3nFUENRl zR#N{{S8^?aA-X*Cgdzoj!xN>Fhkj~&Y7>&L9WA5rR-|TA)dBfqW3PU+FgDibx8Xwt ziHg9(17nAyndD@`uFZCNE{yP@zC?sDhUi%o5H6 zW;ri4sxXu}Yx3DFPW_N)|IX$|Qb6dh}$KBi04~G=9Y%CEUb4yW+hDb}b z_Xc|lc?r~HUBt(#z)>?Yt$p(BQ6df5#BDCu!95Bl6P^!{joR2;Enko6?}CR#8uBvU zw;e#;pbv{yu)Ki>F#w!EAm~xV2l-Hx#{Jj)4KZPdilt`=FGq(;W*bMW<5t?|aD_!2 zQ}y01vQ-=GQB_y`r=`kG8?fpZAI?*QP>JvZuwjX`K#2LeE?3J%t237x#7V7dps9X3 zZ-)}liXU)1CV=sTQqDR(@e~D9Fxx8_=_~JpOMI;3lX;h3PUkv<;O|tI*Y6!;)3d>& zU8|-xl8W{tzbITz*c1nx+hBnXNNm`hIX4ooFmE}i4G7z}sxumoNbD5W*x!nIk{*rCTatA0yq+@)8g3zv8}rowf|`NlS6H)x%g_bE>nvab1f|mJcWkSjwSU#6GCIyhQ`#t~^Df)(s&C_El>=uGx`)#E z-!`+-`j$0MQC z)ffN{@xz>X>pe_p0PpxUjj4@HgoyPO=tE}!5)H^Uq6b$Ud`;x#k>G>Qr0c|OhdqLg zOs0QwoQ%fc#b!qlDola1yb5nO*h^e>3k|YqG|)Fms$qwg7t|U1tCx}}9;KEt?3OTk zSu{rODabLW1Lt1yYt>Q;3`Fc6 zX0&B7c|{Q#q7)*)1pU)LU_oTvp^~erI?T8@^7g20eY2sHMZ_ztm7Ab;kWClBKv(6RAV(GQizm;u=ku zrTkjr`s3hFKAYM_V=HFftzb>t-8fRRtI>tf0K(mhi=WhQ$`&DMhiS|pwBsLZC)^dp z?pPVeuNU_>d*AEY4TNm{ML)!Sof|}%c0c`o)nXrtWfU@$$XgzuegA25r+=*``Dp%5 zJ`MXI@~xI}2LTlADj0VPca;^KI|H52Q)sQqb!lrN8_-+d;eO5MbboR;_-YAkupIIR zfYj!Np&l6Cs?98GBY&0{%hhBeAy0xcl!0YqnEJ$|^)&U)#*pn{$sZR#dr~8jGjAPG zxfxZZYFm&o=p2joUCERaOeIUp^~R)j54awqF_ep}92~YR^K*K(*MoK%n8Xr0^E+nN zx++rTpXDd6k0!PAK;zgKOE+n*3zaj{ za8O(PcWUaqr-e5)wtfYxc-bmv2VS_x#9Vs2mBz-gk=5K;Nz`V>X(|q*p$w`+$ladp zF4r*zE}GAi{ae|77B9IWr>Dn5WwL3HUr}RHo8vI=ZVQzZZl-WkxF~;94Oit1=};e` z_;gqLr#3>Fe~%9RMwcgpS7ct=qb1!2P_fr+@7D@rYplv!jI+&RI)=KDyTXn*J+tA` za7(7GbtMUJE4ajeg*a_7e%j>!J|vks%fO5L)~@MlwJ$IsIxty(Ve-OIN}uZs@;8>C z*=EtADPNU1*KbAD?mTH7fhWdr04)7qgh;cm#&z1>CS)Woxkn0v0-+9leI*jSspI!qHhMQPe*vDvs2Si=mF z@Ka3!y%QrCS>>wo&$#G1s~N>pv>Lbys#pc5D-#du1F8(Tg&5btIK$^du3e_Q@?0`q zo9o4DK-D$lDkY%&@NH)|Mt5&_;O7cn-aTxvZH$rTObDyob2I`BR2Xr^<>>I-v?+~O z|GHI7{wA06#Bdr=bAFUmy|VJl`G|qZ-#gr#G>2{}E<mofX1H}w>}cTY;W3f7Hp z?XTMN+8u7*+0(9)mm5Dm`(T0et@2inaJUk3PxfntzO~b?%x(npde^>5bCyu;~7z`-0RimcKvpVf3i2?4u+d&Jc{&=#N4CN zruYwrI~A5%@6ExY+%&!b!XKLTRxr)_NDl5P`XL3naGNAyE}Xj~c36}8JLWM9HKLz2 z(;H={`}m&$VeV@;94ra=IP8~;$FX`rMLta}<0(X1sz+w_YNegs)(jhOgkT-=yoebCz=Jcixd( zla#ZD8PJ7XebsJE*!2$IB8EjNrRifHC&{9j)fm1$Z2gF{ypOK2>)rC(@K`Op&wXUs zXg(=7apD$hp;I0Fx~6oeJ6-h$Pi^0u&6$ifB?S!Phym`E@Qo_JAp@f zyEQaoY?Q_hVIxTC46|J%U1&_q*pzRmEmk})#UA(s*?PIVLnjX+9c^{6EO#(=CMalg zsguz`zsPJ6mzI&^f21wnQp2DWu+@4**rCJz;X@oa<`OSerU1~MK~Z9T)vgwQOMKDU zEr8`cS+X#{b1%~QYMQDv?RQ0IB9i}zZN(miGKhLva!iOr;_5gleROcimorxkKJDR? z>)m~3@9xbd@7Y#xx2O;1PI+5bSA~J^r#r}I8Lf-3%lRpVxo7A6RpGr!YTAvm+YW<} z9XcPU92CPhpZu5Y;!z1>Lz?;ffCzyeZruhwm78gMyl4`#T8yJOJuqhg6taW#&7(8zXqzDELnX&LH$u?5ePB` zAFe6l$aBXgx2Dn9SJ1~c!HQ1fe?H2jS4oqy30#_=T+`&OP%zKu``&qM_wE*_KlT(4 zPq}TKrzg=f^{kD_C6Z7QZl@2@arJN(%;3;h*;oFjuc+oGHE81hbng)%bPV`oV`N|l zk`hqIv>I8^&n$P6&eP`Lvsc4+IMR&cf#6a@@|F#FDx%gpmDbZb?R2^pQ+SHfVy7M{ z2gW2MGhVgvl2Z+~`5@6iY=ft6tA2*x&wE7h+@+tov)_?25ukFm2VhPSXO?u+>is`l zy=7Qj%hEO+AV45UaEFb%!{CtMF2P*}2{5?3y9Jj)f(LhZcL_SUyF+mMNcMZqd9Lr@ z^mO-Jt7^@?s;XDjUDJTbD9@0eFu!p-WvnZtHTZy$w*D89vDKp<8=?dBj2EMU&?4NiH-I8^&wUA}77VQ!;fFdIRqFnd)_&iLjFdSnHo9~L>f zQ9?Jo`GQOx%qqC+v)xBFMvHfp!W)dOTBEU0{HkQBpM`pZtG?_ z#JM|6!?yfSl)1X~Kg0F%hcY7E+)60ALd9(Zg-FyRFplYaOLPh~L`Y{}7U|0UjvYK_qE#-wVhT=*Bhqih9 z_hF^ZK=416s5ZLmYhH3~PIRYn9y)W|dh1_zYL^eN*($jiUGTMwJV5nWWtFjzg>nPs z(eWEdEvc3vc}9{8EO>MJk{AqlyLraW^#qWFsu}@+Rj52<@EF8ZNeeXd04;t8R4ruk zsApHlc#07_=wZcRIkaoilld=Y=uZ z2kZTn>-!Vej<~2*5|8@WAQS7Js+n;T4@nOp(*`!vIzDTY|Cx;U9o%%*q|rSB-&6d& z^wGFtV~ zmbnJfQGYN^Si$hE zEcgFo@|NVF4RK$V8!yRBcgP}$r*1S_WDV$OpisW!wuCJfmq}c>@#Falc!sXk{} z0+vkas=}NvGq7ndlrlz>0sBz9y?tg+c0{4S8g!qk(IM$0X z=^^y=q}ayLO2}<&a|W@5n}qaJj=aHR9KUw+r9-&Q}O=Ps>W|7W)wEd38Ku;hF{s^w#E~x<&qucN%j#% z$M@6PCs7~L^mNxxTR2YP)Jf1>*rgoAgr-{>;v4m8wy+QIytHm73q^|x zoW0hY=GtzOJ-TNaZE0ejuUCiow@K+KpZDURmoXFHUVwcicn+19b`nE%n(WTTUi3q8 z*FhUk;8bU=O?uwU(OAG73fj;CA#Xn&8kwBzHqfZfO43Pi5f%J))e^*`A8B1uWZzh|7wrV?AGw`Zcdqf=zaIBoI~{tCScYlue(t zuxbx^u6l8*7^O3?{FQ9YziP|{2>$e~TRVB`)yt{PN%}O7GnsM;k;$YziLXU0m`Z;n zV^PgwY`47N%^R_v|IGoM%B%x%A;bJS2*x7G#)>FUSNunpw_X}aKAoIC`=sAX zgokjL7Pj6KU%zXh(kKrQb}~3Y;e_S3E15(Y!!bA8Ge>Dm3FZ4ym@vivBO%S5ZR7fki-bJHVnh}s*bV0xjJ6qI2E_}a-gR5M#LlQV zcAJjM_L@d|tr}g;yggQh$>(boBRI?Yb}uUJycCSKn&&dJoIy-Ueft`B2=_ntW5l#7 zlV6CwtDc{CxldZuQJ|&IlBxt%YVn=p2T)e%B1NDpO+eN2_RbwAsH$rn8}3V&p!{YD zbzl7A+2b)?gExE@;1FFMxi1O*ir4_NJ6&sYW47w$|B-rba|D?=%r%$}zxf`*6W ztNJ}bwL$?C8s5>A3*_02D^7>@mOBErm}k#kuxAki0z&xHEI|*lva4a8`c}&^yK6Xf zNG#5*?PTMh=kADaNOmRR_2^>L$FjYa>2U>nNFPVC42P4vSwO~n%vB{CKeZ}yZ*7uB zM;2ib+>L>23y>_`-=hQVrOgi^VJ*A2ts_R__z`r5 z)15s`Nnub6S62I-H?hIZIamM;_Nvrc2tUu8Gt+C{zymSPa&CZdQ1Tka8>`E8QN`$5 zy%_|@ZmOa3G=DkbmPMmK>G5*9yV_C1fJ8$g7S=c&G{Jk=V zENes%z-|kd0%aXF+#^Et(=bRP(>m^6Z9-Bx<&2JntCp3sPh%UG{Ws#jj%$Uw3yIuAKa@1zd=2w$F(!wC8jI6|(230YbdLUaE|E@wG9r1jV6OX`;mF(NgOchnT z8G5;Sn%GH9>8JS`Xp6O9K~g7^-OC%xl_H03(KruXQw2qyW<@q^i)m32jAfAYw4vVq ztlQWq=00}0D)X2q69qCrQhvtLLTCM-U{5n$QC7?wTeC;)!9^tPyz4Th-V zwr0~qCs>WP0wtNHm(bl&hsxVaaxrn^@28On7(}tP4kGB<2dL&8WVEC8>5O+sLg)XSV@&9; zqn+j^NN9Aa%X;}z|HdMI-wu3WZrvmOQdQod%{-O}7!+giZJg`6VN%=6CTBdm?V8H> z_II6n;K%S=DP5bWKl(@v!>{f7A~(vKB)$QoW7R+SY1LM$AGnXW_W|_`;j`z?nJ+=# z@RVjP1pWm**POPMX2kQ^X4?GGRNNm8kEOe(56{St_0DyCRr%QaaOrBI@W74v%;Y|T zzwM>4ri$G?>tIfMn!{7T;Q5nliO)cOCK|V%VAfNx&pm#YN1a4;r*`s5>&RSl{ff4F zqS{&aG*-^_N>wI@zfDiL%(%RNL?=@a&jAh|bdmryxB$^DOI%Vul*5if6gK2pXCzlZWspl4uUuI+ds`i zyO8g?4j;A8on~EXT_ZT?i0Rnzuq7`RTe=K=HknneG9Sq^>QU8gnGn};QUxut6+vuW zy52^fI67~0#zsBrx-H}4icbH&M01DwiNgLLbd?BLzQu;YISmAAo`Gr%%?5p|a)blzE_s9D#PhuBs7K!=Sj8O0 z1nrE{+$F#79ZwRYhFAywX73L}(W~^s(kw(mM;VAFfCI#b8*(puWN~c5%lEcfdYd~i zJ1g?FSGICDU%Itp14HghgAw%ZlUTE$?O6`f`J2T(rJU2EV=YP7gb$(Z+8}{AR=rfc zgD#Ncw3)D|ttMJPG?37(B$%<61^SfQISxN@7g$Ayo9|;*ibzb1$6jaddkK{)IU-%` zxEicfY(1rn+La!(BP7LVR_Q9q1d5yG6=unBQ@G=9=M|@7L|o@@ulA9v~d!%E27v_axXl z-Nm0SEb!`ryOp0k3L6J@>VCFM_tglJAomyAsOz|r2Ky=a_3qJlOzk-@$BcO%c%iql zB~i6$=3H>@M6H$Huq5uxtE8f>hN#9*IV=^ZVU1NRqa>#vzh}a4K&@Y5GNx(ss;q)> ze$zAuBKXSL$YIs6#$k#E6u5MHV{mn6=M9~qlAISBL@ z@UttcZw7@ToY^j*FzqbNwMhhXK;}@u?s-a(P>`kNo492}fNROzN;I1e?SQDmo0gse zVsmr=J;+j~QmN+8T1Y- zs5ccPwn7gMR$IRty)a!8MB`mb#)tFVt_TdYg#xhrSnsAR_*l7lMc*n-+Uo9ulSZm-X&|7p+x(Nft7UVAnftR3?^SMR&l5CZFqx%qNBh zE0Y(o{)(Fe&?d5wG4BOjupbGGQboXTtu@wx)zMM?kb0=Q!HNq;b-Q$xyBzyAyZUIX zIA*$3fOQWTW3z6lYLyG z5;@*{DOq0{C^{g{OW6P;SaO~z7iXmok4eXCkFhUPY0oomi~p<^9VI8x00&e$`pCax zU2B_)ULM{u>hv^d{AvqsL7(VZ_;Az~aRfYvCtfe0c=e_#F0*(a5?$N6Hd3^9I4VkZ ztzEFD{6SCy^q*7D`29Qr(|~d#^R70i|wE=84{j+Qmh0(;q5Uf8-Lk>nSQb zw2iN*w|LV)ZsUe?$Lt1`&#ktDGEQ1Aaz%Y{w_NOEaZ}O9Kl;%AqYo=91g@Arh;vdF zW*PWzpOFcRq@_T=^W=Z?dz`n-Q%HaWlc(>XE%Qx;$^x%h)%c*!6ItO4CpY|idU-O;CZ8^01?qktPi6$uf^bzV zQIbSZi$1oRhNN-g<1r=bv!W2T8j7rNL<^8O>K=gY2J}RgK!O)fy*ydw%dL})V;hSz zfMvJFRl~aiG-0I&m+s+pLt(c$)>-0MIqE9wYB(#`=JM08Yq8FQIU@7cy;GKZfvX0h zt0k-@L4O4Jso|sZ~(uhj98gHOAgsnW_t@jK{@VyV8hL zSc+fv=TnFsFw-Z-ri*{^t&Y~#iQVDM@Yx{da_t1>?Cd(WJO_Jt(7Pt>b`=Qd3Z1Up z2lBDbz?ff2zpq(tBrOyH= zV>8=c!-Z*9KPWboTwR*k>B3NsSc>2uDTug@6qM1zz;nynOo>KlJBe(yx37Se-?qM` zH}~v|IO2We(A};*EcTYax|rmB!6cYu&Y>ZfxfTD%F&X?tZ|N|Vm00H|(CXVliFni} z_Z{-I3&ib6R}|#U6UEQS)A+rQ+Mzl7%lsn*XH=s<&pQr^(|~cWCQ>?6Cd{^WAjaLf z8V0*xkV^+2INfX)NN|ifCfe=UJ{Ch zU?%b!Zq?e$%K-H#0WER5M#>3TIJr~UYW%3gGHR`|^nK1HSXtAng!C^^PG)^=A4)Jc zOgKEU?KL*eX0DBH9!J6>*sB>!T{CqMYc>geY=bPHd_%?sm@Wvo?!s&weWd2;JqH*C z^sVyKi?Qn4igQ-0-9MG>ZKAngR&Yc(zTJtds?8J4FwwW4u*(X=>Y(oqzx^IFd(-%c z&?VOF6*)u+BPZ$qbU@xev_ zG5Gl3wbY=%NXxCNq4B?KTY3v92#7`UjTrt7-|TWBQU5*1tneyXvcd@NUbA+t3pwwr zjnIoNU6`PRnyQR_@3)lKCRJFTMyIN+s=D~#>=7<7TJA0@4E%rs8~4e39IY3Q`X2$0^q3=yLU@dA?bAx!gLh` zf_Y0a0F$$e^^{S(dU0UX+92mxMQ_@iQH>DDczi63?}ov0IRHA5*BYv*q{0P_W|c?!Y~F`))mr^V+6@O%UZPvC`@k&Vticvk?}19b^`mB*{F;8 zs&ZWbWLg8ior+Nl9`_6}iPsvfV7zM6d{dtJZ+ap4D}hR)>jpF3z~(2lzNfO?fjQ0D znW{3r5-m@G1%#!Q&1z%bykK$dW-HwRyMx((-px$n=%(nm)n3LKz zS7ri@ec=Hm9BWU$tnLuI9aIA9u;a!Xt&-~py+j=d!W!WTtlr=d2B@0w)H3@ zHZ%)#Kj+Rs9Q7~bhPVa$Q@J&>Zf>ajj}u`qQ0bu;GZw48N3V^Z zKE5K}L615+iDYZcs5OL}9L>uf$=B8J`6yc?N8|P+&I*ucZ@&3)HjY-BO*&Tu7{2K; z3H}SC7WY4um7<|hNVwMJ$Qhfv@(R|cNL=b6@^&>-@!-Ub-NQ*r>!;5W)=%u2X}H!Z zzbLJR8EXcI}t*t^uiWl_4rF-z%piRt(Q=#N{^vsLe*;uV=q4Q z(D1CTs<5Ikp6g7Y$J8rhC06%3`nf2_qS5?g#-_NU%Jl}7z7pqhZIHYjdAjXUkK7AF z!$tw4V;F&w(rgfzOl;P68oRkS>gUhHHz)7!J}dj&V&@UfUt%ZaJp)yX0$;gx)%a2i zSg^l7gekSq{yunJy~HYtSUmaLX%0qt$rxbyzuN!*Tj|A1lvTL}7(#;qyoFq!mwR!z z*sTgPq`vC7@N~ZZVAN%sp_(n(SRO{JfFLtJHg8J2%1K}SN(%s2-F6nV4m!R;E9fc88r#lbq5}Ca#AZhwMaJH z-UtwFRK;wD{v5}e8E4D;&OI@)k+NLF~c4UV&H`lVUs^;nD<_Cs89 zoHKUoU1k#QT>nk$wy%@C|+q`dA z_13xg#VA+NR0O7;8kv8(f4riCE;t+`xz#DY6~UW*#III8ruD`+9H2^qY3%vB&!Ycq zS_h2E!_9lhh-$sj41FEY7kDaULvjvt6kL?5=a_1}id_*GRq9=3`!4PQk_%*tE5ts2WT)%^@C%Ley;bi#i?}_o+I6!zhCoH3ss2u z@Beytz>5?sJ^Jx)Y8F3Xs}=DNI<1nW=5VAD<5KnJ`GC~jHny&ydfjz9GQcPs6S|4 zrhT?59hmW9BrnKQh{*PWfI#RT(mSSaG*_WNW6x*hqyDlikeO;^x%=gWGZS3-i?h;< zI8fu#sTgZlP&KwGlEY8*URAg_D-3bi3^68DcxooAs1Ceiy#y5Gx)o zGt!92w6VO|To;iLu`?_Nx49=!g$vcU+nl2g%G@@-%7f_W{th1#mIr+7+da%t0GT@A zEsTyg>gPaeqXerE@>>go+8PUK0m(q12NMvuv{*La0wPHR6xK9mDax6I>h+9uc-SMM z+H{n(8hacQn}*l8)-7esxnu^S=ywj9^v}~SU2tjiGqxkmsC#xS=??gw-k!$92mO}y z6wc2rGK;Q(u2(K}xR=X_X|3KqDjlTZ!l_Ym5u55_lp@R*YJHpsiS^f^4`YMYal$(Z zo&wcp;8tPp3nxvMcC?o;)9H`8iah8tZ+}^ci$uGlvk8Tv=$@Hgy?B;4Fxj^0&N(lS zH1bp(Wt9E78MN~)S~*X2JFf=~Z*wHccK27-xKLQ-F5Xe;%eq+6XOkO}{BgZcZ~XR4%oq7~+W2W)#12kQ6GnAm8w3E=+D*Gcj1M>F=DE zQM`j%zM=AIDIH)%EE%NLyh^FEZQBOEkkqwFHrelvBzsd(^fMw+!chjD;rHlWZijTN z%8cf!^Kdyw@%a{GvEdDOF6~&mw!rF-XM7~L4J>B~&7c;sve}b=WsTCY3Ck1>DR-%H zJ3D*T$7J;_J9?h$zXrT7za?+4SjU4_Bkwis9p}nYo(aHz_kr{sGlV5-?1A^;X!-xZ*_fYF1mVudai@ofKY1yMJW6vw-!I9$SXbX>CKCOIBbTt zzDtDXm}?#L55#r-wjCXoaNvrzhwL+X{~4s)#FNu#q={tG_VtDy+W8)a6q9TeE*h_& zrEvM~6;ZrVznjqWgRjx)KdW)UM;@yz-LEzu;(>%lpF);je+KS3AY*BV|P}_>>qtg@>$7Kfg+-8Pp9Zwb@0TpOP`Xq+v=A zBGLG?C2H^8aZUU5*mr_g~s$oeGSB&$_i&)j_q5NYH;F)ZXte!%|&-qFi~pB`IzqEW65( z)4gXH)_fPg7r(V>r!z=iD_ItDi+sbyZ2#@z8!pypD>mJ=b;t8%l+0$|nS9e>X+nKrKW{f0EHMz}_0B!8`1KK$KZ(jIl|-$K91Gk5L0nMnm~A@8Mk z8cIPR-t+6oIV!`A{j*2hcU#aMt|M`#gcgmwI9-z29-zGD>Gni~EJa zr>+h!xG(*-6`kI697a2JRH`+f&&1H^F2UBZU>!Zk zl&LK0q$%ZN-QT(}qi$#paCWK+D9NH)(*h8{UIbY#8rqew!Al?NrTU<1jA0OC2@qjV zg@{Uzo5x~0q?tPK0Fr7X7c`RWj0T6D{wA<2jG>eE>YcAu#>@XT5egz*YZY69DRI(=YhbFI-?VqelY23V*I(bU>2r^o7!M1hY8rlM6L zw7YEmqlBZzs-Z^7$gYrEFl8F+9nr0ZPW*@(D`F_cQO zKs5$i&R{vfu*&BP4W6b&t)+?i@_J&ShIBF5c^#&{{IaRycX&UQv^c>pvUGqD=@Mbk zaDv)jzOk{5WSbyJg4g}rUy3o~1T_;#0)1JUoDUTSIC82O32gs|aBbqjcv=aTIXfp9 zaWz^Zi|)>_2qfh_BL<7=P*r`O=0`~9O3$g7ji#vrvlKNbZn56LWU-!Cg^$}KKzuP$ z_Y1lqUsSW!sSH-_Us-M)XQA)!nEUl(4CD1@EJ+_@?TPz}ij!xR(woN__LQMHlRw%X z-uLzOi$O|6LgT8-k0~-?=|!` zR^gw-{65$R>ULVPRrmCD%TzsuEBcmj8C&PiaYT@621Y0MI`h;M25%_7Iyj>*Iea}7 zn#z}ZRyBroOcWHYT_hX$sYQvGH?=D-XLVW&FoQ3uZBkbTdz6hWe4(<+(GasD3$1(m zI<;0RVbnYflSj_df!B&~4YX+pX1||G|xg zRelmpK}~{q_%B_uj%|};bz~8xUE>*y)ZfT$XZd|&K`kVaQFe#v>6FL=p$K0f(A@Yt z?(`Fz1{;_OeWhO0wZs{PRA8~x*`r%Zx&ftjV zoXw<<_suE079jG4&WamHn#jtzMNtc!{ZArbS^JAq?ZUH~q9r?~@l>!&w#u)9p`fWn zB-qs24P6@5T66n9`wS(mZk#?GsVeo6V*UaieHyO>`8D#T*mc~_a!F#a-EIcodoKyN z@o%DRoZDPI{tD*Nv(dqot5IY^hk$u&X7px0ZqV+2!jDe?M~FG<#{S++`a`o(EJ9OF zMmtxb8odth8E|&~@km$A+uuy>3d>tfi#WRQq@lc_9F357>c)+EH?qWmy4ay#Y}bq0 z?8%M9>*V`MmEDmcPiJ}a{l<>7Q*5Zxg7$iY*l1=jo5 zx~Lm%&D;E6_iXtMNGJa?mqj-JWB#Cpe*Rty`okba267p1;@6@>$!Y25Hg7SZf)c&> z?;FS{QlY>sdP4Z8#=E;9R8kMVn>sD;`A#b=uG=>vGHNLB|5_vn6}tU z%Ud5%06SymEzC~8>7ew!eyYQADg+h2whYg}FWPMYw?aYR${Y`0T~BSArb!RW!emEh zi(vGZPaE6(`wG@Y%O|f09D1`zo=bDFnuLH_#(`AlvBeap8wJRfw#+swJH{CsS+1wq z=#Qh&JRB~Hs>GM?e_q&5Czz2CuM>NBso(i;a7Dg;8+7C5vuabVbGlxi%&fnC+|O0$ zfj*)&)(h)Am_J)tdC3WfL6Sq7@2#|@7T$nqU5buHYb|A9_TueMfGP;XcYcxaM5lJJ z2_+KJqjbscT?yiF~24wx?db zv{m-mENjF=B(sZG*D%>AkTO(VMuLrP9HK9+ww=zaq_Yn0{=R%%;;mjo7V$9FGm!hR zQkd{8|1;H^)xW1`&E~V?HD70gu5i7;(Qg|``9mtkor?w5*|S45+PC%WNtcJWW_MvX z1g9HNr{@Q}O*PiExfL1ptM*na0^GHQC(oG*&q-#K#a}zz9=xcpANe{S#!M$oDZyjS zOrz)eksD+@LqRBruBz>H3U{)!>tl0C9YdFVF9Mk7pIyv2G8sWN=^IAA6{WL9zO%rc zbqh;NKK5})OpChJ<8}U$t?c!CnC^rk_&ELd?&u$#b^pxq9 zTN%1d0{=ZR5E^j1W%?hibpD(euy|JgJu$%18=^SjkUSDTnhz1|*H+h5G-xo<@G|G(c7k?SvwbBqxDd)Ml&REk6px^%lYH9OGkS z7jY1tgm$s!^RtQlnmc3qq(ouFc=G*%y1p7$|FM9}^h0KY&W%V7%;K-<>6 z|4G!>EJjhD?6l!?&241ugEbhQV0ifE>z`OHQD;-1^lq&;8w@&efsq>m!QT#XV#i_T zI{VO5n>54;w@{d2o?%{|Lz5*3I&l|VLU#RE$SF>E`XBO_oc9`XYJ4bre@a!P7A}lL z4zeuaDO0`0CbP&=pnRe2pJ+qpD@0}_?OpV(oi3g)&>b7_{OY~@8Mj~?P3vk(ZYQZf z{I@1u{)E>VMXl&iLgi~7kI!OwZ#Z&&l`6$M6~*-oemud&+X87Mt)8k^_21pe)6`wv zvK;#lp6@cVf(Pj7rP$YIm>-WPwInM=sbtT!3v@v-n znz=lUg2$+{?1|iL5;o!e_CF{>&O8c6!qLk6D~B=7n&E(An9g-xLPBu`CF^F7Oy zFQltIPMi&r-WL{3uq_{$*r?Z{wTulsE>9fmi7f$ER*E1p&IQr5vA%^L5KM*kL<4e% z%d&;vmLf*VIkj}1;_~LRpocorDq1BiECcewS_{DQBF_S0zCX^-pN0POSCT5{{|KJB zY&M3hG2c2D&JYM_m#l}`;L5U}Xr6w`n)$Ve33k=Wjl+vItYOxoqP}0Ut{uPxH(D$)s0Aq!Q5JzVE@Wsn|`eUsH6n<fRfN{;-Uq|J8_@Nt6svM`8&K8r}emw@KygX`s}!oc>ivatZEM&wjr~38F{=od?bs2VX$I& zWw8vc=l1&1fC}6W)HADZ;9u&ye@Dr1ce(d%x@&r#6xHs-C0d#9SS5)YDf|no!@OE` z4ns}f%J9JDY9ta`s$=lxRyp&h#7;KdLP%ik{L>@H^Qw$?s!#0D+N&r3@A1{bDR^2>40U zZcI-38wOW3VhJLb7+vXZ0c~v0&0!idZQE2kh#!olih0TFS&DVZVojO% zf_*ia6|wyz5-!4&mK-wa?)Usd%d5#x&GGXjO?k zIz+b&v{aQrnC5)_->IjH?Z4DZ@w^HxOV9SXqMv>c47upv)XrbCYn9`7wUaYWJh~$` z@!I4t1hvYqs(&36vdaB_`%`x5#&%g$vlpSCet)A{LGAsu+|fp#+OEFw<@^i4y%8sk zwExodnjG5tUbP)Mg_!zLU328&?oM@1H;X=~r`CaYFo6vtK>3fDdRY8tp;lFHgRNEORE9CI#UcbE7N?o<(n6iNTrA7=IsJNw31 zexcy|LSp-U-y`EiayXtzqn>wCD>}=vOCo$3RMQ7AH?$8d0@pA&1ctpaua%!$$Xolh z%<~n5g|nWUsNzOWwBr!ayyj|sg{x_)#EDn7n*X7%OKv>dY7g7)PK%$@Vpf6`m}g@2 z0XP656CC1>7s3vskaP-GQT8?G+)29rdUV}})LTJXisl;N?n+HiU#rRffa&qW^8i&2 zU(ncsR5ApT2{r;QJwWK;>alfEHNW>t&HfyW5mTC!@hMysbal;pRmX7y;?Hk0&zDAu z9$i|`{NR%0ox+OZp2$n5U1S$gG3~NUaF2`?pS1LB7ndH!>k62l2bAEHh5SvrjqYTPP!xalk&J1yl&1TqBRT|JGK3Yu&YK~{BT8M?h z`N4(+*Gfc80OyIglm{MOCR;g)d_c7LZq&(T5gTw5+_cJJ@2p2FP{fY-@>sPYVcZGJ zZjX!P+JcvA)=B;#iuyaFz4MA%U`jdv|EE@M)^!-IuzI|6=dE@$n3vj*Fy3-bI`uFS z8x54D+l2G-W~7{(T_av2WESP&@D+1^H01K!a=wlNyqL1H0*Afc)3y8<0 z=^i~azm^`gPb67_jHMS zLYG$_NE>$to9Tr3%VBL5|7R2vJodNwnNQ(J`LF+gsz%^nGIp-NWb95GV({^`QfAFG zaFmlq2EKXaT=Hg{sqXQPYEFDAO72BWz5O}bR_91&fOaeMvWH9#KJK_%r z>nKPc{QQxD{L!CdHZeYQ_Tu(=U_@%BjC9h&e`vU_L~xaJZ{{P^BJI~lL$tjKPSN^_ zoPydl$ywStU(?R`g9fgyqgvXZk38=tCEC$K0Xlxl)<`S(ONJ+@D09{fD`6Z#Pd%A6 zl1Ni!O?2508o}$7EX8r@+onNikAqiE^X?Gj;i+=g@~*L9&mHXfu2Qm*ZP#5oRcK!{!@I9WVRYh-{IqQ~# zx$r4~N2R4g$$;10SnikLYg{s)uuf~hX~yhBPACjNzUz~SBZfK|W_xGI4&gzMo1xc* zE*8^8lzX((BOyI5j)P`wGQM7ofni#JT-GzW)|GoWKVw7RRlzjCivYnruj^ev$b^7! zg@0KG!k5FtbN!j)WM)g%oe_p-_|HVsM4sbF$5@!KKA#|xfy)nT*Nle-jM+Qbudt2; zcY|5yWAg^5woh&gr*Z`glyg3MOTQm!TMbFIwoZ<8d+sF|+=e!2TsI&^lZ;g%nGbI`-2{&Am~35ra_;174Uza=MOTU}#FU zch+|a8bfj|+!S08Ro~5exMA(Q{S{1uB?k#g4+rU9GMR5|?4xeuG)85Qj z5vX!)Yp|l!j$o-pIujiGXAgVaN`xEAI=t+!-ISO26D$!k>pY$VEIkPWqD{J5Eho*X z*sIVT@GUpB?#uIvLqT`wi6z^!TbVMHuc{K19njuROE3j2%A+GwWi-^FqVG7fO528Y zQbDcD#ly*(?$`R-q_-R~5AmJ&)1Flr?*uO;h{Y;hSC6HF7!Mp`RUqzXsRG4YammkD zUlsfW%uNkG!m7QA%-biY=ZED_K>VMPw}j3IYggx9O0JU}nPp6xN@&}j!cJ-HMX}^Y zT15lc^YHR(iz%cfJ<#&p$;+ z$YtmUW7v9llNaRki{VBq1Bf%HJ&N2ZvF z7OEtsIkG&evN-nGw^%IcS4;^cR{e(J$07QSY@x|{g#nC*OmWF!uMOn&1tDdmCu-W4Oue1D7q z#2LnS@kl@qoP72?}rvg30Y~7h}B5`?5D*TTMVYYwA zQj2PAf9$7L-)2Kw3|07byr6HYQbIl=!kKiICcjkA%;su5srdWqT_(@D`3;4Fp#O~i zz?$5Su0n9JCvno%;s<2bihIXnlr^b*As*Mdtz^gMD7Zj4|GY4Pqb!WeG9I6lO;4O$b>2Q+AAG&_l{|5E+`2ohO(4!aI zG2k5K!bY-9#5LkPSdjdh*lnsVF`#+Ht9#^I_D}f78x?`mk)K<-kT8|QMvG;fuLC}3 z<^<83TPF5L;-Gx$l0FWn?xQ6K^G#K^iXk9!s($QAr_CCF4} ziYLRz@vCReY$bYjC^;#&tuuWxs;c!tql#jx^?L<^Z%T1121PW{mJHu4&zMDRQk^BV z_AMs}P@XjvO{De8mD4S0S-0XVD7*h7HiV!dxNCsmZX1UL*Wm8%?w;UmEVx60ySw|w z-QC^Yd60Aaocq0gxBK*W-@lr*zO~lgqiR%*IagIpgf;~XmENyoq>H`CD0NwqUu2P4 zacV^1m_Luc`y&0bW}m_}zWDBwmws>MWl&Lkq~S+kHrqy^l?b*wK#vnK-N$SDz@II& zhmX=&f``4w2KI+jFL4kqX#Cq<4}#2GhekTB4=kf$qPc-)z`7_|ex2yHg>Rw)>lAzw z$UxxQvYpX<8`lG2r6QqxPY4}UTR&3jC#SB%NuV83SdgUJI`q!))YvihtRMEaPZ>KQ zB7N||lx~yIYW5cil#l1P2b^vsv*UQZU{AUbu6aP1&!)6QppNrGD0bZ{ad2?iu{C~( zh7{xi?42#!kthY`dO$(7>wBSH1h>(U4f2GHgK?+C&uKDGB2pLM7JMxumWZEGvaUsr ze=Lo$M)Uj};;;`kc5IoKR~qHlM5sPAaa@4XQa{R(P7`0MEzy_>IHuM_zveIG{i2`O z{w6QPx*%jsR+3p2* zl)?U$0A#pCNOq9TQ9BbDFYpM$b8US8ICB?|u1Mu7$(|!;ur*|hnSi7GngVU)JwwR% z$`0sHoGU~OB_6c&MRiT4^6%TI(saA17>p*&cHA31;Ec6;g6+NJ7~qnE_tV!k0?=a8 zkL?>&_2AXi#riZ?*4z~PiV`|&l^+cWeUzH@2HHJmbStdV(ExFSom=HyhQ|U_=EaFY zg9^ceOF>^}YBf>HY@D1u$8_Zs?c2MpHWIhY%Cf6wtu3X!16T>zFf`WUxUxqcG2aRHb-MImJ44nW4>K%;i5b0*~dBRb$IW+<*oD-AC91& z!qT9tJss{`fjPriFhHAdiXNA;E*t4l#Kb5c=wVToCtKMr)Yc3DOL9Lj3zm#|0R%XH zLaH5g%-qQQ4oKN*wZgFe+WMoBc*A7}B(ON34R8RKv9sF<}ufn2*ecya4| zrMM4ZMCuRmVVrSPp^<**NA+jR5?@Y;HN;R}?!KOhn9A|vbE{3e($8<)#Lz_e^Ea%3 zh-X;D+GZSj2s|!nWF@(26XAK}bjH*0WRBp5gnA)2Ny`t@Hid6WUM1(bzl7v`A|ms+ zd^Z@o5pZqPMZVXc2YbTvEGHV$*-;5+ug+6FY$-d#Uz<&=1!ne*AUb5Kh4Wj2JlTsC z>%(@~c4U0bTQXGg0pva&cfaEkl;bCFJg)W2e$iXf#zjY$BDBM{D!0V6>o(V~QSS^3 zjh7H;4?B#i_ctHmrqezGHyBzgg0`(XCuD(EC@B=(Lwi zt!Ql2ehbftO=6!)SPk5teP`VeoIzmk)wIQ}PL|$mTT75D-=$z?+ zE7tGGTS{{%DI;N8(ie7ts3;TY31X?LUl5~3D?(9sAJ(pSC?&?|Kn{lEIm6(Cb4L*a zXjEvHsRZ^K63*HWxpo;+kS1m6kH4N%S4T#al}I{U2_h|O zm^B9>bLQ}t%KPW?E z7-NeA=I{UL{Y){bP;N5r+U1{74{Xhj-=mzZG-=Z9n1#UjE?K5w-J31>f<@{chdV$} zLFu2Y`!w@CiZyC9B(zg5d||-_Z>;W+x~#LtIn64_V|d_=N2Ucq3(P)}3{p5&r(T|+ z(AAD<{DInld+xp0NhNDZU_Pbkcr`7W5BfJgR@(My+z@MNmn?)sQ5B!s_5VR19%F&Tl2-6l(_Ph(1TxCX51@xuiinAaQyXzNI}7+^y= z*PM7t4S*%<7KNWUCJ^K8WZ%7Sxhfr|y~8hY>j{hU35^5yjDu{!O(a>g7RuamfGB*v-t+#^$VNe|N5 zHtgyWXf@Xf;ng(7<}^>*ySIdt#oxOySX9Ng5qgnycB)v_&9WB!5h<)(I7pcUCdskX zv0K#5au%SlW|RRJLL8lK$86=M_Bubv*-GhE&5WyB=C6}Z5L6NyF_l&s>>$7>Cg$?u zKClzcpR5)R$GNQd@ndi#R8>eHCD#Y+d@E7B_#9q!@u;8jxc?=XxY53o;iat<`Qk-j|4 zwl&I5V_ZU&laJ}WI#1%cZcxgPjy&-ZbPokpqKjN``nlwtgyWa&`Z27_U!Gs##=qTgw1 z`VXYBtXyWf={6^(g_yvR_ssews}!j$BlilB7XoujXjmszi)uwv{i)hQdrX{PFOpfx zPAEatBFSl~S>{)9*hHl_Q?`c2-_6;|6+KE>R?Bvy6f(<%_b7D--$KXO;P}r7NlhSr zsXO2M`qRv;|Hc2rSPlpF-2i>80d8e=AHdo~HA+S@;0k*xM1;<6bVK5eh4OPkFkWE5 zGP3><7btuZQv%hAcLO_xQ9F}osbSG#!W}3i%`w*U%1OgX?Zm0Sb{ji1NOovn%zseg z@-3;IQBVb7vWn!bS3%U|MVjL^QHUhH8^auX^WB*v)jMDojcoTWYR+t-vOjTdTMoDX z)X3|qY_Tr@a~IBe2;OC8-vMPKjp2*^iMPYsSqp}b(2)q>NKD*ZbjUu15fQa3d|~Th zh`r9J{!Q`svJ(4vv>b;J^!mLsf$uaBg(*!W7#x0}M1SN>N1WovA|uf9V?6hOm1eq} zu=&RP`OfDQJ|$zy&6Qu%@Plh!Wz5{ez8UZbsYniYu8lvlKyfIC#zdsZ{S9_TzmL}d z-Em3qzyRs`KwL_CWO%b(t!!@X$3dU zT}tVtrOB7!6_+M@5v7k1K|d-y@Zdp*xxsqBo>xqyowR$%*iOX`upY5EQjRfE=3;c* z>RMp9=n!pdkKB(tf`Eix)J)4=``lIhAaT)ycXT$Laqab>WQ?V%U@W-XNQTtG`gOw^ zX)4R1gN>~Ln+m&JG}diLTf3v$S@wybq%Zo!tUkhxyfzEbf+@8@MO@=+s>vo{Nqe;k zW=KmB>hR`}q3FL13<#Gz&6==iq63&x5GnC#W zCV-GqNe|GL$ehO<6E7~DZj-Q}oOqOzh7I)yTa2R@Cs<-1rWN?k(5W{h9rYvCf`jQ7 zBXp0eKN;?pe8pp4j(Dq;O%1w8Xdb1DuHKDp9wE^nZu&)aSA4pVsxV(Nm*nzpKCIGt zu_OY{}dba5V5J%9j$|p$|ZOTTD#k4EbmdX-}wX0?=EGb`x%u*h03er+SUKu1gnTx`j z4{HX_O8WagE)v!x@(oI=YKjd~cdjhHRLX@9XN-fKgTpNnYc{aAo)jBKVwV+EcLH%DR(2NVrju8kCY%;_OX(*6_18;&%%6%^iV?D^TnoY8 zS_u;Vp(X*@f>gi$V%d?HWxF&ckBRIip?sD#35r!WXH+-jENR4du&J^|Ho>t?K*9vY znZ65Vj05{lRBHi&{|RhhtI5G=&Gm{Nwyvp8-?t9*ah7-+ zPbjchOL`E!m3J^Z#{QAE_bzVso09{&go%BARGl(9Z9nepenaK*cQ|fCQ%kzDsB{Q$ zAt8Da`xP9w_?b_AVeTF|5SkM_!x4Mp7`C(t@QE_S9#4JSFYo&YsK%D==eBc|6|tw3PKAK97&#Cv^Jb{zswmQQLpKZp+( z%Imth&$r`YqcTZbrSXzZIbU<&9Z^R;B&~hdoB(5HMMj&wNXO{hPXNPknvy%akXQvA zL{^_&1s!22Nn%uJ?ik!1e0MmMUHk_%l z{prN19}bM8?*@X`eBCKE*nWxP42`v5<#qTFNF_=tcRF+@U>m3(cDh2_do6yCFvYqg zmIDi^?SiHQe`N6tI|be`tn3b-@85oJGXa2t+{Xxc^5k?#oTwt`Du_ESbS0E$@p?IG zNNi%CeyDOrez(gsZ)d#;nMR#PPAXJG7zAxJ6X3Z6ASL$K+CZhaQ4x)bxZ^~8K8#LfAw5SA~#JiOW|4$p4)c0 zd;XTl!A`3-><~}v#a=ye5^JPT^<@;^R6YT1$Wtq3_Dm|d8_jMoOO)0@el{!;Oi)3w z!emLcODMa~Fe2f2j? zQHkg{?@5DFLQy6o>URY5Cn)#EFDdTmH7-H4F#NT8<_H7q*j$j1L&;YDUmiMh3vt*} zr+NB=zG{~CiiC8-bsM2LJ)~yE>quw>XTYdaW~nBqD_sZXe%N!OSNO>IepY0cP8F)i*+py%@HsSh=V zPt1kg(|T?fVflBZ6qF|%_j<)J+uvquZdC|*N!k689B4pU`S~y+*u*IquD;Q5K%kf< zNslROM%_MY(9h7$J{vWu-?F@J!aQt9UYF^*zQ-`k-3$OSq%1q-yp=eQdF}o8dV1_v z{-Fj~{ABnuK3M*s?JvpEl35?LjP?0rpHeG0xRO)ct%|P}>!pmyA^XI!MQD8XlZl5Y z(($`gKLBX_$-!@^9-4(30%&un%{Wj1HMu*&+3@SRYaOmoIll%>q`cVZRXf?LmHGofO9 zSH*WS%MO{h>zdTt3*j;dMg3Gr?3dk-2dj@nL15MB)h+StZAs8M2+Ex8Myn=7y(c?} z``!U|0=ukUUr=DDey&`RdClY=DMY3ZoLg9JdYDiV^9vATXAF#PLlB*mg{DOvHeVc{ z?3=i62D@qAQ^zeoo8@olw&y&Ua9)1U@KjSo2^mTjikaywbW#YSdCD|VC!AJK+>jOa zv!KAr&uupa3?|8%kIB!(R!|iD!)gZBBumbgtR+gGXCo)cqg79u_Z5`>ljSG^;FRtm zmai}RL3Yko$k(h;UB!p*N``vY6LL_^m&!$)0bBP|%3fFtfNd2Swh(=M-7M-vj@?#F zJVyms3@DQ2Uy{!TyCL?FF>uL~(g@w3JBnABw=CxyJPY z31SLa5w5fHF>^Wlau+)Fdp5|C)-Y`J^fm`}@7CW`hd{^93>twgtQyHXiP2h1s^#dTto z9SjG!MInU0s?@QweChRO+_UO903#!@vbxcz!B8DL#~0Yiry?YMA1!8*lkz%AM{Om= zqm{?ulAdO22ec||G|bx1z8?;h>tYA7{Yva3asSneeKp1#Ub))VI_HXor6SeOR+Nl% zhiC`43M)6&h9?siKohSw;7AzP!_daR;q~21YmKlEODF80BEK$xi%p=R8CUndZ;Y5> z<`^1lGInOdz);_&N?g)WXe{_O|B07K0hZ{gYF|PJx4REP9a;Ug=RQq=B)~f$tkQGg z+&~}-_j1C1Dd<}j&UM?-V|oZ!ss`6H=@8tq0C{78QiFp{GL^~t?jnq9$gp)Ds~3VE zYFSWp(~=kFQU}9H+>C`dMR55LYtf)4XEhUYNRK}SKGG55`$DERyQc(GDaICjFJ4Kd zcD>(+%pX59$NP;t)#)@b^|yN=bh1&KdTU~y#25{GR8w!sEtmFM=`*+KG35}GRHsin z$m%8)G2>Bg_={hwC+3x6NJ4&<*7=a+DMUaye= zNGJ;-%{SzgJF>Opf+T}r3&3#L(WXjwr}3jCsr(v03-bCkrh+sHmvhlO-r`|dT@AWs zINQrYrw~5n2EP09UQ604vAdt! z&D$16DW~*C5;TNu>DzGYm#*zEd zqiiz5l-x9)D2JQxYve%SZeN4zXxmDAOQgoZuPd^}A*vfem-5;qihty0;DWESZT)lK zFL#BCEi&|)v)kzg|3EMQS879tOKr68L0@h~7!DFQBCG5R8f)<@xo+%v{1DcA{e6AI z!Td{0UnGyWL=Qdl`MwV6!}r!9vTs)*5)#V}hlu@BFc8jX$Dcd>^z$I#Qv zgXu${TqLT@A^&2DJ#&>>#~sHbx78^obyY4iS*}kht2E2Vx?iACac5RMAq>@*-gab| zQOi&dw?QGaSlL*83kF3tm)L%xrKY#jIXvv?sssr_THU@UB%S&B!VA%^E!Sl8Vzi`+ z*KHypFU--kb0kGcGN2a%h(n{kR42@o%J7WGqYg87W%B}J^+4v-;z=C0t?=0ZU; zd@M19jlY@G!fw*h0cLSbN?rQ(4TpOAIa`d|n9zoULwK>?VX$*UNIys`-Ej-EDEK-5 z!;y;Ig8fC@jfO(n)%HG&kA~EdNap>OGwvFzgCx5`LkwkbNDqBd2n7mWguOLC zvfD0#2@4U$Q{<1-4yW3HH0KL^o;KE6s)?iS`=(-0oxkxr1UwUurGR}B1NOb3P#4m- zIT}lD0hbWrU`I3y&!k&#m55MzTK69@>%L+5RTD{hrmW#2X{VH~_N8@6>0yI_>?d)U z7HX@4D%%YWgZNZQSTI8Rt#CCYLr7F1eycoMIddvo^XtPow{>*K4%Ammd@r46SW;T?DIO$+&q%S%%jL8r(x^X#wg;@DG#K3 zTSZ^b{|gZ9$`p~Lu^xFKLLI}f(tpRDlS>?Xd{Y(_)B z#tLG$;(##3H$t3TQ~PY*uopRY&!#Wn_b`^ z2T{w11z&#uZ|e<}EKvf}rzP{Lspab6ZLn3NFNF19V+Ljw8%*L;Sotyi{j)5l~ZOEifkS zP~eA?h2&d55&1jUxcCZyNi&Fg2MlDb8z{2U%erdZk zs0Xu)n4XiOeZ^Ue_>t6yyC0tb8+;+cJB~h%co

    _dD-`$pkS)bGS-sE9(s`@5!!{ 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

    =2e!4 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

    *I*QDf2+*A8&Oar4uH1v51SCkw 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é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

    SNC^Wy4o>ufZm+~}%`_8;y{l)v1W5znDX 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͏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%0D))=pweRpR8gDRSbZqvWFan zj2N`!9@8rVqkA@a4M%=DM(sUyHAX3&L$Mixf;$^cgfr*(g<&v#M^2sKY?US!zeF}v zuNObQgqe&oGr3)rES>U*;5kV_P`<6tk=J6+^NVjf+=0uLC=cs7Lw70gN~Eyt($Vj( zU3VV#1>ohtOS)|Cw`!=NJAJUooj|6OwepxAVqRGHW1cohAqJ+dYbHncn5Pvvex~@0 zeO4@V_s(SYCrYY`I-9c7>L;x>nan2HgQaG}kF{CmV|q=n1?6`uj+{@?j)bDi%1srn zD6{g&izUOrulG0M3L}D8+FumT9oX8K3FZJ5w9RE%M8!UF?$)RyST3ix!o?u<;cXr0 z(N<)rwu#8~%<00TwOOH^0vqQkBtnr~Tm7o~Xl3}EIR;MQr#55rJF5BKkQE22eg7y2G%S(5{qy=>N?5nL#{oYrk&ep zn7L?pBS1!f*Y(Uk@qS3ik*IH1e-Dc6Sv@Wq0QF&nyTn`KOAe~ zUPN_Zd9YIb}&I6W=vdV2~XYwrxD6ZSzj}V(LL3q?Okc}3CPsV+K zAYLT^r2NI%6?z?&{cNYcLZQ*`MmB0DFYT{h$-KcO4L=8*ApHd=JrZVJ1z--lXuDU8Akj3-zC;h(6I0w4_|C4^t z0#3j8@?p345fj)GZY)>F;xrYU@Oz}tOAwVL@b(MI!@VK5-X2=%)NWhpFyLA+t0a@E z0FYT=wU$lPMJzSo^YSj3{QNnQ_wk68aBGW2`wgd;)Py%igEbtn!kc8-&-Y`U7uX7j zWlpvc=O@MyzmRMW5096(Q9%?j5CUWEbTqYi{poac`3hxkFEL;}pjR`i4sGSRSCk6V zt$;rUm8cimvPvO@UrFQfZmDLY~tgOz@VnKlyz|ip+2<^^K7(WKO zaPUXpjUxH22G1z_XEaduD*+OK$`y(T=b3#S=;pUeWU#`{eu?K%sp=>>g~{FG$RYkl zE*+iw=U+`Mz=BA?58~78{o9vO#@G*K997wyEnco+#H8`9|2X!AXf%zaMs> zkunsLU(v$MX9(5wo~Vbg{gDyr1ksSwP1AX0ACn~#v{WzK8+T5%T(lYS$$Ljsc;bT& zOen^PcA3vAS!K+PTOB^AF=F6*$G#<<(uzp8xSAr%=K;4E$xWrDk!+=U41PVNuV1#$ zUL3c)8bFn?B{2#ty^Y99DI{}6m&xryTJL&9M|yY+*e+}$UCAf-;emmEiq9C-5jkfT z2g>Y9IyHexH@@>>G~qY0}^AUu(?=CjaaxF(r0 zTpl6d*z$*LHli>EgdgU77#BtjnI}%kUkEofim{x-BD;?PqZ@D+_oP!7Oqw32ccG)? z7YDyK8y1N#+_Li5O_(h5OoAWwL~%Td9bm{4d0HZQ?E$>{Qay|Nk6DoW^#Y|u>6dC+ z#xsi$(^*a9MTqvJMjW~L!dg*hph6QYgPMhrakUYeL;VA>?~4qJ-!z91sIz_T)4JZV zrr0rNJ4RD&Y(qzUuBfy=Q<19s;+3)^9I1u>xkMPXwj0PsJaP0VG`mjB(pvl)*Nn-~ z(|Z2kT1!KcmX23bBbsidMTWMlZ2gdK| z$*di{4OY1aB=Odq<5g#?EvI1=vu1369U~U%??kfj?VMrr*ZtISdTGvU0M^7I>NL+a z?{n;Fo~J)r;$TWCCntqiy|f=?J?GVxkhMJhfi@=vmz-1o=XOod0(&sgzrklMbq^Ag z#4-s(--XxEQKu1qpY^lCh>RW=&Mh*(R8b?(OK@o2&&>)0^{a};4Qj`70$IR3}`%c_@HxSbkl z%f+`-!*bgPPq%vpkM7#FrV)T%-I_szl}b~g8C#FEtF{aK(qX6jYj;puu@buBrK-qD zq0+N!`r=B)qq5@Y!NWrLzG->x;6&wEH%lt|!f^u#{n8Cv+v1LnmjWO*E^bBqfiy;N z{*GeU&AZD5p&RXeHQ)UNih!h!Tv>|h)JlXl&3;+4jM+U;53gHBhAn6IKMCSs%gUdY zQ42i(q*8M?@LNXyqxHWu@i#vj4Av>-{Dn;~UgzuomjWQ=-z{l9X-L;ulI^g*;d0Uzmz zH5u0Ye`s~{Aqm_cbW`K*Q!GX>lQ3+YmbKzMNbybiuwPZQ2`-3}tJN zW{cCnmwiU7>OSH{BdW+@D#HyJW=pdI^63LJu`Ca#D_vKPST;rz^0E#*$4ql?NW^09 z#}GRlk)gGSPlvlZCo>nI|I&Jc7nXY(6#>_-ysoa8+$%Ho`9=9(Gs5NjYwXEW_Vdzq z+;vo491Y1W^pu!;LFbFop0&vtg>hbPHB_oBy(hUl4|kn?MPQrK3G+sy@3~qm(vEXPP(+{qhkjx^5!c$G9U;i@CC}6^D0zYBqykr?X|$sUCOoFDDm# zzW<&rSoPq~`HH+=W2gTOp^yKCz30F_4zFuuf6tTE_pg%Uzp4o-(yVJpP)7}fr z{cgh}5a}DY^+_d?xoaRL4EHn_gCg!tE+hFBotK~Q#WM_-X(C=Yq9$#X>t(ZGH}#6%38_Bs<9nhqH8wYs+;M1@fPmrTKDEoABmP(n077m zd|P6PpzXPVJ&F#uyG+~r4QMnT4ed2M+d@aUo=cg1GXJnAdoeO=m9)Ss=yRMkb%6VQ zCn%@X;5gvo*y3^PMX^0f+f*$cCuzit1#Whk(JAMAiKyw?PV0e|GvB5?%4<+}W$rB1 zPi-r~Cl}STyu?tDrtF=kNsaO#W7mpXN$`pGR!RjR_k6hB^nN?@TxxGX{%+fv*~3od zF3;W|$$hd~X`FS5e37ou{d*O4tkof4lgaH1TgmzGTaU`6T{U5W+OSfSUd0RX=7^nQ z@{$QW($6Y;E4bkni8VXT(efF7yF7OD>28&)y1DDa_mN(Ow- z-F|Zwa3!L(KpUC0s?@2e_TAEAw7rG2J|f@uC8cdcMo`h^%fH0i;bB_?DVRk1Gb|Jd zU;J>Sb6GRnTHdpVi^Sa+_=R#W;NHu%k^r>h!W_gFxOLpDb`dYxZa>sI&mOYL)l-`5 zJfkrkA-#aIht7bvW|jCB=_&MlzG7lcb|M-smfCxG@%vXfIW-Q1QYILRRaKX7&;l|JA6~U6mrD^rI;zh3yrdd6n%u72BP26+`fAnHF0G1 z+j=3c+0TXz{yfC@+~o#8xzq}6Cz&KBLl$fsnI8P2MSy&kU)AfWPsT)2N58Vvk`3+i zoX?piYiNIu^NOkB=)Oy}q_@HdE+#C6s!J!?W!6S7^0?zR*r}Nlt#}j>AH;=DZ$dKj zSAVDX_$#dUDT!O}Er|)UcPe6(b;c}F1Rqe{`^1h%`s47)x*7nYREhGT9C~y$-@XNw z`1e$rvniLaKm`F!sq`wZQ=Uh#D3)CO$;|0E5sw(~AgTn1j$>jzusT`P5J88rRdJlT zv!WXmo&Zvgkvah=={#^rlN5@EQe|)^5pUR4?MzSx0YAWZX&o1B%G<+Lad^aB876HM z1(&Vz%pt2kuq|Z4Y%nik9@?V}jv$%R`Ax=f7mX8c9*ui*-631mo4GgwicmbxN}|#C8;Zx-X$@uUMu5G+^7)T#fgic@J6*CQ24N%8nBR; z%_nOZ$%v%sWMemOGENCn&P+F57ebaUR41)|8qX!!t-cEZB~D@}$M_#1aV5%(7#I&? zTh%*j`WPho0)B+aynh~65a`*Cl#M-mkmURXTa+V-zoBd=lrZq#q?ww!L3|MLu&}0! z#K=?qnRR$4s9Qy(+dZjI`@qb_5$@!{LNUXRrH2?~5#1#$zW4~1H-NGw>}mZUueU0z zlEz?cxm&J}`x*LFauyRyQVL%H6--j!En`q$pTyL$B|deb~`QoTtTuRmSTddy)^H}Y@Yf( zUN5cY7^gdjapSjz;fT6lh5b$Il~kt`MViX1nD|zwI_YV?UX38fygcKk%!W52E#Gk# za-r%!c)ip;f^eNHGTp2#!Zu)N@J5tY7g3!e&cZ$B-Wi!W+@Lo1K5Gsg0oK{<5}P#w zJ%3(W?aG^UlB&hH&dQ6o(52kOF+0XBIsVMe|CRY7;y^Mubf1n?x|nqZvC`>YCvt#e zr1s*LsNA#FXfz$BXw0v&lkyDib;iMBA&vllgC*f190JoY z1wRa8=<=N)Aaq5RDRBN-9A72#&{6qANu`@nIox+6e zS7vy_)OP5Jk1{e#<9isX?^-BCmKR8-qijhh3i_OxF=9qxj?xJ5gZ>}7&N?cNZHd=` zBqVrnhu{Qvf(-$J2X}XOcL?t89^3|(!AWrU!3Ng^cb7Mud+s@Rz4hK7HB-B~_MRT; z>D9Y_{cQ?#C98lG3rZl7a6_M%f%Gnq^MURHvdHDo)}K@H4f@f6KAkwrHu{%4_p>L@ zO)-hqYl=H6!k+bd-j%@g4WQwCK3=y9jbr>F_%6{~^}GKFCnD`=T3V0TDnqeQaFcu z5!aje5B#A+RI#9CHirvy7p%Hn%_U3NTaGZ7!CP_}=kPtn)IBvr z>Tdkw89qnlV-){v?Yp2#7LRwcSIE)DYPz?|oGPteN`(5(JH>^}q*wPIDaJCHFuK#8 z4N`If@U#`EoBD`9+398>_;Ni zOEPst(}rr&wH@2ArnaSiVY39NW3EKdtGr+idF`fRP$B1Z!toFTM03QM9)J5`oYM{ zgk9fN&3RFa66;b@w&U*QxMoe!<}5l((lPaS+N@`+fHl_IF)6QNAi z@$3`H^vFKt2&1X>v^6r#`{uF$kD9P=yRa&qUTQYFljmh=1bo=ClYrnMR83w=`EQ|( zi$CZ6j9gT8tv0P-^bOtfy2I}tmyPz1D;se<%V%wNU|(S_OW3=}WiD$fR!(xeiA|nW z{WC8+m&eiTSGMfl@6S(s@6;N;>jUNsGDqjY2CuLk^Pkt9j1+s0XHK$FA735tJEp!# z($+m8K+{S(t1BK47YISK8Di_g8M7ajS0XuRRyQrSxZc)T*L*W2Jw>EwS`bCSvpto) zA^QOOWD#aQV1>wh_U9cs`VwT0{q9f~xm9IKY0UKrHPg1u_kCxn{A4#q#^@+ z8K131b#SFw*~GbGE%Bp_K&ekQHx~3!?@GW1R}nK1T;L;z9Z)G*r^Mk z+E>0Kke5gVNa?VaY*en&BI=gq-$y@Y7|V)2!$QwEZx(FQk-Gjp<1n;Z6Ubi-e2Ksw z$Qy=z>u(;%ZvE%7Qeg$XO~fkk{wUExx#aRM7&JJFPm;XiB)xiPVE-V^_zKFe{tjvNq^eHbYh42vbU5KUwqR@I%%tm+<2qv3o{B#@!`dc)g-$HW{`*Jc)#h zbH=R~4z-Cl8S=P25Wm8Ef6L=b`Ja~Ct!w&BN# znO%Uhcu4@G1zoku(M^D2p8h+}leIi}66b>r&94>Av-d19o#t7Fn*8IzCc;|%>>t3= zZKDw|-dCW0P$c|nmAWLo-oqnfu#+{Q%rK{&AtcNB*A}2<7M8+uv%7q)MvYRS!CN6s8IUH%_D)jaoXn8xZJpUc4B8pdhuG8x1>iOrlG zPySC^Fq@D_5LglK;b;4WWC+I5XT-im(cZK4Xk*3e%Hv1}jNoBNUz_l#`Ao&+LC`yu z+n&_%c~>Mho-7vu6W{&GE1@h6Z)oBvDp2+<~dp zbKAiTnok<-YECAbllPWC?-fhtT-CaMq2w%Xuw_K@9-waQM_r+E3|)SA*Id>TRN63T zs(|q8DEE2y6<5q{$OX^*iI!ATkvO*0fp;}e3VOEKX=(Ip`fFJobJ>BkJ-2E?-lhJjZY_4xmw= z+7hi69%fuDTzTs(0=2g)Ry|XDKHTM#szWL48Gp!#*~Ucz#5=|d5UseX=hk(R??FB-V+DROXsp-UJCGov#%8J75 zs|L5mE;Z>nLf&u9gxxnMP6Fe~$D4kXI_`{gbyf~F`AY*<3BZW51cKWxmGuRu&*8BQ zl|sR=4L~zxPY*BSsB(NGj_j&cYZA8PB4gtSI`wk1^WU_l=Adrl9gBI8rjfV`^$Mt{1q~`%NU)_WD1x*X@^Ic|7t;_2mY{O>lFs0MT*k8N2 zS`m)ftH%PJ@8MF?%I!MD4rrF`XFm66U0T|o@}x(ql@)YU`*J+zZD&#>NulDG^d~+O z_^;@`j@V^Pq%|^j2h#0Wqgg=XY+SNYyLRPY`;|MqV}IG1r&V-zWJUW_t(z z50Shcmijh1YsNbcrO$18Jk*t?h)mPg)>_(S_;Hm`Z&Lw|&)WQi>%`M^%iWPSp2%$u z*fS>x=}iCW^Y@9WZJ|c8t)z-2WJo*YKGdaT~k9X62-MD}1S|gg12i-tD$My;;6}*%bqv{s;o0 zIcPp%?;B;&;x{=fg!x027&X3-F&H9_Nz{BA$Us+>y z4z4||yq?~IQjS$EmRw{Z5g{3GmG{bcA9|1(3_?iPw`I4I%cD9z?$x|@tx}*nZ3i0OA4$tpUtr^yga`{iY`TMF1#Qn z?T1wvy|f9#lXJHD`@>YWYJ`Rz6?nmh=b|k``_UHQcMuh8a)LiIwH23tR2(bCMjK`Z z%5FPB)5pi(#>>m@z}HoUn&-VLC#H$h5Cczlaak_D?eR#;Sd-gb!)M3-0Mf5={s?mN zRS*SvfzK`)Ga1@Bty}?9e%d+x4xVB*8aC1n(+-|eP{(#adiW5l*}OSv5bC5Z)h|`P zM985L?bwWD2shM;f<`I?p~)!F#==(7whA>D16Kqz*W#r?32h`m8%WSGH@6y-AushV zn9)JHr-*;awgSBHuLW^`_D4{Y7+@HZ_n7%5WAi07Y9wkDyiJq}kjxA7IJxxVh6ugk zpgJ+%An8~zYFS?3Kd5pnQIMSD@0^aKpJFG9;uDCR>T!L&S~s)1eq~tkV1Fws;{{|#n% znQtV8KEGf>|BH)Vgc|Js=xG1D9?#31H1_gGt`Hl#=F&9C*y0PIfgNvEAew|qx?O)y zo!%s0p@yM7PWG}zduyY&Hhd}dxIW6g0Z^fWqY_?cQd6h$c(_ox-3(|?(E;M1l2=tO zS#_(|Su;VbYNj7iM_tO5Xm4rwV|p-jg~Dn<6dBFvMhh5HnCu4j1$60&LDKD3CW^k? zKJ}$F0$17wozfqFM98<`kVPxIB745X;Tp1`cVz?28rV)feBB2f*G+G30Wb{LOYrQm5A@WN->5%Jr zSFIjJy%stUj>8DZ5_oom#?rmR`a z;q}(;06) zr@1eOGQ3h(whp9sXQ*xCokCYA#@%$fR^-6cwg(@t*&z}9QSI)6wpvLAqJL&6YOGPL z89vo?5K<%kiLAv`xMRbh>~3VUEiUv@of(H72uu5iTU1A$!?W&+QNSm}cZ~Y}w~pU3 zoTtlHxDEJ;JU3RKzdX|8{Om-YVOrYMdt=LsvH30^y~)tq&-MhXqdUf;$J%qwXq-NW zia5HA_w*ae)7uv*^6RgM7{&-S?l;1KeKve|%>{fq)V_h*0Ui*A%igG&m?Z`y>9U-Y` zH1PxQZesZNr-=L*Fj5Tp4U%EBl6IpzSC{ej9+>DkJ6Su*o-oF3W&1^$>*z`%Qc!r$ zkS~}3#*)n1svuLs&(Oad;GeootBV<}CX;Z^ta!U`2wq=e6^>{TLB7*K46m-ezhpVD z$!nY$GhL?&ubz5LPDtANgV@x+`Kq5vb)*d__f19pk+$gOSQn?9llUETZ`vxuHMpPc ztg9wq&cJ@gC)q>6&1Fa|^tj$#i748SRVY5qMt;oI>#^gcx<$5OmL-jBJ<-{$aRS(( zhO}kdL}D3OJ;l;22^>j1*l560K~GqAAOnVg=YQA4ta@2vJpi?4t*#GE{uo~3X##jO zM}+IrS(F0v$Bj!bfAf{oeoxWJ%q~F>3C)UcxAgt-RyPNd zqnI>{BUPWcdLo_#3Q7it-GsaXGWM?dbcfs zbpW}a9VAMA^ZK6GAJxkg(U+2A0PgA*-9>H)HB*B4B%9%sc9^zvBPr;i7&FKKD|fa9 znC23{EGLLh)y`B? zsHJ72p>p&9LW}_9B7H1H9pF)&Wx@O*OC^HyO;X*4K5JKK ze-&8;5baR@uK(sxXx6wNc2#lKL_6t4@k{lh_{DhgZ>JCiit%t_pMM>i#psw5IxKH& z92+FqWl+{=%9}g`DhfgZ`1?4c9r`wZ!zd$^dWc)$xT}25_NFH6l2n1goV5JS^e$6z z+TA4!pk%B*sh&VL)acA1Z-O>2Z`M95Qxe{5slrYNF%7dOLx6lQ?AZdQ`}0znzUX~x zeQ~h)FL8~7ba(m0HDWu>3ET(J-60H=OKbn}_zvtU!4|vB=3LdLWT#X2 zF8}QSYr76|+xa5@bH%-WkMIPO-3@LJdHr+#=w2@L;zTLHkZ$3VAa{LmPWeqcb`8Qp$VUd( zW|FdQq@5S7Z#(e8wocj%`L4gn>?+_=mD_q01sad7Qa2AfIQ^=<#LR-bU&&=Tae|eg%p`ft4A3##IADK*bysX zwJ;+%IBLh$c!SGiyaDf0$Du5egz{PfON+>!EvEZAbFCJVLxG(o!0LUxu4h#~sQuTbCE@BuJ`m{K3#92D8j-EHdy9Ep zIOOn}{WTysMvGF7pPjBIop#cA%}6^buHqpnntvw5LdTgjgK(r&> ztdshv43C*4SsyEj70_}V2BvuDFK&R36i*lO?&YVM)sq6M(`%HRd%fTJthLFZ3>%0n zRL0b{!)XYAsLF|*d$s`>8fUVI4bhD){rN1gPROp`{54u#aHXy*SKWB@i;_>;INcFn zL!i6-Hb>JtR@2zb*09T_pHpiuRI@jSG>B#YTsBTsHqbX93s2sE%C`CbmI$`6I+rc> zPf^BLeU=SBDc_zsF+2R5n^+%xfr4wv=4ATeT881?Pe*ucr~7+LpaOgYwQfS}6O81O z*Oh2=p=(Gn@H#Q44`_WiuCVtfFrs!rq58q9vwEJcIIBwmpc@eJ$?7ppp02}En-RY6 zC!bz73b$`3k$qBYjE>T0tA57=uCUi`#$l#_Hq3HH!5WW%{<)}eVs>ltCbX-F6Wm;o zO_1`U2tVpjYP#8z=GwVsY=>ux4$-Falts8kweENj*S2?ILmTgRV2*Gt&y|VuJX!hm z3NTv3$a!OQPdfrA)2>d0Q@e-$O*6^#S^W;!Iz=aON$15vhi@Kisu+-aA=cokOMRW(>1&( zSwOU7mQG7A#`0@hZLC&em9 z2J)p7MJ1hES9(fLZfx{8E@HyBfgUf zJgV0h0O0JkB6HC-@n7Y;tfX^s%aW&(=uKqsV8j>m^G^#i9=Sl$d+sR>!90H8AM|;X z;x>UnS0593*G8q?@NmMR)^UF6=b~++N5zhd2#IZI(v&NV{O)m&A%~@nJz#}09bhqn zyJ=0DXSc zMN^(q?c$M-I1T8bb5M{wnUmnt2+^%kDo`H3r3EK{zd66kKf87XK)ug($iz8pvwS8ceCD&~ zi|@LXNKUF+-5=#TQCXVb06Ft2s&kS^ zSdcSDIo?qd!1%ON?B?>;#E6wnvGuNIy?+m-K{l`x{gh9NTqWR@_GAng-ROA0$DZn1 zS=|4gfV!DiDN5OKOMRik9{;D`r8UuEwS({Gg+il)_a=q)_R2EiAT8mZnCEK#J@I2a z{~f+huJUg@UFqdy)am@g@_UQR_2;9>5bv1E?;T>QVlQd!{QP%6bj4J^L(cR)>YF3f z#;Sa%Y)oSSd!9~jFZf${bYx?W&@t)meEo7&lE{G6b`m;L|i!b=+UJ7rz-`4q|T{+}_Up9WC!I$F8 z<$f4UA~GXTrkz@BrNVY@n!AZsR-%$&JUI?CjBTdOJ2jtsJ6pB3{qcNiz|9$EehuA*l$H0_Tk7Y_%&y^jr)}bO!h0qf@u0< zN3sN(IM!ubwBzFL*YSME5ydj|54ytzYDS&$^SgXQ2i*M!5mVhg21F|a2X(eYhB4-y zqHV^rdN4G>>?7K3?(jvlLl29NnfiJVTQ=m|KCLR@ zr*oto_V>7Eu}M_=ac+U>*ZT{_ES>u<@MFUam;RHSchz?6yL`??>XUG z07-p~ux1ug!zqfS#VM~N*b7gydZr5Ym`6_gh}3BQRmYB4-AVmO_eq>O)0|~PS^v#_ zAB=-;I>T_Cq*d!FzDvV;TBsZiJE5xX*^GWO-Y6X3 zJx?UtZl(-nnzMh84?kMNIYy`Xmwd5w@E=xiQLk>iEHP_Gkno`=E8R_)DP9svUzu1 zVg1Zn#&MsOdbirEO$g*Cgfa1w zXvgj(wSiOJG{8P&Q&4T?_l;bx7HZnnj}+SX4qB+IzwL7hIp?X=aYExCp8bKUn5Pwz zO}X(lSF_AVlXQ;HDkC_H@49>@{0r3DTsg8;hY!yPbv4udG;L>BzIgSlsn{SdTK8{} zp!!m=jwnaKte&0TvQoU2^-LY7-Tw5zh?2IgiuI@N!Nw{YX%41)m6cLTz>B1V$5L1M z<8#KC+DX_i<0H&r~suCv+U(b7(J(vub(Bs*Jv-)(_va<5Nv7}ER z*Ey>H(lNMkMo&@;=q&q*KB{)&$C8pV@mR^&KgYA6aP^Agw!TMAD$)DglW}9CuP5b zzVi!L2vJ}B1<>h_S-U>%5i5)-sbcDDjXLMS}!l0TKB^h9^l5Dwh`AS3C+6#TaP>Bz&|i`%26 ztH!^*;9|o+w!)VveU;dInvh&q>0SAX^(CCA2;J3>IY;t=&hN-!R!Qb_r%RkmVLZSg zvX%i{#3tK_48qTCT%qJPuFZxf1Ul-JniurQI=4)P@6KjE&feh8Ix=3{qZpf@T#5kr zy+a?R4yakYAP%aV4pkYmitZ}Ee>!T)nP?>={S)NUQ*HOl03*cqQeTRG*+h8>6 z{h2>;YhmVl$+aMcL@8X{bndqT{FxMNud|$UFE1`ouOaU|6X|#7o4f^!1_pt(~f966dwLswEr&Bje4$xB2x6XxSr64DOmZ@4_w=pEdb{Hu4x9t_!i zD~p!oY`L1b8(Qok=5Lxu1$q~RhcgZn(zit8G`phe%?fv~#Q5H8wiMZt#84+BY&v>) zTsiV_7jH7vZ#s;_H}@Y75MBJa`Asl$yrg6?Q**^z7t_kBw3mkmsD*WHl(qQ8l~5z^ zsqS{gOfTU0-EtjU0;f{v!~!2E8cwyJ%j;5U2opDEdV4^ScYVv|b7j2ve{_MS_%*U$t*M zIx?+Eg@nGX>E(6ZQgdfXwf>&-os35coS!!OO=Y8K!eQrG@zqCF@>Z~wp;mIbp64u} zB!S8g2d<;t>s;0SQEfT}^sH=L)yCvpg&|Twk&(h__rf?|BFZx@&8yw4*PE+iHi)^0K<=e<@GP}_vRN0$=DK#>&j^C-M!Jn8K+Mc zd!k_p5W7yNbUxYPtd#YTEF#Dl>(9t>{rh(Iv{pyNa2MRD(+OP96!p3X7UG7Q{1el3rjl}Uc0(f zRhsj%@3Q;_LSn{yBlR*T85I z!Ila1-LgU74W8!i75q#2L0%4Vt>@px)fii&y5w*Hb!lL}KrY3oS_ek_2C0CoFNh8A zFcwXOalCf`Bfy<6c}gs~(lLv)NV@<%K*GNQUExuu+xJmn^k1u9t%aoaaE?!-`}*R* ztwDmsl}ht=da5o?3| zeZ9#;N@E-6x{aS$S8LDD%Am8CDg+a$jJuf5>Kq^JH?~#;$ZFa0+|kOg>u*mD^31c% zPhP7!@M0n2WD88APr$$?`Gj+m_(RbNM8Crjzt!_pNy4a>Y3W$+s|%-5pK1#G@Z`Z3ePr z$#V)x`ljUR&%5sMAASgw^_|0QG{fLCqu z`uAo$jg&>syc2g!Y2Uq;s-cKD1RxQ$tS>{Or`3&k>&Xz%u|H1H=#+`@SEC;c%m*+XY3tk`Oc49 zY%7!wwQ8FBx91B?IN{(=WKXI_-xZBs0q(*A7`LMkVZW85=2QaGC;I~DBqMO{r#ADC zcm@ZtYo;7Oe1Z$;qX8<4c#~cQa;(Zs_>d+!Emg+SqlfFJ2imU!#CA&w2V)w$hM-8+ zMOKG$wFwhv_=>s?=U_<#4j}PYvYZ?qV_-0rW!b(}MKzy_b}56R+YAT&Z_5g~U}de! zn6wxy(6$Qz6(k>=6sIYzS|;QA8zo2hLOQEvzgCo6+jtQC?euQEcMmp4xTSaCSi=a} zu16l1#|=E3e`@-N8mmg?mIj>{XR5q%>kC+THqBg~!NtoV$4zaSQX?aCB<)1S$_&H| z1oYyT9BXx9Mpo6dtiKS7cFkoo7=b|s2C*gQ55L6d~Hd+39xebLUt`7N*f@=1ei z?Z%#qfTgnYW!>P)ijY;O;8tya=Py&pndex6_r(Kep$PG7Es3x5cdSpu6TAbwd8=DP z_(uxm10k`4tr@bp%EX9En;Kf>(zD7>>BiV+ISSb6Nl&AIAr3>!BJE1b%s=B4RPMSr z@3A>syLD%MR1v%P=r#~6Aw!YBUWb**)lM{I4ku`$1}jU^^34fHZ(=Cj>V{s2y61>T zks}R@93%6?AvQ{kL%Je4BSQ3(bS?)p&!r7wrW#j%kgP>$r=@6Zj<8=v+D>d}h6rF9 z_SW9B$Je|j$&n(G8Ouvc8gnHo<>O;3<07H&maNb{ZJC8zNtsObSI1H(Qee3LiV~9+ z{OO9byq4~(1TNy;eIH#KhEz5rI9NGBPt6{wgR0@#5pLOm%c)y}Q(zN@QJk0B`y1fNe$g`~$d>`+9hQagyMKB4`l7> z^I|Gsy$^;RD~*V~I4u|Y4z6&gG(#IxZk9xz_pWPeRSyyx+T3 zj!z0NaLX>qt1I$sZP#reb^mr)x}QywKSiNhjs2E{uEE5j&I2`qkQ7dLv)#<4w>@hP z(H$r5IqS#OS!Cxvkswx$@%8)Zl6}>1uu?sbpz|b$zGj(_@<<5QTnmiTy`LN0uQr#T zj{O2xr;Kgc7!{F<+d#CFZbPv(mepN=~tt zs5wmJI9##L?Ss4!u}Qd;GW=TQMyiHJhgL^Lcl3Mj9&jJZh!#dhgoP0D&^*5wKRv3V zZquh`XUuQ59WJQPMH;WB*HD=1W?+KO`P9>#6Ka8t*aH^DtmUSNMwfZ4o!*h&WrjQf)H*Q;3-jhaIsVwG1lHkU$W}7~v ze)-kAG)@{t>r<$Hnm+wG92U~L`K0~!T)&W9URcaidB%{#VGE|u!nsh5lEb)mZkMM& zZ2LbdvbTODhCeg@IghOlxn#iQ{eHxZz(G)uhatU#MSr8?1|!&eX2gxCCq5lth)B|f zb4I#E$;E~TVOvokw5!^1!&~Kc+_A}SVh$2^LqJUZiEbdS7r6RKYt25=v~vTbC7};z zxYX(YI&=--bM%vci4)`D9!q51g^Laj%E-0N5R>LQwj0Qfrge7~e7CEis4S%#KPt|PNR z5LhnwIykaPCH+_=-4_$>Rw7)*_y)b`!U|2NosnFpreYZE3Uu#6i!o>swYLzy<~Wt? z_DU(JE4dq365DAH9qIQrV#G^};WE7+AjA$B^63z_>ya|D_51c{G*XLO=sP%hicqV-QXpX{G=8ZqZ@nE*EEPv3n&`d07E#a|y z_nFx`Hg=?`3TNX=t?1<2m2*u)TncyYWB|0K0t%^>4f{Uemf_h-p8CZpLkp2c>6(^? zyWBq95I5xFDuWUDDh2n(5s)@FL88}ClfEZyV|liq1CwLL$@frTqe&_r)AfJ;kRn-`?tiZ|< zyPjO)z0mQ>@amxKKCRW!xy^I)6E~+0&b^du&ypzKzS`t$um#Yk!JPUuV-_dF9W?sT zHR;uq=DWvrx`!4=JueoeI%Ks|S2FflV{CyIURPYxac7yhA-&L$N48uTUa5TSab!O( zYN}YeE%zJpalhI!#^8?ZsToqGF)gjD6WBVRxXh8zd+0pL!4oW6as-OS+RxSaz7@@_ ziDZmkS1E*#-bg*_(ZX5KL0K-mEys~UUv_xuv3*8!ZKLTDut#r-6}5HjKv|+yWL5c4 z?rEK8AzP;DnUjA{_{imW@y6#P-AvJu_~QsDA^$w*Xt+1Tmsd>Sx1$sMA4ey5sO98e zQ;U&Yj!#ndjC=8NFKUY*ZI&N}-KXV~TyeJqUU0XxJqU2ONEygY9>cz-qZPyb^XW>< zukDmfRR-~*9(ruPTIrHc4uat2vo z&ks@`DG^h{V#!+zBGc{bS=BLe@sIU6zKEq zfgj$T%F?o^nic&)Y6_3U8j2_@R_DBQbH8G`X5rFuNae#G=af&+56Nt;fW`W_wefV~xp&&cK*~8vf_rl0B)v z7W{o9EcK3>@?SLZ`La0y9PG{EaDjwpfOic$vKdE9ef`CFPyIxbMPagv1OkC>9w$S7 ziCi*v&(%lIwDvJ#BhzAukLEu(h>-T`?1=6UGJRc5ab6+vF#no@A&6ebyt50I#g1Hu zZL#wo=LBHP|H^Tm+1nWBHd;dnE^&POsk0#(|Bajvn$Q}+_|>Tj@)|Y3J$tbUSNUNOwDVgmFa4p?G-*U#GU9R?wHio~E+Iv0K`}79={32N&d?uv_ z{@^;8TBm(g?IM(JmBVSlLWGTlqcyj_QeD&jI_G5iR|kq|gWsLu#WdBmT*&<;Roo4F z-mAvE~`+5YY9c=ymjS*IcIh=HM3>P;p*hy_shfB}XH%h4?1A!^o;FVR)Ok|2nhI z*mQV)+`P|8M@TSju1vaKpYPHbmBX6wRHhl(*TwB?51GnWU`zI;p9t4DEQ@7ZZK$$M z+xSrB&qj6Xu5LHx3A`UwsUQ!&do_CGQzLy&4=(Cfc*2e$vRMWTECP&(H4%g%%XoS& zf~fSc!<0bSHZ^i(u#)SfhQXeOG?zpqO}LDvSDbJZXL_>4uyPqzes~8(zP7Bw_f`Cm zA2301?2{2xjYD$18UY&>Bb$hqhV(ZsqIUc)IFUaB4{2k>um#_sRJ&9!w;K1}C(h5$ zD{Jy7b6j{&7szu~(i0O5CnH$T%$QvZ;4Ga{lG=WW`G9qPM92Ii2yGS?D<3$dIweF` zywT1vY9u{KQxg`sGG*4@k(cI$1FGM`PExa(o))}snPbhHF6wILpad-}jkr#_SBl%% zyGueAZQNu&3T7um%0-SCZCWPH(k>#nc~!S>u|1irjL*+>LL~{gDs(oNhO8TivoYT9 zic)Z;5G0D%%0nQ4N+9R!{jmILZ71Yx7oQVKoa!r`a0FZ~r}}YgA5iJS(Hacn>>(>zo#) zNjd32Pp{~p`{fm=mUCu#s?7cpmZqYivz~SY{F7t z)51%r@+F@fno1`L%|dtywLwGHn$WD|mn`EPLQv;lLg|Pv%sBt7CIRwsL5K5a{vLxP z3+SN|CF}Wp24cvTd?AgP!)#Ceh&Rh4ej$xCe)#C%CyOrsqLXf|^ZfmyleP;T@T2{F z_!mQ2*PYDsABHj{vP1W8hVnH<^yb;brN0ZId-QSh?Af~d=XPdQwUsBu8o|Fv9%RcO zxupLlH~be6{J-ReP@7my@xRFp$^S!cK!$Gn{x`Ydza){N`a-^wrLl@^& z7a1Hu6Bw*i%lm;A&OkIMAvix%Zo+vPv#FYaf6q2>IRAo7e!)%f{4D|h4{G9XWb(^Q zW$ypQ8b*=is!W^(u7{6dKD2-kFAi{~7Y8tXTAU2g0 zy6)*M^>!#DqcV`LeXnw^1U(6PUX-VoH1Yx&lLy3TKZ~(1~p`;$=YEwTdz?$cm`$+RJ73ivv4gM8{;XH(DR+jYGwam5+DMJ0w)K}K2z(q6bL^aRM?8Uh0)}oogVyl8uI**Mu>Qxtq|IU&-?7mD z)pg;~gREcc<2GN+2;al;U9SCs$-@%;gG@yl#__fGqq#(LiS+bfeMk}8Ao<0@-FxrU z?3Py&L29osDHqskDtgu8C4Amg-@wp+2_|y`h`zt2YVx?gnr5UW%A~_j1JGP9fEcqV{?6VAM?^5I{6a{SX?94i5TQ247Eaia9p{Q z*#~C5f@&-}I!5IHbtAoBq`h|Ow-AKxa?x3ecmHHB<4uW#t*m17#(da zOP_#f5=sLP(lGqP8}<70xSeKhDQA~vK|#S?_->@?D(XL2kz5h>)61}xHQpZ)_b@|y z1PvF`+)y<@cO()M4h3RWZoQ68<6mWt$hCrUYob?K4c(1~kvb82dLRo@K1*a62P8R( zp1Byg@{x8eu-S)P4Wn|)Q; zZ)SVbQf#{A*R>lurpSoS6gAK2b<~$^D0J-d#Qo{Q$GlcVXAiA^Cy^9;6aez#B}{Ja z+V#$i6?97&uIT+F3}m_fs{b6 zvd&)KrkIWFsu*Ka6z2byM57e98g1!&=gpF)Aps}!)v@FIS7mW~j~OASp{)QIF0& z&lDS~!E;6qR*#FAt6e>r=1s4sX^3KQ*SMuOX3EaRJxL19)?$(o?D~QJMhyi#Llc$u zhm{$W15`Pm@q3N}%*Dr($0dp7fMeg%nFk(SL&qkeF7$$6wvi#%&-zi)7xH!NIY|w? zbXDD9@z?FOBPcr0Zt-Wi6o}n(jeY6mGY+oyC()G!N2kpA!xAw4%Ce>PuuHeC7_(|6 zF~qc^M?k*EFd-dniK0beS;}4`_>OpffmZfeZLDlHS7%gEABv4iV23z~wF;8f^+n{; zvq_Md{{Y1#4D@is?$Vtw2}1FrCY6p4w{07hhQ)TXwY=u~iytC55jKf59d;I|dw?|&Z2M}meW4tj_DUVhamyNVmZ2Oj@TLsB zwHLK@DgpmW}?mnt@pr1EKqh3g(BqRS`SGBMf zf{SUizLd7}x^Eh6cXAuPo7Pxz$KFU4Gm<8(<(fS=1R>x^&4VIX@0=leftWanZ6(;| zKEIgFa9%;}b)+mE$b5{Z!uo8qXT2w>tufMlV-a$={LNGk(TLs$ z?q5IkU`!LOgVr`c)0ZkLdxOAlj6S?Fwm6+xMW7Zn@#K=Y^9?R%AK(f!EN}Zkr0bhN z=gpybyY@rTL*wck&F+4d$K&jy&+x8y)H?Jt?C9~13Z<2e^l{!N)~!<199sb`F3~{K6aEiX zZync0*YppU(jvu6aVt)7iUg;H0&O8spirDbaCes?#R;xKO0nVucTaF=(Exz}!QEZn zUf2CT&;9)V$!BIKnLWEX-*aYWXJ*e0h%+;4w%yQF@s2Ux8OXgA@B-fGvYwP3&vJu! z;j`lv)VBrHoj$8aQQ_jc0BUD?JEEGCiuvhe0H#>-VMHaBO2H9IfYmQ;Qp)eBK<@U_ z>l@awl&g{0_enl^uF32lao)9IZEi!F`pu{WQ8d3|r+*9%y=;t?cKxdV1iOgoqE)M; z4|WE<4|tZx^7(4x=CGrMNZ(*??cEL2TtSimrL`>;I%j zV^$*HqzwJHUBFYIO82KrucOu2rB!3qz=~#{d=|SuFDQT5dhkuD_5E>jg`e$?ov>em zB(I*&J;Qj$(@6flJ+PX{^TXoBQ9VnslksWWqfUt)$IkDRwrP*UB)(Q*VPDXSTy6zp zf6n$;gSIueAZ5c3wGot*1&y7YOA$`XmqP_K=p#@thNQPO_bwtkQskXdPP5wPFFPeX z#-t;fjXGBLqZOx-5YtQ~O9rHd%Ws7Z zr>`IQO<)?CskcQ6_`~6%I~kQ(*yJT@&*8xeNO~SsN-$3$D@z{k-fgUPJ@#Ff|KlY8 z++kOs?ea?UQ3~2QI|HFxVr-L&P|y>zSQaDYb*dpAJ34s=AT8(nco#Q}DntT) zFTS&>)aL)#VNqVY@v;Ls|C$)wyq;4J2y#2PS!a%7k6MjvIO-@7 zUVq9E#qf@@g?PP5n?g9nko8_^#6~LR?d4?yb&YsGh}3GztIP(UHCBgi6{_?<4DhdH zEMId2S|N}mDYEr4Rw`91tFKw%;RG?t=`FC(P9qXr0(E_ni^!M^$ZDwXUl(vGy)b?= z0$Rc4w6^t_DppNB{JT=taL#`UDS_5{=zt0sgY5_0QIGfv`bJI)GDq@uDkIWm2!Vo4`zvu7UZi5SW#9=)h=N!M)mk0K%a#-hdtV^O^Khj%Mv`VJ`Wkw}4@(=zQN_ZSB@QnBX&$Zh4w zoGm&N{l`r=W(WgMPMbZ(e5uj-lIiP+qte>!M?UTFIc8+(46Q=ajZ*p5GL%N{m+Zn_ zSX=;8dc$E6ADP%b9-~suGagykwmIi5!uV*konrSjyl7!UBM}ca=)6BRl`(PbVRj`D z&me2w%iCd3aV59y(70lBqRwH_rIcuN--I^7Qn@X-qH;O;CwhiiD6)?@`tOSrt^X-2 zJv<-RV2~}McYe-dm&mM84U7tWnTxA=^Y3Xi4E7Sy)zWooDi zd*7TdJ%)Vyvf52xA;{Ntz=wRBl7ISJh3}{TJu^&|thXKWv?bUlmW3U2f_gS1RSXnVqlT%Qstv6Vi*L6ij7 zjmmv0vy0Ay7&FlEjKL-GDh{hj9F9(?`S3JQWZSuVV=2uuhiyt|pOzr4Yk>6Ng}$jU zOr1RC{SqP5YClb>L!?tm5>DoZccjfrC%xOO=Cp)4eCM}^+{~`_-~8A!Nn5pT z+X3mky5bTpp45I)jINb7Zy@gD)hvks+2!#$4cjw<4T?XL_RT3=ptZxB7z_K=qMyz2 zhV6qKK5yGQyuQ<%1H;^DYaBH{8RT*OMyF-IZIQ0$b=%xc5RddL^Ulh)+zDYXZqZt4 z)8k%_d!TJl+0YY=?qc`s-4QhG;6K1MkrC0Vpk_k7KJ+Cl0wm#0^up33(blKff_>Z&3993Ae1OxjaU>|YG1JJIHiN&&|wp_rx3mH zx@9?Q`3~Sz6u08Niis@KN}0BP&{0gW0rA2#2MXr8bSvL)m)n?9d7Xy_zcCf-Uou*$ zEvo#r0qcinsdC*A)gWPm(;yPvuYu)wtvhDta;w>=DLD)~Ss|}KPoctYTUWb;XxnBo zotcwHW!a>jC#(nx`;x%)aeNWwNUJVJRa`3&p=PhVSIGboyZ24HWR|tH$%FK}546X9 zBD+SC*w)!1f~~v#I)~~TlT83_^QF#)Ong95s*01wd5XqZlht)f;_~|G_$&KCm8^?Q zNMX?^!Cx`2lg4$5MrD)Leab|Q%gMi;t9O1#hVcK_H=W{Y!o^%}W7DJ$;)H2FHcDto zkgEm;bp`XE8=zkdAoU|z5|!dPV^bCTd-4ZAUSe1Ae{~%Fx(9%7hD}wYn25O_DfjfZ zpY6|f8!wLI`fe-OFU>C|@DwtlY4PA%yc#zPFCJZ5QflBZKBlqn3ikP0^$5Fxp8H7V z5d%jfVt>$2Z#qhPg#(K=zLxT%{tEHoc%y63KyQrW!}qR7yoOXD8Ur5NrNnQ|lCH<~ ztg<*}i~1bPM`F%BjDPpgOi6aYq{~11=FkvLJ&CNW2$_4gzgF{@yy0)9N&bw(WelAz zm~-ul_K1dCnH&A%x_ZVrskbzH`jGE-Z2HS%vaMYYHn-{8H(JGE`GbW>t?;%$aGSwf zzB@XR$hK9EKcmnGx_v0V(aqAvPk2I|mkr^J5z!Mx13eRy7by&X$U^#;Xs2gXoZUHc z1dcTpa~Snk+w^m&WwGaXaanvuK(^rzjH9%IyC4d1rGhkESqD;QPNOrV07?$-lp9Rh z8NXi$JT%71i>~wlac{BitLLf5aN^KyQ*s5Ihrbpy(k&T%DDwb3l3YWLWJ_spKLZ_- zws(14K2Z%T&{2KiRArd1 zwtXp}*SKB!sbV<)`JhRPWN{WY4bSDsZ+{8NMNiY4Ny6fDy*AGYe+lkI^9eOe4Rgzm zsVKl+1137A#__}Kr<-!~R;v!PTX@)s*>3gKZ!`K4hRnzYLEljOZGhYj&k>FNEBgSd zQA!hitJW~c)ZlmshV6`x9!oiSeMX}QReuBCS-WFnDLMEqgpncuzl8wEX>-9ShPE~M zbK`t;|54i<9XTvJBuVQ6ov@JcEKFj!dH~%K=Hi(39mt(Wn%;{x`laIa#Sp*7{S_|H zaVfiL5?Hg6`XP%<((F{VrnJbE_l1!~+t(xpvG~22S@GUUmzLx;zYe-jo`wTKO#WfN#>*Xvs@pmr$C4cTVWxHqqd{kUqe7BwhzR%9J ztrz;&*RQW%junx=q0ffM4a z$9PUSl7HZ{t2yed)t4Py2G@2lA&QTcgiT9Y$p1?DP+4ENuf6tCbb9)^`do*Edzu?;cOE_|yZYV^uFdT;$|;x=3k@tQHwP|22Xh6tVv|3h zw4!x*hCyGdwZ{Hgu}{*bx+Twbr`;Xt|ILfT99g71g8dKFrz@to0R))Kd*4Zka!JFo zGljmphelZsM07y~>(TjbX;fdu9lv2p9fn9gChCbu-pvP_^mT0Yg3oDaEm$kHZp!Pm zNr*+wo)8BSY4E>(bEWcLEAh0t3zoema=~bOxR>?D8Qbw_jEM+Qk40KZ*n7FPEQ+s) zca+mur0!6}gK>`6kOHiFDSJnDjY=oDrWxx8x5iMk#$*{yC+wz8!b0&?aV7dx0}YxW7! z1^U{VIiji1aW5i_FMZ#J#ACOMG?7BGhjxFT>u>jp_~SPErWuu}o*Ot02D~q=8xZ6g z4jnrr_3z}ne5Q&>@s;iZOiHaZFqzN)%)C4F@4|FDF8*v5;J6wkCb5U`ILclTcYh}K zgApjkzYt!zcdKbh87(o6gC_CF-mr#UmD~^sWk1nG2aC&q&3Y$har+O*!@HHR?T6lSN;ne4gon{0vE^+lZ7{np)~9qy)sq zw1XA>DnI@!a$c3XQZiW73+q? zvFQQ61_qbhE!}cZu|?YU(Xy>ahWrEnnrKeZHpk)^uVQ=MPt=oMuLTn2)!Au*R@fMg zmm#YEYUEvA&gri>pD*GU=TDtgL}rGhoC-(PTs7kZyrl=02fEl}F)%@gyGp@F|EVZR z`gO%Q_CH{rYp>g_$9?w)0{n6puHzO@23MPWKdYS9RS5g`4Ph^0Kb1pJ~xs68mvr=B#^*p1zd}B;fC)VXhqtBg(X#cJUelhzdM|AKhDaqI9PbF&j z?1HiwQpfdlHX4>`!9XK0>i#76fcoT5L!7T0qm3=CS2CP1X5u%(cocMWne>-_C>QYj zFiPMdQX`A>e=AzDPnQ0AzM0W7+RFQVr1FICJ_*Sxn2*4|GEJ2tMNnt9;;r0}TY~qk z?@kpdKkc!@xV8Q9Fh1xIhhd4rH<;m&Y^c2l)A!w&>Z#<9*iMRDzi6;`cfy!9C>4FD zHsXIdiVl>#?A@*oa9)iPnBPNC)TDP4OmnV$3l&=KbX@nfS{suEf{@@Ke(4SORT?ZB z?0y7VK z4C9k3Z6x(ao;0Rb*u>Szgw#jH&-7ULf)>uxH`9$jH*4JRZd1YP-FDMs_V_%ulb8{6 ziF(q~yeOAot(y_TSjNJ6k7NN45+d57a%XktlsjCT17(8 zPKka&JpS#>W6yGo6ST!(H#in$+f;?l(z|EL=4vv^qN5wd(vg)GUzlZd|43ob_1?wf z-EM{}-TKk(?OZ}A6o+>ER86LTFKSyk%=~~Sj;zh)Z3=viWNrVfPH;7_uC~f^0ECIPbHSt3bLQA*5ky***_j;FQr)^xuBLf~Mb zye)*nk2T9OyG42Az76+%X@QWtWo9URQtypH=r{uFOZ*qB-QSxnaAo2H!BG|msnw2T zgGIYg=MB1^T{Xyujf)HttGyt z5l)0pwe>)dQCJJ`sW29g!7W{au%mWhgd(0uXO#>V_uFp-%(v3PuTsbms)4WcioK!> zo~+ZLuX@}kjQbSc=VD`Soz0(hpUMT9;JdeZU7o9kar|s~&u&#_jlA>rN_$3}Ut%-- z7Nvf)25X0N=qpuDYcKq!j{2S0Hcnm2u=g8*6)P7K<+j>kUb2JG*qWj)rO^eEc;lc- zg|z?~6#@^#;${h+RM=g25f>HiUD4uH^-`+7Foo$NNV4_3K;&R&R*$cz5#!^D*+Sc6$uy4Sy zmhk!AtZgSjiX=R6nTip+ux*JeUJ~z>88RW6zkMm?)GauMdPTt%Ik+=&h7X}4oN(eQ z1kg1&dqc()z+Iw${=+7CyEN4p`~E^}eR2@D_i=Iw8yb;4T>Io0Rs0>~y|eW2TNC|P zNl@c*{PGbv4Wzwv*U#livZ$kQBf=R}<0mQ6d6UA`G)A@%zdB#4P=8OHr$3udzoy6! z_d^j&k(Mop_P3=-2_E{F#Y)vw5tRl@ZaFr*V$k$4qWe?PC19GY+H+64dhY3cqE50j z&5@;?&iABqH{~^v0dze~Ue`o)6@yWJLkaF3*7aiAHNT!LP5&T89<&fTMHF^hXjxX{ zM!&3nqCP$vL@^_fZ2!F;4STU*f)#d~O{}pmX>C6`L=78hg&>E80Tvc9E9QTI_T(9m zni@7IL6_$Kk=+m<_6$h%G>bh_rNYXdd0J>>q{oRg0L0^&!#n_PugR|(hi_m}aPMRl zxJsAp5!U3O@WfO`Aq;&N(3*Jtd8h@3-(gM|{;I^4pJ!ywSkI}OiImWJ8+)u+tw%wf zhh-cZxbC_)b-`szeb2=F`|xGm>MO@_K>EM=vzT=~3e*1^FE0AOa3sf%s>sZLqf?TS zK>4B%)bb(YFCJaLQlD2o_odv8a=*BONtTk4k$@?kFKI%!>?4bZP}2x2ys9J4uTSxPfAD`9qh0pWdVkY6uV@Pq~2-!10~W5o_MNo6T#68FU7C{9VSg4i;- zg5YUWL?6<1QpTj1xO9%ckH8|YT=yIEG?%!&m>6VKk+t1bLjmvepaZ1L(On*%crweR zzTfqfZvt~shZu4U%QS@p$c`mCxbLgta{ANVFaSMKbylq1mvcSE_T3swcsuRLi;5~! zDr}*A0qlASG+vSC3te)wtY-IRG#=Rufynt1z~olT$l>jK0|h_xTP>gi+~MrheJ{p$ zFh49BWqMuVE$Clb-0R6W-XWZ$ zq1;;|c;?ReWr7~&%;?P7ar!w+zFH!g@3XCwjn-unO{>joMZ2)44H5PF)+afHkK>H) z6MMZ~7i!CX zy=M%~6A!8X98w0y;uKlPaEo~@B!AiY8dZAny~0NMOB7)>_~sAdvCm6kwvN}EE=BQE z+D5Pxt6|0OBMs9t`0Jm?mQ}!-6NnLd;b{%10_X+~&7m!Ib^j%2Q*b+*YYjSiWD%x2 z3a7tSh(>Mi@OWUsFUuEabI))7E$qZhXf28X|KFa_Kuon$_ns040j?(oO;+;8!9qvT zdOf|++mD-UFLhZyVHAIh(?0a_eaz4k34%!OiaMFJu!1)Xy=;xfPBJA(Wt@p-@GMOp%eTk}?X9{D!z3D;U3$kU-mJlr#$>8H_&QBJXcFd3|*$Gp!3Ev`}yjAEYi zaCNBE)ToJ5^xQ|4v5&&|vE)c@7#Ulx0nB%}M8UacrH^EAkcqxc`ZrJI{71FV(lx5F z9&70ljGdGhCX@x{*{Pwz$VlY;4d~9!{Kq!mpQx+32T`B|YuYjfGbtwa$ptBo$v|wM zW{|rXwULl22r?uCl9j0CMCz6ZdGAu=GR|hNUm1mLboFph69Q-!0Fjqj`V+TWWmXxG z8?*w4#IgcTUXk-%MwGGVc+8F1T}o9@vfpir<4elYp0JEIoBDybqe*C!Y>}BMhuWdK z#(GVor`|6Dn8jez!O~s#uj)bCW6yR3$VXKZTrp7+f7% zuef`rc3rG+`NMqQU`}q(_nU??TW581hcansv@Skc(MSiv)gpKH6=mHJy2VbY1bGO)OkzIM5Z z3#L+0#0o>>2Ub~y*M2LzSTqDna3TAtyAh&B=0VH4n zXd8H#1Djom3@8AFPD)OBLeDoXlHdOjETQfp?V|5!N$HoX`x!`X!@0dDKK19#PF>lp z_{eB~^Pe{)UzP_`ae2t`n>ze%<=oGc%DxLTt479koFpIpll6w_`wENgf8TAm`2U8D z=qcGp-iUIhWKt)Ig2e1MS^3{krH%4yaK!dAAM$5v&t5?_A7J(wqSO1As=7)$chX!b z)gikEkCreQF+NcSezRGsdPH;aIOU~N9)H*)NykoD^&=Z!ZUU(OR{}*E^&cAuNlEsN zdO&(3Mz#zy?b7bkrhE*#;`_B;P{koULyrr}4TmLLKN*1u8zJ<$*AhlC$DHIl@66uA zGKWqLHnxVe2Gy3B{PbLGSoQR68}#~@m;=~);lF5X!9d;bf2|k9FoB37dwDn8E}KYh z*ZO8Y5HWnqYa-ZV`OjD8LSlAT)7bO`3aM=dp?q-11K z4`Qvr{?q>Wf*1dS{+Ys7&P2G6h;DH;?rYV)66GRl8*eqMImjht&eTD1q%LA-I<>2? z^^Q9BS@63|9{KZw{@Y&C%JRYaA+0GaROYLgu?!bmy_6Y`_HEi7#R4x{n{f@Yx+RlCAarxS6ak3t zmbwjMaKuC{k&m@^(&_qkqj@+3QHLb47oK;dmG-}ndBxevcPz!OyKd6&)jHyNAFhKf zL+@WqpF~LFPYVjdcdhyj#iFd`9NG)ZrWWuQlrP->pAEiC+>d2>sQ;1E$%h z`X!8c^W1`lcCiaGHC&BN0TEMFN6$%56FPyNNy>RwA9|pM8#+tF3MPsc0k{ii72JI8 zQ++9Y3dW&hO>bma_T3;RK%chCy7KL2L%#lr>YFH`yYr*10)Tg^nger+ z@KM@|fw&^&g~@V%*m)82Wj|k(bI2K>z%;rvF~Z>ang-?34;Ipv+5YMxe6Qf4iKS{E z^78>^OtR`K0+FzIE#t(|?tOd_c^w26r00EU)dvfh8y4henP~8c@!y$dse_>FDip<= z|LQ_%MJl38?ygw%YP8#*#rFQ+C{N=1^}6Z*!Cr%(;IutyX!qgX_$#8^VmY?md@D&4 zmgl<0zK>mxA4wMuKBaPS-&H2xPy6$Fq9tNb_L;$w=uj7PwI6_!tB)R zeze%i+~B{jid)F7VwqHcVWpg{NYx=H(Vt@3$$;Se+S>nY_=57I&dh%d}a@Py^zI^tpEqKKd^#(Ga@@p`yu_s); zFU^i14El;CZbd5E*uGj@$-OE3p_zfwZHE49`P6R8I<+>-8AhfwscaDyRRj*{x>WJREpgDDmUr%ATyq@Xcei_1Ys@xT`+v?mKSX3u^s4c+l;1%!9RnrYZIzpty(t+%Uq z+C?3a5phHYDx>NXFSou))AWm-7`r{@?4Yup;Ppu?`SKF7z%~)9c|ARFvJ&#_{D(+O z*$>a~X4t3aB3{bx8%oXk+Ej*D(E~C5Y{}DtSIwT@I3Cir#~b$9A}0n@=Q_T;yz8f& zE8`~XHpE$4rf)`l2@XGOnw-q3SDMs_jv%-VLALk*dX+Hip?t&tfn=p$sg6AI=vs=v9)x?Mx+&PC%?J^3h z4%Nq|FQ1H5bDU^>TjwVA*_NuV>uKd4b=)(XRIydJnF*7Z60|)gWhCTg#Gol$>SE^C z4i2^IpQv0j;&MLYoJ`0X2mDX)NHzFdZcQZ!-Mus@r;|-dBnp+vToD3!5$$CSRIjfZ@D8;CvU;Hlh@3rOek( z&wZ&?GL-fAm*MeUIP1y!4A#nI@=xi}NNUL1Gwr4KXyI0@=fYa2jOp-G^iG#$8I5PO ziw(CdL0P`P8?ms+ppqH&L~JFtOGWFg3+n+7Q6tR#<}#fDeUDFv#?t5I%cbHrswxq@^=b`k@dlFx4-f{ z=-xdygPAPP({O4oa}rbP9p`*D{u$6hCuq_}Sqha#oGzSoV$5ehjt#kOnfGPpI^)M~ z?SwJuxe8QuU~||zt;gSp2T}=mO-w)r^px6Q+=CpD z^j53wk=62q2G9CI_0)26-jiRK=!8WqPl5$uhu+olewvC`6#*n0^y;nHS5FQA9w~Vv z$RFV*2ckK7vA@~XBnc>&=!Vwcszl(zCwaGFB4dtc$CWj+$2$^VW?5}Bqk?XxRn+me>lEM zK;@x5+__Fbbzy5^-UHOzAp>;Nq{}U@U(%$9LN=-lotRr01z*^MI~YNYUW6@Q?f(Pf zEq$n?)_+T@b^od4*c>S=^$*c9F#S#k09rJ6z3&yGl>Ejp0N*+_q4dcJ$%qTj1d$|5lTLo_3%oDxI_G&5qjIQ#ld ziNPr%=S$=1@0${SaQwAD^`fiO=hWy( zM-u1CSk|fMYoCNghz;vRNRTV!dQ+Vgb<1Kci(Of+F|}~-U)9^p&5t!fSc^R;)Jh)> zG~rxWu~5F4tCiU%yqE!tglR;@AGa8<&9<)R4XihSw^InEWw)bN@@zi3CeCr*xM}TU zq%`5G@bvr-sG)rA>qE+$Kic0G#ZuNf`a^%_>;9xIft&7B*Tv`fDrFaQn)^_CPP-Xk zaRpp3`d9^j&W?E;!&*>+CJXN4nAUcaks5R-Ro7~$>;+fUgaGer3}mtjD){l}m*`U& zHXk0NmTM6ASO?1#{sC`@BK)36cd~Q)5XrcZK=Lx~Hr=~r>yDsV&Z<<%J;cRJuL~{s z+hg)Xbv&15$H+?ABXW%=xwdfALDk?Gy49G?*18!z%5-{R%#xF7We4%U@D<6@$7VBo zw^5$H=(?!8&C`4P$$Y0(coH(I$L5eLWi(1F(m=PaezugfsB#E6t@mOUcX;j4SlDoTFgeFWJ=?FZdL-O9}T_x?fN1n#*oyLZ1n!QOADpEa9OCW&GeV^%GUud zFdOskCwgt2y5AeMhHMqmt_riS9+BiB1gPJ(3XiM86 z?trjKvmUk%#{4}u4W|cmUaJ0su2fO&*=7Nom`rF3qsW!PeCC&(_Vr({N0dehgHoyU z?zlH<(=Y_)#=0$juCMZ*!)=qog_~TvtODQs*)?DtumMGY<6Gl)Kan_4(4)-y=dN{_I82<38@A$Eg zQsO$Lrt_-`$9Udp@1XhAzQu~Wq~)GIUVFZCE5P!S0KYSD?k9lveCMqRq=`>XvSf7( z8v|)VJ7I7jDOq*P7((@+KWKySFk?pgC7Q~sD^<{HBnTiGF`tL1Dp$?(DaM1IR}_oL zs=QJytlPtFEJ+f@PXsYXelqG5b0;vPjiQ$KB{IuX0^7w?Xt)%y#dx^!(T_;p zvagSQfOD_j*qM97N9Jp6a@p?#v^dhcGOH2Q)9cSjz3b=vd)ZFO4;--}}b>K56&DCQuSx2bF~p3Vac1Ue*q+(=`vy(fd{N z8YXt0U~RzN+&K&a{qygfqHfLV&bwm!EsilQ)ki|K zrHK||eTJXPqvR>lXlxITT*lFBv)|OoSN1(o`Z<5{T zJ@;>T_0bi!t}ubR*JYOlS_6d~Rt^3*nIP{nZtuJY>yG1;l3kJD0q8AN1H=2H=C;7Q zx-V@tV(wv%vmXjf{|r0Djff?*h5_DuXlWh zgzZa5xb$%+kNsgCImP!F_aOnF_64&a-n&(ZI-ZfDw_`zzX9lxIcWCE3F2vdaY%1)+ zXtC{KXZhd@=Ivb~G31R2)j*xhhg*5eQZ?gdLp4A~*wN_^k%=}Dw}K6e9#5)EY~Cjm zbkf^w`4S2St#*QXG0!I2{xq-r*;o?6Hv|=-)r->i`zMpp9DaL6*rfOqeqD1hchM_m zTgBb3eT5Z@%@_W@9_pD!>rauN_&Kr_dvg#~|3xefG77YEFv(rM>AY}-`xsUx%?YA2e z!u_kkrE}dff-!^Rm#bZKLYwB9ZwcL=1#$D>HenNT@gG|DP(Sgib;4MOAu1#evK+)O^@(F`r=!a2~0vF;GD5bmwFB2ZvX)|pZb)$~-t3f&OZ zO4C8xo5vX8%y#9Nw!kkgB&51tbqrx?goCy?!3C+h?~8cdE_u1haZ5L#g)lp<$dszQ z7dvnP-xcf>w2zs4T$RMBI>p=9MB!V!OWc^nI#|Qd_Z8pt2)^a4u^}eo95fzc#CI0hHp^Rw0js5nfu#jzR(!lCm=c2TU9v^< zc_r*$8^=&A#c(Wc-#~DRhb%i^IE#Ph-lGiRc0pID*EuTLSd zR6P2K^lJ|PB9uiULGD6WtJO#BM#(Z!;)T=#W5%!$%G@L>*rPzA?EuZ5w}kfnB3ja! zhqUO3L;}24XJ&xHdCH}SH$olHnCU7 zu;w&jP`92nJi;^nu-oFti!LI@bs99<7BJj9d4e^_D_lV4P7=r{rNyb&LaEik9jxKc z(i@IqQmeO0bsZFm@}D!$wVe>(O0rA2s~u6FEp!`aoxgm`V2AE`DE+}PKbg!st8n_C z0s=EgncaWfl3SKv9t8g_nfT~F9~!uMI<6rTR7CHbK=I_&?e`A?kh6xRZSA4H|bfU646GVwpOr1rUHVBGi^gq49tG0Y6m+_oEN4CizPL9{B z*Lf-WB_ASPm>M5R+&4zW?tPwcW;eDc5N=0f7hCX8GU9MZyp422V*?KPw58~pfB)Tg zbOl~E3~x$yi4_91@$@Am6uoWZ=nqqbKj-}z^6f(#UHMP#S?*v{8$w-yH*`SO%9vJi zw<8pe0+_ucOzhM7KE}}VcQI9UKt=?mm zL%at=cYR_%QQe3nc-(H(wLJPU5J1>+u>_@G|IM@T2h;B-Lw{3&&$Tkj={Ckb&N~Y2 zldotME&b+z@UjV1!%;m;R0)^-MAMPPW^^|o5q-COY&fB`)`>sDicRh-?vdz|Ym7i9 zD%eV|#ScNc;3T*3TGU{l9&v`;{HfhugUM0hofhvR8(IlfD>mWJMeZ=?z>4Pi7GS$? z*+CW!*lXbFcsgn;;C40a)MQcm9dtC^>9Z+!_g4#3hp`Rl2BPD4b$XOy$dkjZH+0d; z`4cJP7Jq=I7-Ub`j9@{z#9;4n;aoRU0AKn$0^IR(Zd+^ zC8PdN^d2S!Wu&wmh{oeI{Tb?Sm>A9#+W;S5R>1hNnDyQ(EilnK2f6mxxL}^KwTP1;k9X?xrR#u^#di=qk+~nlz1= zU;*#@)4tpMwf86U)se~>10(NTT%6Tk*%ywinwK<*i4{KwfI1?O(OXB0xt8{WACnt# zsl^JPCR0ub0aW`&NX*Cjw2RRmA-6RfiC4c4cCQw^QcCW?$o25H>Y9xmdY>i>5%#`p zt}__2S?tu7)k9|7d@M@PV4vrTGJGuCXsUqzlf_unq5^Ks#?Z|IBb(hj)QT2)ULFXh z{br@5Pzm%hAfI(Cdq%+B_Olcm>wVUcI;p;d+-g+mFZQ#h+PL<}PchKV4A;$%fz`jc zgg6^yncZXm?2=Ir_zAYl_9WQw`wx&&m%35QKm+1-1oyY1^kbm9xkqmRr`h{)9YZbx zrZq<1-xWp<_)jW-zc+t~_+mL37sGrRlU0xUPpCiEbYNNRzu5nOLlW|twG+D^r;X?d}r)_<1}riyFYtG4&r5Ej<&3_D-%;KC;Ui<3e*P&9*)$&5gVadIjp(F#$b2F!HvbT|ci26!WlPR}J-$mv6?d}zN z3Y-O?J;sC2WlE6EynVFu;XxnbZoe(=sYY?(*T}gNXVlQurhgL_ni^V9+WIaxuRyqg zl@C0_XYSZP6D{^;*0IKB`jtJ~-Kx1s#Z z*m(|6D;z{Splium@!=FN$Y zJV%erE9y^14r)vN?kpkgc=#N5D$YT6j{-tF#-MbJ-p%f`rN03@4Zjzme-=wH3Oek$ z_L{=`y&y~)Q_|C)UGjgzY)f8$&^3$mz;oeoq2gXy@CXYP-ROQiUPbiDpI3|MVg;X9 zKv>~iYX2d8*3c)0fMnTH;GIrp!<<`8)-Owgn7VlXoDyMe7;ilq20QAiIAhepY4IRGicM%PIAHer1Rj8Xel>1NX5{ zOdg?PrxDWQMBa)#ihGXY3bi}6 z+m{*`e)`vk%E>W#Uk{S;vmRZHvR(NB4_GdF+n5%)8&Shxi^Q-WUYgc-C@9s%x6j}? z`#UiU8^$$xumB?|e`libq~2@^c`(FW?C%_X)>x-aP8uBP66 zW!DkOesdlV7c;5fW>oV45A2j<&q{t3&*ReE35tg7E6$EH{fFa*()gW z4^fd?Wsy+XrpFBrA;gO9vd@T`|2Jr0&Ni{tWHb}IUEI>m_Og@GRGoj9##TFDe$MZ? zNgzfkzF|=Hb<3l}72%fGvgn{(oP)s*&%S3NC+QBjWskLyZ6q^=jx$|zr)^Vn?jbhm zmVIY@HNq{t2(wdF94!5Bcz~Bn)XKMR#snDlY?n)2&n|2o^A}~aFh2LdTvAtSzwGv& zS_rcD-lZz%OELVg$&y7m+2daLX^!RO6G^;6ti^g~qhR-mjQ(N6Ogt3IE$u!P3hTa-9WKtQlHlx%%l&}oJz%2DPH&&-;9jNB7;#i# zxfi@r<}P+zK8uK=s{iw8H0B72!`2u>vT-Q`vkRHCs-Vjj&F)7@HF}6U@^Nhzbkvhy zY$CcqM9f?)Hm|<-J3Y2nU^hB8{agkLrvuB@TwlfYK5_a~ z>X}`MS>hx5RISF=1m3=1`FKjE-@^D=NF#M~nMMTKmk|?WrE_@_243k*EMo4wQm)*e z#N3~G(bm{_-Qt?&QGvJkW!Dhe)^6OoILEnqy04=GL1$tj*lcz}eb60X%${!w3d}v} z!IK!g4WPV&klvoviP9?b33*c&h(X~t8nNK9n5Oz087^ppB?C^q}| z>=@fyc4Rs@P~T*B@nn#iz8m-UOR-pBK^XYywxq&r2X~+Aor*|y7^o(*l;Z6gg67{L zvh-c21y7wx%zDy;HPbCL!C6Y>V0k(gF)hH%g32%2JZ?3yzLM)KTcIAP<=JOGk0NJo z?}|w%<=WT2y8TMOu`Y!jsP{qcMrVFZq3F6pZ6J4BuQ%K7#giY-yXBLGdZcIR*;+HY zGo09Al@ax{6B#mZ7Ru=rg8&z&+gg4B=dS*ksDLPV&1vB`@X--5PT&*G8Q&+U-ha|YMg4{RSCSs?!?B4!=Y`tYz9L@4K93emm?y^7q^PeM-2I z{-e;;O5u`)+M+UzMiulUgR%)h!+N|FWl`cTIdGxyvP)t?%X?nxs!WsKCqo$-Xdq_=3kJ zMZ-H=xg+9}pjet_2%J=r+D~t!a#hpyLtdC^1oQI9o77=G_xu%_X5Y6{r#dvzJ1TWS z2aD#C%d(O8?9I|RMUu5x%Sr1ea;tJfl`X0_^yEnjtm}fE`LrX3sr|nrtG2H@_w8Gg zVc5odpf|pB7^Z^FUP^YIf#%ajJ>t}~sE`!KIqZ7Dn7cAM-J(xPMJ;x<|RWC9+C#&ker4`Z!xw#b^&Pe(RMD5XRkuR z+;Lpdx-^!jq*B40;8Z2$gZU``&JUhaq?GmSL!Dn{Re`1Mh~zm(?w?0rF{i)NJZ6fT zFZ{x#xWf4+A+!*%ED%7`;{KqVM0IYM%2&L^KwhR?fH6^Kk^phG-I+(neCGvn2!f#h zTse7$_}cLR(j1SBx1`9`zML;OZZ>`{>)S8cVk&XgN$J8lwko@p61D#fif3tVNXVbl zctV9iZlVk5HE8<jv;IruloI>=AtSy z5-U?@4blj2@h-lt{jMMEU0_Y|(A_@wgnezH-^bJF;+WzT+A>1foOj?vkrVE-ctU&` z@FVgvY#40}L)K;st2u{_k?mZQXl)xg#kcUi(YL|z{-0RoU$C?{=>LmVZXu$reJMVi zF0Uc<7b53!PD+ouNJm+XemQ*Ymuh8Znw-6ty(Kpz4-(RgjOuh6{~in}{sMU}4J~;< z3l|pqbRZN!*Y-w~ijEe>OBkgHlX)4s$U5SkowzQ1KIIfnV=y??LV)?*CScE04tKBl z%X5K>NV0H8L}Ygt6dbKdOp^9KAPnsG-i4Ju;t)TH_Zu~X^2g|%i?!3>yBo-iHP#{= z(`NjPo@Qpl(mXDcZJLZ2_C0pfymn1^|Gk;-p{}R3D3av|b-3CVF z4%)_P4TV{M@zejnXv>H*+jUI#Yg{KW+ds8wN(B2u73OPyF#uU2FSnGP5(MSx<_)PheDU#bYf+etVZ%n2e%Z zr!UUpTM7+2q*M29nfiFt$~5g>8VmbMVEEz!T1QviY~#5x-3ledTx?y`dN%tAV!F;} zTSN$bj`p&~gXo{9duS+1>!X|LvTg2|4#=Gat~f_81f}80`{?6b8E-FunpCTxixNQ* z>LmgxN6U4M-I&R@(LgjXg$+-?R(JoFjf0~_-4w4S5$MRqf#9)pV7jZHaaO`cGLkpO zu&%(udRcPcD4kw=IFHOGErMddK9pjh#OAzIDq2&WQPNz9 z=`Rg61+YOZiSz}FboaY+SUfm}a!xh>yoqPMMQ^n&cfu87W=8bn2v{`xonwceQ;~nZ zo+-*{e)^)0qH$C48Ihvn_D>cEeHD2r2~Wm$czsWV%`{7uhkAmI`Tcp_^LVTBSSj-J z7d?aB+l%uwxjne=xmkcSg=MfRjTJ2`H6*u7cBUjm-gAbVUg_cUyFHZQC#H@X>M5l# zjrSH@6IHdkkm#Q1mMpw{0psf+4-ce{YD&`%xxiU~Kx?BFyxjoj z(1XI0&uc8L!W;5z?d5MOC8`-6bRkpdgJ#9%4-4c>>90oUryOdw-E^$xz5?X$Rcu*5 zt(LNX7am4y$Y5&tCEEZ$Cvwmk0bMH;h_T`}=2D-=_$*yK(+<}&ghgM6H-S!xhADRS zv%eX#nTqgJyet6S54gDV1T}f=nsTy7-Wjj(R1QCRMBeJUwi5cAWV40dQ)YHW=f+v> zCDRE|#mJd|rq1-E-R6~lr_ODcM;G>RtH1Odw`E!)N1ApoSA80*o!-Flb%k{Dd64z? zAeUOo*qoean@|UpiH5+WHNG4^{x3~*VJTj_!-EU&s4s?MF2+v|e*ip(?MS=o9{kw9 zW@#8L!fn`u6bnccCb@$9{dxf3IR;>Wa5{pQ#=>tjthRw^zq?|N=uAhu)Qq%&T@_EC%x`#LUPb05QQl`i54h*&XaF%R> z#qYtyCx&y>+Ilk6dWUZVO`Udz*PGl#8xz~#=o2h2xn{1JEEFrvhR^)zpLD2nonW+~ z-+T01>!$=P@j*1hk~WfuUXG0M|AgikF&&s!;9YR__V3qa2!5XZyzNv!1xwxtX zeszIPrjC6i)PYBrjX~|jGYa?+Y|Mq|b)TNq7&IlhIi6N;CfF3a_E{yYWxdwE73?hW zAFj+f<9&t5dq4NVlR@3nT|D;wIXS@m`^VylBQX2R6WI zF88I(L()nG#O;!qsSa`W9OWj4JdEm38Q&8@EOw!xTF~*meq^H0Kwqu)ZZ3SjFn=68 zci+mbE=WR1F_`H%bL#$+a`rhN_LXaO{p%XLK=;EJ!tJ0se~P+5&)L>aKYWR`Ae7@N+Es^z1-l> zYJVuX9Sw2qu}2JyLRsT;*o=!uWnJ9pjN2Fqt8v$IP3kXJ_FK=4@fNQAo~zR+yfRF2n!_{ud9W zTV(1$fSQ>?ujUg_NLY%Z!aoB4pQ^7#-0zXo?nPZXQX25%p9=!cY$k8q`n@@p$1v>a+F zmyTslI6@s1;k@G6CJW+L|1(RaMzJAQxZ#*34148a#=Eva9qAEs%+S?~RzlEZWNuVn zUHP0%Ns!gVuE&=&>^16guH^)i4He=~KaKq;-wqK-abS&G|fbXXAcd}@BsY!G|j z&pM(Pe38%T7}(yU4AqEF+mIh6-D_{p@0|cID1Bt>c0JwR9lFmvrW~lS$<0oU>8GQs`T^M8eYbMK#-_i+d1z{HFA*{miH;`k%`%e~Q0Vpz(aMpV{# zlcBx^fB87tv)e=t)y2OcE3eS#Z`@K!cb0|lM@IjnZn6EMB9?2NJRA7j_o6@OAIks9 zX)W#lRYA`DSjBZIQ0X3F5OK!D*b<3!x5GT=^qq0OF9gX$s?h$g@g=%CJ1KP~FhIN; ztClgxO_F}ui3*h?RC^8RQ!NUVh1#SJcmULKFSr>?l=$zRmr?)59f^xrK$|39e1+O>-Z zD}~^#_((R$O4&EJKr6>4xr$_#X4k-F++SM8@ENVb^ov8jjwpZN`Gq$w=DFOV`Rps& z6%N{-OQ3n;(>7``)~}s}jJeMY(d{!5CD}U{{-lw5;C@93YNg$OBRgP#J}~>vE0FDw z(q<8(bcwjumL0)8+b&f4PSSSRw@vX9y2CX4_K-Xwt;aqj+LLHzVp#77gd7vqCt!vR z9gWvR;#%&qIXf;~q7pAXCXo{n?UjvDzo^n90f2LboA8}eNcoJIz$k9S`!<$+lzxAs zsCUHPwCl+8$<`1{T485ZeG{%&_Zj9=4nvy_?(WyIHCV+?VoK_^7HHO-?K|b6N|jEq zH?*Houq6hGHwWs#!##;>ST>D~df4wI z%&6%nXD(3=HiUYye-@t#5U1_$bx_FBt%tDdo_;F4;U>J{7CW&wm;PB}$d+2$z;-N%oNTRiBF4MaA*$BZt` zA~?~(nWAmGZ(X@ZKA>>;suEzP+HH>?L%^V<{D9H$XaET@^&y9?V?9LXwxC}&^;GH|w%@{ulEbSbNt zBiU}RV8lgV3wdv>LsLYKb(uqh z|Dhju0dqDbfJ!}Y=~?qy8nj-nxhRt=?N4Ck2u*rNOmw=3Zt@c0b#T6pg)Rf$4M_D~ z*@|RV=yhTEsqAcKmy@L{RJu5B>rM^{mXauepYJ&%!2xHA_o;F%bdN5Bl2Q@O+w+b) zUO0X0NL~jCzMh3}*VsO~1x5Sf64RVICMm**8ducMN7b4_&x1QCZSpF=rooG*KtG?3 zUF!9jaDEM)@|__205yW()ZvAt)X&S9RDfq4;%30Bry}${xp7s8)VxhZuDV~ z*duA4>L0@st#`7+_+MaHTD4WtqdUHmo#pdUl9D%c)4QKltZoF={;6;&fxu?|!qCAk z!fA})+56w(v<)bZ=WoTte#BIQUIrQe_Dk&th}Bp@fGw|F)k(b_YNj-WFP{IHWEa}1 zd)lVKQROx0NF(?lM%uPWk(3n8N3@nvIbWhvMP3r5#$3)359fZ7Aus|$uqQj(U@b^G-lyo;1 znXYOaD(2-K^nmC7tzA|N3ekDvQ7irHe2FXH!t_=T=HY2clUd*H98XOg9Td4c`o`&~ zie8k6>fXIKN|)kEzZyN@1MWkW2WtaypV)4^7|gC+WH!tr60qf6brqWy6yQF2jXJS* zFI76zwd`&;$F=XBNM!$8WTvZG>qfl4H_(NoDd1b2BNOa7Tl@{UZ!yXj&v245lEnu}1VHq#C3m#>!! z9POPS1Xm82sGjAqtj(l%ZIMk=Snj2g{|!--@uXj`Km68k!mgjs)~i9ZPS)QAw0Hdz^T&Jl`8No)}#$z2WXC?K}RmS$UFK&{0$3eLC^#^l;N)RSZ0V^_RaacMCnALg&8!*EeOf0VJXLb{fMec z3`Ht_x1RL6%N;}(z)Q{%;Q<#_67DYgi(Udk&juI& z=Px5M;|T)3J!!Zj5PqsUMpYtXELoK0V&Qo-{~&TU)=y6+je*K#Pi}Gpk3cb6IiBtM z^en_5^oePeJ$vHW1iL@7s0>pS<3z?5bzo)10Gp|Av*mc7qpkITwqX4st%)S+^FVx6 z&LCs@Q^7mJKP3AC28!{dYnW(WeMb*?!uHy`cr)6QZ4ot*+j2ihW-GtHsM*`9zE(T) z1_CK5RLUlS59N?#pj>_&<%#@mM2L{(ak20obPlh zXgJ46sMf&blR*2^fyouPOE?nIf%^b{*P=vKlDJpC0U@idDS*@>tmp$}U5tXR#UAza zh4EazG%@HMb#X3aHRyQI!|0$BE?$QT>Ex0ZX!k!LZJ#UXN zN43C;r#!(D$R#`eDS{j6V0C#wNpS=wLwAwmTt0~V_65PkH;8!lC<$*Gp#EE$p$CK9 zhb#cEZj?e0V+dQgp8whvnAA{zgM{V9WnC?U26B9kq9whR;;rZX{@&H!vk9JQO7MTI z`*#e^{vCttP2L1lPY;LAm6e!Q>~T$}=iL@ATDR3e6e_r?jPwdCwH<|US?;!Dw< zZj$>Xaj;3{L8y9QJZrkvSR^o^Doap^4RTzIuUz=VyfhdaiL9PrQ*xGzr0k!X9a%RP zd+#B2F_g8~2qB9sUD5K~<8@~4^6106NM?dKaB56DGRGG$CVDR>zRCUeaVgPyF);&? z&j_gOZwBn#c_OZV5CJN20Gy{+2|1x1z?n8+=aU_v)Z^vwQs*CWgHL7nfsmS`1z7A! zvPy#Y&uyIoO3MKg=0+(3Wlw2&>neuqOjjoyA&iS_k=CLM*3;66X{OtoGzDixfTa)U zvW1}~Mj%l+!IiBrLgK%w>iZHbwGQL3YU69tK#G)}aNc$F2TEDv7tSqvJE{oa-QT)z zU6~W?t=?#?R|wDamVG^$iY?#|YNiEU?t@wBjuk8)wsrVoA72If5aFzQgj}HZhu9q6 zHNWzV=mtmfJ&PbSOk+_ajF>`=AoG|ca1A){ls*USKuVoZ0Gyb#OuQ!4ye6bygj}Nk zS*#E2DAZ{CfA_OY2W4y;kE)4?6)E)gyo?;mff+BWhj7+NKTC;y_cXV&ij$D|uH8pW zB)5p_4^TQ5cVp=@e(3;jbgABjJuU5Xzb=f!dSHjbx!jejkh-_&mYg08sMR%KeEg*%Kw^8`7XO)npa{ z-W+8k)x&SnJ>jp`X{)v3%-0mxA$-bYJz-mwhk*npc?)K_Y|? z`%J}82nPYaKwhp> zh4l>UZ|8b)d5{TthhnqXw`S|~{yM^jJfnpGffp(jW=xe?&<9Pm#e<>r1SJvR%9z|9Px zi0qwXvDK|@#IQDOM*=FD`1V2aQ~7>s{>^(q;!iCHswzjS4nM&)0aU9xEz$jFULG{!ex6} z%X&F&Qmu7*mO@J6s&Qt7IXgz#)n-{^4EouEL5WD{!CdaGQI$OB&s6eTK)JDYZ=oxg zIh~s{ZDoOj&SxCF1gulLO3S=EeMZktj-huovTU$UM|qU!H5PgS@UUn@IHLnlx_ZsL?>ZJ&U#*Rz}ro{A~nT@)q+FCZHe7 zp7I~w94FTZ_y#n3J(wr=fA1Tx*Zgqp8!l#MP%8{d-U1n@^_BgScg^g#qJ_|Tu5U=) zuP?qMJWCHea%N09+q{gC=s>LULVqJMX}L5AEP?21F16DwC^3-%V3U5rT~9l+{7eGR z7Um@Hvda9{S_6`RKl<@UuD}Iu7d}?mToSwl+H>Y=RC7`iHZR@iZ+{ZR+zxpVCNBS+ zVE5dLi27#p-#=#Kdpua;OPyF6f&pc9i2<=rB323JyHieE2jC$ZT6 zCU4NOw*nPAUsIQjjolM6z#>yuPQ3ep7k6YKB zn84oQsHr0AHvtfx=)lu^rWc*XyK^>zAE}RzdbrG8AKH`8rnMXLUSn&RO}o`xn{k$=n{v`Yw4rz*`U> zVOmPFEUP^Y_Hi2h&$>K!8y5uDTETMA$S+Q|2L2bK?G9TE%%vfG)_vT;+~K$_nl083YRMq)Kew>0X`XjL`CQaHmbeo&%w!iKEW|IDu5?9= zV7kHejdY5TbEh6X0hIw~4#_<`0{>fSe1WSmot9C4a&EU_BKc^O2XrcE zXYiKpnr*?uh9_%`o!cc>rWtP4d3KX11P#2O>*j3thHlx)_9u_CA3$u?3XqA`ZqRY` zyOT-IC4Eb)Gje~2bAk<3tqTFRn*-s~^gmK8qAF5ojejOX^G;p94h~tbNP5jW&9dhuiu}05 zK;^w~LnDbvGUnAxHy1;?EE4X#nqAfEl)sO8qrypQv`Z3FV=FRPdG-szr(I*l-K3NH zUMTD}0uN{S)wg={N`T>dU(@lvQY#-gKy&Axzh4^IrqW6OXKO{emQzX;L7BBFrPp|R z&fiquv5&sf^;^L-m-qYe;Tu+os!5^6SoHMNDcX&a?%DJ@5d-dPgV2xzB|T&WWWljq zh>GAf+LOg@%aI-0R8~=lDBG^jYwbS!>x|w*qPAVH9(e4LreKym$C8!cNyqCyElzkr z@-_rNKA<(U8DL<-KOFTLpaQ7~2Vcq^YG(Jf`Qtu2{nh*yi~Rhi#m!9`%s&rA9otwc zxfe2ySmC(e8gc_wu&!XH++HQRk?iRHGH~Y`8SqQs&D5$Uu2~PfJ~Kp3xsAic5C+=} z^oK8-fE8_m;!`R)v+BskV^X5m)_418ZBUgc>&ZSC)$<8(hNRTRduv&JO#f$9MQ2~u zMh9tb-)zX__%j&mqmTiJDWO~}h9~@o>?bl|Ufx%i9N(9DQx4dfdj(Oia@;3>2v5MW za;n)&ULxJ9a6xX?E5jdc1!@7ND_2@+7en)L<9ZY9GQQ2q(>sP3Xds3h(r>xRxu+gr zJv1BF7IzHZ$!%v{t-!1Pr-4+GTrv{mdjju$J2mL{scV-$Pw$93JIN(C@n?I?LB zzfxegrM-2Jm!kjxEF~qesr)*Vq@8`dp%@-2^UjZvMsKbFe>|bbqECD;3>E^}x7xPZ zB==-!uAwd>&%J;cx~%u;>@MP|AQO`>z)&^l#t8Vth@7C(H$o#hrh%dXKDIk!QEZVo zANj(e*r;ej{Fmi!^Qjh84QrH}*r23=@80{dL;yWN!oS9&1YQ`l1uFsbz^DTKjSd#gUWH|JKNZQjJRSG{Hh3TVxa=bK|;Z{^c5+G(L$bHSqbm zqJDIU+XQ)~=>JdxTW(gC_9%h}?KSEL>dpocSskZ4c;-yP*}^+Om(N5Nsn+e#aNK+& z`Sus_eEdHD26*EfzDipJ>20`4En=aYP#=}#{T#Uv2j2WKYBOv;dR25{L$|m#NupQ% zU{8V8o0?rJ>yJlqbJZ$VAEQdVT!E(|(7W9(`NE!t$L8UmRi;GJ_Z3C|O9*Dk(ktKj z`P8X1G;%0Z!Zgu-q@!&FwhCWFPAVk3K)#suva|HXR(wH(Dy|S*lB(;>&>b5A%b>u}#nt$bNh-i6f06`7w!6+mW`z|gO zW+6q%f7v-EUjv@F;gFR~>mPlG@Dtrzl}$$osVw26z1j{`G;fiszDg>(O{HFlB`+${ zH=as*w_CvJ9^=?cN7(J)wi@$m*~GwQn$uE@B4FPwUaKYUl$guN(3rC_-^7|W6l;|4 z&&6xeCZ04NwJ+4_GUUgN{fwV^USa33vcL!$F4N+7CWO=*%;4p*8E<@zco)N+hdXtIU3v0V?aJ(vWaO>xM)y3JY^~=g z{D7IR42V;*nC9#irt5IVi@GXGI%lEKQMAkX=+ox6!8xrS3=6X9QfC0W_i-8}v%5c$ z;mbOy`-RKd73(~58S`b=9HlG^)T8WllFgW-0fVbo1x>6?J74T6LXID_Ht_ZB!+wjiG9HjG*nOvVYWl?) zv=O|%={mdkd~FuaFSTZyf37QY_r6F&gx4`Jo%&WNsEMOW**YNc%0HxPVwU*1@Gf@K**2~SH4-XwsaY7#~%AZWMzQ2Kv= zc>j);I^i4FFUQ!d_$Zy@-=feDvR~7%r@GXSsd9gjSPk0I6EJH^Ws|?mpKs~6MkY0HGOOi+vvGbQkV~*D1Ral!(khosK z3p6^<$EXM+vRLBK?6o@2&*S!lXwA0DrhcEp8STp%=O{y`1~mI$mvRG(6tYIr9{jnB z_w?co*6!vEo-=NJu+tpo~N=_<)4k7 zIkjiI@>|y8o+p7M4hHX=OU!L$Y{{Ch)-`#nyOPXb{y9la*e&^fFeHBlkDbSFezW$; z7YLD4aid^3r9Wdvt4j9(XewxZKTXD7%G&LuDDdPUU1oi$Z-PQ?BKG#&=<6(XE{Hns z(};t@L`sSFS@loR%ugJYK2x|qq(5pSvHuFd))6V_VrhVcdl|-m;p8 zyJnjce3y#<^kTz5gS8}D2=9EGO?r-w`HBT1pOzZx&CZ_`H^2z8mbqZ4+}ZRdagkuY z@+N3bnDOZ+a188yK8>NX{c%9^PAq65d`x|^N-DJ@mr=P9ZE_6yKh~l2FZ)yFk=5|l$4uCHU!8UWS^Smf96tqF*Z!On^K3}uwXzWC%W+r^Z>3z~Jgsqgl!eXNDcV1TfyIGk zZZAoCLA?VG_nMM`=|D%fmrvm#T{=d$lFH|Lqa^x2u3YP$yb`*S?X!0HJYI^i9KY_& zVW)vr@;)fChpU?dg*vqpmSd6>F)&L}&ldBg2V8g(Gb(7X?wOJiX29QQ_N^^|5Jtv=n4gFt| z$DR{AB02>)yMP(Go?B2Al5)t1s46FdB(JY8)%_{e3q!i(8=YL|2r_-Y#99i7FVla& z+$q12v_doiM7)pR{&HgF!Z%iLef_o#x$W}nyEe(uv&b^LonPl-Ns-a@5gHxphs~UO zo;%Ot)VWEn^mxMaPJmE-`@Z}N2VugQLe?{x{O8Z{4}N$T?=7CcI;0eu;RkDv>%_~F zxltK-5O0tsRB2Od=lobH_`GI2)o{_UKICgExV}IpA;{ocIbfG%nbH0EA@vPXk~^s6 zKGRycl>Dl-&!fOc|L~tB*?K;pw&DMix@^XpAgCh`)Hp4EX+aW4&nK;&Gh&18Le9e= z`eC#RWTny=RxpyS5OW^j86ebG>VnDp6s<>JD{%4TWilY#+pA?zK_2id`wam6;fd)7 z0?fk?HwwYWpJK7VIG3p9TppPO}s3+yg_v1oHmZ@N_sKL^^9SYpoqQ1RqT7kJv@BhFj6PniTWfTHiq8lC(ROUU`d0lV9w9fsz16>3k~CjB z$24g8GqGv>Z(c9)=BwFPWa-IG<71B;z3u%ey$;{4$+lhlX^M)+&eFq>^@*h1{BqM$ z($W9#kQE`Gh)fDepygv2zmMC7&zAyF^>^Di}+G-Yk7gUK~ zpQAvmZTYRQAhD46W{p9D2=0i}Y;2!zqN)^g*(nbsY`rz5flnl83b*mL-h80f+1J9& z+zhQf>|ja@9AfPbOZ5Tz>$Wg-!3RHf_Gf73)z$AafRI5c{*?;$mD>y;rq2F$&4fDp zW?_ewj$R>g;4D`)tNqG_gTjdbFptbeFEZs6yT;8|DlKl$K)D#Oa)HiJJWoZRiUV^W z0UVr%^9^hi@Q0?GCeXCjWFDXdy>6xE>wJV#ZLJVN)M3_zCXbPMw*Bh z65l2dn-#N!!wDtxIkvdTJ+c4E-tp|)Hbn>3zgU|`prrEyDdjwEs6OxvhH(4se2K5;n%2D^kDMxF4=^}zIgB^4t&IWGSs0m z5o0!gf~~VF%Wjta$*-kcZy!QyTvz>sQUJY-JE2V3|i;$5NKjt|fIrT0os25+tr2PY>N z(f($%joW>LJ2oGEb0KwFqf7CWO?8#FZ!c_!9~Ck34I(C;kV_P?h8ppb$hV^5KNR;y zzV;H>W-;;eXq0wrbxrX4wu9nl(LjN)03?7Id`~&f4GI{t6i>@@-=G z2+x>+(KS1|`1JYcAXw#?CSbGS-jt)~gZ)QXt=G|!OL|P=JBg`M8Y>I5-B^{a5&bTE zD|xyZCXJ4xOw+g#YFvH%@q;i9@Wyw@RvS>XWv~r4+Xl?Qn7CR3^V`Yg`#bya#$y8r zOxpQH0J5gL5nEIjv&hJ)NY9dDc_s^zdNR*FLkXOwg-ACHo4vQ|TJAA~d;xdN(iYC6 zZQk+O>G_ut(q%<+_V$>y5o?ac;SK5?u+hhUb6>2Tuwy3TrB_8uqict$KK2%M-D4{X z9$Vp4`2yj<>4PA?)fBnU_gE^0^i*ZKM5n-ztP{H$;)B}$D|VJ7zzfJb`_5meDR8?T zurQ)0{|3nG^0&>I+mP0+NzmV!L!yObD*WHS#279!D1Mu(BPt?>ib5X?t6YB4*Q<8y z;*XYMJ=^82ACfW0QOlN*_B0du=e(hU%2$)90`Ml-*olEy-{l2SdXmGsZd@Y z@_z7b*+7@vq|R&B=rp1er(DW8BF@r;8$bX(UHAvw`zCe(XR`iZRo@KXN)cX?sXEKXe-p1?K1^$9{YFe3P<)t@Wg;OqNQ zy+=W_R=8kz3-7!QV<{wMfvHwPg-49Y4y?{lFa-Oc!S>ahwXq4F{9EG!k2T^4)o8R{ zg~|*?aWRbGtBKH)1+34 z!W_=CwDnDxiLEuxBO|<0E2ks9?@(&W13luOGgT;K@BWb+nCq{Ma(olF_3?L-DjbQ$ zL!M8O)i93KCe*0}djr>MOo7JE;N-8|snOu(nOi z4?60L14S^!G0rz-)?(jdHQUaSjZjO#^MsAjcKo0vgQ9LeV7W$@Z6XccR-~8b@aQyIq3=dNx)LuyX%?zlFjD8nx z(lTKpaBORTW@v*yb>YA9+2w&})imp8c+*m&A0Y|+YLY+;{cFFPy=11kHyusAkNypo zicc^2?r%DLLrvW^T@oqzzT$5nwIUx(rnkAb89w8^vA!}*V^#i(beOwh-~twR*qjZ} z|J?$o$%;yJ9Uqq^5opxLfs@V#dqAtZzc^*KFZgk4;;~;r(_Mu>eAibBPHC8+x9LzQ zH8)_I;96dPusb37YeYgs%wAdl9uMSbZbN{&e7XK;MJRty#J!9@H9Pqv=uZt9HUIJI z!skInQCFJrD=u!-A)(0?7IwT*N!6_>UBK~SrzdozbH0-%6ddJYjRrwpEpqXxb%^@LCpW4SYYYO?)i*aCeN+G`7HX~1&fZomf>ng4 zXTbaYngXEOd(tUay@S&oNDVn>H*h3TC>z*KE+v~LL+*%WE(ZhdH@=2WiIb~Xg|$S( zb^a1i%kpfX=XxnHr5eS1L1KnVLaVWSMbDB%Wp6K}t7V;p+5TCJ{;*Lq)?IzYp04su zOPKI0@h_h}q&&>tG0Q{v;ssy5NSs!Z@-5|RmaP~*WGB^P(O&V*9i+aZCiTg2W%7rs z7TjO=$<_KYcQh?b^2dw|J3*~KzV8Mi`-CFsNOdnCp5}n3jp|={3!C^PsMgTn4KovH ztd!J<+VA>8At9A_x59hWDZy6=AeB74KgJ1~G;x(u0)tJy@E;Kv5tm)kBTum?t8Q3n zI+f_%5l1F&)hmyuM^><-Xi-<{Qm5Dy$2!tJR(pB{_Fni;ST=x$f#UMtOz4%G{}|7? z{4M%2lXN6c(AX%cDZrGzpAIo_dZ#GlO!wwPh1F9rDsfP2JF4bzsrthw4l4||Z)|Rz zGzcWYZO6{DG8x_vfykl|gJrXNJx_(hP0A(R9m@M#&63<*HrtgFz8Dr6*@gS~B1J$W z4&cvnNB%l*p{E;>27_P&%L$&ya-QYw$B9{TZdMg%kKc+z^(M(_015Bm_-Bkyq~yO#7ZJc~&L3^;$^@$Q&ZVUulHasJEWyqhmf@oGGV-=g zB6?j-Qx>-2x&jUGkzB9)PiNWk3w6^2-0K$IFVd+GbRjV3K}GVD?_9aTOQNwq;JHCu zxu1$XeMS;RYDd5h7v!?$C73AYa?x6?8b9E-Z=mlurXyeYapk&|&u=h5uO5fD;KUs* zRKEX~+odr5Vl_w}v@Qg$r)GjxpZ(sb5WYPaWb$67I(MgIV}gyDOa<0c$E<80o6wkW z2!E$6s}UwdwRSQJh<_G2&*I?u7CmOB6IlxI=}08%?Q4wMiP?vGZJ5To0^{p9bX7O+ z<{5XwN@1VeoUKK2D+pSfiuE$b!4sDim`>2{$=1G17|+4mqI3WbO*S09ft!3nN|3{9 zD`w2XVU|ThQ$=V~tsd0lf2P?k2R)mK4AkNzs~V2R)535>k`6A-kxpD2`jl1eA>>5H zn!~CSj49^sz^V&4dZ-&WuskNqwMpg^yTPu!(ZrtC$5(!|c08OOC0gj&WA}YR6_R}m zJ=;(xm)+NcY(G3=43)>u$#y>Y50Nk6n++?dXM_HetK?Zjrf+H7|Jg>XuA}y&Z9LmN zSG+`Fg)2~}j*ZFbG(wm-t@V%79(;RL5&~J!UxkIm`c?9+V8+AL@ex|~d~HlRhi3r~ zM7KfDcQ@x=`m`x}Q|`~Bj(Z$kQ43v<4qjib_==9w+no zC1GBG0V2<+dgbkHvjpN@cqeT7X*AEVY6n4<)H3L2o3S)bY=l{^K_n%v$cQNmn9?l= z+c+^2ESbDN`Leg>vd4aBGSrh|4wirYVyh%c`GH+5T&vc^c+Qt^mDdKtQ#G>c4{*L$ zFFh$!Pvm4WaD9@}r!?UrV-Nf>XRe-urk5}-B63=SQ=`-@U_a2MG`xM4^nfUGw^0#s z9?KSa7@nRw#!rG#vw=J(=xBCSWR||Q`W7%xRsl|QJ}=hB&T;x-r4A@)W`2{#;6N( zhH?@@r}ETYZrF7^zuH|uBOdwcbi(fLUgLoyvfr6XgZp77S zSrIxu%u28o9u4y8GK$G4~Re&Ru7fu_cT)?}Y9O=NE)C^(z6PJdINUYk<<6S4W z50^F;T7PLDuBm}g`$yKQaL0G~ae_JkPd!&rrP#A9?{rwZtTPF1eCMnU7cKxvg*JY~ zh@`$KaeJoX+SkpQBwVIj=fGULuMr9<#X}@cUWRA#@=!i%Mx8GsMErkby?0pCOVB8+ zB8Y$>g3>`mdXdmO3Ia-zCcP6nq4zG*1VSPpy$MLKq4!Qg@4Z9lE!5EA;yL%e=Y78K zpFG)pW_M?2XJ>x9Gdpv6qzviz6RnEU-MSy<^OMwjFrRy{uM@z(Xq>iqt*mGobO6k_ z4^nFcCgSjJAN{?w{=n`}ru+Xmx7>$S)0P}7V-}ZDOo9>1Q)NVHX>-QWO6di3?~moX zV1F*WQ8F_e%6~4cmpf$3qCdfqQ(xqgKiTbev07Hn_^2C8t^a(F%_B)L@NiT^LY@8( zJyY_-UPm03C-z5^jQpB>Pe=wSRel`WA11f(>T`SW`V-DD6-UV{LLT=@WLDb%^fl@1 zQzOcI5^;9{j|h&3rT1Ju7;RClrAzuB=s#AqaTY?j0`yzQ1bWxV)f8<6`J}RQ-JP&G zOX6&U2Vm5Af5v1K@bUPoys?!iH%1bDO>g#Fg5*vt{#z#&zf?vOv#7+jsgN!+Vbi9XYg6w%H3kjr-HT4S??RNF~awUizR&DHg<1B)ZoFh{STbTS6OaMR}Y&HRAa;tnIR!R7l297 z^9v%UYNo62?5L&a!m|%m^am0`x6{zC8``{_^QYINNwY(hbX-i^og#^MHqjOQR1q_iOwMA0Imn zC%xq{c$U#jcuhy7b$m>gsqWlT&6@zp+mAoOZ>wO_)nj>6@=$I*Rf?oWxs&6> zIc&OqENd!o7yxJRZW$+{NXpKWgM~sJzk~||a;B$5^g-%wMKSM0V^KOInT|j1sFK~s zuVVQ+1Kv%e!?D9PLC~)$0@Z9Z-*gU!%tyE(SD|BOEvD6PTs-K1~*BRc2WljQ{>w-n*(fNqc=p zY8R)x%RI;&k)KmVdF<8&<7Td;oaL<>1gJ4sg(#sGO`?IK%;QDfr#TUxxfoaLinIKF z7OzrtGkYpGG=DbA2_V{83zhMsf$y@$DzYu`<#bMU@WSe1tMFbO?MvQ#r)GmQ_y+wO zHLvS&ROA1=L2Ca0U1>*FY|qGjS7?)d@K9lN!6bU(a{-IOc2#)e615RQc>z_@^A_Ia zcUuw%7sLoyf2-JHNIUf5wl};$>vEkS`xS=zvQ={w$7@Ow24Ob===M%f*!!W-Xl zPWxmngPGJA$~PdeHeRb4=o(a>3)4&XLw^9$tzE=VXu4h7MYLKwT3sC15&>^t8s*mU zn@H=KOAImb!U4?O?burHYodj#D&p(I)YXX>>p-T$#YvUG9IaacypZc8XCXeVeQcc; zM)$xpdxAySI<9vB^G^SrAhU;n@qYi z==2_3ER9Mb-q42Zi5aL^u(SbFM`$~9h?B`Fh^Xfk+tW+Vsi_ZhKOj0@jZ&~JW$r&h zw*4pB$cZm@ldU{F%yj>^sA5NmtMO}E$oAQ3Hd6hEj>%%-EBtyG)w+rYGI;^Z9epWl+n2VKs&1SNzKfhumG#B+n-NX2z!5a2@nx5Q9tsl!TqWG67%9xvad>~ zz*CK+nvG(>sQvD$0<05Ob%a~I;t-mPaX$DGNK9mTaqdWQ9er0ij_V6x{S z*D#NYg38pt=B*L@?{Q2Oe{74`k)4jgop|^c+_bN5DXeVq`#n4RPdRIAC*~-VPs5Tr zIcv2nZ1Ml*etC``nPdocQ{>^dDN>yK7?3=gq2Fhjm=uR(XtrWMd;Y$ReJ2*DkP=xQ zK%{LxuOdjZzfSE`*2cZ8IbQa(2W6rmxmUDn*+P2G9q9y1<@LC9V4m2_K~;47g6B|9 zkrP7;2@?xW0f_|(y_NhAo7&=8cJg1B#M6YTG@&N~wME{|!4%NX-Tk~~?nz#7whHdOWvFs1Hp8sklWBtMS zt-KlEqooW})BWtV|MPdaC_=Wwl$9h5)q_JlwfZ1aYJLB*3Uc2W3V+(c`CWykcQ!Kx z!4DH$0)rr!eZCJnF!wlp7);VG%Y@oaK94bJTlE5-)QUeOp^xi1V(Fsv>UCOM0HNtD z$F0clK)gG>ztx+>?Q6%e1ot?IDRtz=Cv&h0GLr=0o@U1==G*+YJ+w}{Q5&&NY~e@IcZ6a7oh3Zz~d$rP83Ih57u$*ZK zuwREgU_pa=yGbRvvBo|miVza`z!aF=376e^V*&|vsnS12QTP}f%doGrd5AKoC(afj zW-1DT#p*3W_9uYDvKVSwRDS`{Rg~5X#pIy3=028nN1`7~v0t{bjYsTRgi+2SsB?rN zov#NZFb--a-9lN9beYjHp2c(gmtq>Wj%=-Dpq}HeM;=|21;QJH6W2EJdRUDmyH*BI z-*wmWrpV7>rx`pCEA*0rS8YJB8D{x{37O@B35UpxVnl|5q#EDK7jkNQ@;GGs?sI#l ziqgnP#P~(41Ebfarzpi*h_1iMoCnjVEs-@n0>bIm#f%o*&O@6sPIyam5Ah5*HPlcX zxo5r=$-_$OzA;s&x5I*ITf3FVV!ixEfl;PnoODiW7`zB>$qlDvHI5`NTu^)OoCIh0v;5Tkla<>#pjbSfL73Hq}%Y*?a1x zI-7HhPH_vu9H*cQB<124`)BhLwjXB|rkxQE8U9suLqxCpc0;P zkNNsHVjpt!ex+k;=w`q3D^z^Zqjcu;G7K4YiQL*u`Pjol1~;+dmVOlGbu@K??8Y{K zVookEe=0Jv7{~&BI*lOB4-L04oJ?Bi*$eMLuG|!(#es37LfFlL z{`4-^F`<5P9YPX+$R9=ev>?KLcHXbQ>CpLvv+TnAY_V6E%p7iTptuKujU9A6O z<3_%vqRRbW?xOuRZSUQkw(`U!a;UjR$v|#G{e*Nzqu2)zT$6R@G-fOrEzJ^FhvfY9 z{UrS474`gS8Xi3wnfm7XBz@z}UiFLD?6g`VJU!=RulpO`(;VYg@sJu^u(lHn2BR`%Xf9x+OoEq!<(1om&o`+?|XR%N}AG%=~2C5U3Dr zqi*;;+>K%u>%HTJX6~t=AfN7R)g!Pt9p2I=X2N!^)$o%=*Ss|^={h??X3)&Hh~`Z? zJ~1|8z9%wQ9l?&Q9lpKD4r8%rhA1LCFF6n`ZbGMFUp+6@v!kl^j8vQX5*j2VEAZeQC{C*61!< z;pA`J$YXV}`=`+C`8tD_stZ;AAh~zwDZRDFo~eJpwirH1Ehw=Q^LqEjykB9FrZ71{kQOX_zhb54jm07o9!FN-8mv zeP-SotA5Ld*PJLx`-@%k+^PAaeih&FT+VMsqcu#h@6%kn7@v z_3%Q2qmQb~QRx9KQY(L^OD}`)0vY?Uwl$5MEXG(s>o*-{#ifD*RxkN#Qx)bB(hKFE zjgG&LF@TOlE$bl)FBP?e`c;*aO1sbg>u$j*y%dJ)5s%G~8HNU}Vv z_iiIvS5TWx6kGD?Y{A;v9L8+)fg?v*BXhRp=Ctn3$tQTPVBIk}tBTr$(th!~_L0jy zBMjvcWiJN>NqBE<=z_xQbnxa!TRK1(Z#4kIjPV5qHcQooTT+DEtMQ?y8tf=o@6gyP z){796$-5@c5t8)Lj%eTDHU4<7r!;`;utStity&G`jc4k~yx&!?`#r$juhf&P_sD;? z_}vHoZm0ipSy)g0jbl`BFMVd7dvt0v>K2 zpV+)ty;5Z=k=%b5Fo_DoCJ0h_XDH$SZGGQ}y+_JA9hcv|fR9|NmH8d^R+$<35%r60 z$}ENTMg^TF#7|6z9`X8v`9e4UP>3ADk;EaCPL6CsrWgA zxZJaEs?ZswC?U%W!SvCH%zRIo^DdSk+be&uVqyIuX6^3nwv;b9Jcw+i7qJ+Q$D z_>i!d>XI1A1hqs7i=Hr{ttdS>q$kHTxS4jxv#dayKYsF4^pv+BQN;MQUf|FWN;9Gu zg?CB-!LT#hj#q7Uo;Soj7n<1-=yrchIk4f^_!Q+#01=&d z95~5bTx%DmVIOONrYoTaAc|j7f;!GGRdk22(qZq%qXN}dT<4YrVc*e+SFNaC)Y2eh!;j$dil zMf?R4*(8epk+k{QDvYGOzzP&(@3~9-lxA{5GpryelfE7J6{r=I4gZ{hyAAiHi4jlepj;_5nZAvF*|2!<_Xz2Qe%tpVUo6hcp zK12#k*H}iI&2(3Ar}zT@Cdp7Mc?<6BeI%{|93tcF8o^9)`Wf*Yi+4WC@^I z(MenVfa4awi^{k9F~uZDVGF|an+(#6*oi$Jxza`)Ocr_J<`ci?$W=C!9;41(S-ayj_;)WT^9V%2Lqr9AWq((p88h zUd!px!>I%$nze1n#jfi|-Ip}Oj4_MB&-z?=(0*(JM?@^2lg6#p5@+1Z#GGSJdoHCl zbIiaSqiDbA#$ttRT_cQh9OwZa!2#L+G6~1v0S1-g60YyF$U8nP-_LdBn6LgSPdxN;K;+ra4kZk)GDA7WD;6HS9$mt~GE65a zebF(22X=p!ZQPnKoUA3-p?nQ7$2#q^w!XM#l7kswo_~uF-{XYp4A9Vl`iR{#JHWzq zYroZUDa8kgva*$G^4pMwIR23X29I`LOffS~{jDGUclQT2siw}c(cUiFox$N@Mi z05HoWQgFa&t|bi zPL?SivkvF*&NL+RZL?Kg8zI0RvI+Ug$nx*FiM)z=HPp5|Rl7d~zsP#~MIMb5m@7!^%c3aUN$icy|?)rk>lu~kBg-)N$u7o?c!P9m&F|LT!m!nP*Xy8ilmKoFRbe)g@Z4dh|&^at+4`PTfD}78T?m7CtEI zAmcd=+aV?vZp3>Cvl^69sAPjwM#xN^kSBP@Ui)SWJu(})2WYa*NzR74GTk?eLa+f| ziND}IA1$0M%0m9|0*SJQ?zENIvxXIgm$y<{pLO_o`Aol+pK5?v1lm=lJc+VnbF3Pr zo((x8;}8kn1x^sIP25uNWR{CKNE4q^@R)j*o!glb__2Ewg9^yqns|HC4Ob#3HjIr+ zGE0ra>9+pG{e*-c30_;`(UIm`EBYAZCc>)F#+&5P9%vjhiczYMda1V0 znaFkUJc}Aw^;ij(cJw^&sxo6n`_H-@m?IppDl<@3sZtS#9%_?4k3sn!juoN6dooY_ zxC}KGQ?F95I;=+})7T8}KR`-07GX|YRTGCuxQjM>ZeNf>Wv$pY1Wf&ql!}l*O|xk? z61-|L2A@37dNxSs5^@NTW7c8+8Zl@I!f1|}cSZv|)FELgIOmOrpi9=|AwpYXF&Z18Q z(7#39hJ≶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%0Drp}`BKv-dseH2shklwwj2-uQ+py(nBbVKaZEm6 zsU>x+laz78F=N4OO2@{%OkGX5jj@lYNpN>fo`pC#gBUEIF4m7Wxv~5hS+rzdOj@2B ze3+=C{wH;X*UXX6TA^+u$aPEu1Law|nqKPb#?wMr{e6DwvscK`GtoQj8`EbDSv`DH zVvM}~F{DYEN{77xzo?Q5-2#Z}uj?1Q{HY>19~vw_JtZ5w>o_6tMr88bVdyV$?;CKQ z{hC#AVK)<>JD1N*S?u|l*4MHFL+v%64mgxvS!Iu*-&DCC$rv4tC-X>Xb&OPRa!#ES z)DTAKxcCvJuPL+sCa>PPRzRxvFUH=omF7PFgkA%0bhMBINZhi>%}{#;Od48$-?c)4K4LAqrPT?DOUl^ciNwOS5ssx$Yi`G7+p9D zx+vEMxAaxr{O|`Xhfm{pgz*#j4dlg`zSNMk+mn3td~GrbT4i!(Uvz7j-jZs3zIzn^ zlLeT)RLiK*eZGPR3Q;SwKG<(peO`Z^hqKUm%Tc+yowdI9QM*+xD0jMv8zU>jjF(^G zQ%;R?hFM5k|5~nAzXH)c%lu->PPcaw4EyXf8t5EK!E5D8I!7$kZ)KbKlfxlXx*tCv zDdS(*xBTODiN~5-$jjE+AM0h_C%hTceU_hX?!-RJoiD@?_S+mb{*%)!Bx-8u%YT{; z>t3_HC%wI55cwXs_f}L0{|h&=hH7NsZR7dEnfU2g%qulRPOivOm&Y!o!bWPsE1!7PpRrZq;)w zLof6QK*%Y{8yO@uF2%e`<4$Ycx|A~3_3f|LQ@fC7P0G?cU#hlFbC|q8O0D^Xx5X+? z8x()MjctQbv3q4_l~kZpt9DA9!m5B_lseNEes+9CH-aC>1%kg1;+r#($fK>Uw<+}& zVM@%j;99$WevLPi&g>A&IbMX|{?rvHmic_wKG>1=3BuLAqA_EOdnY^9X|oC#p6!QI z3EZob;FbT-Y97M<3pdWOu)z^gK^2)`QA3r4;KEF!8c^bxs{=xb=Z6FrG2v&D&a<#6 zPdOs0*`)TI9h}Ui@^-QwOb77rE23xBz+?C9e=34z-TIPIIsWuUb$jt`Bhse(Z+PPp z>zM$9b5cSG>Vt9VPT1J$($vYYn3K1j#}|WXszb#h2fTmB)6FkQw%&ge1DqN7nXp;0 z)8qXAX26KZhQOh-0BUHri>VdI+SJN6l}_p|YbQ*g1Ar(aI}Qit5h5sA69Q76I`lbA zipU7`*SZ20%M(;Wj>G$~g|GiBBh9e=xm z3!n`%S2V3U0MbC0i97HQ;AnR*pjpqaUkq`^8nTX(gBjZ8udvw1??!cW*1MyEhMGTI?HI~x<*pRP2wEaD0nhz0m ztM{*1I$RT-r?N4aG3cnPraMbTVI*u#fRFS=2z~68>iAgdIq+!G-MAfF+6{Mu-^rWLaZZVvs}`ww~q9a(!U7~KxFrZ$7TsCC!ZaaQTNJwGQBK=^EhdCjTFMB zOd_mWEC)cAcQ)?XVw5?$N2<$c`nfLQM+*MPt>Is=; zvB6}b1K8q)bS$I0RjbC_#tHduef%Ey9&^asdO9H(8OcJ=+qlO{3^!a)MFCO8T9qg#8gMU z`b=iG`HBsxr`SER#N9quz@}vJw9rNP0k8CqNqyt6nHYRg4rfo#dF$}SzvQ=n7ZE|D z3nWII3)3wNOh9`clcGvPRA^sDMBY59xT9o?7;z<)fo~sM#Qnnh(eb#0lYFM1jrH_SL+?~yysNhZqe?kyK`;!95>Y}~93lBw znE+6D_|wGwWQ~f%da4!Y%j80q`_f_>(+D$cv#~EmY|4#=U!&yh(aV;&=A=!M)OtfI z!QEvH{Z5DAv~!LSlESke#7b=wN=I0OyM#S{UtPRo%O=_%Zw{zzW69}|?cm7G1IXW9 zy#%K3kw&;q0^%GN-#@0M5?)FuUk0bt0XyXXxayP_S8lZD!NrVorDY&PUw;n^x9ViN z=^;Q_Q?H#2##!|;3M~a7K2l7Ti!eFP-v0|0{~gE}xx)q$XdyV?1y8&75hG+NlSs}X zs4qPndPzkmUZKlwnY?IL_;+W}Ea_e`kZZE&3dFdpyVVYR{A#=D$g__hXaKbV3=nUs zoqmu#)(sddF#)c4-(!AHU-Xx4aMEJ83nGxk|sH^fW z%QN#U%fT3@NY7pv9c29B?7d_rvlbOm0@B=hQ96;Gl{)mr-LI%|WRFvp9b8Ofzr(Yz zMbZDdxVo*NuC|W{Ii=FC*gv7tXmV26HM6If4zApo** z+-o<4*^SiE5MCXm%B|1XfX6ZkK=cz@y?1ZU~M4(mIrDSv|*kba2TaBJo>lHd9IoVI};@ zd`u42bk`l76iDi;G7|e|bm=lem0aS*#9*n(ix18}`3?O#I0JN)wOh#dmmQXb#5udj zk)I1s+i3$B!4}hDe7D{*ksL;uEBX(hipTO;6)f%F#)p+YR zx574Z>+3!|^AJlRI7;}{-%5@(O~+FRJM+fb$4$tg5az^w8f?^+t+O^Z4lNVS3oj3O z3F6ehzR<<5@@2tub~XvjegxHjT0b#=N>yHI93YI=r^$O|syMkqYEZ8kHe!SjYtVwf zmywaSU9Mk8-n!q{?217m(Z`jeDDKb9=4mRrPQyB% zc_=u>0L!<7>_Qlw|Bg$SVK-W6`>C8Xf_*djG6mW?5pDYK)I|4yQ67tjqX0-*^u1@h z$*){0Do(t9cH}GwP>>YwaUD%4OeZ#{Z zX#PC2i(HXKpaY{;-5ids3E0^d7B`V8fY84QHDL0P3=03(Eo8ZBlQbFP|E9$UMT z?j0~e^qe{vgO|gSb?NfCAiYW318f?B6xk#0d>O@I#(V`KkWLaq&W z{?_|Z)70;LfrRPo7M0XcQ3~DfZ2FyVC#f$Lp3Pc8VuexY_$ly?&jwhl976>!p`m%Q zq@}Kld-GW*YlBcR3%(RA<)&`GIp&pAi|wM;Ua+D0rS=`9%ZU*(2uJGmyO0;3*dbC! z$e&)K7yKs-uymj@1Bk_fG)&VB(=h;pB}q5c71#Z9HZ(0JUM2aCcoMVXevd!@Pi1;e z_W~3DHQ%ps9j0r<%v0eJs0waPE5LJ4|4(auphk&{7{t5r?vG#c<4&X#Cyfst+~_J$RorbfNC`X#QNux2GOZrX_qsAONT|9P>k%SmTk$@z~CKqVDE#-+;?E& zCk;taQb7JlYdWv%&%YMl+wDBmo0LEh;J35)q0Zk{rssd3V-_?T6(>I@FCx&%HxW<(z{vvbkbYl75t zyRr4?_IIo^eD>;i8mDii<_D}bwLNAP89n0i1R2{h-Grpn)-s7+ zHE=a4GTtGk@6G;y;P+r*Ju=G35ZPnce1f z)V0&=K5KxCzrXB%FWI#y(lATbTiKkWIc~#W_1*3#yPTbA6On|JW&`^9qi;X*o1v45 z%}5AVI1i^;^Ksuir?^Gl4s!lsH_@YlpU4Ay@8*g&pLUZMqwTlLSuVxAAKbmPg+lw8lXv>Tf}@*yqJv;mMhFU& z_EPyTQCQPLJhJLgp#P^#4SutcT2c}}ztWA?PuR|AQ!n0ip}-6jGFbWlJVQH5GtO?k zN0`#vNc|5m>Zk^-@xxg3Jnv4HvNNU3f93-qa2_Up9VqIvIW=}Vj?_$wY|cM3h-&=p zz;}cG*M169ffTCV+CTtP2e*i6fTC#)X4a8NAh zVo!yv(CzyI%cA=}q3E3UkQ1XkjDq0@H!V=}x_P*+`**?EW}oP%txad$%WEfoY?dbK zIoSMWp`Ru_B<|kS3>tHnsVm8lVvk;?vvlBGmGaiq z+O*h|vj%#_#~r}wwkJ5l^^gfk`e|?h*DWfqoTD7&P2NmD0?6MufpamZv-Fg?z}*vc zE%qp71P<`{W}ZM$GRpq^Dwaa4De9DDRW$K2*;C#Kp5Vhy@~hVlXeoc+|*T(Q{+ za({{YZnA9s$+U|IhbdB-idrpLC2K6)X3M{VnI-2vN|#rs`HuHVLwpo@d%qxOSODz{ zZP^a(*l^_=-ws9hAjLCu;k8w%JDAmVrvcUF9N~v`XgZ?AX8gs}9wy7(gxNUDgQI~_ z7okguv0;eWJJ=z;i&|A-RC-h0LP?n*U$(q0Efso{rQ-vpe1tRSi>__hE zQWU-89de+qgsU~H#23tKzC8_PP}ldbSB}1@M`|_BcZ04ChP|O2-U8ijdv(543-;jE zv-tI0R%7|;`D=j&S=Xf8EjM|Io>~Om-27<%Z2nWA8};K2*Ews>mY*Auc(5Ku-zg@0 zvsIbRlv-HX=#WiJGaKR}la)we>_8hDX=;aZshjf+)!dRau9vUx?_DIdLN8y6i|V*$ zRr{y9&ja$=&O7V_QlDL7vr@m9c(6qL#BqKPFW-k(0Yxhw2;b9}a>rXy<#TW;ybX<^ z9N)SK8Ojvjc5GFwhOIqo_ks3^|8x+3I7elIRhB~;+w+Fq?~2umd}l>=#taL#5qH(<0ixufB)n)DsITjjn1^}BJY){;1-K%w>N8w?cjmMMSlS%Xf9nJOIr4>2h3UUD~7O8Sx)xjrzV$Qz!%oCFi^TL!mq#f zN*g>0hx z>lAcBwBtY=b$r6aAVN~rm#E=Rei$^04c`%f^?P(QbZINS|0ldi-MxeSOrpeLZ&LoPhnrFg!Q9{>+M_ zD&6MUFA3Wqqf1uM(>>Y%aO2^}8CVLX@oW~XveE=Lls!6lRI|fbPY*LAex#%^ziX z(<`rWld@E^oDCiu#M;F!KKetqA$I(y@K>v(0H@@yRuo21L`{MESeD2`rDxk$K(hd* zEOR$sMdr(2p9t&&!X)j+e?5p?L;p!dftjs}$>)EZzn{ke7bHKl`Uae#Yhji)@H^hb zvp>(LLs*m|zo0zG;WNUJp#YcUBRXM_=5MGvBXtCJOs+qyFf|*D?b}z`KMmTVNAqB5 zY_nn`bN1+oASEyzO&}l_;mAi=d`*e7=I1E_^;xFt zHgYNmQK6Cfwe(9V%GQ(l8z%bUI7V@21crMNsD#}ob>L+x`|kL^r3?V`;1g!2BspPs zb36qhHuPReHTYA6dASD&tY_+pjruy`O=y-riE{s~YGCf-S`WyoHG^egvnNB8G-l#u zgVJXROqVH5G95V5;Af~L7hL~Skc6(e_O_mv-FqmE$+X_=Isa&8bd{ys!9+8Gu9@qS z$Fx4_8Gn+lwy^AI=Fe)vvW#oQu@=9}-mq(-bvO^f)8EoSiwmz+a4WA(^75QnjiGU0CT!%UVNXnO@&fEInc0p~w19MCRqLJ1eGiWu_H zv}}hgx%1r%7c~cbMr8Z?OkkN(Beqj3wzQ%foN0ycuVcq3roOno@F(a{U4QKCHSfer z&au=tWEX)OK1tFsv1%BdyDc;jiJCI%Wbpg&+h-`Y=QC%?CV~eWP7tI+OSObTOuUD| z&(_{0bvKJaUwiP&**mFxrPAP*Gh=?JF+#~x6c)~LSpy&EJ}yr(bZbY&!Rh-1yVSIGu+Eb}`rAP88ro9J27)i`=f za<`&%zf$}w@p(b#egzKZD2god!+N-Eq`f67@UHOxf}ZVmXMfH2W26KQtmd}xpV(qyHLYOu1HrkjJ zV5{dVrSZOxeI`KN$A+YN@pA(ZdZ*cSYI?{4v!Y6yl6;+}MuScHFc(vhBpZLIs3Vk( z{Ebv#inniOLpd5LHztjmkV6q~rb>tDzGrwA6_sXuN+)moh+t!| zJ;>pknT&4v^f9@O)GK@|PDIX&MD@RZA1Rld`j*NBQjbsIKo~k6x(23CZ*1N=Y4e|T zgbhq2Ka#9jZo0JH9)o?=kB(=6_6v4o_xKm@&6Z|dtp|8)>*JP1y>KeX+Q4KiDcX%4 z^}CfbUpy;G#$9EPL+HD&Fv0kh2pA%3WEKJJazCctw_11b2*ON-vqg0T5h2YPq3Tq! z;bDoTkYanU;X$6z1gA_>Fe`_~4UAnY40x(8V@9iW%>V=MNJ)c>TV*B90-~#zH+V(m z)G{WKWHtVil>(|tClb1(=U#n^g6x#-yw5)H`Lj#5U<3!Npr<()0N(8^y`$w}w{VT)WS}E~FEXqw(TqNZFF1Yo0!`tbfD*qv zbb;rVHt=HPfX}CTqODPYD8YVaY#&s6GqOAo_6{Z;y~WXTvf$e+q#R%C1^3W(OZy#$|T4hVSUB{gHV&ifH(FD%0n&H&3{D zR+;2xHuYULo#?dH$CLBe(*hQSsQDWZoovGQ?Xx87D8@F=r*_EwAa|Ewa$U;J6e|Sd zx;RZOfzRw{Q^JGuSfjc8*PJcnoc9m`qLNBekSc2mqbAFf?k~i39ziA zV!SwX5bW%m2JqP&=bbTw{4P&4h*N2$I3y8UjaK7xea@7N0&vn#KZ4uXub?TBl}trr z=en(aD5k)1sDW;AZc&8Mxde13w?$py@?xDz55C}jX{*>HikF-G4dh@|&jP52G6F{1 zqV=aL8VoYvyo7Gegeb5T9tzy)j54mDW6LEVZVQD_!r?JedU!Cy?+cT=qRU zXT98zA;R+1r!FD+T`);&fal>o!Ad?eD-R(^`9e$qN4d`WS{In`q*AiA1zimysHYv3 zA7Yj;mIh4~$axwcY_LfVyz6G)xV z`OMf3-~4l{v%36#0K6W#3dY*?EPAPCA}yS)R@RI5naG>X-CvOM;>DdG;NZmTYjaa} zEj>Jua1q+sS6OKOJ~DU9q7o_BRa~oKT0913v3{n6F09X4b0t|~8Rx6|tZogjS!Mzh zuXXlE!SfF3TPfE4?15V5|9CFZ^b34^9ZQ8?=^xgNDFSQFpMcv`g)e!j2Wc;XEVhT5 zFTTg$kz~ME%QT)qxRhGlx&m;K+CU?KAz7TFgpZ43Z=~bCWr=vJ?`7*a)vDgejG1V{I_QR))QGi~&YyRXyezV2q zU$=?f_p7Ij>*&o|HtHp8y_d6cIWG3|D&p(u>y&V}Dz5u$f=N30#2yKc!I4$evJ+y| z)%UdcpMPiyq>y;Z(kSiEiu?m+L>3x)Jgq@ z=qI=^`n*MJ5XDE#{b-fA3&_~pAiXQ{OAqYz{CJxUW!cj0|H|`WOF^>f$aFX)u!Vh4 z$8R-m$^caaKcU{PO?l-b_xRchtt( z^K3{03M^NDR0}wcw<`SX4>G%# zzdH_ZgNitMFLA=nDq#=|);Zu%lE1_Ez(5b-gx62`$l)_lk^UNi#^}~zXT#ZW*+3Zb zGm`E@B$XB!c9D+ec4}v4+e0;-J!QLs-jq+Fa9&0`zTbpUDZ9_h!7l#h9AiddW%g!6 z_R+uI%5P)7)q;LCGs0exsRj2kwL*=*R#v@FDfo7P$tK`uau{~5l91!RRvM|2xzlVq z+WozMHpn@Pz1hiaauH@Z_3UcYMqUR?sqeJe^U;{c@_UHb^UU(%i1uv5Sqtxi^x21t z{=J#%=@#*UhLlc9zmL>ieqv)IMf1NJw1DxTyxpBG8>OYvzJZZJCnra4YP%}$$R!i0 zC86`BhJ~00>|EW+p7%4HV3T3}zJ&U?~^faifDH7iFoxXf@ob zC$QD3yG$@U@BK4u+#23wdTxuMwG2F~S#K)j8pS0dhSw*gYioN7n4e$n--vm+@(M8~ z;b00dIKzqlXg#`_oeJHc1ay%;RY%>^Be;v)Y#$WfO58Y{RdtJ7)@XuVjI)BRLZ#J2 z=YQ^h9CfHXNAaavu|M&|k!bj3q|mzBv_JAVB5yx*#DYox+Od4K1Kla)>AZ-mntLqE zU1?dZd!pTVbWE&#Z?pKbT(-`U0vfWu^nh#hqX)h9 zp|aOqLsqv1gCEkOQ>E0BV)_~MR3y}ncgu1yEY!1&v()WmoW{$?2cv|-IgDk$t&NoH z0CMSQqpwRPJDNhYN2s;Y=pjIY%Tw1MSG}?GkFRB}@V1-!zZT#1f^C=5o$LNo=$|P{ z9A1U^NW$LKW2>yVSYaxO&*z22MWSn5n zJ$W_K_po!+L%mA9kLwfv*~-Vs)i}<+O8Uk!727B6dgSmvL^AsfJ#SRb-hc%dUllZq z1N7?kHYf~G&j~_1mx3F`pe$uiz5)x|dL{5bey(8ds4J}mW;)u2%<86WvWt0lt&#}p zMz&5LI9R>xZY%|OB`0}32B<%fplz(coUoZk&H}s{4kt;ww2elh!i4leZKfF^ur#kq zP%4I9JMQk@^-T8D=bh*|{c@@jQI%XKOFBpZHlHiKF*Bqu>p^F#FdJQ+KP8q*#j2St_4Pu-0-RAr(N3!%yt&XP}T6VAwcf-B7Z)i z`CVILeA%8$3{$htJ?#GZW&2?LSNU$!aEbdRrPQCxVq0(Ahj-8vuNzV)x8oX85|Vr; zrrvYS)%(1KXzBL4%@m$O6S9Lb83Oan0;d$1YpnrujnJ$_9ErpGjI|p~IzOf%^f-L`4LH!2t0%(! zTUY4F-G)%VoPs18Q0{u%C5qZtDs2nfQF}3%vV*G7 zH-1FU^C7x((zTcd~+m+P9Hj1bQx9|sA zHw55Lp0$S9wwr|Y9>KR>hq^;A4y>lgtD;64#01vwf8tf7A|lthMqKxwmFDvSOHmvO zY1)Mc)dIzM6JH3^Zr|&$ZuXi7|48H=WynwW`Sp17QJ+Ge=aXLLfRkv`3hT!Qf#*Cm z+|?peX^-cL;)t@LmD7JR4)%Y|&+Yr~(cWvBzejr~e-DZ&MCbl$Ompmegd&+_TK=X(V@RgMA5Y009%gK9 zgEbh}*q8b&Km%^f2gxXKR^58(m*<_~a>KeO8MXWK%7-_n!rF=o8>N~r=loYN#KJP& z{9(3ULB2*Zm3%%lV=UR0>3svJG({A4aTm;VJlh{OO|X2!sWgaZzBslwbT$YEsy>@( zvB0t2n_0ZR?yj3xBX$=fYdv(UN05CGbPLoOF5NaS3Ah@;&l%te#EJLDiT;$|E7?;s zz+=Bl5{mo6jKS&< z9IMH(nJ0YUv-mIOUyLo5k`iQKmUNho%GEo}}%q>@gJhXpgjaQp%T8fxf)>l$RQKF7h#( zb8*RaLy183F$UbtIkb~k1_U~i>dbt%@n|^}yh>&S2y;6sGsSPFXu_&FF_B0YPg~>t zB-Qzjs)uR<1ltF@I1JlO6~au86F^`_QCw_=ws>icAy@kITylODxU2dwcagR@-tRux zw01Myd>d~=N(C6>v6bC7hwNJbO+d20KZ{eD4>V5fld_@Tw@KFxo`{0_leY_P9* zUMI%8oCHX|EkW>#yBybTx*+?Y86;z^D;@g?^)2m6c`Zhk9IedG7!eqEP@yCHj)^r#&T1~j$HO@1$c|Lyk zGZgnCImS^rm4hBaS>5<>oWlf4K1*bI6jjT>Md z1dg&jIwe^|!lc}N_r_hiDe1Hc*l~y2^@hKqe-3wt%~zplTYi2C+p$+1E%4JQm|QME z*+M16LzcUq&_JT(D-*BId|Pta;z$pO>0?Kf#gf&WPEQw}X?4zdn^182lb+2#B@z1(3XbA%dTbN*aeQjo8ai!xEM;Tm>f z@iKvf`7{X~HNPb2!r-SE6W$uau*|vlR-8W3m|Z^v8~f~b{vgUp!}&UBP6cWa>bVT>eP zYoOau;w1E?Dne~}q3!aAaL?|Cit~fql}(=?8kkOqgRYTsP02x0b1NBjt$JS)p66?A zDn|EXKWfRd4vgH=+WLhRVX1Q8xx0-A9HgriP5-b@Z9CG|cj7YR2vWwdPB^u=Pff4+ z))EkjqVvsi31P9vSRNoXJkn-0E5AM0IACYz_^Jg@EfQ#&g?OBylCR@<`)A#4F+O!X zQh5h`lxS78Vt+KouKY^=q`lDc3AO^#hB&tB`N&JRE}g(BI-ii&Y#}hm`_@i;Q+;{m zgOTSHT2WtF`m1OZ&oAna=|+J>>u&NLN-XRj1)aF;PzL5eeaxXc645){-v1L~@c!E3 zS+6(uKKr+nlXu%DAk7H*Ek>V^w~NP^nVLXxCb|0Yytih=0ma0Vcj@{(X;7PC(sytB zdgD#_(5D;CXoc$~dQHR&SF`%lJw{t9Q1STE1Q9v>KWH`b|*w`ln3L z*?rTmVP2y>lz9ASxpd?U)@A?ia{2#6!Z-%}wyKvhR(#il@&3J^SGLNcSV?hWu`qxl z8*@?>G0vug@`)RSC76q4Qz?{rTHWc6HPi9-izwWe3sfU9`rl5N-rwn?oTZSsGXy$N zT;5Q#&i`n>Y$ThwM-6%7Rxvk>QpQe&yi;BYn^mpLj^^)(r_n|5?X&PkT5e92`(J{N&Bx4AQY7{Yy%_Olljk{R!X2^=KAdP77Og3p)0BE^X>00RXq+(yk#z2 zJfeyfe$coW#x2Y?2w9J@OIu=KI@h+@GC+o@d939@4~IoNbB(;}&nMUnPOD#vM_=5X zFy9RT?l3>EtUJC4APEwc%T#?OHd{i*1 zG)P76%%CYheo{^;9gdTMV{v%QpTXpO4qQ#S(Q#^n&)!BFB3Q7$zRQQsMB1a;ALziO z-slLmS+;X+>HP4e{+kAJnth}z-f)oN-SxWLLNwcmf*3wejy9rENu>#j-2;K|zA zg#&5Ic*)n6?MyAZ=xPsm_ihfbR=R}BR3&SO=@*EW^w(=b!rSlerlyuD%%)kB&83Bw zZ&*QY2Z!!YwG4KvIkj^!Oz|d@4||!$=%46ow|8fu1c9pB>TO@EH!(9(1$--FPNmTR zCqGj>V&*Y_!@1=hQV=u{WwVe(P7^WGT4QkBwq@Y z;kos2u}C@MHGB(?tbPneJNmGBR4o+E#VwzwI%h%!_6n3&rmpMT`7}XqQx)sb+L=%H zNde$QwEvDnDuAKD zxQdQePvr~fy1pHplgr6Ho9%Ed1NQKKSZkmVwq}|3=%h1TwKNkGs{;n~pV+fo)Vtiq z|DLG&cVV0V>jBF0oWqf>ThuEe2#^;&d;@b)?Un7PlBbp@BXo`Yj}wT$4;dL@1};wR zt6-LB2U?)eYN(cgKFrqIcS96zal`Ef*qV=`bu{WHE(K8<=-7eVUNDZB$6SrB0rSJM z-(T>I-e}nOCpg;6{h_N3K`!DL`l8Nyp@|C&6jHdv9SQ01t6N#ct*15qFUlituPnq!9Hl6P3u0%GZ@9lfG%34=8dTxry zl;i86S7sM83ig-Z-_0jr|L0Q0o;^ZkP&d9_=-TW;yoZ#mchj{ka;ScFDr5forZ$VR*S3|ILTDv@Z8q|C;rNEg783yE_`9S`? zazBh-^Vs`I!>2FU#&$_usD(qhr}TJ+yvSAg9)o3UpTHV`}$sDygEGg}N5r6;t*=`De+nz(($+^t9`r zpnFqC4xXj-e+t5wI##p&ZH9x`n#Aq8s7A91?H07N8p2tt6eGOG{}xaOf|l`Y9DSq` z)hdh_svUvtRJ!92TypYvYxi>1yji6cr8`A@2fNkRg+TRNPzP4eDHYEh(FeQpM+_0z zN(ObU;&a6LI{zCxc^}|()1P$)!pt&ridjV6Didb%aE^)M^Q{?_u zfE80$Ro;ePP%-;_?v$k*MFj~{%V8Z0kM_&+=QaCW;ZA8oFmz5kaZDgr8d;GRBqN*=#jQth&rWuFZm$iTVP3O$^vfBUi z+AoyXau%S&u8-suJpXn44t%DKCy%1(h@yzJCEwoQruH$pNTDB)8_RgEdk%X3>-}Y) zlUzfjhSh8aP?nhrwb|3eXu+6-S_QzqP50-XMbM|K59+}$cPM+h*&19lj3Aw*3%y86 zCoZ=Iz1>;GLim0Gyec%ULq^Hd=6HW7J}Ef!u_YFngk%^6%JydwAJqpRE`RcR_j=Cq z08E9IenBBh8@5k~CdZ7_31NIgwxDU8Gh9iEbkd|L!_oDJ*r{{vque^e$)9JqtaTJ8 zo|N{0)3Z0TAD}*2cO4d$98ROA#K%#%|KW(@RpCV z6|WdK_jZZWBwe*QRRVe{jm@l(SjWZh5_UPeNea(y`$>LXePk5@T3(6VYTOx9s&+t^4O6bWHdO=d?UMS?XbCT%iC(uBtniS~yqo@k9Sc7)oc zClBNJgzBM`n+d4noQru&*gseyy$hs`D|xE`CM5J(;yDa1+q#FdFQ^KQQvED5N~3LI zZ$L?lBR3S`a|BYR=OQ6`?+TtQ3GRkwJBl{)a*p6x+ssWuxRPmDL$p}Uz7Ng@5r&m- zn5}O8Y9N}52l;Q9o&Igk#DlW`He(w0y6c!3Feo`q3a0 z6CK=JN*rmM_=H5jlizyKpfTv@r4jQAzm#$WHpDUW=i!6f;yr`C?eYt({MrjBeSKP7 z2r`D+LTu3*QOcB zojb{Mqa?|7WW<+rx%3d48`3c#J6ztI0mT;*F^aIRbzF>Rv=3x<)XiP8^I_7RBlDi< z5dcA14gvB;8HONl(gAkcTd0N{mu3zQr8Cn3k?jc2A{leTISkJ=v$N?|%2?d&MIN%#qY_%68ObeeL&+}IE z1_EyKK)>i~azpM49@)Du+L!aJL}~^gd%qaTX#(>XwVZ?Kv?#K*SAm;`%D*Ek|6YQx zR`LJ&F|b~ek(!>}<+-Z+E4D!-;>y?URm#`@WO;>EzkN%``CkLJmZ<<;Y<%%=;-j*r zei_0AT3Nu5f1e=&PMp~$3;$%Q?{|^>5_0Jsqjjk;_`raZRKiE?rnnP6BrS}Bx9H*1 zKN#VhBi_j-XstKo#PlUhpdx$bBS8{S2G4KBiB3e;ykROn4~S+2<8Cr_E~5$OVESoU zFly^nfY`FR4m5m_1v%0_6l*<5Tr>TK?|X^V-{ws-U5M2vA5I#>T=6e|uzgdKHBYS@ z3_!rSl;(aOC62t*!bkl^iK}SP<3v62fi<&gTTB?+SWQlxkU%=A4CAoLme8?F^Ti&^ z$CyW%8zjHoD@9v8KNh=UnYIinv)&ZM-=74}x6ikKpJLm}f>y6yp*Nhjw2ZR^BzqGP zEi>3cWI0<|%-FUJA|>uzu9kGu_8XI|?euA!D9IJ1ZbkiGqMvOh8mY5V8 zKpTx7C5=7uzKKrSCq3yqjeHb54*Y6MJ?xk&)c~DMZ+iTytf|pKuet0Z;woH@nb2tG z=3T)&KJTJ^efmGzv}^zy&cCmf>9Pcl@OhT@^{%=Atl$Y z3g5R3+j*9`bUSHto5#_uIcIoI3%tr}3cyBu!mn^=#EXXCgf%>)=0gsNpP6 zO7C^F+R00FBJf%l%B0i)xv%{CTw-36Y^k3ME~nFrQM64i2meZkwDj3@TiXOG-zzLx z4|6ZgraZA`;btj|Esn6=8gf-U`{da+Jhx3`_Q6b-9R8X68;=0{Cc(pS>HkVvs%3{0 zw%+hSE7(Q+HI00E4w%~D3Zbx!kBH9Lf6VeMR&Ta8d|QFu6@N|la-M?J@@|8tR6XXi zqnJ?lyZlOcmkGGDQ~S6Ce0WsNb!Aq6@Iq}zG`WkyOC$COen+xj#1`x=wD0TA-ZqlJ z(^CL?-__4W*_u(KXzo_7U?Mx_@23d1o-Hu#1$WIbets-Jxyu;M3*QGyRblYWQmVKk zm~vX4-MQlm02pgnEZXbJ%dS676FJS+5{+O;`FvFLY0+hXH+7W@Ig#M^)8U;OEg#Ud zNQk*2Y@SRa8h76S97Ua&BMx2ATo8d`T+EzQ)}D1%MsS~sdMMg~A$XE!;#TX}9M)GQxeIe##JT zCbR7%ET$O{ZmJ(e?t46Yh0ex2HLAo;N9UK`W{n^I{2-vh{orM%>Y~R7ZdnaYI~*+F zh`cTn=W5N$08i;_7)9!IrKqlqH)HjMF!=VNw9LrzZ!D}N8eD>0@~$8acwT;`gLAcH zpR&M_r4tmdWT0TOWx#IhOp@;iMKNSa=!m!9I=R@%RDr08;NHm;#WphWPzH|_EWcUC zcuzPKaGk<7qxee0ZujFWv2zY}EWF(ow*fzWOG3sls>`E`B$brFPf3f96pAdl+w-Q( zk?12{XpwoYdi0SFvV=~Km+@?UWp_jzJ|P2up?a3rEznNTA zb0L$jh6>1579~FQprHU*R*KL@UdO+()J+hF;2(wz6Qy6S(D;>ea=qk5Uf(XV=*1?C zFHLed=vf}Go6}52lLJUkKlOHKT3P%4%S*e}4+MP;cme>#mI;of>R>#*YwH85c0_AJ zk`lM`e=4fL><6^|`R}%+%aA3E^4(UxhEG`QfrQ=9w7Pv7qvWrF8*iScNER$7EIDk` zr6=}DuErl;?MMCVMG2}8C=A-;LaT3vjI>5GPZy*1La=pE0-0=Zrkt!akny<&s71z` zi979xK%Qt-0}^FJ>2*~`II3kRF5H&vEZ7-OwewiB2w~!D^w{uo4_lP^j0vDK6qNON zns{Cr?sCtwft#kO5XE10vKWKssz0+c_OeZC^IJeyE;trZWNm%KSCSsJeS>}LmP|SL z=VC%m~}|*yj6{(3sXGzf9demHeU? zC*%qqpjy2A-prfPUcV5+@?u63B_B&@^wuYvWDWb77D%yA{OFb5N`0?o4kri{GX0PR zJ@b)*+aHZCqkBY@YCEcKCVI3bm2c|Eh~Q-ta~k%aJ_+}a7eYY~MAhKxl2B|IbR)G% zh~dep#Yt%Fgo8X!7-}5-PZlU(3&XHz=+O47n7nr))AM zsdsMJ*I&jiFXR{?ZSfBgXBfqolo)Kf1IrLjONLz|dpzWiQ7tO6YkBNzx{7ygj(b-) zWqV_uPovT<`iO;fJa@Sb-y=?Hy1qOe8^w)VW}?&I=+KFbZ^~b?EMh6rgg1Ok>dWEt z^OEMo`OT%Su|oMF)`1$pK&-felic~s(scuk48?ovRpnthqQA@UI4?9rKz^ph`ho^4cgwC3(APqEN&Ei&56Yb&cjk_C ztP1u9aq7YPt#qkwqhIV$^w>A%A~C{~M{&Q9I=jK?2x;Gt^F)iEXhnf}gO}yo39?+W zX7P07)IRjrOhDQXgoA9zIZlTdp$v+KJQH)aUVgHisPGXIfclZAGVr47a}v;#9Vd>{ zb#Zu=xY>5!K0MM~^dV}Q`>MXrE@b(g-zO48#|=akWRjK*`vRk~JVF2EuYme4J9k|7 zr{pu?$a7}E8-mYHww>1R@w9cXe?`m!o-75erWgtR@AczbyV<^;+rtUBHPgvSGYNI4 z5oYGOCmC*=8z6c86i}Iff3Xhd@|Zy*lj?e%&MBJHQ(~}NAMT8MA|2~ znlKCscES>jM4G&<8#e=$_#?%4B7R*@TL?2;N9OTgz~-H2vzaj@N)vhP1?WjW9&vll z^oVlW{>sVJbE5QMO1H7P2ZTk=Z5y~&duQBc@wC{`vj!wn@2FSrRBZ(#7WAUI-jh+1 zmaTlhoOreFq!r^qHS0UQ1793Cgyrq}(0N!DFv3B~-anTjZ|-RF*3ESIsO{q7BP|EM z^wfla%r|Lq8TuQsbL1mh$<;(HnWVG?vfGxPe~)cs$A$MopW&OI$oTx+9?y4f#%?KA zYR;adMDx>goavg1(B_qr98xtk?eS!Vl4{g?QoB>|Z(RIo;OmAOZt$GEb*sV0YBr&L zEFJ#aA81BlLHF{Jv**(E8VQV)lb8Z$(W zPY}|jp8_>a&mA*0IFp?w*9eNuI8NTihYDio|nx+ zDNSVakTe^g9SJKH!{Sdc%EjX<$rh&;fM*5xVJ2Q{G>oF#aaO)A}7G@ zQ!}l|3v_6FIua3eO|=Tbq`zbtkaUw)s?Ix~YE&xuVyHJ{x+qZ$pXu~vaj2sH@)No9 znLU9Y^KfgWj9vLqQW;~T!aDY3)!_Tg2tH<~WC3CSf~=&X4{b=q1Nm9Xo91nhDkvbf+w<%N1ZjHlpA6@J&Z=?;sAg?3Xt&^XeJ>fiIP^|OFEqAP@ zcw)92j|%0Vtg#M55id{A2g$tM8z6Nkz~nue!&J9s@~naWL zW>i`vGxjeG6DUqT?oavbIBL^B&|h+~jxI`?m_OZo zo$r=>{W1y%M}2LUND{KevUc|%*XLdha=sewpyH7 zb2nL*&h2@EKxP*{>*y6rOj-;|%R5fZNA_{6nRZL;Ijfv@ zyFI=2{PgW(5`B6+K@@E}AS(26m-SYpO~l7$;})@Rhd9)kPqdVAyEAT6;VT?^8^Akr^Ow8zVYrm(a2=$-zO5C_YmFhRf z*;GgQZy>wrL-*H2Ja6ajRGY*->C*ITId7>qGStWJb(_kR8KGxNQE)HzEdc zOt8fFArw2jAJzD;PK@Qe{2rDjBiX8LIPv?QLfP4BqHJQb&lK&}C(C*TU{J;E8RgnoCEqVk4f5n;vtFUdE zIZx>8K6XIm8!rCL=IOkKm8Yc8W1{z_T;LGn*xq915 zJtq9>rLR9qi9&j#b;kNGZ;|v%c}aCrgqT`4T!1VnQu)N-M13L- zUc~7<6|_*9|FfhW&!HAW6bP)wHF7R4q`Z+oNt$z zcNir&d%I#n6Ru3CrbNMoZ>cHS(n+8V7_L})`qt%2wdHD%dzthuPgHMI&fp;nbs8iw zqT>~lMhuZ&qCA$MsnN^yWS~6knz$nm`Lo1D+Xm__YT`Ry72Mc2|5g=t!qr7Oj$v+S ztV+SNf>8r12THxvuNU*m2)+^W{(Qhc(!(4K|U!L=jS$STQe595+?%517 zsIQu^4(yORf?9=yIG<+idZjD}dV}Q!P0?6lc1$P=+1hmrUEQHAW zpy)qXUkB7i*lm&+q@!L?sxk!rGI9;Nf*M*+lHqoQ;Jdt8zo%!Z(duEqU&6H zG9(|K#VN_yJ|#g3@D6!ZaFCeNz9DnDO3xwn5L5)%RjD9TBKj;iXRC)rx-4iIVL@i& zB6|enJ;bq5&YjEZ^su5S20+FSo}s;u%JE>89>zjt-PvF}cGX;Y^__eSUn7;=l|Mq0 zZGt`t_-vJ|8KD{Y3tobJQ_9Kz z=nU~BG~VKqNEa3pnn&knDRMHcs!QeXiITDAk0}6vp9^NpG)2^AHi}*1fP_;lfD|L3 zjB)%!aiQ6GplcXVJD)HB7^}!M%Wn)aiPzfc{GyTf?|1RwA~wVg;#4hWg#}^mxxtM1 z&mDn?_`~?^|AmTL6ZdOhVvhFZ7x+F=72n81$o?Q|VJ6ThjwO+=t}<9)z+Q7I1Q^b(|=Q1YExp470Vn>@$xEIS_(xIFUz0D;^?H%yB>Kf67pGD9MOJ< zWBvSKT){<0E+(s*DW<1F{2eSZSqoIVy{Z~=xbE{!vJJJG`pnaHRab9-Kd9NPY14|k z;%Pq@Dbt*1*L9L9HBYGdnM+LJ$8iIRBw5bOl)m(o+7 z#U>RA1*9`ZKl;SV#0j8&cQd@jy>f5x*tBBWri0|@H~u>N>rj@jT&7!;fp{5tY=ua0sBrYoJ zA8{S39d3sQTdUo^yT>^&dA3*#Omk;az6Vv~j|HsY%-)L0mP)n05cNw|8e2g7On zm_@dB9NXqs)j!o@{1ua_{gAnTgmv8uGTf^;9zt)EkfBEg{VM zA2YpztjVs^LU|G*y;H%$>iVnO)?DSpCU#r|d`}G+P}cm&QPL-?VuF(>%ey35zcTWa|Ol;xXlmc zFv_K)a#G`VaD|8E^c;$4NZw9dQ4|`v(^FR(|NTcrf_1CdU_s&X+qEg?m!kRC=Uyn~@e-;%c6)L6vIp=lN ztx`V2wFyxQs!uT4Ne#m#w%8E?7bWQ#=bG)LMge`3$~xdSg~WjVa`;d;_} zlD(PG@I6@O#X95qM~Xq>S)FzNbGAXYeRkwnIpaVb@h3VUvwR_`Sd7J9f^DZjWZYMe>repfm*m{MsC_hZj&?+71Hzeewi+N~#x zWhCoY!s{PVhLwcV7jw94jUlC>#9`(^&0J||Cww6{3TZ-8Uwb=}Llk;WnB2TiqHJhB z=SxPW6Bh6}{kTr}6giOn&5Qq|La0wF;{*-f+0|ZoLDC51l;89D=n=~?=B~Q_Dcgm* z+~QLMJq-iB93!Kwv4FXH=R&AR(T6nT8d@4aJSo&+OJc>1ZreMseASf9xsACv!nAR; z^9(|)s^g-x+boXGeC9E+ zC36I2{JUov;hhnkB+E{qx*ioqocaqh{hAl`5{JZ7nEB+3gjp7XuwkDgzbpjI2|+%# z;rAmk?|Hn%sXgfu_B_fW%qbIGkl)?9uPMy!3?PHoxZ-m1P`iEsy*pn93pZnyBWwxGi}NS-I!Z+Q0nK<$T}Hs;TSWp22){juqe*$^Fj(blt` z0Z4RLrNLolS>vW_Xi4(1_o4vw=tevs0>1x*Q*E35<(`^Fy^vwmkDm#WyqhcORu!`X zg+zb=3ll!>nf)})=P+YFB-vZAn@Uk2P!dcFfXpoj5(Pw+Y2v^Tu{<0_AC>uLz<4lE zMjJ&Av%G}(Wa<2*$cwL9DzwxwOQ+VOO4V^t>{Q-o0l$uBcpCVPzi?D1Pf`&39(`5o zhfu89NExmA2HF}`>sA|pEbj)`&5J7C1#~AGTIRuT1pKD^bSE-<#l?0V%5d(r-t6kJvv2hc>Y3UNQ2xdyQHIL>B!t zKdIkFy4A=AYkxVw1uwg#P#f7i2jys-lAtNc|Q?{FYxwuz-GKk zDMkB>iDZ+5ON)w!2d`ab{#9Y1HmHKve`n+{(k?V&-He^- zDZrYUdI%Sjj|Tlj{G;l)sY8YY8~x8{Nwa5bGsoVhv$5v7V@C?y_Yp`zfkzLdP2Ym} zNE1Xze-(7RC*j0$amCf&fF%@+i>H@02|f09jOZuxXcy0Lh{A!>nqRUU+jDnw_-YJ? z9!AP6(Ji)Q7l#SO6y8#neY7`Zy6JU`vM(^bak=x?Z69Wu0#M#CZ>L*dZ;409iQbu{ zZt9Aw^#!?Fd>$U5ehYHv7OUmx;de1|Z)B2cSlkXs6x^+>qH={E`=sTP4180MA7kO0 z(}V?S`1mvW;N2kUE#37s%bv#cUnUGMSIiCPP2t~J!b$uj%FLZ4_AG^tlAT0O86o+n zPtla4qq$2NqfNs3qr5xA(rr0kmzr(KGR}NbQJefjay$hbb&KNHZ*aDQtn~_PvGB1o z;rAwnas@6gqZ)mBKgS9awgnIOz{bDLg>}HK;by{t9nxsWAg6Uf@+U z7*1TCv8juspBOKo-Q8&o^y(jl*Lo(Hh8sy)!{+GAGa08}Pm7R!Jso#Jc}Wa)JkY%v zQ}xupV0Z3?pxg+F3W~^GuWVE869BeLQiTJgj>HL#XWA+5>YvCtVXJXQ`NiU7@(7og zFsHxF{9;Y#1&?Vq1_On)Spci$@cs&g8=JWbmY$+c#+)&hUyPu9+nEGYEfYeu9U|lS zvM~X0KazKrNc)p%;e=XDsLm&}XC4dUxWp?otrXk|? zP)5?UcPU1&#WVZ7#ag}?l(l-M)+$kL4b_csKEMu*vUGKO(%a))LHBK)L^gRvZ~LA? zqcP(E+rxn6A?YtGThWiqwUL*Uk3H`(l=iWcxpVLSO&c~-o5Y~~uOz3+8uo==N*iBR z7_ms-5 zIKAg|9q{S+h^G2$4F)sx%tp|7ktrVJHh?XQAQL|A_@U2L!lGyt61GXhg|GlI& zN?BWd)4IEie66;o+7t@4|D7}7cN_(Z#%I{(g9Q5Z+*6KuH~yrOK1^NudVJxsxAkhv zY1c!+0sru{Uo!*QJ1lBix-9L8`$JFOkJq`7#X?Obvp`*C8hHkJI`*?!AnTP)!Nl%P z+1s@orFA`Vpxf-30@ZCyeWus0`1oDY`YBer&1n%YX`@d{3HgDqO?37I!?L45LZevK zAd*OP2rX5=pFNhCj+?K(!w=K=oIMk$DWWw)U+j`P#8UDJ{Gk|LRH0xfFbP&MmN6mJ z-kJD9r|~Z`b|z3uL|~>@Q)Fn9$W0M&!-jCw>_^D$tA83lme>BYZi_P=D=T#{Hn|C= z)bVJ`5Si;t0!c-k(-nWEi%(4O3`gn{KDK#)jhSA!w<2LZ(EZ|S?XzOD?8(P^r?NR@ zp{D**Jwi4Lwj2SOn9#ZKfu}9+aiy!bFFBedqU`8(YuadUgdGaMWf z-CR~{n|_I{Sqh>VP@|EOw$v-dX_prdAC|WXLDvk7LT=KM4(G4DQQO309fN46UEQ`U z7PS7q&lzEw_%GEk{;wL?w2fO@u>Ws|)lTWl&TInpx7tkuR6piA=YxkbQ^D5WEb{LH ztKa24eWKGTy+8h&R17cvbXwu9X!P6E8NMPIeEm=7a;Np(OB%ArkDx!EeoFQaDt)08 z`iIz9v`3XljP!lz?l(NTZOlGIOj4L#XxR$Rj;{ZfFb|a^Bfp&;xQ);jSL4(TldE06 z1`p-jN&te`<}3;;k1%$-@qPD5V|;bJ%|$lx=MzzSXjxf;xO@7wyF*~f83yX*cq}k- zu*<_j80Hj}tU4PD(+S9JzBdm?NHDBRiIFnSD&0A9`*c~Hs^E6K*r$I+6TP+ieVBch zbKRT>1=@Z2YvhldMXL_U6RxZ9*9}dKet1VHk3fyx`k&0AYl^rX@WZ_#zNLXooAeci zwpf^>?=a!EwE;bv-XV-po3W&3-vLQc^W&$IuUu$QRVh+fz?v9PXJg`Aj1(6BYibA} zQ*6L0DszEAAvJv1?@&?Zx8%Ckgn-yMTfK>J0ifwP1)z2>Z)WB^Wz_<6KHON@D!CH} zjc_pz2_{a@a|eRc z0EigxXeA!>QqNi<*rqWe(y~v(e?fo_s|KPb;!eGbwx?V)%gL-I*@gsO?R*RoNEZ|R=U^V%4Eri`6u^U)B`Vbg~Lbc4m)!d(;)v%69oi|3z?oXMCl{F zcav6U(=SKqcRC`ym)u`Ws#%21?1k|{^T};oA$C1N6aRvjyY)e5hUqOM^*V7I*zI}iYoQ@ z>rO5P^t0QXbeM@VR#CwCF;?*N87txneA8S308p{Gg5}FI&34&H%8?m<7Q0{Y(5OQR zKn}RN8?Nw|VHvQ?1rp!RpL)vxSV@-PZV!q|>(JO-m^c_eJ z&N!UqAJXgE)K&r1iNm^ei)R-4`Zmif$AxSO$=zA#$e~I9bi-z_S+@8`!-Y#NHK@rK z`9A;}CDaD1O_419aZUc2F3E}{OC$6zTTbJVtYZ6@?7HF1TH)9yoJgq7c`qI1g^Uin z1o^6S)LZt1Vz}Z71p8YjZFR42aq3 z!Ib9(%dwnW6ssy?!v)h!GJmrnnzY* zs(#m9#>q_j_TvQQMH}%KN8p??A|CpL=Qvc=muyj!us*HFU|8*l*1!n7A1EfqGHoWW zP=I3q=Yd+wfAm|^n`37EO%2{UvI9RmNB;ZLCuVf|{7BsYr&KU|9S-JW56FLt=t&sM zQ*6EQC4vQ0>$XmXxo}DCO;sL|tbb08E+>)2Pdu)n{*B z9tVlg%%E{-fIjd`ibk@d*Uu*0Zmp*b*~3lLw#p7Y+*c#RLH8qO&Ba@ypwu`#f4pX@@PYr8KKW{%7Wj=*rS2&>Fdl$RdB$6r(y=q8>IDGi z1Hm6yP}at5!`9-kY18=D2qBF$a0kKc4JWO1e#8+iR$I}MOv1_UxCwg><5Im38G`NJ zR}kA7{Dmxzq__Uz3~RY>BaJKFOO4PCC=VQB=VeOc^lNQZZ zGacG)Ub&gGmS_QuXf~w7fDQx>2TfUmc(m&34@sb}TDUyrG z$Vp1FrA}8X(?SpMpC6Ef4s%0#@U*?S1&*KUbIqWOr5_Rv_eGf^ux3OLD`hYzB&XB( z6?3e@LSvLCelUmT93&+*s$>Z(50kP+4w z<;kk~X$+XhxX5nh$M^QVs6xfW;<)hgAJQBA!m`8h&q%p>sd+rQF>{Q5VrNr(0hOc$ zO%*?UG$O0oPQzG91-MA3mG%D8{S?~#b zt@7>EwmZzQ#hi_gn`D&qw#HVp)w0i2sgoPb$(bu#a`LWzY2i0pLKuFpxN*@HzB23{ zJ{>+eo8HLsMNYCDs#ryvK5y5&YpXAfx4ewUR&*b6W>H zbh6TXpSjJqILcAxH&Q1g$#L;i*j>nX^e$Hq6<{%ily@-l-F`MYYZAL{gB){3L}I4d zrTOvN1`$V$vw&reGgPg#f0^3gSO~$lZG&sI+(VfvbTJ;CJR~=O7Ax@!={&nl3=;*S z*qg&r_<3qsWEr_LikZxJS4qk?GA?2k!lAi^zLeoj(!RA$B-Hfg!=2m}o{`ltis!*h z(TJs{Q_$~T=kB>yuIHkTtDNXofyrDL*gxI}lVF7(6@ zPR13>G%kZ;eD$nw!Eh&7dc{2H53jV5Qvcoj5C<-CNc(`;Iy(6c9TyML6xuE)CC^nC zWdRln>GcKof<)(}us7z5z6)Qwq$)UMQ&yRR~!8?98t*E*S=r;TzJE<7@b1 zWmRki&$FKmo#2t>oBWqwBfG|rd<~Y9=WRzHN^?@iF3jE4__Ul$jV6@!Zz|`l;IUB3 zlSWX>OjuA_JqN|e)s+JH>nLW3*vHIV89ZFuL7`| z90AqowZ+5L<7VR!svOnvp6!!Ul3GXU3Wg9eIqYGw_t-A}sswA>-0;NLqn6zi$IL-x z%y9iR7wK2$66T=;%zfpTp?y}0_(4LJ{a(?u+XABQIq!a}2O9CHxSR(M?N4NciqK1K zc=au?OxtlJp`9LDdOLOVc34}{g0C*B_?5;IQB~GNa8*L7;Y?Wp0xf6}2XSfyT7p`M%E4Da-9^8y|ZSzR7sQ|TMl%ub2SQN2;KY*c52V3rV z$g^xZik=xS7{%^RnMI|jdC`d5jY8PGir%7|-?VL$tIJSpopn4dzm%>-!&m~m_?5x+ zQ>d@KPL*0&$XxF@tXRZ>jK~0sbWi&9O|+U(1rC1PmPyWTyZL7aGHr*x->y-|LY}^x zh*t)j&pAn8WN{&$ujQ)-t4ZN-f2fHuw_P9hGJoO#Ove-o*BF@zs#abG!j|~DLCIjZ7PLw|Do_jaA zEHjryc8Cv}2lNX<(l}ICsx9Y(C$`i(gpgb=p|%2}Q#w3I{?RF6Pm`F6K})VzQhQ~8 zVL@^7QB_RMtca{HXy97)4$ z-cF()y^^!0yIB)~OS#jxfD}&W4+kbPIlq`ec=5V} zRhXhoG|;+J7=WS-b4u8_Li~)T7cV(Vb}_!;@8bEploVAh)@Kpk|6;lN;BcsCSa@tk zBVJ`qXor|)%OKvCQzW$EbI+Ft5ZO`9S>4<~bC})5e-0ge-u{05e+ME4NwDB-Zl6Zu zE@`W-9JctRSBtT8tUPCS?D=)TZ;!PH+dlyYEB2*-^NV4jI=oG+CSIZ$%z8 zUdO9w>{)_e(#_p;%m_F((v#eLv!F-f?3X)qIZ}-#d=Tkk3==OBZD{-WvTGK;yPMRJ zQ3VlvC2h2JOSb;*>^rczU9zv>;b>|D9h-rIEfLtYsE~*yLjKxi`)GdkX&k^rHzZq0>OILX$HL^N!n@wBg)efl$7W$*$KOydfy{&yqo30^bui2(cE>JP7wsN9o6isik2KAxv;xtEQly! zUZmqt?1#9R6Kt)cJJa=Zv}TRwk^3FTvS?TOYldhYb))qqoZ3KHE8TDB24#7pP0XM| z0m&9oEJ5`2)#3uxfTKj6Cx4jg5(}ocaWrAKA%H-E_6hTesDf!9Xs2h?rhAyY@irI< za4rym4=*>hN1O#*mZ~4L2uJq>M7S<{Q`53H-nI^TPsiLr2J*8Ho{+>gDpnnquB=^m z&<1e&nGAO6*Mi-KM7k_QlmQw87F#76;Ng(I&4tQY;XMKvJtZy7EMQrU9R{Cb0GRyX z0lLt_bpfh97M?P!pU7(~o=r0nu|f=BGfe`ez->>WEwuVX4I_kwRu#5ZcPqVI$&fzk z!{8Q3(G}nEtnDg>Sszol6Y!mS_42L$W^|krglktYpWibIDN69X?iZH0Th#8iGgAdn zn`v9gE9_5=5o-N?e4B?=M;Opi^^)W)AG~4e(rA0HD53F>HQAjh#zlbB^(#j$^1Z(k zbtYRB_4wA6rx>8z7HNY3*uxNj=-!gr`uDc#39PRlgv6S*)(n5J0cks>se4Lj&L+rR z2a0VxYxK{8mw;EUhWDuISg&Qkc9R1QV$q+!+8}8-@ z8pPANuC$khLhR6j)yh`&tP3+luzGvtY_w}QP?v?96d;oS&Af_oj|g_$KlEj0Tic!; zcJLWG!>s7R3gN3cj`6>p?l1~8p8;hyO>xR zr}>Y@+Qf@z?Fg}d#Ve^mLdDNk#;2mkHbaf|5m$sSy8m<~#%UK#(5sIZaeX>N{*#gE z`z^q(lGGusmvnQy?9X7u;PKF~KTUwano`B>?#uLXZ-R{C|VyRaI!gtSBVG#Eow4Ee?@N_hfEyUFl$Qyi$UB|&DK7L64otF-6e z!}x=+Ng6HXqHRA%e=+%ex#aeu_7;j1uFs5(o`pXRBIWTU8VRIN841@ckhataWOwX) z4;LEY!zD=)y~gr^vt3IW{W*H`xAFaowdO7lrs@82@8zxij_;0p`9>90kuDw=geC%J zs0f;hi9R($osWNZH-51b=fm(U`Q@Nrvi%s*Jz--n+mL*pnFXbBv&<8^63Pu#1c~J% zP@3HKFAJ#vpUa+VNEssBFbKQ_Ypi@b@H$r36qj1SEf_(+nS*lcjq>YaY7^700Yw$v z)X|8d^$__52K8{k`_J-!420ap==v0%tKkwciT_^PNNyTCrdnRK_?h%a``kHv!u8z$ zahMKxb}7W2-7Od#=Em1Y)knNe+t&v~9Ob z^K1r8I$qn6&@~>0*xFpl(^^n&>Km&5#{@21N|7}D*|};(oG$FM+O5gDRl@tUC#o}G z&~=LzC36zY0dw0nlc+?~eVw%1vib5)C##$6;4)hBQd

    *POmp1#EO6gD$)2|?#tBHH|BMEio%A9>n=4PhI z>bzx1LY*Dxn5xsE9=v53DG~0VufbVJkXAOAF++05#KXHy*i=irFzZnZG0cQ`5G~A> zABnHm&Q_4^+tNDS2@o_tgk?6TosCX1Gp6rO$Vj`J4ZS5v%1-6~Sfx~>*oNzXg9VcW zrY9iQqR)}Cn)q0GKSiQ?KGSJ!`tiR})#k3vC2-%iJ-c@rQ6^db^qw2Y!8vE7%JEuV zla=#fwf`6TTTmzjpi^R*5F)gykGp6#Zf@M1Q{fs@wPgiNIWo6X1zWyAw7t1CSC?goA;JtX|Q`YF90^npYg^tW9H!tRG zR!28>gmcV&Z`||KlpWWaWuy067`M@6w{}>$u#9!RX|__%Z3-8MmF6VcYCD77R8Hnt zkh;d_JPIb#fH<7h+78aub}R?d!J4QS0ih`C_;xv zXj;b~kY<(`Jm<>E1ZmXJyg7drK_wq|&whU)8J54W%s=X`oBu{q;Q;=t2>PT3YUc1q5tQz) z3h3L%-TV_$Bl}0?buZ!nrTCfnXXj3z_s5yZN%(OGFY}mxQkRwaANAL#d>xk6Kk+R4 zLOKA@e|?g?{&{nMkHnD^X#Xfi+HN9+XnCYGO+#KRO69#eoE2jNB=+Ff8K{2u!Olkx z{f9?Ik3$Ww`=rjs*W7A!Qad0GfKYUgJe36eX|>>|hSf61$(_%PC1o?}onPM7XI!HV za+#6yNmL*gvKZjqHn=ME@VZIC@azoGfjy`3gkU^HmKps2f?_zHpqL6@XK-QfhQskW zvuh>?TYjElS(=P?4Sj!4zQ!DbUD>Z9Qr^(sDR*}jeR}2b6ANtnoO+Tej$7lq!DO2r%^q%!+lbroP_3`;>N!6b9&QB7#sE&gx29MR< zi&Uh}ndF-)D7RTu4Mu8Bc)FS;Swh)$wv52o)&%6@I~IHGp;GZGK{LAknhdikSXOm5 zyahH;{~52RJpNOjm3G!{$w;YotyQM<@rq_sD?N^thX0I0EwzA^paqXrH}a}+h}S1d zgJCH*SNSSD8r^fj|jn(@tV9wd{F;Y8I9!uul4QJz^;7u^+jF-mCNc&d9qiAT6} zd%fv?SSN5&LS;Lo29(|a2sI;<*7CpOG}Wp1y*s!FiMT6W&NC@gnkBUU$k~O(=`WSL zyl%i+$6Z)Utwn>uN#u@Ex8>1sK!L^Ss+e4B%fXVzof~9|#c95pSK?@)$ZAoc&uu$$ z`x8`P%xfA8k+*vx`M{3Z$+Va1OrOgq0bEEPfz*l56e=Q!?Oen1)UfyDb2d(KVRBJj zI~fxEiK6t*Qf8%tcs|POtH1lOMd*#jVkb-ql;NO%iB;BQY73SpP&SG^3YkiZoF<~tS@L-VsDk$ObUj$+0wc!+?A z&i)y;M!?|aS-NFIk+N;k?4V2R5X35nl|J~j(7lRf|4 zdOb$uy;rpvM0iw8wi@9w$!*lpeX*&+^^Ngpa?$lfBULmcr?Y!Qyk({_!2Y0Y)B+0V zqH^>f>KvUpjjG{)G2A!metKE1ysJCcuH{hHdRQkt9jMK>@H@mgMrY|l!-7Z>Nn;H~ zTMd<}NI66NnA;48c>2?R_e~rEpkWlVR2zoZ8w+HeeD*Oc^23*=PInU`+^XBNTUwPv zF3i0g_fBgzLDKv^3<*L^BJhFjR*)K8a?dBHJmU3^=sOiX&2x2YWpuS%s6>#ntI_Wl z-hq&sE?Ae&%n9`OA_NAj(X%4;QQkU0WX!929@wB}zpX4irL%)I z@ooY(&hVaGmGGB8BGUXf5MD{udY-N5l0G;DztFs(WL8{3s)VU}gv*Rh7gtZ|X-&G;OuP&qSk7>$(lw^T}>c2mxo26bGeMt6QZG6uNBD-eg;1YQ+Y}a`sZ*afJ zzXPneiQ#Dp!jA{P7#5VYEs=s_+47qodABs*O-o`51v0+;{q?b74CeT zv@1`Gg7t+|oKYgtQopRH@v&P!8Fq+;0J=`m<5Bh-1h=4+vDa^6D1sL}MD zO78Soc07AJ++`DY$Xnvg{EzkVzT!*CH_c%?G~B+El2b3Qv>0n{H_r6JDXy{vPknB} z{st5!VE^GZEbbmb?2WsnS_7?BII6XvSeZ(lV@QWsyGeK~qz0IKffR48!tthtd>8B~ zgI|wGI>L+97BM;tn(>z_?XVV+;*}^#{Ge6#u^VmgC_)Y(&?KO;oyYyuc-CR&)D*Lj9`BfLvd5GdsZ-z*q{tnWKb4uaiCPNYqMSoSQqZF>$jc-uo$r*x40?loLxVtcH z-$5r{=F1bi_{8YRh?P@F-rSm+i=^!Yx%{E|;Bnd8BbvzEA~=fnboKL%SiMH=4*hMU zIv);uHOr}O&V2)`AWCIKR%O(3$DaWs3AuVOzRD(tn6W%Kd{Jzoqo4Ss#_?*7un#Nl z;dNPGRy#2wgqNDsY(t@WniX7!(}q}el9Ic2ti?`vz!p-yimC)=g{+ocve9oc>;AWC zXU?kljj5h(dR9Rx1n^Yc=~E1NM;X0S>f1LmcUm6?7#tcab>|gC(<+=8!t1Vk_oj0v zNO`MO^3{Xga`htK=3pIpTn#Nr8cMA067S2AcDf+Xb8dDblK2&|3 zV-i2dxD-SuMwr1$!f!)Ew7S-4iZU)lD9W4+ZW9QP^=HBiT>Je5?Cj5eOC)#I(#;NgZ?odFkit0;ki6{`Emg=#lH6+W) zS_pG2#^JThF;)uX<1f%@$7qUsCG3cKEF({0lnBBm8)?h!1v7q7<%x_^2X&W(VQ)do zE}dC*%WM1bZ|^;GRZhn2>PAKGgIR(SAgb_+C~; zY;~5iPBi#y3IjSG8wioNi3&55#d8J@_tTys{PM`->ai8&{L#S0Xo(MbBBu3+)e7d9 zB%`vi=5GA4J(q7uzP*t0p7+9BObF|w+L(29JG;^Z!c@r*;*oBe3WE=f^!PuHo52B;(n$P;MvGDUP(I_B}+99ysGwMW=h@ceFvk8#LTPzp&< zJUe2-i}0Kq{L`m#2fFr&z^|m582Fu^BidymW0~0YW4BK_ zCeI_j>;bX<`(}ukD&~0eQvPx>i7&uq1S&L~`T7?J#a9yw1U6?#2y8-pTRFeMueg%y z{n+L}PuEAOq_bA_xwb$;1Da<&8}=m=GQqJLpB+|DqBq>;PLJGOBE?5p-p0AePqZV( zz=zMi>gH4bX_LNRaFEw7TT;~pZ$1ke(`W6fQJqz?swtYYqRthpst1znHY$5L-!D38 z2k&K`kz>D8*Q-mY(dVriy}U1ty3?w=LXId0%N-Z%*hAi1m*8K`b$4Ua*2+4MI@`|ebN76l(5@>*l@V1wUFcG*Q?oFgA>r?{AMC&Weghe_DbIXlo9Jlj+& z`e8x@<*phmGoU6y#EV^2^UxdGzG)rM^pEJE2^uZ4I0~V3lxeIagvR`7ck!QgK}4Z) z^bT}Wf6E2ROwK%YH;RS2^sq#d)Mz;0x*G3?tz*>@OhvYrUo&FXp0d)EG_ zP|8H=2D%%3hXuz8&kO+t&Mj~9Amo>bLc5d4J)99(;v8MgKXXY71pgM$xm5(I6i}1vUYbC$7h?vKrLq@ zBzxq$SJ90yaU6;Sj$;~P)=_<@)^7JQSPgqq_e<$i*LOqi@#Ue(1cFmAzgBUhdD7zH zv>2U?Rp9H=!}6fqwoAG7_ul>5S@U3|TC|N`R$d6X9=HC&=T3D-VNFPhQt4W0BYRx_ z_hv`Q-6*j7-u{xT}p*a)>4LTK{3S{&iv)8G9TksE9u);)UNhv6mAp?W=F z@6m}^j&6G~~Pj~!q6h|(!u z_n`0_is($WJ=6BG`Zl1iF93(qq>AuL#Cu-&d=|K7KF@FA%F3oE&ynk^bHPG3v%=AJ z>~ZU)`pWg=$ru7E(TU@$=c05j=6!ZOch>rP1EuQ;Z}uDf!F=_)XVmCMbD_S%``+k z5*Kg{tk2;T_GM6MYBA)u?amDy{2m#oYMZ0J{gP=%NUa`-{;m;P1$^Pu>0cEckXFx zAvN%;k6(ZN{#}hI^X7Nk35uW~e7S;LL~lzH;o$E;3^h;b5g>4|vsQXnosxFl@)t9R zK}_h#f<)h3Zw8)7K(FDMWP2iBVUXmec$Wt=PdfXm#i+QtWk_fNM_|mMK~-q)w=AG6 z^RP@I5-I58u|Cg2Q2}2cZBCV`e9tuTS&zJ>m}TUIV|4Sg8%@4U9;1Zgc|&n-dYaTy zR-S|WXe{HaRS_k-j^qweB@~)~JtQhnR~sNz^^`cKf+-&}q82D{R2|4_?^vIrg|{3M z3P2^!(OH!ib(iUGgZn+-j4eUJ=sBZhHOf3OwxHBAM|R;OM7^J%%8-| zAI3I1IC6i6FDsR13 zi8TyH)D>##XcD6L6*}KPl`_!35V=4pZ5L{L!VcjXEEytfrequF*PA`vw~CfpS$DJS z$~X2p)19(0p8_u&qD;Bsf9ROlteYZ>0W-}6&}vi~q+J!R#>58Dn* zEm_J<%h$BC2H^T#Wpl!2JX2Rkv4D)**q+O^iv6+$rO@)jY|v^odXr@fop$KF(+>h+ zqp*cjgK`MJ?@Xgx?5u&OX6}4-qNe}q>j@meeFm#i0?8&|mT2UfP<9@TdkvR3X@r;Hjzm8V`ukUQcnz8(>z!$6JT6Xdp>DhUy z$6rKGNmJ}Bi!E>5Qxf%7oj%T5$e3H4L*;W1Ik^!U zAs5{5kp!v&?c|+e_&JJHm5ZP_8WY+#Yow|0@gf+GOFLI~)&9?hkZ)65mIPzd1{?;+ z_a-U|bV1ETq~-b2%|xQbT9Xc{ujNS zVW0aGKAYpwXdl}>)s6ZaF&*)L!f0`Y60;>hFb zmdqz-Uav83T4Xd+t|hKoQCL#zI)D=qyRltv=d_SM#zh++Pd9TlJK!wUv5+yRkU)Fo zz7|;|b=5K8#A#K%)HroMVOgCqafRA{o~1-OMb#Ld`@u(KSXR|1tXa zh`Al}4^p~zIh5CVj}%6KBe1acgnAc?{SWf}gnGaF>yY?=Vu@)Lo_z67>A4JKH1dVHtYi*XC zT{f@ewXW?aP%WXmk$n;+8Z%&XEK)mN4J$&?&m|`tojBYLEM%0<@X$T~Soo`T*#%wo z43dEQ%s9iV^21H|+W#eW&J8_|F8BX}>HT>Gt45FInuEx8?m&W7j{HY^0{I{Fsl&*2 z(7z;6g~wS&{w0Mz%^cx>7`A_L-lu@&Ph``7u>6dF$;eMf00e_i#{lQFoF`jOQx2S# z{FXZ5yfH!^cv3n=%F}jaM&e$Udy;Yrd$H!Jo0!nA*vnhYr0I-j&I~2h+2>V`K^2@U zgbUsi-D+N1s*ZDaW}~0disuovIR~kut25-NlB-iaQH)j8rwOkPDw;ql;`!C^D{-Un~@hLh&EO{?bm5w2n=%@ZuIkXl`8U2h}R znkI~z&x&t&E%DrXU|pBQki-kaP{-#h)t0vA8uLreM#ZZkg zqv^hBY4z0D$Des7MwV~K*H?kERT2ut{ZGE3Z?L?c=^gxgzD(a_Is3`QZL3gFFIxBo zt|JY%X%x21bM+V^&KQ-b@v_v=_kzo~Q6#@sM|-ln?)~n=?tf=o_uEWp#oWYUn#LNv zzIoTP=9PwH{ACYfTGeo0;5ljGyzR(%H)#_pP~jUS%U3D~w>*-s?IuibricS0n?)@Q zHV@o>Z_P0Mn{t!aI%mtd!Totg^Vzh>0^ccs<3}flKCaW<_`J0`#OOT(~YZWDDnd^~IJA`qo~vtaBijH|Ff2@(gVb?w}x zPfVP5Se>DeA)=`ye3Q>r^9g1m{V*)k&J&hpX6K|e(A>Ealq_FG{QS7 zrgbL7kg+l#(8$0%!deM)d$>U&x3zO+56H{RN>n`M>=;p7k2~H3dabvt0qb9cI4^~% z5QloXI|u@gHMS&~B7|*sv11meRQ2B)RPS|HM7nSjt)WS>FRUlNCri#gAP7bcc`t8m zK|iFR4Ui$f=89Jn(dW@AbpBf46jf>?GV!Ae|AhpO)(~JPQK>Luzw3~8+Hnv{iw7ro zrl%$2E@=6ap;Q_g!NzfAnO6=023gg)#fNRDIHZ}Lf1UU3xRLBs!^G<9mv6j{UOuvO zRjMytMwdPZ8s6r)*`w{)$lI32;&SE<4%%lW4SNtn_ZUe^h2o8UO}|voGkSWs)`pz) zjz=z+uk9q9cwv{b6i7Ff-C4*di{Z}Av&j-Z^f7*JIJhED2_Ib3Rp{sGi7!ggm1XJ` zWEw!&=WDgV^CC|VwNb*n0(G-M-BA5$jIr%7iQvGB-Os-gxrLV%fQ4Nb!yu`+P zVfvNnSuoy4%Sk$y?if?a1NtpNZm=PJy{O!TT~lj%bMIxu#$X{GsK|ge6ok5mySOXl z^?cxSfh|r#sS7P2_AFSl=3A^lkqZg^iy^g0C&PRrlD#JP{+_l)g?LwXOvdqm&etsW z8J86wkEUfcU4Dh%lw5+lHOsuuhSsr|Rrz>6S$<+Xs3dExYXURvos>Q;ac{ zP3S(bJqOZCb#*R#mgL^!!W`}7`GFg!BImXohgxj;{lboP#F8CfNq&mtr1*K25t|o~6DF1e~CPOTgcBr&Qyz-u5ic)G{H z&@eBW=hRT)KouM!$u!4mAfX2URad_Tsy}yWpZz8~HLEEgJ}hx!CTEbd+=%njSyhY$ zabCz?B@i072&dq_Nu#sIj(nb-7Oxd#WKRejCyOws-UnLHV3#`ZTRT=zB^T@}H&SmY zPsvbD<0EFU_LSk0*-u)rl6cD~i8`rr=*v$~g*7O#<$O&>o7(?cEl8Slu%W{+qf@Ml#Jk!;#BR&GY5oyiwy?R7y!-COAQ@@Htsyt z-Ge*|QY^0oAD_Yg>UKF~zOov_hZ&JdCL!4qsv}y%o;9q8Qp)Ltjc!BEqb5129(1<5 z1b}wLE}c2d1urg)#!`?hB{XCgk5QKwTkEJGBuhwFWVgb1PQvFycXHcE!zJ8+)Hy2iF4*MAtqw z==fs#YhGDj03^)|$*DB>C-5EfUCxBW(UEwv{fLM-rs$) z0P}m?yqL~Cy?l$86bxg1C%Yz7HC=-X0ZB!vo_VO}Tdj&?sA(1cZ{!iO2o~)TX%H z_c6uCf=|an&vx|+YXAKxsNxMLkUtfW92KlosL+nO&ew=~fiPDLI2xHtbY$k}Y<@0i9tXwnPFD%`P3`B0RR%;z2%E+4q z6&E&$%j8?3)fUyC>dIKM1Eqe?KD=-zo86(Z_ngpNmnq3z%c=koaDWdE7tjgVm;&tU zTjv&jixYRCPq4Mg!@09s%uLR&xP&Z3j~1YC&_>)60}pXMIoiSX%i8qvp=8`6E%VRP z2;?$6w|Rra4jcP0)O>jzEKA!hJy7)7IcEN1T?rj+uMw=N`YeR zfmF5ulXG42Bu*M)+!Z!Wp7zS4VrMDa(8DO@DDIWR zF}`ix*J&_(Hd>ndRFNCzNs(R!YgZfEd5m5DDY1J~pPRAN9w*X7DPV$2pti`xv5xWH z5j1|um^IUTu(5t^^-KCn?U#C0hx3%Us}u3E6H4iRQ0Wacd~NonYf!}y+)=?nbZ{!` zs3)SuN_P`t>KIz%?MujfRKeSm;Rz%NzO8x}(PvEw#1P+M>|hs$9C!D*l-vqEOm%tOx#JrJK(SMt7u#mhHbDN; zG8e|R$I|c$+CiESPh{z(GG%uJ+AgO7A~_$XAzT>)+;ln~`%?^nP_+e9374WPf7>Lh zt?PXUemf&cBH-7^pQ=2YR!&o_w^_uYS}J5;l%4M+A8w;Q)w{UE*&HyYse{b`)&rO7 zMqpWkH6yRYf61Cu)8qipd4CPW>SZFR~K8I#p+}N7oIg zeic8Gf#0sLcnb=Z#^42L%SY|jIxi+eHDzkz`BS&tFDVWRMr@1T@_-#U6k!d|NWgB* ziAV14=_l}lv|`$@n6@H|Ov!ovyot6GcutK}#%hyAW95x)+D?`0ZF4MUd?RHX2Ng$e z#+(Y!4HWa?ja3O?s=#V&#kdO6`*k9b+EA@{9~#F5uFtA)Q-()2yrt2puct)yQhD$; z{E~4%F6RUo4q_<^q4kB*6rt&=IDR%(zTh-}d<>01Yt8E5d6n~u-Zk6=-8G$=%lT@| zwOWaJFO;1_=_WF3886`E)NEulyOWmY-3dClR?U3b`=x){_qmJB1Nyu7bcvRRuZu0D zXssoG^}D&p3S{F5)VuHd-&}Hck6QT@7mvX-YPy4VLWbh1ujrc3jA=j4daMbKNZUb0 zSVpCLx2e#HAONc&7S>eBxB(kO-flA_-i4vI6QawicEd4Oh0r!EK~uyQBSTz@g_vSQ zu;b@mGwt1WHD}GL;N~wD!Pqte1f&6w;1@D*XUOoU@)=i2HDZBr2HoPLnHuz0WA72? zR077DsLnED)Wc{@>6t<*hBX|M1Jvk6wDW*&I6!e!Sx;YF6;p5-jhUKuxAqZ^ragWL z{xQEh{s(CE=xw(of4nj@{ID(|tfRuuz{w(K_6yR_P1P<92cZAd%y%dWDrqzJpQjCNE)ksoIGQB>W6ku@RIFBF}6^u5WuF znB-Ab7D|?E5`}ZkO!=ftxwP>&hhKjaOYgjMPNMq}lqnyfETSKZ1RX2`z=>+ZvM*20NEUYTuFvz0nJ z&?NyWPuVI@GM!i6x~hXwFo%0dW3l!!preT^ItKYOr6VK#Fnw(RJ3z$0r@h0gbfOO? zsa4vZ!dZo*covWuAG{wvt^A{fD|Mtbhq$RlyIpEI7Rbt9Wuk3{ ztLUf&e#bC^JJM?M?hlZTpxzkoj)aWl+}t8Af6*B7xo)T{w-J z$R2XU=QH)xQd4{8S^SW)jOf|74TRsS?yL#e748HN-Yu@UO@`jiezWUdMLwjF*AVWR z>XBC`sVUpYO!Bu}5Z2)#ld{ zmq~5dPAI5}8it%B&PCnQT8QefzQ~N2<%%RLtO?b(1_fWKh^b)J{7|D+pPVdh@vo5p zqtr8@nWRhhVq(v+COY!Iu1FJg>1W?#%}6iPPIrj}^+L6hxCK&5i{EeMykUm zr`pd((2iMlnkUFmY?^=rp6Wvw)RPQ+Nz47sew{M#Y zL9Z?WUL1`doC`y2hX?Mx>l-|tZk}sxWlf$pHHZd`&vmUo`sL|Htd;pZx&kV7M#2+O z{aP(P`myrJpRmVu4g0z>UK^9)t<%oN%^Z_WTj0crpXnVRykqKZL>~Se6$l>F&wO^{ zye-ObZe&>Y37D06GZ6K?wNMHVk0*|>zY%d)A&n}uuL<`Y+#eUy=2<1vHjBr>6I0pM zX`qdK3oz>M{djb2s=MAmtbW*EqXWpDMu?jDv$$j{KplG)~m2h>H#N9;_R z9ktu%9s^~+2)j$#A!Ob<1thA~T13{S$1S#e&Z%Vx6RF1d!7uV|Z&_3DhIsJ;P3qis z(#y)m-m8$WN{4@wcv$952u^@kq)qBL@qV(7IBEUhF<$4!>smeW5R(>=zU$oSqR%ATER!ttGn!O$dwMzjAA(Lca(wq?N|Wq+!s3YzD?B{HTB8Zp>hjwRS|iL!OYoM zMZ86%(GoDe+R&bMj-JjuB%+YoTu{4uGi>npSnzPPum-Mmm~ZG57;8FB1(>&9tW2qD zshu$ho{YJEU216EsS|E}5*nAj2H4BFp47}Vfu>RT^&5!y$-ukQh-RosI~#fO^t6p~ z$KBC?baW%zyQbiC<=6dI*}H`zXgjTc2R%~qBcJ2IBsC9x6g6~uxXS6F3z4#R_BAl` zb%*o)CaQxvI{B+N)ej6il5+t^0I=~8J3VB8v5tn)EaW$2Ua4O)vIs2BtfE2pEp}`V z5!+Q!e##v!%%dMo43d<%^B&%~&1;VtM~Sf&YPec`@=8vnvWJF6T-X6AkWS_rPJL6( z4E3`lXi6;3$85b7)ZnOF7g(tq$(xJb02&786I68vP<-4!ul3m-vgU`T*qTM*kx2nvTPdxz%}xitd3aE0 znxy0yon7Xk`|S#CB4XVF&%+JBuqDHu2DWQ?lM-|IE&WRKY*K4^dORXZ&ib56bLjXT ze+Bz8@!>SFf+zAOQIV?k|qEZ%Dg;kDW1MklhFu1xY+z{xmVf(IC7+Ql7W*XZvp{XGmt7`hz?g( zw>TOn4>jlD;EF9hVM`_nk@{M8Frl*jX-E3sNzi6{#_ShHHBu$-7yk_QR>~lLfnJX!S znpD0(n+o?VO_(MREDID_fbaj149p4=6C-}f=r+fqhs^bUF#p1{zxJ~Suj0otyd#M2 zu^WeQ4RbGZba_rOb21)&Lf(G#k<7J7AK%$-{~2sLe~56BXPTml_?}kJ zhqlWRbvwy`_ISu0=fE2Uh9YUotvDLcuTqzd*dxcf&B7VBB}q#6o5#)W{JB7tX*;ei z=f&-uR)R@ci#Cek_fdx>$d}^YKlf(CC;lTsie81t-vu1!g=0v05nysIdRkSvXDz1RL zjMxj4nPJ79f`uC3e2DUjnFQ|ra4?C+y1s7UPiM}ez4Yr*y$a|%!XDtZY&4&E_tb7^ zF?aYuMlUPDD}wK?w-;o=T(P2cZJc3ygIs6v>ge}nlCIX2VUS$qpEdR1eY(R#VGA40 zy|`j6amz!Ej6e`pQK-|q0hbN~=^|@_8_yUZTFG%QI_oMs&*Ca;y05hlr0)7$Nrp7* zh_Ph(JM+T2raa#@NJ22)QZ`JxZvKgIX9)DIG?E_aYxukB+eMv)#wW%jhs0h=ER37% z_DhW%!*SWKK{WGp=7Y47*I(4M6uuXRP*frx^8rBtLJdJ))>g)}YQ>jzjEz&-XcM>= zeb#_(g>iM{pb!s*op2Ai83lmu;{i+VP9r~o{O1X@ufa1XKsQPLKed0Al zlR3Y{BqNNvCsdKwJ{Oi7N=J0rz$M~KDtxyvr`4O(H=_+>&h6I6rIe2#@BN<-sR;6d zkMXSWL|%H(C;xM0+nk(kCUY~|KwEUEYW)Al1(Psq{9jmtrNmJ#)c*i&Y%f>>Oui3Z zs|0nVTHCQgLSmYvnTbC?E&CEl>SVQmqSoJ8n`A2Lr=~>L#3hY0U{DM-)4G}D=9w^w z$zh6(8B@2uF>O|+Y$Quy=;*<;mnu_UlX)|8?Iv-~p@3yQEzyV;$mI09n*@o5gl0?i zrWpUb!}_fhI&aD2G-Ffu8>eaAKoy=s&J|ygP$i{z*-Jlab*T?RuFkSl-<_f~0J6Y= zN5u{0Oj+cLw9X>s`xD`7x*G-?)*I}`6VgT-PYgl+uV55urz*IJ3*(6@+%fPVG~-7D zQ%i#$Z+4$tTL@ifE!}9dB~p9zvBI#uX^T9HMhrr*-sY<+=Smw6rHU4+tec+Oh2|*6 z^<;{IU|MQ-f2P^i9AORwhX%y`xdDLOa&SK+>i2=McquhUp1y{{CLmm<(IiT^GkaL9 zyOx|3b*H_1uJuj3yiO|vZ87Em5$IR!q2?}=-C{G`g9vk>YOLB{c;gF8x`5U1POJ6Y z8;kw$O3$tG@SXB#^xr+`H1Hz^wr0W*M4(QT@NA1@RKUxBnK`12q@Gi+wmgbHe(kCV zzx9t^TP_+A#>gE5x$xgq3J9_`nAN#K-{+|whVjyzzkgZYl5bIe1pf;lzvF#g-VY#j z1JdOM4AXF8>3p}7;9$nrR0XVUicbMsk9^*-luPu{3R#{paq3P%40BrjbHrQ=2Zk^L z7H{6BN9o-Vp1h_$qB*^R7i=zhC<3iW8oG4*5f1(E576ya5o2sqh`a@AzS?r7OyG-U zC@2XMPO{hmBR1YQ9JmAnd+KM-+jsU9B4aK>Vb z53JuIm+z-2;)!0?X1Eo1!1Z*Of1WIFa^^0RP#MnGUsD}?Xas;$p09%%y~%k8-duxE z7lIp}uqei~NOw-sj6FiPiXQceTY<4;v_O!0io z*khlCyX}U;1NL7V)3(5DF~wJCjBeE`q z{P4m~s7n*Wti_KvjoQ)Und23WX|u&c!#4u)kY?Tts(P&;{dF^Xst4Wui@a;Wd*O$Y zKPUBv4S9R>Y7AE^dF1CdHoS-*VgaiU(0ip}X^XP{)De-&>h`UqsR=!0j^Ld!_WaKI zW-~VNz6hTVD6a=d^84~(S-SiWw>BE-AN2zRhJ4ZB)n^8hm>$6L@C zn15AfaA{Y6XW$AmJQ|oZXV;Az4u%9q2J8#|C@GsRM~*NUT}6HNA#o9>Q-HS4@Q10V zVo&*;@6uO!UHC-1M)|IlGoJESHGZLOp3hZrMa-sZAd_zJt)gbp2Lu!PP*X!1`Ajpz@fBLsn(Q7j=%J5jmYg1Ad$XXWeUnnDBPSs$|Uj277vNf8%?6o24 z1^tBzN(JB_)YX#Is^^rFZ=C!D{=j4z_kfRIX*n-!?T|SNLYf7`3fcs};65Rz4@w1= z+jBZ^4qxcvrV=c#su<2c@Cc)k{dsHYaE!-$YXWNbynJ+luwxzFvQn#MP8?vfSYIbHA^+VxH8+VC|B>KVFV&d;;I-5T#mGuu6MMe#VN zCI}g3=u@>~HL$(l$9#6DzzgB$a(B6W%{rjUR*7|`<_N2TM4RnlY2)~Sy}L8dT=5o{ zY2cS;mkBK>uWZqverUg((7v?Gy`|u#LlZVpIexN(sv?O@#x<-~UYbz8GOH`i8luA| zd7}M+ZQGMwJ7}!42r-|*2~Qf8=-@Zz`1r~ry?+Mdn`}g@*xg4=X4I*QrytDsWTn?# z!$=%_$93^)G%6uFRxVMrTyl@=+fhS;x>ql>nra?jbegF@>^Y)SNs<5YBedADtcCrv|cQg-M z5Gvx7@(%Yz>?7o@~>{SA{;2o^Zt90O53njGsN>)uf`z)m4a`aCfvl zg=(W`WrOMu1aohw4dci zq`Xu8Rd*z{M&qnV9n!|6#+sueTwI}M zq|#xpPHvdh;jg_v{sImLQ0iHBUNSU@44u!o-k_urO*xl8+^K_$C^nKpQq+O4<^VUT zX8F?2hRX%L6cu)U{(utb81+QB?w=YhvmAFqjZ!A_zs679%5@|N0(dzteqJg(D;+ik z%aAmm%~(RIva-Xf0qr&J?HP-JB|(sac^*ej&Sc@!u%Xw>75`?icrpCn^Gnm7UAH;^ zjO~Mgs-Oq>qYS8W0Y>(L!bJqCiLl?FpV_85(aM%%6w*nBe232awFkBPIgQh%@Vcu? zNN;_QjtAWZ0ZdjldTvSO(=MZ#Ut$LdZP_Y{k zBAMCFH#eLGIeSvrH?(;y(kr8tm=`L~sh-SRAc1w|aXRyrQ!X#x&Jhm`Xz|Dfs})=w zkSZ1bcFSZC9F*W44J#WyD8wEjGXRtb-njnKeF{$F#~zPnlRGLh*r;qsH2I`e5WS}o zS*d_^O0ir713&W%S@=q5dan}EA+*1~E*DcKF^jL~W>#d> zMnAoVw>fqeT3^Gud~ddKhZx>==42hNvOayv3kfNIfI;e(lvq8kUW;U#3KlUrRmqTgUn%oK!R8B#$ zh4ySCEP~e%PbWERFxW)S$y#NdZAghmS-yJZyqktCtbl%v_?R7NxfJe~{{w3DBUxIj zHGPJ9ijI#KvX%#tc zKaR+bI9xfZxHr zWGT+d%-ej-`YvW^s6%Q#+bSvas2a+328+^Rj-JmTGZ58W6;fm;~YwI zO##$_sOM_`_jQ$qSJFo3SwC`oT9~8v=vuKuO{jyP5!)_5FV5Z7fc;H`T{BOD#y#r~ z0CdkVt%Qm75cxLA4Q#ibp3B4kk=uE(c|q0s|HFpxVvF_ydME-&ByX5$<D0yEKZm1B|amXWYf2)pLAWpw}pjjnqRmmXe-2?@Vcu8t}^rgk=p_m3LNzeq+6KKuBiOVVfrFvYpW$0W|kjckW9 zSdI$euw4}PC3c*JWuNjT;1e(I#Hje z^Y9;FG{N(-o;@#X{c|4Sa~a#;WEOvsl!X05F)Gg9JM{Z+UXvHP+5atJvFzW37IYc^ zDKGsGUtKKxHzn!IlKw?p@(;}b z0UbuKpv**7{LbF1#r|?%LToG<35_=a#jtwZ^up#TBKrgH+^=Myc257pL+IqLE9Fd% zY7x}|+h&X&?y0c!PJW;rJ}WH$|*bDoPN z*u~$a5w}uE$Gin_pxP$?Fx6}yd;N2lA|)-&l%36RG)v}Tlj0kbt>-{V)+dLR3(@+J!}4yWZ-%KO_~ z^&K;boLnj`z!jK{ri=7eO?EcdI!^QFSgT_QBl6v*7NRLC>5=nhnf2kKt#Hcbm|G>b z@Q=+j`OGN?|1E=w#}*P{?+_UtyAIPChQ}MqI0)e@S;;Rt(Q7}VP?!bbP>Mer7JXV6 zd%rNM^rI={snoZx0O0iHj(8B|fCo2$7FEQ&RgI~7tZcKf_Z7YqmDPigN-sJ|G&!;+ ziRn)_TDx{sr268pig3XDMsL*C^bw}ZkC$xJR#zxj8*se}<*p zt0t*?Vsbw6N^cW!pqR|?1+SW8b+W1|#+6zXzf0uIbr*uNUTcoRI}6Us+Bo}x6FSV) z@#tOStFH6uCB58_K0X=HN=mCkwG}}c>TY0Gewy>w)Az8n-QUQQJLZw1zS$ruiT*h~ zkch#k5>Ny4?^uiBhKe-@#c|L$RMp_3jG68J>HjlM?tq+fG+{`rSv{A#^Bn5g42E)#`PMSEXG6tmZyPR1}u$HhK}?PT#s26A>~w3g+t-E z`Oy8&*;B8&Vcb3o3y+o3a6&8(dVc?&-F(N@D|=Y@%Y1TD6J`^;Ulrk4OP*or;lQt$ z^+v(@KpXZy4`M}ReYVD-s}0mc)v;Ykk?b%lCHe!H1YgNeI_%C<@ROSFsDJRh5mU)MnM=e z*57Qam~8Qp(nNX>4zE}-pfHo-ZHMej)`Osmh1*viu9G96@l@NEwqFGuxOZWnolp?W zN9LuAv_>AZ8<2@jr)h$w-3@E$&5y|I>DC!NP`*M6F$e-Ms6|xM1DmTqxJMmKUSA#x zqSk~%&}rMKj)Z;1WIGn!d|jN<$D0<{9Us1J*5-XdrO##Ax6C#>GP|L9@19aHt1+C~ zT>SQOciD!@rBq*_+)P>JjASD#*Oc1XWNlbdmAJdkOfka#!^{63->zFCzJL3Fc2uXi znvCNFi!aK$rDZ<2HPuKX?M?|bG|{ggnC=h2c;?WPiYbbBM{&+6t!H%~I^lHLsxzsH; z2Q7{C5LCgFTpcr~8xD8SJURt8S}b)ZQSY4I5G}688F4oq{?0xhyWpMFK{g`}%Gu&j zXja!tf5Ue}Ypxhc`~KGP+M#5TS}t+Oh z&la2a-L+qW;T9d;V#kq7!7ZLlZcM$PmUj7Y@2Lwv#b@TFW9k!Wm{K+G!K)Sn8j{#M zz9TKBrn-|$Rj+owN91mELup2B?q;jsKte&h(WH5$%VVeqkNlb{W?(gSp<~8?W_p8W z2G*Q)%U5CotrH%*MdOmLrioI55?^sIPp0E)7V%$273>=C*Ys4y#+e%U3Exkj3e*hZ zcJG~wMbq)0 z6(dP1MwFd()U=0n@HVcaPh>x|rB>vGo4~|7NPWaTtNOiG_zH%e>;|!PWlWA{z{6ll zU}?J$i|ZQwRJY~lpz7+}cFabZl>7ELmeHpuBYizO&Caxx|QKUuA{7<#4_8h>mI>>n(kj>kr||@xrj_(QQGA@BPje zt0||o)iXX)_A3s4T-3fnbX03;2_ju$U?!+1+ z7=Td>l4O2(7Z0G+hw&{5FY9b}x)RG{k0QLR$-kf;aCslh`mvF%uztL5mcXN zd5C3jM=^UF!cFMa)P3g78(rG(iPw|D&exfwc;;oJIeGOxvy_V1Q}qMpN$Q5{EFErL zmJ%Ij9nGMtE+_LCK_29tDnG*29Ne6&vqHFrlZai7_a!8 z3Z^jPdGX^U?lJo)1^eB4!G9j-T>i|zxxmuLL6jIL0S+NeutQwFK;*5?LI@vfX*5q) z#}vrBq#8N_uq}0qO}V9F1gX{*0@8Dx#NuDB(Y5 z4n+ET>&CJ{sgbR!8*tI;wu*Fm$09OyLBbwnZSyTKXFkE{kxz2(+Tzn0XY~Ps6BGE# zZfc2BQ};AX^D)nkJb}?7hvpnwR2G9asHDYy|KJv5H8XSJNHb`7_zgN007M0TQuZpP z4o2azryVY~FbeYQN}27^`Pv^7Ht@4bRQ|2T4x%S3We-!edvu94&Y^}US#{;cw(4P# z0cSq%Zd-p4B6GZ)Pc7a+U-ef5aZ+R2Z0XSOE>3J|9UNsorNnZ7M4lnlNtZUiXRlsH zv<810Y=H2POkWw(X23)-V{fS^mVY+*|EuXhThNSsIyC=wSH+MeHr5~n0xaL|r(bS? z!p(=;AGDVb?x>2rK`uQ#r`dW9;(R$IxVuK8Aek&*?qB9^2`qLnilVMz0^xz42XC{q z`^Kn8Ar*1xByz1lj=8R%-EmXs7HP^O|2J>X>0hBV+^sdEseiR2N@i&D-V4fKe;${a z)k^=EHC!dh^fgU9SMrZjyFUpkzoHZE9sW+sUdbJgXSUULy^1s=f|$R)0l`Ux#V14i zy4XWtfNnJ9pP8dhk4_jW#qig&+Zm9ixN5azvlbsJ{GtA zH2gKFr4Z$N6(|-<%T73~)Ib<&vR_t93c?x$w|3F3=Tm1fQ*>H+Hdkvkb9|{qy0FZ2 zybgyF?5;TOSstPpn?cM)9JbZh&lnd;(k-o>WmFptO<*5ri}FcF-3}VAmeTDb&C()fQZLCLYE^2 zoalQGI8J8rfvNk8k$W$HJV{-hhU-T|qjejelJX|P*2BV&5W^O(3$pMVMOfD4^5qD| z0dfd`xHz7U=y^P&A&S9>9=%>)qDjXYvSPMdlilKloGReatxF&9{zp`B%{JK5u(}}V z(>P`YWqyZjSotU!v;tT?BH*rE$Xk@pN3Jxaj1YB7Vvu6mtr^1$R<8-=d`AWnHLJ|* z(Mz(tn5eBa{WSA`7$q#p>$g0?f+>!+s99@rkE3beR_lBB3TyKt?xy!(6R-tsTr)+6 zP6%~l;HMfYC#$juV6n0}Adont!zpY!S0{f0vjm!B#`OIwnkY`@tW@yc*-gx9=d(sB?&t~(G*)Av>wH5YX7F^9z7j(C9 zTbMyFAZKOf)fT`7llmF;8T_Ccl_bj-P7P&1@Nna@0#@c3mldEVYFG_$<8IA92iVvl z_bgIENC6?--70ya&g4uEM&~JjsRs?6+6oa{JaIG&eXVtRim9(JY3BgIj@rA)m;*16 zs^ppSjsoi#$2jzq1H<;THWdKK2tNCZmzmAMhw)$Lw8j6iRk#(nZ3`ADp?z1%=Z~Eh zmyK*ji%;#WPWx7``mI0$AckeTZ+~udOX?Y~y}ggGAB=z?DIvkbeCk%Aqy2Q*+KBzi z55PGq+bt0M8%mt%;eui( zcE>l3*Wj?Ma~q-8@yyfFMy{@ItZp@(<(bX;`={v3UFj$(I_Vw@sm3iuk;aDHW0{ec z$$$l~+C56#RzpIlqF$r+a&0-~rfFb&nOd$X8miW4pHENYL)=j#&q#!RR|p_X4Kj8N z^k#PY>CTBVa6_A-G$Z=`|8InQ_;`02V2XX|` zG`W(sED7tpZ$h@vfx{rfI6~U~PRWZ&H)sEpM%jty^h_*-**(>83?D)IPX{jfUOo~(Icb2Eu`ucZ`i)#*wlmD|R5hpk@R zD!k5U{&!cQRxA6u{Cwfw#n9TQi-(;@n+&8SsvF1RJjv06*o6_bF6H`xn1IN$>$G@I zLYiw>+vL_3gDhuQeMOM+G;eM_-oBF6a#|Y`#2rinAzYTI>yoKEoF`=tQFwhcoW-#f zpKBU2QG@y19B;_tq%N>T$U0}4BHDF4fX&x$PKFtK=rU?m_e?o(BskXrMWtvs2ttE-_p z+i-^pnaW$(KZaL0lh?2t%`O}RTffHp9vABjJZ?oIy$Q~M0eqBaNRG`Xv82Je=-Ax4 z9r&$KaifM^d(|l&q7ha{W$P|FA6Iwqft}pSIwS?XmTon-)AHAIJ~z3Q#5^C`bAHdW z=^UD^;;NI_vnlJd6?@9FL1pl>`Mc+AWy)tuvuC3e@#k{9PRrN-&>N5Bq*B!X$ASA_ zFxMmab@}v1t{w7(28r<>;E;mmIq7_LIXRpb5Q9l9c5&#)Bck?gy3enqK?K8=RN*)Y z!99@=fw3a7pEv8!gly5n??19g?w%drE%=_CT&9Pf_iFSXuYEDQ7`w?u6k}EToGNGjM6=mR&3DtUt1n} zbFNN0G$vPRY7xzHrbhL#kTU@-`iIN?xJrwS(i9T0gfmIntT_`nx+qY@arkn~MCDXI`(5fvU&$?wQ|iVP_;6FQM3mS+2q-(|*2TaEK5 zJMZeDFCy+E@9pOD2-a&}#`-e$7g7wmh5vNCUxLcg|L>^dU(v=FVI!l6g};KkFgosv zDNg?$EgSF+Shjz|UDCGO72F<^>ZbG=m$AeAIQRKO0X)VOj@x$SIojP zbEe(?4^Gh$pZ6d~80}d|8L#;?LxI$Q&vHQOF$HAtejyXQ-@6SUYmBrMb!+`JSiRa) zZJC(?HFkHUb}Dbo%IS4i_0_8|?`3QzcJ$hx^)YqgnUUNDSFQpPzNJA=}evzc+bU+FA3+DoEKj-FHQ}g z6G+dA+!r_P&u;XezhE=6qqBF-%dAp3&GSj85#%D|@(VTjBC^bP(DkyxB>HWKwC1oU zVyotLPOKW~B4~(}MG&@5UDx~Iju%-X5Z#hboLtd)>in)RvqeGPXDz>R9V>prms@lrfE_)ox$LGO>$SuKvN^Tz-0L z(zww=$a{X^VTAM!+$9VCG&PR*x|21#s_s#|iS(2;_g8%MLSCAhvey}$#>pIR$5H8A zEOTWrMM-modvoKt zlFp2pR)2S~&IfX*alUFGN_q-=Wo28fX)x&CZ#8@RiqHK4rKf=MaSe3>V*HvA>jfnC z3U=&R%~Bhf||&$S}FZXr=rjJIdtm zfb}4h_k}$_j9HlV{2nz2yCrnkc7K%ULY{bpK!Legwf#+t_3^CX0(vtM(i0h5UJ5n$orp@G3lEONAZQ?`^eqeBq{frjvDpyLAqPD$(+z|;H~rw&UZ+Nl zGbxdXZs%^mJ~~F}F+V}m>h;|i`T1Ch$u(k07u6zU8@XH}q^2zxGN={Dr<*N#E2@6k z`7{|*P=4RQQ4y;lN+%-{F3yZy&MAJHKlEp3{9OYnDfkB+1TqV`>9 zQO0Ly^9Co`Jma8IaInHyy&u()8O!?(ZO9XM#Fs64oeC zdF*ZAy5`9}QQRGKsovGtJe!==#~!^9F(Zc(j2Z}KqcOs3|f%e_pL;KVSmW>WFf;sk~$&dScmnjgv`0^T;ieZ!> zg)b;6s*U0^D{_k~-iM&U3#m27F-EH@s1J{_Gt5*)J15R!!R|b+6&HhbnR9$qQ}wOs4vCEAap>xF z$=zib4(n89IgdpY>-PiI?lE}{`_6}~4a2!_4U@Z39lMie!%FFpn z^=I7B2et0ppN~Sr=_hIEqMh7$iW%_+CZe}HCah=5ySsmaE%>ISO}i&oCGJMPW8+8u z#;L5cQwvwzS+!Z8VEAQZacU~QSnT*PhOl%ny+0o7V0+x^9vUQgY0ge1=?TAdF|%*= zBc5a3b&9f7d*I1xc5wNsd=)LY+=J+=OhcTNHhwlM*f4jqr4clclJqEID%3r+qU$#K zm2l9@i=*txtB)fQ#EJ}e;5wOxw6PGh9&$Pe@JYOWFm91tZsfSE+-z0K6qWd;S>%?z zbi?e*8EBcb;aPDoa__8r+YkkbDwHeK)Y6);d2Fs&hSM&nrL6v?XahEbo(fmz!tezJ z0rr}aPYW!x0K1btv5smy>igRsh+zPRld~6KD9rP7sp09rr}>a@r z{8LyPAC|aWi?W5BkOAs=Rx?t0Cydtu^Tihzfcjlg26S!?yPD*F*fqs1#p3819JV6ax1`je+TAs7a zv307u3}1h@-m#P_nz?hC15#nM55k_XU4V{Qt2Zr=sgaeB0V7> zM$_|32J|uV4B)P*(ID9*)_f9MUX{uOzK11ChV@)KvGDb|(8>9aVeAsK+$PS*0z}8F z=0xa&_p~#Gs;h?HhGjs%GcfjmZ-$t7bet(?&@MQE3tWlClAEXy|GJPpneImp(rTF6 zu&Snk1N3;@d@lIhs?Q6dAe@}_@(Ub|HI3_rLGxZ*n2iQWF3N9Xyn#1vTqVYIR7xqL zcbsDvf}dwUNrsahGJWVbK$}G~WxvV*(g!mbgUS=h*k5~FTM{IV*Y~PQoftiL#RvyT zLO_PgoS)M(Ha>GXpHLHn6=f8~i=8WhO&m5rj8yq<+Mpb3V$vYVgl@mQ>T23Ruh4L% z+z>B}s)e?wskp31pXRwT`Z#;hZF+RQik8}ms``HUS3t$FYQyuV`A=SKjqjGc@vf8Y z#FC9K(dNKxbi|7)MDf9d6?$Lj|nYpk$;VGF!xGvc`L?bj-#AC~@L%=i(f{6ym* z^Y(umEhklHd(OJMcO#~4GY!zlI(%#Rm(ErWT_yR>z6^g$K)bhUB^nH>WvRr8Z5Led zqKH|DyG68aFy}i9k{3BG;V4k3fKv0%;VSY)84`nrDRep(+X0bu{9mqoG8|Y)yz0rF zL=i+I;p=yVzJ`2CUdDW*StYW-r&2!Oza+H;p(l-IGrG>jqHC@hQ3gfZDXa%K?(sPJ zRk33xVd`1xelM;#x4A3+UUYg*Ek948+ebZ@xfaS7XZfF*8v_Ydoj8tu@#e?0(`s~h?mgq$F zEnIIZ>We|uNLQ+u!;r<8tLW4){Xyeb(13NsQ^ct*TaJc<+D)DQo}M5Nww^aSJ|o6K zd8fs`p4g_KFcS&&u~hkICCWP`Dp4hxphW#|Ta2LXS+WPX)N*Gk%%hj!&Uw&T1cjZXYd&oqhW0 zH_JEAix@h*kXI77$Ane>(~A3|pDBE=b>j^8U3uE5x_&{uBLBkdToRnZVFrcUe* zq~EDJF(S+?k~9T!q@*+-(3AmEwk*;#aOr56Oyv>F06ev!u~0pf+37oh%EB$Zv}*Oi z0}9O06P(tp)g*9#)3Cfraa}@GF&|51FJ6W|u|k!sPz%2hIO_3D)!DX2Yv9m0wFZ*3 z3s(sT%?+}jx#Gd>Z}=#D@>OQaVs}}Z(24#_)mm-GNr{D0bur}zu2Ns7=XXd}D)bU;9}nHE zbmk0Ivt*JijILN!b&}lp>;ZF z7Btrb%(o=OW29s1fLGH!3DcamSf;elXDnUlb8f2k^H3yvuXDqmgQE}qW6z_rBqd~d zS{AtdMTw!^;-an7ZAwFxGN)(b&ghXl6Qk;a>8iJs*^BeKIsUk2n+d>(z_xu+iib{BGquy9Of2G62`$` z)P$+?@r2TGusPR*7*T?&QzwscR|$Xi_*J^?{f$RJ&p}cgRrs9k|PqgZKBOdeEh0X?PqbPFSC=G1keTmy7iTAycPLk z;n)Gg%Z5K)Kr5B?e?n7E_;3Fgni7}7pTiA+f!!@sr~*W*Z+BUVHUEQC!^oe^UD&oR zPIxql{gtFgq1VFs>B~jLCsK{VRbjnpnTp5UQ(-oVLZ}#i(9M}w)|}O_b#h=X>%+(1 zOY!8~tXvY2|A(!w4r^oE-fl~Q7AO>o6mN?bE$*RMaVNpu-QC&(#ogUCL4rFi5ZocS zySwWL=bU@)eSXjP$C}Ar+h($oN#>n*zpIe{^!6(U?u1O+4lK84`E((OqV{uranAhm zH-D=DML@d0uT6K_9Fo8^tB#BC760V=bu~5Iim5Tj&hgnsFg)cG9>NSm`AzfR8Matx z&0X1pn{zj&3hvK&UA^-;;w!@8Z&*E1^gRku`PR@xmZ*!{Z(Cnn!nssPMlT#FU(Q> z71q@6AHp&A$teR4dBIn1ctA5M3E{Aq{hH<4M1vI}oFF2Tq9uxXVDtP1cmL{!92PMm4`V7L=_0hlcf~^l*(sQuc^GvyO zsBe)*AMM;+S}JguRY$`0KvJWQA!-2DBCAMPyKNA}^B@J_obR6EmkQ^lg-x=bRQ5Ea zmBboXaVpz>Xrr-;^>ExXBJ4}rbAcP}xa~a*Sqw_#Mrr2`M!v+7pewe(?UB2sBV&SL zA!=$K<w&rQEO^p#wl(Ms(8)xiIT};LO6)*08g76>F+t{Z}=p%3J+%pMR&!4iO zM_T=z1^o%^B=~P|izWUEaOU3urXBrnkiY%IWPI~vkK_GE_Lbt%U;k*_PxX)Gsz-m- zQ;N2c|7N&mGa6`J4~GlEyGZK28lVXK!IqP+A< z7%uUY&x`20#U(_nXcWF;qaX*}@_rBhoqhEl@Lk!f;xlV^o~4>(1vHUs%77!ed&1ht z*bbMKUSCjnuu7z@1Wx0q!9PluRp)A{Sh{1_yf8E;!FN5Bjg68AEMDd^V^1b*$OBd+ zkB8|3gK3XfMUNbez2r#-Vx%H!&QfZiE){n39n1ZFu7trHWE+-r^F3VF`bT*ijiK$y z<7;~`$jPs9;hB*TX|o6sQj<^=!Qe_kwGhCpCTvMhhPc?LE$_`V#XEMhTC3$oA*5-V z_1MFpI_;!153kwePQ?djzs_-(I&F?*g)CA(NDBi0UtlQQ2q&S06v;lLHR}iJW z&;n0wVXYfZnikbTQ@YFU^yot#-n115ri$7`~c6nx}7<6-l@dP*9rrETRU-Z{TQ7pKyB#t&ptya!* zD4t5II%`OBX!b(+@YR%25NC~3SS8(K=ybLQ>pO_fXHFQ-@xwHbl1X><0goASZY`EMYY;F9FZ626Y|ct6{QjBM9;QpR!O+R)=kCnHPJFgBB1D- zDFd57xnCTy-h1Jc3Mg$CT$3n?+G9|{kulIk`8Chv>r_tAnZF0qz_Ojk1mieG;!Ku3 zgl6Mu?>i%~xXkcrL?svrojBrTHUwGG}u(5UEVzeX;jR)3EO9NgBKkIJae z(C2O~4c?%oSDGa`Khsq!2=hgr@^&W|^;Ror*2zKO6GDon&+*&FwuS$+ldX=xr7_y# zJvSY%l=IA{9p?Ymw;+K#a=Q4YL=B2NA_|*IR9<$~@p4m*nOG!o)Vq>E#ZjgoIIvXu zG9{>1@E*h4+Lk_sUJ4Z+{;EjFab3!r;&`I%mZYfR?TZIql(;lX0XTSoIqy`?)_oFL z(XF5r&J{#Yuk>ddBBOx_uHY`X-6kRhZe^k<8v~bVRFL7_Xtr>!0PEx0sEj8c?|aC= zHsp_v<2{Fx_=Svt5)JjL^Xxuy=Lp*X{h=L=OMN>We?T5J+oQYd1`Wd+rDdb=JUiy> z58p$6u(bN>YkrH&GhdFd-^8LbB%cyi&fo4{V$OEFXTd#vCYswa9yVnDTOqa@mWl`+ zoM`WQeN+Q#=ygKYSkT$U+7k?LCIup@py|SPOZ;p3+9|J<%N!ZhN~}`%30B@G^nO3-6#BB*0bDR#gZ@C-6e@sq4SizX4J*ges}rI{1Ep+t#j~o$PyaT7hlQA z&IzX3i|UCm7zsG}vcWGhVflun!vKY>_V?iH9Gj4X>twIKtdXWu1Z^st_mXh(vGmcfhb`!sC zNAoKZDNML5TofVqL-0s`2_NTILY?l9=ls^0&1oS^gDo@#l@CnY+pkJf2bwd%of3g$ zwXM$e-*Q>~X)Sbj%WP&Ct1pOVW;(5VrX7y@^0nuY@m|b4&*Bz+K>qD66cmbom8X?T zvg9@=kID7x{y24zyh-ML4**WH1J4Q)D8}u-tpkmKE%_lJ4rb{}iH@`SP)p+0<;Qx* zl+0b_;&QDwMeoPV%2?I$#N60OTFusMO^blcB@^^GZ+fP=*eQ8cX%zsniATL?CHiYN zmNyw%>=<>c*7Zlnug_A8JTn^qZZ1n41Ko_xR?E>!KBx#0cU!Y)bL;QSqi@>J%0JNC zYL*(=arjk!00%>qL(L*3;IEQQW0G@}_h=zXgt6@7B?cO$*3e=l*y3BhUuI6GkMpm~ zbwIrw<>?h_7^1#qkAjsaL{(~Fo2=R`9R?oQp6z!p_b8kH1ghk_M}L#w&e(O0Rd^li zjdr9EgNgAYP0R$>z4m%mvCbjLZ~zLLb8RSa+Gm8E@%lS~-Z9}T-w>|4e%VQuYqF9a zfp-bu2Tya+v`hz2DifAUkXPAz>sD=WX;@b^@C+eGa1K86r;%|uW06wAjZ(MLiz+eU zw=WzTs?hMs!GH_tASa2gDSKXd0?Lhca@o`Gt2(P|X;^Uw?;A>%Z!M$)3-#JJLa$jk zMS)IuAHs{K=e{#DI5H=T;6$q`^~QH!r&i$jutY( z<{c>6Ux72NpNv}gLVhP*dq2Co^ILX9Uzci^==QS5JH0hApK@&vsV|}ehxW`EG$d&j z4?0m11~SN60;gokK|QtAz31XiRe%}GFUESo8sG|Ip(7=#K`qO2&%fHDiuvSx;rSNacJ zB{b^uJC0M=Y5Yvpk>NhF5eskzy)>#|b`W3az#I8ebDhCL_QcqhGAD@>C)sR8qn-Jq z^mKZD`YC#KSHw>hY{rbeANVL`!A zb&l8ypWvKtCrnwabibgqgG3i@{a7Ovf>(aA_U>(hTbE{E?0>&y?egE&!cbiZ?aJt{ zZUbWhWY?U*?xi0+Dh-vf>&$FU5f|hiEYdp2qW)BVnQf-jJn+M9vy8sQ2>T^yEz0@& zM#GTy@|;UyV@-7{9t>%RyVwPgqNvc zuj3rqbQl+Kd4uZ)%Df96_Dp7t`o2~)-4h=KyZe6E+k?z*RUoRhxF%MNLgRNQk`V&ETnbAn76VJ>~mUv7afr=dSp=5hd2u)bG_m9Hxy7`V4U;vLTak`BMvCGiISyN zxgYsBwcWO9<2TQ2V4&Kn7`Q!xVv(|vB9An=FnNpeY3ua~mHrpKZZ%^@!U1 zzW9hR6~Uc%-HYVupmqvvoZ{Zz2Ql;=RETQ(F>%w1%@~$oxa-(P`KfhpOE&jAeQkTk z=ehQD63m|_I2eV<`E>6MPCwz^^f5knw$fxxkTS-GPOek=MSG}0gQED$25ia@%oFvy z#VhA}CG#@;in#GLI8}N z|8vUfC`!D(IBi)RR~(J3%3XTIU7;iFYuMUft4Cpp8^-ki(pS@_R$0*yncuX{VNg(~CtFf8Lv~RXjqyngk8MfRo+(P!KeFb1jab(lGQ5%$ z4qlQ}C04GDy-{SeA zk5x{)6n}eyU)SPqTx&t43RJ`pD;ZD5Xgi<(_#D@$Hr(lp`YRm-U7XdKX!zdmuoUoV z{Fqb--uB>0tAH(J%7OD{q&JBIUA8vH0yuC$N0aU_nG%*({ z*QY9C@TV!}^%F<_bEp}e%kUrojgl81u4w~+4_ATB6}HS5XG+K$_rxAY@OnPhWAa}b z2pgAKo7|;zE~t1+Bz%!!Q;)ppi#MQf%+Hf4uyJrwIa$x*aD+w@!3;6dxI5cBCOV^+Gat7JX7-V0 zPV!NnjJq6P5{-ZBk0SaaEd}E0ihI0K0jeol!k|4-#-CD-oa!#0&W&2P*Akd9sOBRkflj8mI7t)z!J2B~Ap)c`5o}<0B6d}<^uoSi=F5e#APLtJ?z?)y z=qiQWM$5CzL{VpQ7b29gg^HGg63{t=`ocY%MLK9oWi!iQPXan}@g;`+Y~W2$gjwu7 z80+wr=V@{{;0`4(%jpT{XPP7jFyYbcRCZSC?9qujDbFGiPs?Lq^T8Q#r~cFgX$kfhMqU<)cTKG?jBXug)|W+u+gQ{sHedlZ}{qTk!l8E_ZBXX5k(@y0VuN$u{zB0ZN= zdNPe4_(AhF{o1 zvg>whyIk|t@I*VVu{x^=Mw?qU%_y%Eb5!?DRrfBcJ$rD4Kl+sOId+koq?z*vPh}*V zSJH&ZNH=NzD2c<(UzwuR&wrr)yLO|(vtde_ z@YV7&K-1}%ze*t%N`cwlWXG?xkfwsT-M3c=)Of*iMR{fte#cI(b<>hT??!11u>4*; zKv|DF!*sk!O6xwfYawAaVbWW_6%kO|ZNZJ&1PXcBDb^@!#V0O+CzLWxo6*{`!Wu1> zdrcyGp;SV1vqbe_aYNile9W>QV+vU~BMF*s&U2bCA~uA^ynB(-9pTN?g2! z;GO=P)THw{`IdXzov-=#JFiLWZRJV}v+V3yEhlGi2YaJB(h&CB>1_uw=IGf+I2n)b zuW3qVk9qmCtlV)qp4Z@Q)gZV?IFDG1E`g%1&axbJJl%iJ=-<4tQd!U{UqGMe$0}a) zxL(;fHJgWX$AQ}CEVk?Q%~S1^&3S0R2s5BM#ZZk@XOR9b57~?%JG|LZ&1j`%5PWb@ z;L7!jyL8gfmHd_~R{g|C5Fj38B1a@n5Uso#;lM0j z#vaZrQ6NAssA!!$JSH2K%6_)8KbWqK6iU{>Ke%>|X+>AVFsouky4Ydoj=>Q(!&3{L zO|sFiOZ^?X=Jfi}f%oVzdUR+$I@tXPdy5e`;*y{24M&_hp%onm>Z84TG=#^Y6dxNq zJR0kxQ9gF^{6*MniS{_ktH;WZkMpQMBx74$%ql$AV?CN)?OgpG($lZ=0BbnE&i`Wb zZ(jTtoA1EN9uoXfpY^>OMS=bfN~qwCB|YX>y3zZ(a+oqy+?`c^#-56+?@L8uc*EDv zY=h1W$6e6O;_j(f^??TCDBqx{JDL(uGx4n?o-v_#ZB?n-G|j>AT7$-{U|0Slna zE|5r7)0jEV4Q=gH60#>mnqd>E4)(bJ^gk%L<3H&16B7QkU>|qnzcLGIe@QJAujUz9 zxf323ecn6sIzDA~ZMNPn$=zT}&(r0s-p5sJT8dF+uxOCFI9WYyV&T&tOtru^jk5=X z4DJT=6&cIr=fRB;T8yMd&<4B5JKO&128)Wb#(i$q86Sm2?CfjyxUYhN6y3_1A?<@K zSVB^NWrEWz44|~wHjI|O+q;H8WrCw2JoohKc~WQii;#@@KgtYGPg>3&Pl0dbpQkjE z99?_A{+517etg~k1l&IX?L%+uDjrWQ@v;5(qnSM#+T$49|6u-4gs30VW-!u4x;+3{re_?a^8(%${R&e6|8U`9+@mphth~lPm72qtasu z|EXivV@Xoht0H)Lh!g0BqMta3cm?6F(E zQhoBB(C`I)X1R$WXF^HHo$mGNU1u>}{+(xNb!>YPa74dJb_gVFTh^dIxttkxo(P%m zQgv8cGZ%0%N6mfaiO1vZ@ymd?=>Xyrq&XY>a?Zy@ZI0db3CSlrc$hgFc!<^MEyYh> zCrM11;C%)e-?ekNZw_d5Vx?VxY_Kv+9_O200!Ri|So3c`eJ(r<-XOrNc!7TnD=3LG z4&XmX{IQXKEIm!G*vzFNy+A~>kR!vqmb`9uomc1)&D|YkP2`N@xk7j79(WuIG3e%) zmsn?Ie8(kyWfa)_c{|K}E6<#(8jpkit#q5C6;<&FhXg~$X-zw4TaNYomG8MN!QDX0 zX+PhztozWCS!f0fD^5go)ij>nw%L!{%TiP$og&TXZaLl4?{@k5VI#^_D3R#SDJ5GH zswyl3I_)5&S)ZF$=7R6tLQtv;9?9Oi(BbDdF*%q>F5no_`XxK#@X@1p^HqzogUkWd z?pYy0wM0IP38CM|^5(?=-7}u;q0a-1y3+n?Wt&*W{37WL+YD~A8K;8TmkerucSQN`i9zUsRCwAA=?!_s31i70~8R+xLM|GYuZ5974djO=MkHPaoB0vK#=;S^l1|= z=s1nzIdOCFb5Sdf^g7xBFZwi_?$vh5>kjX3lyzQ9#`(*+v5t6_m^ha=&Q;)~Yk ziHyCK3uN9&B;z#x1(_5}tt2DRo9kB~T#uf>sbz1>OJdl;Htr{TF5h2Ch@g2vmh)3? z1E4R^ujul^v_41*EY6kO69 z(=exZgTIkb!p}a&ACdh^TdS)fSF>17yuj9P)mUpHHg?20N|ap?Q99yyd+!x%0jEf- z>LxRWGFibF=L)QaG>oA%yc2Z8@1fgIf4`9~7ifed{$1+ST*XjjE3|Y%op%32W`&h} zi*;0-W#t+Az6~m6?iOh{6OxnJ7yaaCt`WR)X^;i3<8LDp;JK;^Bi%)`=3R+t*^Lsi zL^CDC)`c21OCJJ_C{iLCQPxb9*8w0O`Ki~mzx?&fFZMq>?j{j9IUQf#=CyNl&6Oh_ zB~BaiUq{;_kWF-PXE9ZhHzimXVqCocy`X2F3-@HP!!V6g?$P z)!8S@k6!@vp1fr!RSBnbpeW5FFZ~exI#n`xEqj^DmuU`}W`@P#aJE^8;B`r6mtyud zeS0YY+cNyj1I_hJpgJE#r1J+3aTRPc^0;Sm4bElYOt}&wQscJlSAt2(*e!ep7tEMP z4m__gQ)4f}OtU*#DcS0tT4~Yx+Oa5PctR--a{*?zWa7=7in~GjKMJs!8JnGSpTp!F zb!re)4!P!o5646dCF#UVUXH5K&;%=M8+c8u4(gS==H3kMcWWpCKlt^WDg!^nD?53y z$y82Yt*SQq4;*gr9p%p+y!2$qNX+Bc%w9l|P|P$_K+U!uMS>TGZtO3*x?j%Y?l<|J zJJaVJbhRs!BqbCw|c!?a7pD2UmMk^GkjKhv*e+^YZE3fFobfND55wLwkLPe(^7pEz3$mc=i73C65B&Dn2{QJ zNf|amKm?J{ zat^5YunvD+PO!GoJ5tu!23E#GCbV-5aEep{gas(eY$Pc9GRgQwdv-G=k7`u#Stj<& zhZafX$Q?~Ld<1vYD{Z;VrD^msQY|Pd8EPHn$0;%I@zx=xQLuUA^H#V5V`nw96#zfD zs-@l>zl$w*3TXCoYh=FhvpPsz~Y&Tnbm?G&X|MJ(mU>uLC@+y zmN9-*eJ`bR*YM>6r3VjQFr?c1BAff?pjlw>#ACJBI!KdEF=Y&x>jyJNI>B(W5V( zFCD#cO=nmx9Sesu%SU9^;J7ZiGHLCgBM@Cy0dJ6Ef-)uZOz`DVqUE|kq7^<9#b6l| zf%e$C6P}&Xx&r7M-&H$_%jyR&@oT!7?Qr9E7KZAY*kT`D>-+Zf0_?_c!Aw1DCy-XvE}mg#x2u%7D`UL zbSp1S*$uNLD(WwL7~82VdtvXt8=+MPd7)$n@#SpM<7JA9 zONcsZbHi3e9T$M6{6%s=KXbh9h4e$~V9J>M0ljMJ(uzxY3UB9vZTLsl6#K0Mrz#j^ zcr_SX*RqB2IQu$KCCG@q&$!Rug^#j?#g_P-VK`q(Vw841bUAgB(ld&{t`Xd6t^~+# z@R>ko9;+TB20D#?EV*{d@S`tex978?V6p>9#4nat=tZ}>Iij_Y99&Tz)bX%4V;W^U zDD@8TOQW3hluWYlUpjoV!(e`}_B~PHrnzf~uHM*xvGuh4=w-J`3h%#q@RjCl4VHug zE~}M%YjPQ1BNfZ2M{?LQKz4c@uOnWR3&UT~Nyfe(>-H<7=V1FF`U_TMCc7_rIxCc( zv-xq;{`9k(cuOLMh zhJ*|QRdC}Z(}7AEc^1y{J0_l?^$4b<@>WBNL~{2;aWrnHYAjS4T%6oL9MG%j1TZw> z7u|lP-DEUy>fJR*ne$9KK`nj8^9KV&#}O=J6eCNo=H(WG04;Ijoo7V{c4$p?wWyL; zWNx0dYZm(9eL56=TL#&x}Y{p_@fcp!*E1%7N6b{pb7j zpgFZ=R&F`D&zBKd>I2Mn(Ljb-)HjQyi82quLk<&e2@Qj-v<*2 zM4rDjpYrx#Gz(-8H}PN#RF}spm$0TE(PX`3gxn@B92pyN0v_;N}#hnHyE5qr3vyK~MZR^NKDxdN+D2F9q7 zS&NlvRB`N!Ne_1p@WnA{&&ub#j`HBzAQO6@t)N;a^Lm7J6V^%|Aow9R&V-ai(PuCI zbF`SFx+ShT+zj^Z2Eh>1a39?CQ*+Xer=7bif+T~pA?q1y>2+s&$?n3|*W_1Oi0J#>f0|!emm3tnE}5v4z_;T= z+@lTenItfyT7mjoa!qGaVKOt~@uu5Jt88>n50*9j^|GSlDNY!1DczdPUopou z#zV=q?ccrc&By6DHbpE}?O684K`D=O@WLawqNzM03Cz{MT+y9}zL)Y@1k0uMDSz~t z(#N5KV96nGFHC?)N&`^>go%F%MDzhHNL$OAyZCsiUD4Qn2BmL}ItoK8NOSqcX4d9#X zNHe}v2ea|*Us?tGWurH{|HaRp8cf^dh@7qSGDRj*I@>g~^)=N~@;L~TP>UT$o(?2(Or3PFdzIemx7 zW9J)o?^sr=H3r)o2%=rg;`ZNY+<=|skS6)u{ZY|iyhA_7UYSwnd}y5%U?|tEChtP% zEO=9g9#d=6VMFqPl#9-@>ZowWZl1=r$so0+2$@$(N0*5mF=4Qw0K*@H3%P6RHB*vn zwTi9abH%te?6{b`0^?91vI54dEgQ5C@j2z?u%O@XS(hwWjKss+SS!?0XB~B0XwS=+*s83Cn^7AG@OFJ(fNaFsw?>KV=NZ5{NAJ zHp4)$+x|n_*5xL4v3{+GC*I2nSP_P=3mSo_IkcnNH8(N#Im+-~JsGpoqkGIMQ}JlSQjpc8MEMtpM%8dc+#_hef^BW2P>3yBDGiC>cm~YElTI# z5v&-=TXlTUUKO6zDBZX;SS=+5f8;2vF|;zuRa?Lg6|>sO=G4zn2VeMh)arJJ+6&QZ zY&+fvExXZ6!?m=+sG`BWgtu4MH!gNQousz;l60eFxJyO89ifMr`%cOSujyCEC28MtG^@RP`nEqGyykSF{r7g=Ds`6}O+@z@z)IulEe8|U$BxP& zdF9;VpVhdDhNBr#CRq#~eA)xmZ^_GlXa|gXTiLmF=3G3ftrq(S>=p*4x7$`EpE(1m z%M}&gl0j$VIdo4|Fm%0Eh9S*` zZT`&-Cw`(3KWQe&a&+y5{i8GRf4JfQ%L_OA|8T%|`bWM% z?{WXsPx5h(_gGGPG=e8U_X)^-oD21FkN8;jc&vAPG?KY-J4KcnAMXRBqMjXt+f!z* zv=oz)LPKc68%<}6{{DufHSD_glTMLy;i;pp#`T?AlcsA^)YnGzgH_wIgEB{HAluSq zLA7F+_gCA~F!ltTnfoHx_>r1-<|Ijs1cmil&0lnEads3#YOgr5VHh@IRhY|2RFsmh zNRye7yf;^KRRNUWXN3O-kZi{@S3bk@6wXU6YKyr4V&sfZ{Pp+WF`h7T3s$j^xM1pi z3H6Mj5eeE)$!;^3t$=W3IV?4SOZ|}ehm^jd0V(56QJy~uq}ZRzt!ZSie|Z&kx_7+$ zOq`UKI=!d*FiCP{dY@&e61Ri+LyJl^PE$scF@)KA*+t+C!s&t^NK6U}>TjWG9{QJM z{};Rd@tx~=w6rHodHC<>oen(`l} zcj(sNY;Vbbu=pqDc*+0Z@lWA@(xUzTIR2xlr$2sr{*PKme>UOj`s1g~{vXJG%3-Fv zzp;+^)|sPNvp79uG#cu{91*8-0+G<{L%y1K&%7g}FC2%)iPbaXC~v$v;~X6fEmN2KgL%%OGFujAc{WvrX0>yel{_W&P&urV=dYBl~aEvc7x0 zbv!v?)N3xC+ugpIxu{g#q+cjL@_eGXBi($@JM;bT-G^mwAfZ6z1%>R@D>wiG);Pkw ztlm*_0+&TJ<@|p8JKoVUR_}KQBs3GPnVd92wySgfbG|z{ITKdvHyu~YRKa+BQ%;AA zlr4M#QG+NEk)9Ds{P0$0-J2;D_TF5D%&?PmwBXHto)yWGv>Em?xWt-Arpi2w=@o9zAQ7aFBp=DiW7wWUC;0ZSsh^>{Tn zQTCcens#4n?=hN}UGEnunjx_DNHrhr!fuPyqg_)v&Qu)t|LHyL{{yyGsNthpP%2^^ z=Gcu_UdXX@muW6+5|ak=p-Q`-^}q0}NChhuYc!hyd)QKwDh!zmjMG?)mAzu#fUd1O zbqGmBCfNz)Nqzx)7VjNBKtH6XF&Xiw@$9vYULMSB4^&a~b)hHQ|W1j7JYv|ngBP^Q!*wZ#4YRZls)0yh*`L36$knZLnEu@=L=_HN84?g{HMnICOPL7-`z+K`(C_LmqanG29jiZ6Q^s- z+i@9X*5YoT;y6_Y04D|6|4D(ZaT6Snq!#IfUWL5?5igokCjG z-WU_Wiv03rha~(<3W%?Bg8j=-stJg*O~b&KH@LxNCZxZ|i7$r_QlDong$<-6x$X!h zSsH!EJ&ou69ujHB%6axrFH&npU3C` z8kpa!kp5o2SWa}G#jI@B13tr3RO^=HS(>(5xkg%;i}%Fn%yc=Ga8r-ck_IC$G;UOt z5sgv$TTK3xrAwhDJ%<6_T%!k9rcm7i%rnmg9SV@$3*C>i)VL;_sI#}Rj2s9L7b%VG zcn8&E@#iRe%1@t9%+&JlBy%y_F>lQLP7EB3GTBr2xc?q6LjkHC)XdBYPSDY0Z#Sk1 zld&0(vRk(gpdx79VT`$upN<~kot!eUB|Vwe->8ADgqlCSd4Wu=&d z;`FCKx%GYmotRt;1gH7Bf^@R@)3Z3K7y*&u~fE-?YY-;0B^Oc#r{kB zVe~W8zFhua6>erO5UK8}U{1xU1w0cFiLzPs)VB`!$AS4$PcKVMkiBv08?WfDwQRH8aQU#N-}FS>W-yi!r0Ihd_mxQsRK9sl z^DCAiak=qn+;l1!peyKP$3YkrQ>^4rrCV__M5S3){4@K{?yGX<%vW5{VMR5XK2V8M z1DVZOG($}B?aI|-mE8gv@Y|Ie{c*SJC+-p#z(TwjRHQ}KxI{=zN8M1U$M_F9h$h%t z`i~h~jtA~0q=a13TFik>|C-cCwHP*gBDV>dg~rl5{yKSnr40YYjHQuzDn(bIQf$6A zfRu`Jk*)5*ve8Pv6&THyrfMlX4nUVD;f-W#vJcEfuQMmq)d7jOT)5cQdCT% z#Pp#*&Qu3T71JgRilwwyq)B>R$xXX#0c+&EPL#ZCpoGz=I);az$3eosbvEk7Lh5%Q zE}mlj%1Et&qK|j;(j?em1GuJfu0{5|@L}YHzN^+Sj^tK-t_lTsUl+n%4zTETX&WX! zgZzBzEIJi5aXBg2VNe8oeq>CQ9$R^*om1Knb3;& z{(n!}Q{Iy?&n&{X=C4=9mS1Cw=-LVR9u8`Ef1?5pj9S=aIZvcgvDGHgJPDGLUcYa6 z5?+bLhgAjZCy()PJk;kX=QF4AO^fo(=pE?riMEroGjyo>t-RfxEd6s(8*59cQeG4b zF{RjnI$iLZEOD&E!h=tNoTnzT2)v+qvjy~Jy}=8kzzGerS_WNf9x&rA`!;RK_Az5O znQN!EeFD-M6&;L?HMjHF|GA{YQnv+%gdA7n!`rsn9&x}Lf;G&}Fg23N( zoK?#b@5j-LU%w34Rf&6B&6Ekld(JN7ef9bJrDsCH;BfwCsnIPuER@x@l9K@73`b~$7u zt}(3%Q%{wbjxB&(rZFOD^(nW zQ{We@nn=AouJXjR<(AiT;c)6OWgL<{(P9#CLoH3d(=pi-0Qpjn4SIW)6{gea3V*_$G&NN>mX@ zk4hzs5c-SWs6*sQH_-2v^vap2Er-}H*=^2Vl2v?OV^b#mspb-JLmFy`Hw?MF(%iYa z-A!{*@ftz-2G*nv1>2?*qi5yjXICiLnW5(6W_`iot6Z9sG1M|BEcs0fLF?h6K8W7? zu{TTG6@Orcw%?uYS1*=sjMuz_T?i;~#ob?gc;TuU*;CgyjHIHp=;O2`Nh%GbT&hLQ zJ`~FV=BIU)e|F=;b|pOACeFFWg0XHGbcNn zTMO~CT^9Z7J0gaDz^N-p!&?M`j98uhq07*VhG3jdO$x~OpajNXof>+~Z_K=+HBNjz zuIM@@?#iA}QOLgL*l63^i4tsZvly`ScJvf0pqU44R2NoZgj#+l<`e_{#%N-fjuQ`L z9)h@Z6t+>;kC>-%GDk};F3V`fJMx@XX4a z(@W}{&?LhLc{-y|ae7+LAXgl7;!Mo&SpJ};O&Sqf<2IMc{kV(AR- zX{~*k)SC=*@G1wF>40`El`M+PrXUXYmSqaew(cFMvQ|-zth8sp1npN+P>$vSE#ge% z&Aq)1`Do+diYOd?Ej@(`sRR$HBocyHTsb?M3Ei7a|6}hE1ur3Iam%BHgPhp?4+G5P z^=p9lpQMF)#=J;3D#o0|_YT&EKDAgM1bFT)*P~b+Z1Rye9ZWep?$~JQjhKLJ^+ry8 zhGu}E7TgdLR){rHxrCO;eonxaVgfX2iM%W&w!c^lB2$Hz?o@c8@r{uXB$=L z2;6RB%T0`7$Q>&dP`NJU$ouIpn6K|m8oQNPl6B0Ldh0yu%zTLom8R&#$!@qR@cA`Df z6all7t5|ZHi`K!v8W%6K8k+bywqFXpo)IM7Vll?lY$}7L zVt%0xIll~^k-m03j8z*L-BtvH-kjI?;8=)^S1(m5nQyDt9;#7P<}{0<7U38Y)?rvn z;8uWnF?9&E&%E;21@(X3U43{-P81Go2SO}2hny)}G0BH61QY2qe! zw`B8;4jfr!9O`$G#1Yf3HYO237N@pK9Ig8_M9Vs@o?~P1Tc^PnWGjCqJdN|eu&4OX zZ`w#2elaDQknUwEh&21uC?28V>V+C{>u(&K_0-aljTy2%v;5Z-(NL0CEa2_~QS*p* zjCNU9cfx_tPvPO^V>=xf5uVL47`2Pvt7bV|+IY^Hx3$zWG3$@WWG0vCobUJ!@M89I zVmBm8^qBp(PQTuLVRI_~iCnesU6wkrBStN=ep2<8W{O8{$5VGhagBt>8$=s`{z;OK zy%@6QQG8T15Qt|$ucnIF#hJYRC6%OrG*6Z;Hbp?z%+bWfDm1iXH_mU0UQ@5GfaO-_ zaRB3uaH9$MvH58Y7dg_~V*M>eRANb{T>Xz9ZNp%cxW)5$P5|JhiUOiMcU*Q#*_^lF zHAJP(j*g2M^>v^<-Jk>AD$)=%2PMmq&eJSY|Fa!8E*92?iiO_r_R|6Sg;4+sV|NroS;Hr zU%bj=A8(=+38!wRh`Z9}!fhIf{!8?sh^$ab>R+rZZ0fJfmzQE8zJMQKBiwrONI!B0 z=(6?~_TN7>jhL z?4OwIs>Lda6!T8nuKzvY-*e>XrLQUA<--ezDKFjOU$f>E0qv!RkE5jjx%7sLTNEmpUD)awMM%TCeq;~)+wk_k*pG;pEv@2i~QF_+bUYN!N%hB z&KdfFq6iL>bPjYmZ#tl}LyrxH{#GQXES>~=AOJ}~w!hMdmV{qV6@c}1^*&mD3CoqD zb5bAalRan~@JHbxr8yjflB;x;)M0I^EC+=7?M6>Sr3{9k5fA?VdlUg7`hlOgam!`R zIu)qm*ynTJJa@c*%2E2_x|>}r=)cb}{z+mfT%`0_(_sq88aqvaX@TWv`rFFnmC7yk zR*>@2^ZNbz!BNreUuo|7#c$qYi0It1co6WS;ceLM_oW`S|Nb5QtkO%Q!*ZjL(Bqc1 z!&2GHg7iLsLQiU_4X^Jg_AG*agrJPXys6(=u<>xpbG+zhG8`V%$hQm6-b$)ev z^z|-JrlEJSLU}4-XLGyk!g0!Zv63H`^eRuGsjG#Pp4b0-Qn5<4GVT5#{9PqTrTZvV zVCNcvb)+u6tF2Up_dy8KM4<|$OHJoQf9$kOwxA@}#uvx1&qT?x-WRss&qMEg*`7UT z+fB3IB2T>A_W#Iw>$s@8_Ip@GP(eUiTBKtLDd`3QX&Ab@yHk-asiC{up&RM$X6Wwj zd>Q4w@8|t}|Jc{roWt33&bdAld+l|tWn|oNIIc=C797`<_Oux9pf@zkp7*IVZhy3o&34yIta7Xd>eCXQx5+i6s>H4yx;M<87 z@j)e|ea}(hr|G8{iMvBxs6{0;W<85R!}?Jj1H;DTn=<{^%B}BDm4c=|jX$7ERQtve zPi#PD%aY-Dq9Mgfg^E&Ry1W44{E%H1LAH z@$$e+&J6zNz27T7y8bb#gnPv)DgQ@uykcfx?>R;U2ijVo*eAtsXLX7)pe$rhmCIzJ zlQ=k3Aj8pKtkLqJt`xcaB1xll+c-KI0cOIj3AJRGz}HA_cSega0NAY&tu4ICU;)!{ z8kZd3;@*Ekh3&0>Y|>F3sG@(;GvFI@DmK-RBqwam>$#@E6lcF)7&3jYypiiO&qlY9 zR=06WTiR4|)?*@@9A2HLp!`cC>t@U~M6A$u0j4y)_UfL^t_TE7D}L>32FU@=ERVTF zD^pjggOy5dcimn)Yg|n`N4k~J@^IuduzQ{l7&a+x^hMC3mi#C*Z3)*<;Njnw-O2o% zlQTix6v6g#XMBIx%<~n)7-)Bz&3rg>+F7xHTNBpvJfyTjOqEHwU{7;0SEcEXEq(gi znheVS{9(*MqrTrhH`ds>Yzi1KuhU`7P^`+G>hgU*fp9(#1G(|;I5y@^^p^0~&ZP~|;FE8fF}((7|7SkZGw zGT)jz^F9D+#Z_JU8)pnaCLCvi3@xJ|)LKIxvpAJA(k)TDUCqO&EN*Lgf<5Bw1JC1s-ne=t zc>+**G_Nab`rLr{MVIB{xO<4*rocLLrzuY#T-4pwu5b$+iCdEN(T`_cG#O*sl^r~* zUk%NB4aspB5ym&$!q+kc=td61A5d+`BoW<0HZ~H_z^rjjzPTOJDQn0%$YdV64CDi% zOZFcJ-~qSuaG{i~GJ$u?xr7^>J?WQi@aO0h+TvKl0({#|DEnWqIF~4^qim z-X1GrY+sII*=9E^H*Kt4^6duObIj1udP!UsnkXdX@6jtvN^w-;4sUzQv~ta#CtiSu^GYrg~ydN*U_IW z#oNoP_->hx)G8w0V+|^-D`w~fT`~3?Nt;=gmDes2dlI+3+Q0Dx-3{U+)-LiR9e)sN zFrpT^GlS&jrhroXBKc@_p`z!=5vm_85W4{=RTt2nA2b}0R0+s zG}C3|ziV!!L}XSZGE1|fl7=%|I*s!}8T7j(A4?0|!to_4=Gx5j3*jtEB6APKCRIJ& z=^cp1XAe}b`N?dDaq`d?w)dy3o#__UJKbn1IIMChoToEaPd_cKFh4f3x&Leey)Aww zNV0aBe|@6;Llu;M{(P{DV>$LoY@8A0zK?eY1zK0Yf)=n@ob$KD^mY{Z~kzm5OWIS)epkxu`N&a!r! z=v+c#1tZ?MTJS^Ghu81=aZR!f_nlQ#reA}urAGblO%YX*a9P}fygSSgQP@}|$l(Qe zMz0uG0+?v~rv`SHbX+aSJ%IDZ7@##5zSJ908FV_^Nra4+1U8MKZ6HU<$BLC+1AF_T zW#l=y$1A#iY%X?xWs)qO3Q^Rb3_(qY|5j@BKdrzeK-&nSP4AOzyZ+-jvbBHpvqT=Z z3{SdQF#n^QmHhZO{@)D#|9uPB5i6IvKzPRDw(2U#me#~*U5;38DdlHWkL`MKpCH_Eyiz+c zIY%pU)?R#?yi=Pd2`)c#dm&l@xVYjPt;jm=dPv#RuV81dV6KZ^+Y`BDn@r(2(8fbN z5M!OAqM;6+ZO13KMlHH~I8fjqRM;fd#4hV)Jic)SDDd+53$LwswjDRH%uQD9ACwDi zlJXoZ*WG!{M@dY;27Bj<$A8Wmy$(L8{d{k%AdI=-y0Uo@R>4-Dt6)x+qnz-@)YeL- zU}p8Pn^?hCohxU)yy|aqf&|4PvwXSh&;R?~X$~a;+C})K1FoOD&*BJ0!P|ehntw*g zD;|{rEPW{&l2re?6wqm*FaFc5fH08r4DA~B4)l?5q-0ZWaQB!j!Zf0iWHi*_H^j!# z;k<8m*Gd!~CC-17*Por)zY52En1d=pR3Wj-dN%9DIY!SYdw{A8ro@oqN7Y<~f;G$m z9yGGyNWii>_zJ zBa1J>Vt(H1!BlJVUn6jbCJ*bFQ0#<@{noWN=5@yziHmX?X{6?M&Jsh;()8X+tASgI zC~7v^G87lfhwE^|CrJIK9B5mz^-N>=rAB(l3dWx9LL~Q6d&n%Aka0)8|8$ej9;uBB z_m6aEE4)KYrG&QRDM7(zHfEi^i{|Fuy&K%>YVT}>wUkd9$mluN#a39+=SCfJhF=iG`Zoa#8T{=JSzxcfdzh=nj-A0~O z_vsg9mj(vF6fxmBq?%i#1kPrm^XRQ}FhUqu^qi(2Q^D^ZcPgJZ-=|1>ddzFeRYOHX zmgk(~bEw`lQYf)0_mT?6)OP49MJghUTaAOvH6u)I-n&k6>@n>f95Gk%0wJN81OR1T z6yf4$OBAJ;UxvZdQ}A8X;+hQNoTI@QDHy9}CSN$Pcnu>xN`Ju%dyaMh_LKlxkdGL~ z4m1azM1~Pg44Wj~(PD&%O*Z?r>}r{W44w8_niuCp!L7Dq547PE(GRPPN%FJz%rl&) z{Tvnnhp*3&H7zEOTV^{Uhpw<}=P(zsJEsla{FKy#Io~2ZC$x1EKeY`yz%64l=g_1g zLAn{l5E2;-zl9jyGzKGASN0len`x+6T{Ggx7X!BF;a%gkm?ZTIGk1lFm;~i{e$Bk! z=ve8%r6$1@=r)R{@NuoE3;kR&88`lwQzGiRT%<|GnK-ANP0T}ex%76IIm#J6&o3Z? zm4G7cjA(U@p~cm8%_}AOWpcVCDd>hbTo+FJjDB8B1=S`iuns9J2#Nhr`BmFsx4M#7 z%;?<8H;TM!clE}QjQD7~M)rK4Lubu7)37a57Vxu3MMqJ^9W_8l^F-+F?lr5i-RuCO zl~yPxtsj%cPD~eL@BuFETb-m(voOdV zBPg!8oNft(Z)U17Sw*9ONwZti5v6gV3N4lRlaLd24Qhffg=!YF=X)YcBr+QMo80d;3!6lB9!Mcq%~yGk6c-QV|}Onre(glXP%WWLu#VQ5#p~6VuP40Ro;| zzJb-2xY#8Gye`e3oqo11``6D)2Mwz_Q4I@^d>zfkaq2!4$mkL^1qy($4wLq~FUnei z@Jz$t8T-cV%;E=j*ieI#Qb2Li-MhR4Um6Tv@4DsR?%p;_&A}&Vp0vT!SAu7In{*vb z*;bC{_}85`cz6~m5$M*R&6$jJ+KGCfZqg3OO%O(Txe!jT-|0jD6YpDMy!xn71>6ihf6FrpPBWEAj9C z5i=SU4~oYNfr5%(*+JfF+H@B`PN@p)@WlB#`E^k7dWrE7u%EMoWEPx~;@ArBgI9m9?UjZAU{w)(qwx2LD7!)fL5f??BT(!QUw>*~A9= z10_}~rL>#>SN$3cM17r3e@mS5UM)Vpql zW8f2nitn3UXU4%Aj@Q*}Za#Q&xN*C2y4@2}pK4NOIKy*@>r%E4lnjT|Sz?Z7Vm2!W zv^dmdG!ZcnhOMXv)_ino(sYOjay2*d6z^ZX%vS0#5h6sR{lZvM`t_JD_L8zg|C{7@IlZMz z;PNf-yM=0ujpG(w(Z??GkZu6R%S|x);|pL=H4y~0eInohIueW&SM0JN3Jyb{THoB-N-z1c(lfIpwg$kRWBF(a zQ^o?U;kU|7>*z__zuUWW zh-*w~u6({mu6ykO(K>+$)g{1`eo~ zK+%M85|{kwr#;5kFCU-v;1HX1~GMiD15E$L4StDIoJJk9OvvDl@x#zwNvUsq{ z>$UF@O!282DwICLBc=St+WON`ymRF?N4R`M2))lLJ^>0eRIK~>UhVLj0M9uKOMyX+ zbKm(H?gKcemTG!VcU~w=h>eX@j(;;?QGXYC@-xky;_j~bbYMPWqRIntCuiJ@rd*oQ zfmA8a@I8NmjjcBgi3;gp{(DaTS1apUUrT;RMGr8CDSUcW&_>l#4PTMpAtux+QHuJ- z)sI_v`1!&!PNA^?nVqz|=wKO`%i!>OUtq_Py^=>mVDv~PJEOHmK|U`yz9O&FMxG!0 zX25tlcfgX4f6~RcU0--H4Io}LO|Uaj(4(?-6OGW`BeieTDPaNbMTBxRJOuIPg^r| zkhbQ>K|WbqVNMt3qr4hb!PucZ`T1+4;f=JWp7pc}(De9CCron%urzJ~pFg=4^~E$pHA z&F0c_9(RohQsr$i86?vb<|XJVHC40XijNn-*57K-S1MLEy^#h$ve`SdpkEe9xG8d| zT`AwqNib2i>TY^p2U7MvJo?y#-7~dH>}O;uKiEQYv-k<&0_!+aukM!IVJnlt3*-ifSSklb*#)NA86dS|kc*^Hko9xS6FM z&GpIHt5-7w`Y>w+^j;DlOe;f$DD(>=N6gq~ksWL+x9x*)x9;Q_YP0Nu z0ND7Kzqe@iBhm8`=T(Ci42}!3>RO)EvWd{mI8XZzn>%9~BGY(U zr(}MaiyfBO5;inz+Bu_j=3(csz~^yiZLD#A*ax}a-s-#A_I41)?pQAbR1fY=A-I^` zo}*RrBvg$}RTR&*k4p50D*vfue!dsuPigWWHM#-1-19_@j*NXrB%Cv=Vg;KOKvMJp zfHlpO`=s$*hL8T*Y}L=}w`Y9f*Brx$^PR0sF$n>|0r>%QSUyIvj+`Dew(eYrihM!N zq-%wwEwJIe3M=P=)I>mreF?Xj6Cd?CT=9nLxy>2VtVL`$KM(jgb0M?^Kx#@u8xMC;#XJk#W39FJgcvm87psb{ zad&1^g$>_S=Tnm=wYkx%fOL1n*vIrc^=x$@WQqpSkhRFT*6S%f`Nda3OGHI%FR^w>}z+sDWD;<0i5HJSTk&i6zq{(nvRptuxNfnx`X zN#)?KPC#)hC|31&{Exo&K^}w^n(PsqGE>)or3U9*rbXZTw>)#3tv)6qV_+G1Z(eiy zyuhPcpWoxMb0p5<{6RuXo`vSvN%nWhgl(?ihi) z#`*j08i2Zm3-*x9n>6S5!taD-TqGk%Y6xJp%c6e>@C1K#t#KmwBm52Vq+;2G0%=81 z@J#aYp+r3Kqn}`y{+z$c=>G_U&p1~Fjx3O`#8e&aWSUfC5Qns@u}E~X%$k`fNhY88 zm~TwqCr6?Zv$XY|nILl;i(lphK?< znn>aQkywB6L;xRrOdYi*!u^%OkEwh zIJgZtS3U=a$op?%_ih4f)Cw0bDH#I{45mTA;bS*9P20feLm~Wb1H>}<7W-9ajjJL0 zUXUTdrUB&z8G8+JvB980`WzamKwD9!mG}?H;~N&m0s>zpSdD>U5nu(8ttM?TmsM&`=8v&OWLiXPJB;8CJU77IfM8tmSYsIHOfYDPL#O?0ew*hd+Ven}-z- zQ?bR$@tNwD8AT#>dxd-o<=RF5BBF|F+dM>9WPT)5+#4Q z%8|aBC~)gxUB}WT!m%1fzTy%*>FSF+Nl~cLvtHCD$b4 zae8*E>T@d?nxU-nCB%Thsr@H-+fLHZj!&^=#roD0qXfA@EG#>v`7~F@O4^)pYT@Q6 z|Fox>(UKVEbFOUtMW{&^DtQ+w!FiRu5Cok~8=O<2Z5$8&Bz;FcHJ_e?&7a$Zcu#Qn zTa0V>A zeANI+uQNFe9Ul6B4PzsgI*@cU@cM?7(TDA5a>I99l?$35pV8f&Wr;|DC1LtpzC&;$ zl1uDd3O3D`DcMlszK8Xvc?{ThlvtCy)!)7CPpc%56A)BzMO;s*(rOKhgs$em09e$b zPyb`;T<`gf@WsT& zkC!&cZ6Mrg(gEO0`x05?wx7$N?YDOL&N-Efd~B*{st`=ATTe>gTgLaah};9(2sppU z%VeaGIAEKiLMXHV*8P6O*f|GIcxhissxF1i%f>SK>9t>er%TY91LVUPXVvD3V8vzvK^NQ z#D$xjEgfz<+C@`hhVOt@c;pkGeS8W|Pp&WQo`+^zYwUP1E^s%zO04`ABkkIhc7T4Y zX0ZFEbaYZPwPiL+oV!m)PD@3`& zXU4r`V0(?aE$Pk9RiO@7ih`0yUXsGul!4f46NH*?2Xbm&ypBkmqdWTH?eH3YZoc`6rf zl=U#VcuX2;GkD9J(2ypXJKAs2d`boPDTTCul61ilA2y)@;r=$EQHISMSE^MG8dt(J zDD2R|Cg%zv?NR!A9@Fl^U7!>~TJRwnN8G#V*S07Bx`wenuWnogPLO`$DHBM)0IX#3 ztN^TskqOk@G5`Q|m1FT`bg!Vaoaeh%-=iD<`$}f{Z5FM5D zN3B-p$YgHG260VuZ}7~rl%)|xIinvPny(EVNyCY)3mlOHwr(H_h^H6?`@yLR`Rua| zO)@xQ0@LM_Lu$u{PxM7J70@F~_#M7;gHIZPqQ~xgjb%(z!C0+O4(3kvcWwSc`n=bC zdwAI+*hkZDl%UXEK6U2nDXRr4Tm(jy%D^m3^j?+zu2<9t)J@ccaWbr+=!Yh}q`9>)6r{{oCK^xr5dkh>Mg9TIJb^xp7@+^axSI+Nm%B z+;oNYB}2ML7@u>MFtbDS`V(F96;~~owiW542l~1`M%>i2dE+?ZR9i-WE7uW~^nr6~K9|pZ zZ?+c1Zu@b~$97(EF}L$mb7WyWBWKH~Tv~bONNOj4V8_5`h!iJ?hznEp*{PBnERqXN zfXZ;0+8RVRywZ3`mq;iQNE6WcDYKIw-U~WNYUfBZ;yS&FL3&W~P>f~a#=CH8H~DoqB%6W?)0ywy2Q*yE=g*quh;yo#3NrB=U?#(mAd z{p@bc;~xnn$!A(7YIWk z%3QI`O~t7g`AVB_bR8Y19<*rqJrGd{Zcl51({!qb&} zAD!`U1hnO^Gg%V+H@NM=q((y0w1r?QAZE}qov+3Nl+t~Frb%$&xZ3y z%Hp#yI&tj4$XNyoC9UkH%(xJ9im1h;>I~HIf}UzxX~QBx>K#>cqxB(dh8iU7YdZb< z1?+`s$jA+WM(esUa~y(sd9dai;5N4JQ1;Bs2jo29RvDGA|4>JLP3$NFy?(SUKqtDm znH?O+P{LnS3znU>iYt6sI-KUGY}d^CQYzdYwY+xIlh{_CkU{rDlK}O`HGAJfBNQp& zrnXiosO1I6pXP1Y06)gvNE*)kBPr&`A|_qaYV4CRL1t6<`KNcMk-m z`ai}|3WJKYEg4IFj^f2`*L(#JJ&ML0!du;kpVZMEO*{z?vW4V*eI?Xdbr(VNzjDkV zZ#eLI_-+_bQO(W3a;%4tYE;`Ib!u&A17$7(w&jnCv*~+?t5cKfa~fc+MbTTDZUP* z{pwY@-vq%q!lgj(rND%IA7GG>Mc>@zhw?!SxiF)X|1<>V+*g7&++u(JUPgvl$1Xv$oz0yimW!M@50|l)a&Gg7 zx#R6V+d(_|t0Hf#$<~Afj0YYvZkCfo?KI{JX3CyUn8V8^R z7fUQ?)U#k>F?+KzyuLkzWzMU9?}w`7MB)Myz+(YurOIMyw{l?~>3q{D2$J ziueEjYjGAl9xr&DQWrdFazZQVp}L%JpGu*jrPKc}O9b_a>4EfAF>n4<1#kL4rPCOX z+up2M?q|^a4yFD^U;U5k;^BY__nqD=3`>f;jqHy*n)J+aUb(^-6+Q~j)e&fZ37+Hv zY`#gM3N=pa)k2cEc1vt?WjXLa+GN@_;dd61BoO9Huky-C&>i7i-T&UHj5zSa)PB$R zUTB(4bhMlqsiiu}mzXE`t6_x`ibqq|g7Vhf#*Z*-! zgR+aDnWvrm!0PvyU?{sv_%X@pf58=~V;T@DfAE-S#-|$ixyNyEq3v-W?&H1hKx^VR z|GK6@b!z9H&@U(rs1B+}`?wAIR3!z4Nc1Yaw*IXeFH<*#7~{T9Zxv6uMgeA_28yk{ z3`~`!W~+okBoMWpAaNq|4BwzH)wzU2Qk#aSw$}{q+tU@1?=@{0ny2~)x^NBuU?hee z3`}nodF0ProF&9CRT(z0GUj|xKf2HY@`W>GY_0CUjs&c)X93z}^3B{d!6uTI>5W~b z*^@ifp=y(JY$K<>zs+@KD`742tP0-D$}UxsT8aBWvVQ|GEO1{`$yaYdgE2JZL4yMH zALU+Jpe>PIRW~Hs&kmUwNs-zIor~t+tB}W;#(_iwhvzqOiXwd2kW|q8_!8^{am<*k z_Lon7%9q>ssdu85!_#)Z*v#$4=VUqVHFRSW5h_1AC z9o8Gb{8pKpdJDPuu~FeIdIWHh)cvk{&xF*NabcTC3$Gz7M(YFyFt38>U^K>N%oqd; z=f$bEQx?fAWhpGq4I&e`nkDu#rDt~s$yjf`C(Me5S2GkTuXeb#U66iHD3>L%*p2Hm zb|A8eUnCQ-$PYB$3N+Zt))rAe5dtv`+-54fh;+ZCxSRX=-dFUXzW2?YHIBz%;^_bv zr_}zA7IWvpaE;*-^^}Hk$HgCDgj*xKD$PEUd29bc)8|$XchMN*7y;^*M#)2_P|HJ}{&Vs9d%QjO%57(TqIC(qX9x;`XZNXcdI5}j zZ?IAv?Y>v`+qNX6O=M>|cl4x%{T6$b^OnK;!TkR-{zf!>y(5aFndM&k*~dd_X~%D;40F$nV;ZFq@P3uqo+d5Pbg92mQ`7EX zD~>!=mE$orVjT!(C@x$8UFE=DQHdQQcVZO%w-{h?a=o>g;9I#&|o!ht9 zG-7OBLYyO)V+{+12YZ2BCH0%SQg6lmI}poR9@bKc;qY#S4N&6s0eu|aR3(`33wx+T zc_Wo!3gs-^EEdk4+pypVOEV%62PXpFSNW8j0+^DB6pZ-`kym)M!>{B)WP|&i-*8Y3 zwVzKm#rvNPYk3wbq7O0VPST6F~%Puh17b5%&YZhF; z&$El$2X`O$wFzH@lksNd&O$Kxb{ z4_&&UEZLDzV@HhB4k+2sc3KV=F)odk@` zX=W-sk;AT%Jj@Gtj8u{=-tfREKXKwOXs8+7EI=^?`Ap=BEI?uHD#GQ93Ab0v#7ajP zg`XKEb#f%lswCvdli5lc<7#vlYA!CX&$HkC)ViVlu{#ciMR>(|u!!bxgksu8U}&IH zX8O5}BYDTkA1hZo`q!`SaPLsl1M4++&hMXzzE?zCEGTdVb+U)CH+A2Hv}TU6uPILR z%-wN#?-@E3nQ@FqOYTgqcOk7IYe5*taojtH*|~MS9m+R4!e!ziCpYC~iJGSUGdBfu%Q!8m@6AwBqVM7657k=Xk=ZUZ_B3Y76*YE$IH=C?8#c0X zsjkGX&T==Y(jKVdK}dF1se(8z)6an!hUNyvrA?g~?hy<-kV$9g{9D{O)kh%d8Z zq_c%!8*3eG)I8~e?f`Se3ZErvg?=ISeeJ$^aZh|>=ek^@e$GE*Q|UBm4w>V2C+b8+E%$nD0W?;f05~AJ; z=m8$wcd3=?k9w!46|Tm37_WR(UeaIJYSe%|a$4&~*X19RbHUmLi+zwE;=dW{)PiyJ z{Q!kPy(YXridvXVY9Xetev-w3gN@Z?&LBjGXa%49q66TGw#@FXKt{LT9f~@C+`nFN zh{sjE9U#t%L)}ZIm@F4@rAyt~_D%YpvHltYn7F?oZj)Fi?gY4;=P+IucG3066c8jZ zLAsU0#mFL)o1dGNkA%&O+@eRoj{{5CY|joS%@-$$4pEQ$r4<}YFXM znN`}u*sO>LT{j*hm>gap9r-$_?)|rfb-%(*~1MTf;^5 zcjX%^@OxL)-}kD%cEb^}_)!OgFd2JMG39|+iXW_h5F21?@i5q6_l$BM-&+~dZ1HY+ z2#A#ArWH=4e(Dmrm#DilU4{ID=(@_qikGtqhpFvARfGl^*g=SU7$8FYaz{jeF`305%^ zK|R6?-c=AC&GR*Bc#^nAMq_f=DjXeSbKdYN8KPWI-%@W>!n$PS`M_W|cBausqqQ!E z=Oh-S-TR>d1q|(K$rWwyVAS%a?TP7b>{GU#Gifmm%HRGl#pd{3H|@_2s2PzNkXqbQ6yh+ z)$|lTFw2%A?CG_XDgmr#2hh%l~yUEGZ4CrF(o*+Kv@x}4C*y+^&DAI6s#xQ*E z?*mlwwkW0EnIm(_@?~Ui4^LI|5lywEu6Gn1KI6KW-Pj^N<9|q!FhTo`OJp{2er$YH zirsZMxW7B~%u7M&Swj<8h0mGYH=urQV3ft_CL?NYz`YMoGOp9$OBX7_j_nMBi)kT> zEQZhg8Z603)*uCO8~%$vhPG#{z@6Ho>0V~pH~`GC#JZLOvrm|t;!*ekm63A$arm@# zoryAE7%ZMd*22cr`!GO>p;bep(#dDNx<)sc0J{Kpwn2=bxnsP`-8CEpWliUHoib=e zU-3v=7mo^n(_yG3P~X3#P|2W+#1QH75;JAmg6)1S@B8%R?n4G!Y(m6@t7pC`jYF^P z;st=U`?D^YEcmpjvU7=eLBVac4qgQa*6WKTV$|Brz5!tAy0R5fh*d7w+3{mICQ) zU3q;@$?vX%#SDwtPii~#i|i~NEkbgY{aq=P{lpqc(@xwU9^%|TlpUPnut*gwYrOxp zu@QaVqt-e!Gp34*_i>V{378d&A{?yR7JHwXlkcF}Ti-L8Dz2d)TmbB4F6pyyk}P4W zo7Ntn5I$v1OL3W0{>8d-={TJMI+kF%Bk+BtvCwgUVOswwzPb#xs=@|#MZsFq{bz1w z>BXG3rhL_dhEH+-hzSiw^ABCWF)Ecr6}p&;QpkAFQP06ZNm?Iu6NjbT{`i&SM!Mp- z;eid3tAakLJlr*F+EMazblJ9R;p&A6n}Ul;{c&`kDZR$t{y_VJ`Tjyu5T^P}5(48N z9tn&el1OyS|DfJ=<}dj0Qq=MZuHR8BfKdyKn>DpAerU@`H%tGPj7Ja~k(U@Bi;mV! z$)Fp>+A2GZ7@!4<2Akt8TRI3U7x}3(-kvx0c0GTw<5<4%<5%(5)^CtmjhEq3kxYe$Hw@C zOX!UANz@DpY3%g%G~>PPYw4JMy=$xTRRN_#qWBa3nXt3nwDLetPrDpZi<(lRjuc$L z&2e|Ta=X0U7>nGs_eOaAW- zsBA1|1tAN9Z}UF-=*5dhNO2{(cgOMJv!>^;SF9PhEOzy54FPeuk2U!RoW_3-H~|+D zj~ydJm<1WVubBvegi(r1=SoRYYUK4m`lCibFy)1ev7I|XOd7m>u2%7<+^HZ4+vx`c zu1o;8ZA^}zyG8<4^)~)kn-wf>wFjadtRn5QF4>*_f}!gzg>73t{vHtJ<5q#!Vv31M|s?{mUSP6@uWlWRXJ>EKDS2szW#DxCptvQ|W-sSaI zp;#lMR>v9=)o&WO)(zxMdkReitrFDQx77OyQX=1P2*0d~#V!9b4QA)sepOVf##6nE z45t`VwR*j7=xHT>t?6$p19_b*aW-Vbk?DDaSVG7RG%+$EU%%WFCW~S>_q$+Pz)6Wz zYLSS})Ns{sa$%(~XZu}Yg}`JvS#vc$6!yM8pk(=nD!LG?EQG%rrP-X+1@cY37PA54 zJFb91uoO<*=Y{0vy*wAR*|w`nv4%a`Dt1cb;(?}z&rLNZqW!f$&VLnkm*#(wn25%q zvb=gFv}DeRjomr!6nw0u=Uu@(UvlD9QMzTG*wm9EUUdA~vlyo?9#gerkb?X|$5lOZ z6p`?Xnh1rS=eBIqbANNl=b4x^9MQJ3D$%wfL`CSX{0tiim-W49Ful3~Yu3iv^o>PL zbpzUC&y~7*ZTVc-s<(Yl8X9<^K?NGh7C}LfENJk7hMLEqD))Fm0^{*Cxyoe7A5Dc} zumNq+KX1dj|I6@6lBER{i{*W<{671Cq%Kiq?istc?AH5q8k2>hRoDbqdE-17199f` z8cSY;a|w($6e~(x+-TGd-+34js7!vR|2iOw*O?^)@Q=5qKlL86i3!?Rx?uOMslUz9 z@%}?_fqh~%{V$8@iJ4^n<^M97{;i|~{jH$;=SN4eG%2kCx?& zrwTtPafa$oy_RWBUL0h2pbjJYiW|GBK17ooV-M3FHK;~QSyH)fOFkx%#*l8!1~gaF zvsKGjL`f$P8d2+7Z#SD8uyl3UWr`_v)yEofIH$<`AL3A_>D?dV5Xf$oTUa)d_oFeH z<+r!(QZ^Kz>h#oM6e$%Qe@e4$1;&Ky&Z7c}kUQ-69Ov#VYYvi+_r?Es{lWi(e6l^E zpUF=yME@Y4(2~UdIoUtx)e9tL5+eA2KUZ~GCEoDMy!Vny0N(l6b^B0fO2xd+M1T1_ zq9)Dwy8kXY6bRB%KG1_XN@i5Ms|Y-x z)`Y*ck_keO7cBV%*9Je)l)gW1qaHK%xF3*#y9yfli^_q95N(2<6fJ``;c9%I)GXDX z+@mD^QM`nrn~z)P$Kz_Xf9;i!<~&vnH0F@%_Opv}_PnjhW&PG+%qXu%!lWD5I(3u+iGb=52t4Rv5c`yH7m zj_2)}<>bwM$&mOycG=yVtLr2XrRKYimF;0ooh!+@yF3fXf??2*c;iBG-JQmKqWc7F zu<#hE_*{>1Lx-#SY^rMXu($_P$G9cWM7Hs8{>;}pNcXZqUxI;@cfs}{rqg%IO;Md z*^4KURQvM{)v2Q6Jx_79jgy$-&#Deg@2wkFQh;|ENt@#))BXf5ItTb~V9Ai3etW8U;&kI{Fq5lm-# z)_<>&v2`#W?~ySd$e#d+h96**v^nd^Dg7<>fbV41I{F@B(TP{pjig|8XL{@K!E%$g z-tCJk<)i|E&|DE0f8WGImv%CQP;Dx8jPn zOWLMay~O$eNkF#0BGDGp3f;5bTbqj1&-2M_8lS@%eMG+66xk+zDE{e+f4d-uyhCJT zNi8$EoY_~I|IKga^3I>Q^{3AWQ~8$T)HJz)HsSb7!aOuco!>-lwk2A5ENX><*S2Kr z3Ei(v!XYPaUDt%_j8fwY;t&C5XT1xgq@}KR;RdEDh|weQW~^B9RZJ0^gu0$yd$t0t zwbJU(dZjDP&sDJU83TNOtH>bk2-pWTP=i5=`muU=KR^_5f zDp}sG@Q~MC<~Gy&pvFbTNZ6}Gog~z|-ApMRvSnFVV(rFnuxrSNr8zAu6V3PH@jUol z-3b~8nTZ-Kj$j`yT1NR~nShf;>_Sf1e1h9Hw>8-yBzU6Xc3+eH>A;m-gkbAEdwH}i z7`R{4^$PP0!*W3d5aof{#k`zctW#jEJ0_ZFc3b`JIkq5mPRH_TnFRQ9)X&_S#(SNA=7tU}|l~Iyx@)Z`s7x3Ip|- z@O!BWJK^KxzYe)7$&{MPl{k3qU(+ZI%O;#*R!)b7T1}$g*JEhTzxJa?D)zzJ>i*