Booking Calendar - Version 9.2

Version Description

  • Changes in all versions:
    • New. modern toolbar with handy buttons, dropdown lists and other elements that have been redesigned and rearranged in a new smarter way.
    • New. Refreshed colors of labels, icons, buttons and other UI elements for modern and clear look.
    • New. Rearranged content of booking details in unified way for all Booking Calendar versions.
    • New. Instant showing booking listing, using ajax without page reloading when filtering search results. Single page app design.
    • New. Immediate searching of bookings for a specific keyword. Reservations are displayed just after entering a specific keyword without other user actions.
    • New. Highlighting certain keywords in booking details to make it easier to find specific data when entering keywords.
    • New. Saving any choice of filter options (select-boxes and other UI toolbar elements), toolbar selection or user options personally for each user. User will see last configured search filter parameters each time, when open admin panel.
    • New. Keeping last selected filter or actions toolbar, during each time, when user open booking admin panel. No need to define default state of toolbars in the settings.
    • New. User options toolbar, where possible to select "Emails sending" on specific actions or "Show notes" by default (in paid versions).
    • New. Print feature is available in the Free version.
    • New. Print layout displaying the exact content of the booking listing page.
    • New. Ability to print any selected bookings**. Possibility to print all bookings / selected bookings / specific single booking.
    • New. Added 2 new filter options Check in today and Check out today to display bookings on the booking list page
    • New. Ability to define and save the locale for each specific booking. This locale is saved and will exist when the following pages are loaded. Previously such option was not saved and was available only in paid versions.
    • New. Show action buttons when such actions can be applied to specific bookings. You need to select bookings to display additional action buttons like "Confirm" or "Reject", etc...
    • Improvement. Smarter structure of request parameters escaping.
    • Lots of other improvements and fixes...
  • Changes in Personal / Business Small / Business Medium / Business Large / MultiUser versions:
    • New. Export CSV functionality. Ability to enter field names to skip from the export.
    • New. Selection export of single or all pages and CSV column separator in pop-up window.
Download this release

Release Info

Developer wpdevelop
Plugin Icon 128x128 Booking Calendar
Version 9.2
Comparing to
See all releases

Code changes from version 9.1.4 to 9.2

Files changed (40) hide show
  1. core/admin/api-settings.php +53 -4
  2. core/admin/page-bookings.php +10 -0
  3. core/admin/page-form-free.php +3 -3
  4. core/admin/page-form-timeslots.php +1 -1
  5. core/admin/wpbc-sql.php +10 -2
  6. core/admin/wpbc-toolbars.php +37 -17
  7. core/any/js/admin-support.js +13 -4
  8. core/class/wpbc-class-welcome.php +286 -134
  9. core/lib/wpbc-ajax.php +2 -2
  10. core/sync/wpbc-gcal-class.php +8 -3
  11. core/sync/wpbc-gcal.php +1 -1
  12. core/wpbc-activation.php +5 -2
  13. core/wpbc-constants.php +1 -8
  14. core/wpbc-include.php +2 -1
  15. core/wpbc-js.php +1 -1
  16. core/wpbc.php +12 -0
  17. includes/_listing_css_js/listing_ui.css +482 -0
  18. includes/_listing_css_js/listing_ui.js +188 -0
  19. includes/_listing_css_js/listing_ui.php +78 -0
  20. includes/_pagination/pagination.css +53 -0
  21. includes/_pagination/pagination.js +35 -0
  22. includes/_pagination/pagination.php +318 -0
  23. includes/_toolbar_ui/_out/toolbar_ui.css +993 -0
  24. includes/_toolbar_ui/_out/toolbar_ui.js +97 -0
  25. includes/_toolbar_ui/_out/toolbar_ui.min.css +2 -0
  26. includes/_toolbar_ui/_out/toolbar_ui.min.js +2 -0
  27. includes/_toolbar_ui/_src/toolbar_ui.css +889 -0
  28. includes/_toolbar_ui/_src/toolbar_ui.js +114 -0
  29. includes/_toolbar_ui/toolbar_ui.php +3652 -0
  30. includes/index.php +2 -0
  31. includes/page-bookings/_out/bookings__actions.js +512 -0
  32. includes/page-bookings/_out/bookings__actions.min.js +2 -0
  33. includes/page-bookings/_out/bookings__hooks.js +143 -0
  34. includes/page-bookings/_out/bookings__hooks.min.js +2 -0
  35. includes/page-bookings/_out/bookings__listing.js +502 -0
  36. includes/page-bookings/_out/bookings__listing.min.js +2 -0
  37. includes/page-bookings/_src/bookings__actions.js +589 -0
  38. includes/page-bookings/_src/bookings__hooks.js +179 -0
  39. includes/page-bookings/_src/bookings__listing.js +534 -0
  40. includes/page-bookings/bookings__actions.php +1899 -0
core/admin/api-settings.php CHANGED
@@ -45,8 +45,8 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
45
  $this->fields = array();
46
 
47
  $default_options_values = wpbc_get_default_options();
48
-
49
-
50
  // <editor-fold defaultstate="collapsed" desc=" C a l e n d a r S e c t i o n " >
51
 
52
  // Calendar Skin /////////////////////////////////////////////////////
@@ -647,7 +647,7 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
647
 
648
 
649
  // <editor-fold defaultstate="collapsed" desc=" Booking Admin Panel " >
650
-
651
  $field_options = array(
652
  'vm_listing' => __('Bookings Listing' ,'booking')
653
  , 'vm_calendar' => __('Calendar Overview' ,'booking')
@@ -662,6 +662,19 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
662
  );
663
 
664
 
 
 
 
 
 
 
 
 
 
 
 
 
 
665
  //Default booking resources
666
  $this->fields = apply_filters( 'wpbc_settings_booking_listing_br_default_count', $this->fields, $default_options_values );
667
 
@@ -1260,7 +1273,43 @@ class WPBC_Settings_API_General extends WPBC_Settings_API {
1260
  public function enqueue_js( $menu_slug, $active_page_tab, $active_page_subtab ) {
1261
 
1262
  $js_script = '';
1263
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1264
  // Hide Legend items
1265
  $js_script .= "
1266
  if ( ! jQuery('#set_gen_booking_is_show_legend').is(':checked') ) {
45
  $this->fields = array();
46
 
47
  $default_options_values = wpbc_get_default_options();
48
+
49
+
50
  // <editor-fold defaultstate="collapsed" desc=" C a l e n d a r S e c t i o n " >
51
 
52
  // Calendar Skin /////////////////////////////////////////////////////
647
 
648
 
649
  // <editor-fold defaultstate="collapsed" desc=" Booking Admin Panel " >
650
+
651
  $field_options = array(
652
  'vm_listing' => __('Bookings Listing' ,'booking')
653
  , 'vm_calendar' => __('Calendar Overview' ,'booking')
662
  );
663
 
664
 
665
+
666
+
667
+ if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
668
+ $this->fields['booking_is_use_old_booking_listing'] = array(
669
+ 'type' => 'checkbox'
670
+ , 'default' => $default_options_values['booking_is_use_old_booking_listing'] //'On'
671
+ , 'title' => __('Use old Booking Listing' ,'booking')
672
+ , 'label' => __( 'Check this box to use old Booking Listing admin panel.', 'booking' ) . ' <strong>' . __( 'Deprecated', 'booking' ) . '!</strong>'
673
+ , 'description' => ''
674
+ , 'group' => 'booking_listing'
675
+ );
676
+ }
677
+
678
  //Default booking resources
679
  $this->fields = apply_filters( 'wpbc_settings_booking_listing_br_default_count', $this->fields, $default_options_values );
680
 
1273
  public function enqueue_js( $menu_slug, $active_page_tab, $active_page_subtab ) {
1274
 
1275
  $js_script = '';
1276
+
1277
+ if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
1278
+ // Hide or Show Booking Listing elements, depends on from checkbox selection
1279
+ $js_script .= " jQuery('#set_gen_booking_is_use_old_booking_listing').on( 'change', function(){
1280
+ if ( this.checked ) {
1281
+ jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_view_days_num').removeClass('hidden_items');
1282
+ jQuery('.wpbc_tr_set_gen_booking_default_toolbar_tab').removeClass('hidden_items');
1283
+ jQuery('.wpbc_tr_set_gen_booking_num_per_page').removeClass('hidden_items');
1284
+ jQuery('.wpbc_tr_set_gen_booking_sort_order').removeClass('hidden_items');
1285
+ jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_csv_export_separator').removeClass('hidden_items');
1286
+ jQuery('.wpbc_tr_set_gen_booking_csv_export_separator').removeClass('hidden_items');
1287
+ jQuery('.wpbc_tr_set_gen_booking_send_emails_off_listing').removeClass('hidden_items');
1288
+ jQuery('.wpbc_tr_set_gen_booking_listing_show_notes').removeClass('hidden_items');
1289
+ } else {
1290
+ jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_view_days_num').addClass('hidden_items');
1291
+ jQuery('.wpbc_tr_set_gen_booking_default_toolbar_tab').addClass('hidden_items');
1292
+ jQuery('.wpbc_tr_set_gen_booking_num_per_page').addClass('hidden_items');
1293
+ jQuery('.wpbc_tr_set_gen_booking_sort_order').addClass('hidden_items');
1294
+ jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_csv_export_separator').addClass('hidden_items');
1295
+ jQuery('.wpbc_tr_set_gen_booking_csv_export_separator').addClass('hidden_items');
1296
+ jQuery('.wpbc_tr_set_gen_booking_send_emails_off_listing').addClass('hidden_items');
1297
+ jQuery('.wpbc_tr_set_gen_booking_listing_show_notes').addClass('hidden_items');
1298
+ }
1299
+ } ); ";
1300
+ $js_script .= "
1301
+ if ( ! jQuery('#set_gen_booking_is_use_old_booking_listing').is(':checked') ) {
1302
+ jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_view_days_num').addClass('hidden_items');
1303
+ jQuery('.wpbc_tr_set_gen_booking_default_toolbar_tab').addClass('hidden_items');
1304
+ jQuery('.wpbc_tr_set_gen_booking_num_per_page').addClass('hidden_items');
1305
+ jQuery('.wpbc_tr_set_gen_booking_sort_order').addClass('hidden_items');
1306
+ jQuery('.wpbc_tr_set_gen_hr_booking_listing_before_csv_export_separator').addClass('hidden_items');
1307
+ jQuery('.wpbc_tr_set_gen_booking_csv_export_separator').addClass('hidden_items');
1308
+ jQuery('.wpbc_tr_set_gen_booking_send_emails_off_listing').addClass('hidden_items');
1309
+ jQuery('.wpbc_tr_set_gen_booking_listing_show_notes').addClass('hidden_items');
1310
+ }
1311
+ ";
1312
+ }
1313
  // Hide Legend items
1314
  $js_script .= "
1315
  if ( ! jQuery('#set_gen_booking_is_show_legend').is(':checked') ) {
core/admin/page-bookings.php CHANGED
@@ -151,6 +151,16 @@ function wpbc_define_listing_page_parameters( $page_tag ) {
151
  return;
152
  }
153
 
 
 
 
 
 
 
 
 
 
 
154
  // Get saved filters set, (if its not set in request yet), like "tab" & "view_mode" and overload $_REQUEST
155
  wpbc_set_default_saved_params_to_request_for_booking_listing( 'default' );
156
  }
151
  return;
152
  }
153
 
154
+ if (
155
+ ( WPBC_EXIST_NEW_BOOKING_LISTING )
156
+ && ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
157
+ ) {
158
+ $booking_default_view_mode = wpbc_get_default_saved_view_mode_for_wpbc_page();
159
+ if ( ! isset( $_REQUEST['view_mode'] ) ) {
160
+ $_REQUEST['view_mode'] = $booking_default_view_mode; // Set to REQUEST
161
+ }
162
+ }
163
+
164
  // Get saved filters set, (if its not set in request yet), like "tab" & "view_mode" and overload $_REQUEST
165
  wpbc_set_default_saved_params_to_request_for_booking_listing( 'default' );
166
  }
core/admin/page-form-free.php CHANGED
@@ -1430,8 +1430,8 @@ class WPBC_Page_SettingsFormFieldsFree extends WPBC_Page_Structure {
1430
 
1431
  $('.wpbc_input_table').on( 'focus click', 'input', function( e ) {
1432
 
1433
- $this_table = $(this).closest('table');
1434
- $this_row = $(this).closest('tr');
1435
 
1436
  if ( ( e.type == 'focus' && hasFocus != $this_row.index() ) || ( e.type == 'click' && $(this).is(':focus') ) ) {
1437
 
@@ -1568,7 +1568,7 @@ class WPBC_Page_SettingsFormFieldsFree extends WPBC_Page_Structure {
1568
  var field_type_array = [ 'text', 'textarea', 'select', 'checkbox' , 'rangetime']; //FixIn: TimeFreeGenerator
1569
  var field_type;
1570
 
1571
- for (i = 0; i < field_type_array.length; i++) {
1572
  field_type = field_type_array[i];
1573
 
1574
  if ( ! jQuery('#' + field_type + '_field_generator_name').is(':disabled') ){ //FixIn: TimeFreeGenerator
1430
 
1431
  $('.wpbc_input_table').on( 'focus click', 'input', function( e ) {
1432
 
1433
+ var $this_table = $(this).closest('table');
1434
+ var $this_row = $(this).closest('tr');
1435
 
1436
  if ( ( e.type == 'focus' && hasFocus != $this_row.index() ) || ( e.type == 'click' && $(this).is(':focus') ) ) {
1437
 
1568
  var field_type_array = [ 'text', 'textarea', 'select', 'checkbox' , 'rangetime']; //FixIn: TimeFreeGenerator
1569
  var field_type;
1570
 
1571
+ for (var i = 0; i < field_type_array.length; i++) {
1572
  field_type = field_type_array[i];
1573
 
1574
  if ( ! jQuery('#' + field_type + '_field_generator_name').is(':disabled') ){ //FixIn: TimeFreeGenerator
core/admin/page-form-timeslots.php CHANGED
@@ -636,7 +636,7 @@ function wpbc_timeslots_table_config_js() {
636
 
637
  // Update A C T I O N for Delete buttons :: firstly Remove all "Delete" actions and then Add "Delete" button actions.
638
  jQuery( '.wpbc_input_table .delete_time_bk_link' ).off( 'click' );
639
- is_show_confirm = false;
640
  wpbc_activate_table_row_delete( '.wpbc_input_table .delete_time_bk_link', is_show_confirm );
641
 
642
  });
636
 
637
  // Update A C T I O N for Delete buttons :: firstly Remove all "Delete" actions and then Add "Delete" button actions.
638
  jQuery( '.wpbc_input_table .delete_time_bk_link' ).off( 'click' );
639
+ var is_show_confirm = false;
640
  wpbc_activate_table_row_delete( '.wpbc_input_table .delete_time_bk_link', is_show_confirm );
641
 
642
  });
core/admin/wpbc-sql.php CHANGED
@@ -31,8 +31,16 @@ function wpbc_get_default_saved_view_mode_for_wpbc_page() {
31
 
32
  //FixIn: 9.2.1
33
  if ( ! in_array( $booking_default_view_mode, array( 'vm_calendar', 'vm_listing', 'vm_booking_listing' ) ) )
34
- $booking_default_view_mode = 'vm_listing';
35
-
 
 
 
 
 
 
 
 
36
  return $booking_default_view_mode; // 'vm_calendar' / 'vm_listing' ;
37
  }
38
 
31
 
32
  //FixIn: 9.2.1
33
  if ( ! in_array( $booking_default_view_mode, array( 'vm_calendar', 'vm_listing', 'vm_booking_listing' ) ) )
34
+ $booking_default_view_mode = 'vm_listing';
35
+
36
+ if (
37
+ ( WPBC_EXIST_NEW_BOOKING_LISTING )
38
+ && ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
39
+ && ( 'vm_listing' == $booking_default_view_mode )
40
+ ) {
41
+ $booking_default_view_mode = 'vm_booking_listing';
42
+ }
43
+
44
  return $booking_default_view_mode; // 'vm_calendar' / 'vm_listing' ;
45
  }
46
 
core/admin/wpbc-toolbars.php CHANGED
@@ -463,25 +463,35 @@ function wpbc_toolbar_btn__view_mode() {
463
 
464
  $params = array();
465
 
466
- if ( function_exists( 'wpbc_ajx_get__request_params__names_default' ) ) {
 
 
 
 
 
 
 
467
  $params['btn_vm_listing_new'] = array(
468
  'title' => ''
469
  , 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
470
- , 'selected' => ( $selected_view_mode == 'vm_booking_listing' ) ? true : false
471
  , 'link' => wpbc_get_bookings_url('booking-listing', true ) . '&view_mode=vm_booking_listing'
472
  , 'icon' => ''
473
  , 'font_icon' => 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
474
  );
 
 
 
 
 
 
 
 
 
 
 
475
  }
476
 
477
- $params['btn_vm_listing'] = array(
478
- 'title' => ''
479
- , 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
480
- , 'selected' => ( $selected_view_mode == 'vm_listing' ) ? true : false
481
- , 'link' => $bk_admin_url . '&view_mode=vm_listing'
482
- , 'icon' => ''
483
- , 'font_icon' => ( function_exists( 'wpbc_ajx_get__request_params__names_default' ) ) ? 'wpbc-bi-card-list' : 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
484
- );
485
 
486
 
487
  $bk_admin_url = wpbc_get_params_in_url( wpbc_get_bookings_url( false ) , array() // Exclude Value of this parameter
@@ -2374,7 +2384,7 @@ function wpbc_datepicker_js() {
2374
  maxDate: null, //'1Y',
2375
  showStatus: false,
2376
  multiSeparator: ', ',
2377
- closeAtTop: false,
2378
  firstDay:<?php echo get_bk_option( 'booking_start_day_weeek' ); ?>,
2379
  gotoCurrent: false,
2380
  hideIfNoPrevNext:true,
@@ -2393,11 +2403,21 @@ function wpbc_datepicker_js() {
2393
 
2394
  /** Support CSS - datepick, etc... */
2395
  function wpbc_datepicker_css(){
 
 
 
 
2396
  ?>
2397
  <style type="text/css">
2398
- #datepick-div .datepick-header {
2399
- width: 172px !important;
2400
- }
 
 
 
 
 
 
2401
  #datepick-div {
2402
  -border-radius: 3px;
2403
  -box-shadow: 0 0 2px #888888;
@@ -2405,16 +2425,16 @@ function wpbc_datepicker_css(){
2405
  -webkit-box-shadow: 0 0 2px #888888;
2406
  -moz-border-radius: 3px;
2407
  -moz-box-shadow: 0 0 2px #888888;
2408
- width: 172px !important;
2409
  }
2410
  #datepick-div .datepick .datepick-days-cell a{
2411
  font-size: 12px;
2412
  }
2413
  #datepick-div table.datepick tr td {
2414
  border-top: 0 none !important;
2415
- line-height: 24px;
2416
  padding: 0 !important;
2417
- width: 24px;
2418
  }
2419
  #datepick-div .datepick-control {
2420
  font-size: 10px;
463
 
464
  $params = array();
465
 
466
+
467
+ if (
468
+ ( WPBC_EXIST_NEW_BOOKING_LISTING )
469
+ && ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
470
+ ) {
471
+
472
+ $is_selected = ( ( $selected_view_mode == 'vm_booking_listing' ) || ( $selected_view_mode == 'vm_listing' ) ) ? true : false;
473
+
474
  $params['btn_vm_listing_new'] = array(
475
  'title' => ''
476
  , 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
477
+ , 'selected' => $is_selected
478
  , 'link' => wpbc_get_bookings_url('booking-listing', true ) . '&view_mode=vm_booking_listing'
479
  , 'icon' => ''
480
  , 'font_icon' => 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
481
  );
482
+
483
+ } else {
484
+ $is_selected = ( ( $selected_view_mode == 'vm_booking_listing' ) || ( $selected_view_mode == 'vm_listing' ) ) ? true : false;
485
+ $params['btn_vm_listing'] = array(
486
+ 'title' => ''
487
+ , 'hint' => array( 'title' => __('Booking Listing' ,'booking') , 'position' => 'top' )
488
+ , 'selected' => $is_selected
489
+ , 'link' => $bk_admin_url . '&view_mode=vm_listing'
490
+ , 'icon' => ''
491
+ , 'font_icon' => ( function_exists( 'wpbc_ajx_get__request_params__names_default' ) ) ? 'wpbc-bi-card-list' : 'wpbc-bi-collection'//'glyphicon glyphicon-align-justify'
492
+ );
493
  }
494
 
 
 
 
 
 
 
 
 
495
 
496
 
497
  $bk_admin_url = wpbc_get_params_in_url( wpbc_get_bookings_url( false ) , array() // Exclude Value of this parameter
2384
  maxDate: null, //'1Y',
2385
  showStatus: false,
2386
  multiSeparator: ', ',
2387
+ closeAtTop: null,//!false,
2388
  firstDay:<?php echo get_bk_option( 'booking_start_day_weeek' ); ?>,
2389
  gotoCurrent: false,
2390
  hideIfNoPrevNext:true,
2403
 
2404
  /** Support CSS - datepick, etc... */
2405
  function wpbc_datepicker_css(){
2406
+
2407
+ $width = 240;
2408
+ $height = 35;
2409
+
2410
  ?>
2411
  <style type="text/css">
2412
+ #datepick-div .datepick-header {
2413
+ width: <?php echo $width ?>px !important;
2414
+ }
2415
+ #datepick-div .datepick-days-cell {
2416
+ height: <?php echo $height ?>px !important;
2417
+ }
2418
+ #datepick-div .datepick-control {
2419
+ display: none;
2420
+ }
2421
  #datepick-div {
2422
  -border-radius: 3px;
2423
  -box-shadow: 0 0 2px #888888;
2425
  -webkit-box-shadow: 0 0 2px #888888;
2426
  -moz-border-radius: 3px;
2427
  -moz-box-shadow: 0 0 2px #888888;
2428
+ width: <?php echo $width ?>px !important;
2429
  }
2430
  #datepick-div .datepick .datepick-days-cell a{
2431
  font-size: 12px;
2432
  }
2433
  #datepick-div table.datepick tr td {
2434
  border-top: 0 none !important;
2435
+ /*line-height: 24px;*/
2436
  padding: 0 !important;
2437
+ /*width: 24px;*/
2438
  }
2439
  #datepick-div .datepick-control {
2440
  font-size: 10px;
core/any/js/admin-support.js CHANGED
@@ -118,10 +118,19 @@ function wpbc_admin_show_message( message, m_type, m_delay, is_append ){
118
  }
119
 
120
  var alert_class = 'notice '; //'alert ';
121
- if (m_type == 'error') alert_class += 'notice-error '; //'alert-danger ';
122
- if (m_type == 'warning') alert_class += 'notice-warning ';
 
 
 
 
 
 
123
  if (m_type == 'info') alert_class += 'notice-info '; //'alert-info ';
124
- if (m_type == 'success') alert_class += 'alert-success updated ';
 
 
 
125
 
126
  // var ajx_working_content = '';
127
  // if ( is_append )
@@ -352,7 +361,7 @@ function wpbc_submit_client_form( submit_form, wpdev_active_locale ){
352
  var element;
353
  var el_type;
354
 
355
- for (i=0; i<count; i++) {
356
  element = submit_form.elements[i];
357
 
358
  if ( (element.type !=='button') && (element.type !=='hidden') ) {
118
  }
119
 
120
  var alert_class = 'notice '; //'alert ';
121
+ if (m_type == 'error'){
122
+ alert_class += 'notice-error ';
123
+ message = '<i style="margin-right: 0.5em;color: #d63638;" class="menu_icon icon-1x wpbc_icn_report_gmailerrorred"></i>' + message;
124
+ } //'alert-danger ';
125
+ if (m_type == 'warning'){
126
+ alert_class += 'notice-warning ';
127
+ message = '<i style="margin-right: 0.5em;color: #e9aa04;" class="menu_icon icon-1x wpbc_icn_warning"></i>' + message;
128
+ };
129
  if (m_type == 'info') alert_class += 'notice-info '; //'alert-info ';
130
+ if ( m_type == 'success' ){
131
+ alert_class += 'alert-success updated ';
132
+ message = '<i style="margin-right: 0.5em;color: #64aa45;" class="menu_icon icon-1x wpbc_icn_done_outline"></i>' + message;
133
+ }
134
 
135
  // var ajx_working_content = '';
136
  // if ( is_append )
361
  var element;
362
  var el_type;
363
 
364
+ for (var i=0; i<count; i++) {
365
  element = submit_form.elements[i];
366
 
367
  if ( (element.type !=='button') && (element.type !=='hidden') ) {
core/class/wpbc-class-welcome.php CHANGED
@@ -435,167 +435,319 @@ class WPBC_Welcome {
435
  </td>
436
  </tr>
437
  </table>
438
- <?php
439
-
440
 
441
  $this->maintence_section();
442
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
443
- // 9.0
444
- ////////////////////////////////////////////////////////////////////////////////////////////////////////////
445
- ?>
446
- <h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
447
- font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.1</span></h2><?php
448
-
449
- ?><div class="feature-section two-col">
450
- <div class="col col-1" style="flex: 1 1 75%;width: 100%;">
451
- <img src="<?php echo $this->asset_path; ?>9.1/9.1_new_popovers2.png"
452
- style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
453
- class="wpbc-section-image" />
454
- </div>
455
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
456
- <?php echo
457
- '<h4>' .wpbc_recheck_strong_symbols( 'New Popover and Tooltips' ) . '</h4>' .
458
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
459
- . '<li>' . wpbc_recheck_strong_symbols( 'Faster and more accurate display of beautiful and informative popovers and tooltips. New script for displaying popover and tooltips in the Booking Calendar.' ) . '</li>'
460
- . '<li>' . wpbc_recheck_strong_symbols( 'For 2 or more bookings on the Timeline and Calendar Overview page, the system displays the title of the bookings exactly near to the specific booking details in popovers' ) . '</li>'
461
- . '<li>' . wpbc_recheck_strong_symbols( 'Avoiding script conflicts regarding popovers and tooltips' ) . '</li>'
462
- . '</ul>';
463
- ?>
464
- <!--span style="font-size:0.8em;padding:1em;">* This feature is available in the Booking Calendar Business Small or higher versions.</span-->
465
- </div>
466
- </div><?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
467
 
468
  $this->show_separator();
469
 
470
- ?><div class="feature-section two-col">
471
- <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
 
 
 
 
 
 
 
 
 
 
 
 
 
472
  <?php echo
473
- '<h4>' .wpbc_recheck_strong_symbols( 'New UI elements' ) . '</h4>' .
474
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
475
- . '<li>' . wpbc_recheck_strong_symbols( '**Icons for UI elements** in the booking admin panel.' ) . '</li>'
476
- . '<li>' . wpbc_recheck_strong_symbols( '**Booking Calendar Icon** for WordPress side menu.' ) . '</li>'
477
- . '</ul>' .
478
- '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
479
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
480
- . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Separate library for modal windows to prevent script conflicts' ) . '</li>'
481
- //. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Removing old Bootstrap library' ) . '</li>'
482
- //. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of showing "Warning! Number of check in != check out times." after import .ics feed with specific start/end time' ) . '</li>'
483
- //. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of not hiding booked time slots after selecting date in calendar, for the bookings that was imported from ics feed with specific timeslots' ) . '</li>'
484
- //. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of unable expand or collapse right side WordPress menu, while opened Booking Calendar pages.' ) . '</li>'
485
- . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
486
- . '</ul>';
487
- ?>
488
- </div>
489
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
490
 
491
- <img src="<?php echo $this->asset_path; ?>9.1/9.1_new_icons2.png"
492
- style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
493
- class="wpbc-section-image" />
494
- <div style="font-style:italic;font-size:0.75em;padding:1em;text-align: right;">* This picture from paid version of Booking Calendar</div>
495
- </div>
496
- </div><?php
497
 
498
  $this->show_separator();
499
 
 
500
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
501
- // 9.0
502
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
503
  ?>
504
- <h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
505
- font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.0</span></h2><?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
506
 
507
- ?><div class="feature-section two-col">
508
- <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
509
- <?php echo
510
- '<h4>' .wpbc_recheck_strong_symbols( 'Time slots' ) . '</h4>' .
511
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
512
- . '<li>' . wpbc_recheck_strong_symbols( 'Showing **time slots as dots** in calendar day cells. Modern and beautiful view of time slots within calendar days.' ) . '</li>'
513
- . '<li>' . wpbc_recheck_strong_symbols( 'Display the **exact number** of booked **time slots** in calendar day cells. System shows **as many dots** (time slots) as many time slots have been booked for a particular day. Your customers can see occupancy by time interval from the beginning of the calendar view.' ) . '</li>'
514
- . '<li>' . wpbc_recheck_strong_symbols( '**Improvement** CSS styling in all calendar skins. If you have customized a calendar skin before, check the changes in the new calendar skins marked with a number: 8.9.4.13 ' ) . '</li>'
515
- . '</ul>';
516
- ?>
517
- </div>
518
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
519
 
520
- <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-time-slots.png"
521
- style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
522
- class="wpbc-section-image" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
523
 
524
- </div>
525
- </div><?php
526
 
527
- $this->show_separator();
 
 
 
528
 
529
- ?><div class="feature-section two-col">
530
- <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
531
- <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-co2.png"
532
- style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
533
- class="wpbc-section-image" />
534
- </div>
535
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
536
- <?php echo
537
- '<h4>' .wpbc_recheck_strong_symbols( 'Change over days' ) . '</h4>' .
538
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
539
- . '<li>' . wpbc_recheck_strong_symbols( 'Accurate clear display of the diagonal change over days line. Now it correctly shows the **diagonal line for any shape of day cells** (square or rectangle). This means that for any calendar size you will see the correct sharp diagonal line.' ) . '</li>'
540
- . '<li>' . wpbc_recheck_strong_symbols( 'Show **diagonal line in dates**, where we have check in/out bookings with the **same status (pending or approved)**. It is useful to see where one booking ends and another begins when both bookings are pending or approved. Previously it was shown just full booked date without diagonal line.' ) . '</li>'
541
- . '<li>' . wpbc_recheck_strong_symbols( 'The ability to use **change over days only on certain pages**. Useful in a situation where you need to make a booking with change over days at on a certain page(s) (check in/out dates with diagonal lines) and make bookings for specific time slots on another page(s). You can define list of pages on which to use this feature at the Booking > Settings General page in "Calendar" section.' ) . '</li>'
542
- . '</ul>';
543
- ?>
544
- <span style="font-size:0.8em;padding:1em;">* This feature is available in the Booking Calendar Business Small or higher versions.</span>
545
- </div>
546
  </div><?php
547
 
548
- $this->show_separator();
549
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
550
 
551
- ?><div class="feature-section one-col">
552
- <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
553
- <?php echo '<h4>' .wpbc_recheck_strong_symbols( 'Timeline' ) . '</h4>' ;?>
554
- <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-timeline.png"
555
- style="margin:30px 5px 0;width: 100%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
556
- class="wpbc-section-image" />
557
- </div>
558
- <div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
559
- <?php echo
560
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
561
- . '<li>' . wpbc_recheck_strong_symbols( '**Timeline**. Ability to **define how many days to show in Timeline** at the front-end side, while showing Timeline for one booking resource, and select "**Month view mode**" in shortcode (parameter "view_days_num=30" or this parameter skipped). You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
562
- . '<li>' . wpbc_recheck_strong_symbols( '**Calendar Overview** page. Ability to **define how many days to show** in the Calendar Overview page in the admin panel, while showing Calendar Overview page for one booking resource, and selected "**Day view mode**". You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
563
- . '<li>' . wpbc_recheck_strong_symbols( 'Timeline / Calendar Overview page. Scroll exactly the number of days (for one booking resource, and select "Month view mode" / "Day view mode"), that was defined at option "Days number to show in Month mode in Timeline" / "Days number to show in Day view mode in Calendar Overview page".' ) . '</li>'
564
- . '<li>' . wpbc_recheck_strong_symbols( 'Separate settings sections for "Calendar Overview" | "Timeline" options at the Booking > Settings General page.' ) . '</li>'
565
- . '</ul>';
566
- ?>
567
- </div>
568
- </div><?php
569
 
570
- $this->show_separator();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
571
 
572
- ?><div class="feature-section two-col">
573
- <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
574
- <?php echo
575
- '<h4>' .wpbc_recheck_strong_symbols( 'Translations' ) . '</h4>' .
576
- '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
577
- . '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to define where firstly plugin tries to use translations from "../wp-content/languages/plugins/", or from "../wp-content/plugins/{Booking Calendar Folder}/languages/" folder. You can change this behavior at the Booking > Settings General page.' ) . '</li>'
578
- . '<li>' . wpbc_recheck_strong_symbols( '**New**. Force plugin translation update. Download and update plugin translations from WordPress translation repository and from wpbookingcalendar.com You can make updates at Booking > Settings General page in Translation section.' ) . '</li>'
579
- . '<li>' . wpbc_recheck_strong_symbols( '**New**. Check translation status at WordPress translation repository and local translation from wpbookingcalendar.com to understand what translation to load. You can check it at the Booking > Settings General page in the Translation section.' ) . '</li>'
580
- . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Booking Calendar by default does not contain MO and PO translation files. You can force download them at the Booking > Settings General page in the Translation section.' ) . '</li>'
581
- . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Switching language/locale by using "Globe icon" in the Booking Listing page has higher priority than switching languages by translation plugins.' ) . '</li>'
582
- . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Optimization structure of country list file for future translations.' ) . '</li>'
583
- . '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support WPML 4.5.4' ) . '</li>'
584
- . '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support Polylang 3.1.4' ) . '</li>'
585
- . '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support qTranslate-X 3.4.6.8 (Currently closed "qTranslate-X", was tested with Booking Calendar in php 5.6)' ) . '</li>'
586
- . '</ul>';
587
- ?>
588
- </div>
589
- <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
590
 
591
- <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-translations.png"
592
- style="margin:30px 5px 0;width: 62%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
593
- class="wpbc-section-image" />
594
 
595
- </div>
596
- </div><?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
597
 
598
- $this->show_separator();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
599
 
600
  // <editor-fold defaultstate="collapsed" desc=" 8.9 " >
601
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
435
  </td>
436
  </tr>
437
  </table>
438
+ <?php
 
439
 
440
  $this->maintence_section();
441
+
442
+
443
+
444
+
445
+ ?><h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
446
+ font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.2</span></h2><?php
447
+
448
+ ?><div class="feature-section one-col">
449
+ <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
450
+ <?php echo '<h4>' .wpbc_recheck_strong_symbols( 'New Booking Listing - modern looking & instant working' ) . '</h4>' ;?>
451
+ <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_text_searching_long.png"
452
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
453
+ class="wpbc-section-image" />
454
+ </div>
455
+ <div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
456
+ <?php echo
457
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
458
+ . '<li>' . wpbc_recheck_strong_symbols( '**New modern toolbar** with handy buttons, dropdown lists and other elements that have been redesigned and rearranged in a new smarter way.' ) . '</li>'
459
+ . '<li>' . wpbc_recheck_strong_symbols( '**Refreshed colors** of labels, icons, buttons and other UI elements for modern and clear look.' ) . '</li>'
460
+ . '<li>' . wpbc_recheck_strong_symbols( 'Rearranged content of booking details in unified way for all Booking Calendar versions.' ) . '</li>'
461
+ . '</ul>';
462
+ ?>
463
+ </div>
464
+ </div><?php
465
+
466
+ $this->show_separator();
467
+
468
+ ?><div class="feature-section two-col">
469
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
470
+ <?php echo
471
+ '<h4>' .wpbc_recheck_strong_symbols( 'Instant working without page reloading' ) . '</h4>' .
472
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
473
+ . '<li>' . wpbc_recheck_strong_symbols( '**Instant showing booking listing**, using ajax without page reloading when filtering search results. Single page app design.' ) . '</li>'
474
+ . '<li>' . wpbc_recheck_strong_symbols( 'Immediate **searching** of bookings for a **specific keyword**. Reservations are displayed just after entering a specific keyword without other user actions.' ) . '</li>'
475
+ . '<li>' . wpbc_recheck_strong_symbols( '**Highlighting** certain **keywords** in booking details to make it easier to find specific data when entering keywords.' ) . '</li>'
476
+ . '</ul>' ;
477
+ ?>
478
+ </div>
479
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
480
+
481
+ <img src="<?php echo $this->asset_path; ?>9.2/screenshot-01_high_res.gif"
482
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
483
+ class="wpbc-section-image" />
484
+ </div>
485
+ </div><?php
486
+
487
+ $this->show_separator();
488
+
489
+ ?><div class="feature-section two-col">
490
+ <div class="col col-1" style="flex: 1 1 75%;width: 100%;">
491
+ <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_dates_filtering.png"
492
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
493
+ class="wpbc-section-image" />
494
+ </div>
495
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
496
+ <?php echo
497
+ '<h4>' .wpbc_recheck_strong_symbols( 'User Saved Options' ) . '</h4>' .
498
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
499
+ . '<li>' . wpbc_recheck_strong_symbols( '**Saving** any choice of **filter options** (select-boxes and other UI toolbar elements), toolbar selection or user options **personally for each user**. User will see last configured search filter parameters each time, when open admin panel.' ) . '</li>'
500
+ . '<li>' . wpbc_recheck_strong_symbols( '**Keeping** last selected **filter or actions toolbar**, during each time, when user open booking admin panel. No need to define default state of toolbars in the settings.' ) . '</li>'
501
+ . '<li>' . wpbc_recheck_strong_symbols( '**New user options toolbar**, where possible to select "Emails sending" on specific actions or "Show notes" by default (in paid versions).' ) . '</li>'
502
+ . '</ul>';
503
+ ?>
504
+ </div>
505
+ </div><?php
506
+
507
+ $this->show_separator();
508
+
509
+ ?><div class="feature-section two-col">
510
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
511
+ <?php echo
512
+ '<h4>' .wpbc_recheck_strong_symbols( 'Print functionality' ) . '</h4>' .
513
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
514
+ . '<li>' . wpbc_recheck_strong_symbols( 'The new **print feature** is available in the **Free version**.' ) . '</li>'
515
+ . '<li>' . wpbc_recheck_strong_symbols( 'New **print layout** displaying the exact content of the booking listing page.' ) . '</li>'
516
+ . '<li>' . wpbc_recheck_strong_symbols( '**Print any selected bookings**. Possibility to print all bookings / selected bookings / specific single booking.' ) . '</li>'
517
+
518
+ . '</ul>' ;
519
+ ?>
520
+ </div>
521
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 70%;">
522
+
523
+ <img src="<?php echo $this->asset_path; ?>9.2/booking_listing_printing.png"
524
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
525
+ class="wpbc-section-image" />
526
+ </div>
527
+ </div><?php
528
 
529
  $this->show_separator();
530
 
531
+
532
+
533
+ ?><div class="feature-section two-col">
534
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
535
+ <?php echo
536
+ '<h4>' .wpbc_recheck_strong_symbols( 'Other new features' ) . '</h4>' .
537
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
538
+ . '<li>' . wpbc_recheck_strong_symbols( 'Added 2 new filter options **Check in today** and **Check out today** to display bookings on the booking list page' ) . '</li>'
539
+ . '<li>' . wpbc_recheck_strong_symbols( 'Ability to define and **save the locale for each specific booking**. This locale is saved and will exist when the following pages are loaded.' ) . '</li>'
540
+ . '<li>' . wpbc_recheck_strong_symbols( '**Show action** buttons when such actions **can be applied to specific bookings**. You need to select bookings to display additional action buttons like "Confirm" or "Reject", etc...' ) . '</li>'
541
+
542
+ . '</ul>' ;
543
+ ?>
544
+ </div>
545
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
546
  <?php echo
547
+ '<h4>' .wpbc_recheck_strong_symbols( 'CSV Export (paid versions)' ) . '</h4>' .
548
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
549
+ . '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to enter **field names to skip** from the export.' ) . '</li>'
550
+ . '<li>' . wpbc_recheck_strong_symbols( 'Selection **export of single or all pages** and CSV column separator in pop-up window.' ) . '</li>'
551
+ . '</ul>'; ?>
552
+ <?php echo
553
+ '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
554
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
555
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Smarter structure of request parameters escaping.' ) . '</li>'
556
+ . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
557
+ . '</ul>'; ?>
558
+ </div>
559
+ </div><?php
560
+
561
+
562
+
 
563
 
 
 
 
 
 
 
564
 
565
  $this->show_separator();
566
 
567
+ // <editor-fold defaultstate="collapsed" desc=" 9.1 " >
568
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
569
+ // 9.1
570
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
571
  ?>
572
+ <div class="clear" style="margin-top:20px;"></div>
573
+ <a id="wpbc_show_advanced_section_link_show" class="wpbc_expand_section_link" href="javascript:void(0)"
574
+ onclick="javascript:jQuery( '.version_update_9_1' ).toggle();"
575
+ >+ Show changes in version update <span style="font-size: 1.35em;font-weight: 600;color: #079;font-family: Consolas,Monaco,monospace;padding-left:12px;">9.1</span></a>
576
+
577
+ <div class="version_update_9_1" style="display:none;">
578
+
579
+ <h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
580
+ font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.1</span></h2><?php
581
+
582
+ ?><div class="feature-section two-col">
583
+ <div class="col col-1" style="flex: 1 1 75%;width: 100%;">
584
+ <img src="<?php echo $this->asset_path; ?>9.1/9.1_new_popovers2.png"
585
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
586
+ class="wpbc-section-image" />
587
+ </div>
588
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
589
+ <?php echo
590
+ '<h4>' .wpbc_recheck_strong_symbols( 'New Popover and Tooltips' ) . '</h4>' .
591
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
592
+ . '<li>' . wpbc_recheck_strong_symbols( 'Faster and more accurate display of beautiful and informative popovers and tooltips. New script for displaying popover and tooltips in the Booking Calendar.' ) . '</li>'
593
+ . '<li>' . wpbc_recheck_strong_symbols( 'For 2 or more bookings on the Timeline and Calendar Overview page, the system displays the title of the bookings exactly near to the specific booking details in popovers' ) . '</li>'
594
+ . '<li>' . wpbc_recheck_strong_symbols( 'Avoiding script conflicts regarding popovers and tooltips' ) . '</li>'
595
+ . '</ul>';
596
+ ?>
597
+ <!--span style="font-size:0.8em;padding:1em;">* This feature is available in the Booking Calendar Business Small or higher versions.</span-->
598
+ </div>
599
+ </div><?php
600
 
601
+ $this->show_separator();
 
 
 
 
 
 
 
 
 
 
 
602
 
603
+ ?><div class="feature-section two-col">
604
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
605
+ <?php echo
606
+ '<h4>' .wpbc_recheck_strong_symbols( 'New UI elements' ) . '</h4>' .
607
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
608
+ . '<li>' . wpbc_recheck_strong_symbols( '**Icons for UI elements** in the booking admin panel.' ) . '</li>'
609
+ . '<li>' . wpbc_recheck_strong_symbols( '**Booking Calendar Icon** for WordPress side menu.' ) . '</li>'
610
+ . '</ul>' .
611
+ '<h4>' .wpbc_recheck_strong_symbols( 'Improvements and fixes' ) . '</h4>' .
612
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
613
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Separate library for modal windows to prevent script conflicts' ) . '</li>'
614
+ //. '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Removing old Bootstrap library' ) . '</li>'
615
+ //. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of showing "Warning! Number of check in != check out times." after import .ics feed with specific start/end time' ) . '</li>'
616
+ //. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of not hiding booked time slots after selecting date in calendar, for the bookings that was imported from ics feed with specific timeslots' ) . '</li>'
617
+ //. '<li>' . wpbc_recheck_strong_symbols( '**Fix**. issue of unable expand or collapse right side WordPress menu, while opened Booking Calendar pages.' ) . '</li>'
618
+ . '<li>' . wpbc_recheck_strong_symbols( 'Lots of other improvements and fixes...' ) . '</li>'
619
+ . '</ul>';
620
+ ?>
621
+ </div>
622
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
623
+
624
+ <img src="<?php echo $this->asset_path; ?>9.1/9.1_new_icons2.png"
625
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
626
+ class="wpbc-section-image" />
627
+ <div style="font-style:italic;font-size:0.75em;padding:1em;text-align: right;">* This picture from paid version of Booking Calendar</div>
628
+ </div>
629
+ </div><?php
630
 
631
+ $this->show_separator();
 
632
 
633
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
634
+ // 9.0
635
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
636
+ ?>
637
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
  </div><?php
639
 
640
+ // </editor-fold>
641
 
642
+ // <editor-fold defaultstate="collapsed" desc=" 9.0 " >
643
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
644
+ // 9.0
645
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
646
+ ?>
647
+ <div class="clear" style="margin-top:20px;"></div>
648
+ <a id="wpbc_show_advanced_section_link_show" class="wpbc_expand_section_link" href="javascript:void(0)"
649
+ onclick="javascript:jQuery( '.version_update_9_0' ).toggle();"
650
+ >+ Show changes in version update <span style="font-size: 1.35em;font-weight: 600;color: #079;font-family: Consolas,Monaco,monospace;padding-left:12px;">9.0</span></a>
651
+
652
+ <div class="version_update_9_0" style="display:none;">
653
+
654
+ <h2 style='font-size: 2.1em;'>What's New in Booking Calendar <span style="font-size: 1.1em;
655
+ font-weight: 600;font-family: Consolas,Monaco,monospace;padding-left: 10px;color: #5F5F5F;">9.0</span></h2><?php
656
+
657
+ ?><div class="feature-section two-col">
658
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
659
+ <?php echo
660
+ '<h4>' .wpbc_recheck_strong_symbols( 'Time slots' ) . '</h4>' .
661
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
662
+ . '<li>' . wpbc_recheck_strong_symbols( 'Showing **time slots as dots** in calendar day cells. Modern and beautiful view of time slots within calendar days.' ) . '</li>'
663
+ . '<li>' . wpbc_recheck_strong_symbols( 'Display the **exact number** of booked **time slots** in calendar day cells. System shows **as many dots** (time slots) as many time slots have been booked for a particular day. Your customers can see occupancy by time interval from the beginning of the calendar view.' ) . '</li>'
664
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement** CSS styling in all calendar skins. If you have customized a calendar skin before, check the changes in the new calendar skins marked with a number: 8.9.4.13 ' ) . '</li>'
665
+ . '</ul>';
666
+ ?>
667
+ </div>
668
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
669
+
670
+ <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-time-slots.png"
671
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
672
+ class="wpbc-section-image" />
673
+
674
+ </div>
675
+ </div><?php
676
 
677
+ $this->show_separator();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
678
 
679
+ ?><div class="feature-section two-col">
680
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
681
+ <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-co2.png"
682
+ style="margin:30px 5px 0;width: 98%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
683
+ class="wpbc-section-image" />
684
+ </div>
685
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
686
+ <?php echo
687
+ '<h4>' .wpbc_recheck_strong_symbols( 'Change over days' ) . '</h4>' .
688
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
689
+ . '<li>' . wpbc_recheck_strong_symbols( 'Accurate clear display of the diagonal change over days line. Now it correctly shows the **diagonal line for any shape of day cells** (square or rectangle). This means that for any calendar size you will see the correct sharp diagonal line.' ) . '</li>'
690
+ . '<li>' . wpbc_recheck_strong_symbols( 'Show **diagonal line in dates**, where we have check in/out bookings with the **same status (pending or approved)**. It is useful to see where one booking ends and another begins when both bookings are pending or approved. Previously it was shown just full booked date without diagonal line.' ) . '</li>'
691
+ . '<li>' . wpbc_recheck_strong_symbols( 'The ability to use **change over days only on certain pages**. Useful in a situation where you need to make a booking with change over days at on a certain page(s) (check in/out dates with diagonal lines) and make bookings for specific time slots on another page(s). You can define list of pages on which to use this feature at the Booking > Settings General page in "Calendar" section.' ) . '</li>'
692
+ . '</ul>';
693
+ ?>
694
+ <span style="font-size:0.8em;padding:1em;">* This feature is available in the Booking Calendar Business Small or higher versions.</span>
695
+ </div>
696
+ </div><?php
697
 
698
+ $this->show_separator();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
699
 
 
 
 
700
 
701
+ ?><div class="feature-section one-col">
702
+ <div class="col col-1" style="flex: 1 1 100%;width: 100%;">
703
+ <?php echo '<h4>' .wpbc_recheck_strong_symbols( 'Timeline' ) . '</h4>' ;?>
704
+ <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-timeline.png"
705
+ style="margin:30px 5px 0;width: 100%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
706
+ class="wpbc-section-image" />
707
+ </div>
708
+ <div class="col col-2 last-feature" style="flex: 1 1 100%;width: 100%;">
709
+ <?php echo
710
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
711
+ . '<li>' . wpbc_recheck_strong_symbols( '**Timeline**. Ability to **define how many days to show in Timeline** at the front-end side, while showing Timeline for one booking resource, and select "**Month view mode**" in shortcode (parameter "view_days_num=30" or this parameter skipped). You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
712
+ . '<li>' . wpbc_recheck_strong_symbols( '**Calendar Overview** page. Ability to **define how many days to show** in the Calendar Overview page in the admin panel, while showing Calendar Overview page for one booking resource, and selected "**Day view mode**". You can define it at the Booking > Settings General page in "Calendar Overview | Timeline" section.' ) . '</li>'
713
+ . '<li>' . wpbc_recheck_strong_symbols( 'Timeline / Calendar Overview page. Scroll exactly the number of days (for one booking resource, and select "Month view mode" / "Day view mode"), that was defined at option "Days number to show in Month mode in Timeline" / "Days number to show in Day view mode in Calendar Overview page".' ) . '</li>'
714
+ . '<li>' . wpbc_recheck_strong_symbols( 'Separate settings sections for "Calendar Overview" | "Timeline" options at the Booking > Settings General page.' ) . '</li>'
715
+ . '</ul>';
716
+ ?>
717
+ </div>
718
+ </div><?php
719
 
720
+ $this->show_separator();
721
+
722
+ ?><div class="feature-section two-col">
723
+ <div class="col col-1" style="flex: 1 1 50%;width: 100%;">
724
+ <?php echo
725
+ '<h4>' .wpbc_recheck_strong_symbols( 'Translations' ) . '</h4>' .
726
+ '<ul style="list-style: disc outside;padding: 20px;margin:0;">'
727
+ . '<li>' . wpbc_recheck_strong_symbols( '**New**. Ability to define where firstly plugin tries to use translations from "../wp-content/languages/plugins/", or from "../wp-content/plugins/{Booking Calendar Folder}/languages/" folder. You can change this behavior at the Booking > Settings General page.' ) . '</li>'
728
+ . '<li>' . wpbc_recheck_strong_symbols( '**New**. Force plugin translation update. Download and update plugin translations from WordPress translation repository and from wpbookingcalendar.com You can make updates at Booking > Settings General page in Translation section.' ) . '</li>'
729
+ . '<li>' . wpbc_recheck_strong_symbols( '**New**. Check translation status at WordPress translation repository and local translation from wpbookingcalendar.com to understand what translation to load. You can check it at the Booking > Settings General page in the Translation section.' ) . '</li>'
730
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Booking Calendar by default does not contain MO and PO translation files. You can force download them at the Booking > Settings General page in the Translation section.' ) . '</li>'
731
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Switching language/locale by using "Globe icon" in the Booking Listing page has higher priority than switching languages by translation plugins.' ) . '</li>'
732
+ . '<li>' . wpbc_recheck_strong_symbols( '**Improvement**. Optimization structure of country list file for future translations.' ) . '</li>'
733
+ . '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support WPML 4.5.4' ) . '</li>'
734
+ . '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support Polylang 3.1.4' ) . '</li>'
735
+ . '<li>' . wpbc_recheck_strong_symbols( '**Compatibility**. Support qTranslate-X 3.4.6.8 (Currently closed "qTranslate-X", was tested with Booking Calendar in php 5.6)' ) . '</li>'
736
+ . '</ul>';
737
+ ?>
738
+ </div>
739
+ <div class="col col-2 last-feature" style="flex: 1 1 auto;width: 60%;">
740
+
741
+ <img src="<?php echo $this->asset_path; ?>9.0/wpbc-9-0-translations.png"
742
+ style="margin:30px 5px 0;width: 62%;box-shadow: 0 1px 3px #aaa;border-radius: 2px;"
743
+ class="wpbc-section-image" />
744
+
745
+ </div>
746
+ </div><?php
747
+
748
+ ?></div><?php
749
+
750
+ // </editor-fold>
751
 
752
  // <editor-fold defaultstate="collapsed" desc=" 8.9 " >
753
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////
core/lib/wpbc-ajax.php CHANGED
@@ -334,6 +334,8 @@ function wpbc_ajax_EMPTY_TRASH() { //FixIn: 8.5.2.24
334
  $user_id = intval( $_POST['user_id'] );
335
  make_bk_action('check_multiuser_params_for_client_side_by_user_id', $user_id );
336
 
 
 
337
  //FixIn: 8.8.0.1
338
  if ( true ) {
339
 
@@ -365,8 +367,6 @@ function wpbc_ajax_EMPTY_TRASH() { //FixIn: 8.5.2.24
365
 
366
  //debuge($sql, $bookings_in_trash );
367
 
368
- $bookings_id_in_trash_arr = array();
369
-
370
  foreach ( $bookings_in_trash as $booking_obj ) {
371
  $bookings_id_in_trash_arr[] = $booking_obj->booking_id;
372
  }
334
  $user_id = intval( $_POST['user_id'] );
335
  make_bk_action('check_multiuser_params_for_client_side_by_user_id', $user_id );
336
 
337
+ $bookings_id_in_trash_arr = array();
338
+
339
  //FixIn: 8.8.0.1
340
  if ( true ) {
341
 
367
 
368
  //debuge($sql, $bookings_in_trash );
369
 
 
 
370
  foreach ( $bookings_in_trash as $booking_obj ) {
371
  $bookings_id_in_trash_arr[] = $booking_obj->booking_id;
372
  }
core/sync/wpbc-gcal-class.php CHANGED
@@ -47,6 +47,7 @@ class WPBC_Google_Calendar {
47
  $this->error = '';
48
  $this->bktype = 1;
49
  $this->is_silent = false;
 
50
  $user = wp_get_current_user();
51
  $this->setUserID( $user->ID );
52
 
@@ -103,7 +104,9 @@ class WPBC_Google_Calendar {
103
  return $this->bktype;
104
  }
105
 
106
-
 
 
107
  public function set_events_from_with_array( $booking_gcal_events_from ) { // array( 'from type', 'offset', 'offset type' );
108
 
109
  if ($booking_gcal_events_from[0]=='date') {
@@ -485,9 +488,11 @@ class WPBC_Google_Calendar {
485
  if ( ! empty($this->error) ) {
486
  $is_spin = false;
487
  $is_error = true;
488
- $this->show_message( $this->error , $is_spin, $is_error);
 
 
 
489
  die;
490
- return false;
491
  } else
492
  $this->show_message( __('Done' ,'booking') );
493
 
47
  $this->error = '';
48
  $this->bktype = 1;
49
  $this->is_silent = false;
50
+ $this->events = array();
51
  $user = wp_get_current_user();
52
  $this->setUserID( $user->ID );
53
 
104
  return $this->bktype;
105
  }
106
 
107
+ public function getErrorMessage(){
108
+ return $this->error;
109
+ }
110
  public function set_events_from_with_array( $booking_gcal_events_from ) { // array( 'from type', 'offset', 'offset type' );
111
 
112
  if ($booking_gcal_events_from[0]=='date') {
488
  if ( ! empty($this->error) ) {
489
  $is_spin = false;
490
  $is_error = true;
491
+ $this->show_message( $this->error , $is_spin, $is_error);
492
+ if ( ( WPBC_EXIST_NEW_BOOKING_LISTING ) && ( isset( $_REQUEST['action'] ) ) && ( 'WPBC_AJX_BOOKING_ACTIONS' == $_REQUEST['action'] ) ) {
493
+ return false;
494
+ }
495
  die;
 
496
  } else
497
  $this->show_message( __('Done' ,'booking') );
498
 
core/sync/wpbc-gcal.php CHANGED
@@ -375,7 +375,7 @@ function wpbc_write_content_for_modal_import_gce() {
375
  if ( ( ! class_exists('wpdev_bk_personal') ) && ( $booking_gcal_feed == '' ) ) {
376
 
377
  $is_this_btn_disabled = true;
378
- $settigns_link = wpbc_get_settings_url() ."&tab=sync" ;
379
  } else {
380
  $booking_gcal_events_from = get_bk_option( 'booking_gcal_events_from');
381
  $booking_gcal_events_from_offset = get_bk_option( 'booking_gcal_events_from_offset' );
375
  if ( ( ! class_exists('wpdev_bk_personal') ) && ( $booking_gcal_feed == '' ) ) {
376
 
377
  $is_this_btn_disabled = true;
378
+ $settigns_link = wpbc_get_settings_url() ."&tab=sync&subtab=gcal" ;
379
  } else {
380
  $booking_gcal_events_from = get_bk_option( 'booking_gcal_events_from');
381
  $booking_gcal_events_from_offset = get_bk_option( 'booking_gcal_events_from_offset' );
core/wpbc-activation.php CHANGED
@@ -850,7 +850,10 @@ function wpbc_get_default_options( $option_name = '', $is_get_multiuser_general_
850
 
851
  $default_options = array();
852
  $mu_option4delete = array();
853
-
 
 
 
854
 
855
  $default_options['booking_admin_cal_count'] = ($is_demo) ? '3' : '2';
856
  $mu_option4delete[]='booking_admin_cal_count'; // $multiuser_general_option[] = implode( '', array_keys( array_slice( $default_options, -1 ) ) );
@@ -862,7 +865,7 @@ function wpbc_get_default_options( $option_name = '', $is_get_multiuser_general_
862
  $mu_option4delete[]='booking_sort_order'; //$mu_option4delete[]='booking_sort_order_direction';
863
  $default_options['booking_default_toolbar_tab'] = 'filter';
864
  $mu_option4delete[]='booking_default_toolbar_tab';
865
- $default_options['booking_listing_default_view_mode'] = 'vm_calendar';
866
  $mu_option4delete[]='booking_listing_default_view_mode';
867
  $default_options['booking_view_days_num'] = ( ( ! class_exists( 'wpdev_bk_personal' ) ) ? '90' : '30' );
868
  $mu_option4delete[]='booking_view_days_num';
850
 
851
  $default_options = array();
852
  $mu_option4delete = array();
853
+
854
+ $default_options['booking_is_use_old_booking_listing'] = 'Off';
855
+ $mu_option4delete[]='booking_is_use_old_booking_listing';
856
+
857
 
858
  $default_options['booking_admin_cal_count'] = ($is_demo) ? '3' : '2';
859
  $mu_option4delete[]='booking_admin_cal_count'; // $multiuser_general_option[] = implode( '', array_keys( array_slice( $default_options, -1 ) ) );
865
  $mu_option4delete[]='booking_sort_order'; //$mu_option4delete[]='booking_sort_order_direction';
866
  $default_options['booking_default_toolbar_tab'] = 'filter';
867
  $mu_option4delete[]='booking_default_toolbar_tab';
868
+ $default_options['booking_listing_default_view_mode'] = 'vm_listing'; // 'vm_calendar';
869
  $mu_option4delete[]='booking_listing_default_view_mode';
870
  $default_options['booking_view_days_num'] = ( ( ! class_exists( 'wpdev_bk_personal' ) ) ? '90' : '30' );
871
  $mu_option4delete[]='booking_view_days_num';
core/wpbc-constants.php CHANGED
@@ -26,7 +26,7 @@ if ( ! defined( 'WP_BK_CHECK_OUT_MINUS_DAY_SEARCH' ) ) { define( 'WP_BK_C
26
  ////////////////////////////////////////////////////////////
27
  // SYSTEM CONSTANTS //////////////
28
  ////////////////////////////////////////////////////////////
29
- if ( ! defined( 'WP_BK_MINOR_UPDATE' ) ) { define( 'WP_BK_MINOR_UPDATE', true ); }
30
  if ( ! defined( 'WP_BK_RESPONSE' ) ) { define( 'WP_BK_RESPONSE', false ); }
31
  if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL', 0 ); } // Set 0 for no filling or 2 for 241 bookings or more for more
32
 
@@ -34,8 +34,6 @@ if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL',
34
  ////////////////////////////////////////////////////////////
35
  // Deprecated
36
  ////////////////////////////////////////////////////////////
37
- // 'WP_BK_SHOW_INFO_IN_FORM' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // This feature can impact to the performance
38
- // 'WP_BK_CUSTOM_FORMS_FOR_REGULAR_USERS' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Only for MultiUser version
39
  // 'WP_BK_PAYMENT_FORM_ONLY_IN_REQUEST' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Its will show payment form only in payment request during sending from Booking Listing page and do not show payment form after visitor made the booking.
40
  // 'WP_BK_AUTO_SEND_PAY_REQUEST_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Auto send payment request, if booking was added in admin panel, and WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL == true
41
  // 'WP_BK_SHOW_DEPOSIT_AND_TOTAL_PAYMENT' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Show both deposit and total cost payment forms, after visitor submit booking. Important! Please note, in this case at admin panel for booking will be saved deposit cost and notes about deposit, do not depend from the visitor choise of this payment. So you need to check each such payment manually.
@@ -43,8 +41,3 @@ if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL',
43
  // 'WP_BK_AUTO_APPROVE_WHEN_ZERO_COST' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if the cost of booking == 0
44
  // 'WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if booking added in admin panel
45
  // 'WP_BK_LAST_CHECKOUT_DAY_AVAILABLE' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.28 // Its will remove last selected day of booking during saving it as booking. //FixIn: 6.2.3.6
46
- // 'WP_BK_IS_SEND_EMAILS_ON_COST_CHANGE' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.30 // Send modification email, if cost was changed in admin panel
47
- // 'WP_BK_TIMILINE_LIMIT_HOURS' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.31 // Limit times for showing cells in Calendar Overview page in admin panel for 1 day view mode. (7.0.1.18)
48
- // 'WP_BK_SHOW_BOOKING_NOTES' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.32 // Set notes of the specific booking visible by default.
49
-
50
- // booking_is_days_always_available - only for specific booking resources.
26
  ////////////////////////////////////////////////////////////
27
  // SYSTEM CONSTANTS //////////////
28
  ////////////////////////////////////////////////////////////
29
+ if ( ! defined( 'WP_BK_MINOR_UPDATE' ) ) { define( 'WP_BK_MINOR_UPDATE', ! true ); }
30
  if ( ! defined( 'WP_BK_RESPONSE' ) ) { define( 'WP_BK_RESPONSE', false ); }
31
  if ( ! defined( 'WP_BK_BETA_DATA_FILL' ) ) { define( 'WP_BK_BETA_DATA_FILL', 0 ); } // Set 0 for no filling or 2 for 241 bookings or more for more
32
 
34
  ////////////////////////////////////////////////////////////
35
  // Deprecated
36
  ////////////////////////////////////////////////////////////
 
 
37
  // 'WP_BK_PAYMENT_FORM_ONLY_IN_REQUEST' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Its will show payment form only in payment request during sending from Booking Listing page and do not show payment form after visitor made the booking.
38
  // 'WP_BK_AUTO_SEND_PAY_REQUEST_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Auto send payment request, if booking was added in admin panel, and WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL == true
39
  // 'WP_BK_SHOW_DEPOSIT_AND_TOTAL_PAYMENT' - deprecated - configure this option at Booking > Settings > Payment page //FixIn: 8.1.3.2x // Show both deposit and total cost payment forms, after visitor submit booking. Important! Please note, in this case at admin panel for booking will be saved deposit cost and notes about deposit, do not depend from the visitor choise of this payment. So you need to check each such payment manually.
41
  // 'WP_BK_AUTO_APPROVE_WHEN_ZERO_COST' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if the cost of booking == 0
42
  // 'WP_BK_AUTO_APPROVE_IF_ADD_IN_ADMIN_PANEL' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.2x // Auto approve booking, if booking added in admin panel
43
  // 'WP_BK_LAST_CHECKOUT_DAY_AVAILABLE' - deprecated - configure this option at Booking > Settings General page //FixIn: 8.1.3.28 // Its will remove last selected day of booking during saving it as booking. //FixIn: 6.2.3.6
 
 
 
 
 
core/wpbc-include.php CHANGED
@@ -76,7 +76,8 @@ require_once( WPBC_PLUGIN_DIR . '/core/admin/wpbc-dashboard.php' );
76
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
77
 
78
  //FixIn: 9.2.1
79
- if ( 0 ) {
 
80
  require_once( WPBC_PLUGIN_DIR . '/includes/_toolbar_ui/toolbar_ui.php' );
81
  require_once( WPBC_PLUGIN_DIR . '/includes/_listing_css_js/listing_ui.php' );
82
  require_once( WPBC_PLUGIN_DIR . '/includes/_pagination/pagination.php' );
76
  ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
77
 
78
  //FixIn: 9.2.1
79
+
80
+ if ( WPBC_EXIST_NEW_BOOKING_LISTING ) {
81
  require_once( WPBC_PLUGIN_DIR . '/includes/_toolbar_ui/toolbar_ui.php' );
82
  require_once( WPBC_PLUGIN_DIR . '/includes/_listing_css_js/listing_ui.php' );
83
  require_once( WPBC_PLUGIN_DIR . '/includes/_pagination/pagination.php' );
core/wpbc-js.php CHANGED
@@ -291,7 +291,7 @@ function wpbc_js_load_files( $where_to_load ) {
291
  wp_enqueue_script( 'wpbc-datepick-localize', $calendar_localization_url, array( 'wpbc-datepick' ), '1.1' );
292
  }
293
 
294
-
295
  if ( ( $where_to_load == 'client' ) || ( wpbc_is_new_booking_page() ) ) {
296
 
297
  wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM ); // Client
291
  wp_enqueue_script( 'wpbc-datepick-localize', $calendar_localization_url, array( 'wpbc-datepick' ), '1.1' );
292
  }
293
 
294
+
295
  if ( ( $where_to_load == 'client' ) || ( wpbc_is_new_booking_page() ) ) {
296
 
297
  wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM ); // Client
core/wpbc.php CHANGED
@@ -99,6 +99,18 @@ public function define_admin_menu(){
99
  $title .= $update_count_title;
100
  }
101
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  /**
103
  global $menu;
104
  if ( current_user_can( ) ) {
99
  $title .= $update_count_title;
100
  }
101
 
102
+ $title = '<div class="name_container" style="display: flex;flex-flow: row nowrap;justify-content: flex-start;align-items: center;min-height: 16px;">'
103
+ . ' <div class="name_item" style="font-size: 6px;font-weight: 600;margin-left: -4px;margin-top: 12px;margin-right: 0px;word-wrap: normal;white-space: nowrap;position: absolute;">WP</div>'
104
+ . ' <div class="name_item" style="font-size: 11px;margin-left: -5px;margin-top: -7px;white-space: nowrap;margin-right: 4px;">Booking Calendar</div>';
105
+ if ( ( $update_count > 0 ) && ( $is_user_activated ) ) {
106
+ $badge_style= '';
107
+ } else {
108
+ $badge_style = 'display:none;';
109
+ }
110
+
111
+ $title .= '<span style="margin-top:-2px;'.$badge_style.'" class="wpbc_badge_count name_item update-plugins count-'.$update_count.'" title=""><span class="update-count bk-update-count" style="white-space: nowrap;word-wrap: normal;">' . number_format_i18n( $update_count ) . '</span></span>';
112
+ $title .= '</div>';
113
+
114
  /**
115
  global $menu;
116
  if ( current_user_can( ) ) {
includes/_listing_css_js/listing_ui.css ADDED
@@ -0,0 +1,482 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* Input elements in Listing --------------------------------------------------------------------------------------- */
2
+ .wpbc_listing_container input {
3
+ /*border: 1px solid #d6d6d6;*/
4
+ border: 1px solid #c9c9c9;
5
+ }
6
+ /* :focus ---- */
7
+ .wpbc_listing_container input.focus,
8
+ .wpbc_listing_container input:focus {
9
+ border-color: #fff;
10
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
11
+ box-shadow: 0 0 0 1px #8fc8ff, 0 0 2px 1px rgba(79, 148, 212, 0.8);
12
+ z-index: 1;
13
+ /* Only visible in Windows High Contrast mode */
14
+ outline: 2px solid transparent;
15
+ }
16
+
17
+ /** C O N T A I N E R **/
18
+ .wpbc_listing_container {
19
+ display: flex;
20
+ flex-flow: column nowrap;
21
+ justify-content: space-between;
22
+
23
+ margin: 10px 0;
24
+ }
25
+ .wpbc_listing_container .wpbc_listing_usual_row {
26
+ flex: 1 1 auto;
27
+
28
+ display: flex;
29
+ flex-flow: row wrap;
30
+ justify-content: space-between;
31
+ align-items: stretch;
32
+ }
33
+ .wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_header {
34
+ flex-flow: row nowrap;
35
+ }
36
+ .wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col{
37
+ flex: 3.7 1 0;
38
+ word-wrap: break-word;
39
+ min-width: 150px;
40
+ }
41
+ /* //FixIn: forVideo *
42
+ .wp-admin .modal-backdrop.in {
43
+ opacity: 0.3 !important;
44
+ }
45
+ #wpbc_loading_section .wpbc_icn::before, #wpbc_loading_section [class^="wpbc_icn_"]::before {
46
+ font-size: 36px;
47
+
48
+ }
49
+ #wpbc_loading_section [class^="wpbc_icn_"]{
50
+ top:16.5em;
51
+ margin-left: -4em;
52
+ position:absolute;
53
+ }
54
+ /* //FixIn: forVideo */
55
+ /* Checkbox */
56
+ .wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col:first-child{
57
+ flex: 40px 0 0;
58
+ min-width: 40px;
59
+ }
60
+ /* Labels */
61
+ .wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col.wpbc_col_booking_labels{
62
+
63
+ }
64
+ /* Booking data */
65
+ .wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col.wpbc_col_data{
66
+ flex: 10;
67
+ }
68
+ /* Dates */
69
+ .wpbc_listing_container .wpbc_listing_usual_row .wpbc_listing_col.wpbc_col_dates {
70
+ flex: 4.5 1 0;
71
+
72
+ display:flex;
73
+ flex-flow:row wrap;
74
+ justify-content: center;
75
+ align-items: flex-start;
76
+ }
77
+ /* Actions */
78
+ .wpbc_listing_container .wpbc_listing_usual_row .wpbc_item_actions {
79
+ flex: 100%;
80
+ display: flex;
81
+ flex-flow: row wrap;
82
+ justify-content: flex-start;
83
+
84
+ padding: 0 1em;
85
+ }
86
+ @media screen and (max-width: 782px) {
87
+ .wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_row .wpbc_listing_col.wpbc_col_data {
88
+ flex: 1 1 auto;
89
+ }
90
+ }
91
+ /** R O W - Colors | Fonts **/
92
+ .wpbc_listing_container .wpbc_selectable_body{
93
+ border: 1px solid #dfdfdf;
94
+ border-top:none;
95
+ }
96
+ .wpbc_listing_container .wpbc_listing_usual_row{
97
+ border:none;
98
+ border-left:4px solid #f0f0f1;
99
+ background: #f0f0f1;
100
+ }
101
+ .wpbc_listing_container .wpbc_listing_usual_row:nth-of-type(2n+1) {
102
+ background: #F7F7F7;
103
+ border-left-color:#F7F7F7;
104
+ }
105
+ .wpbc_listing_container .wpbc_listing_usual_row div.content_text {
106
+ padding: 8px 1em;
107
+ line-height: 1.8em;
108
+ }
109
+ /** H E A D E R - Colors | Fonts **/
110
+ .wpbc_listing_container div.wpbc_listing_usual_row.wpbc_list_header{
111
+ background: #e4e4e4;
112
+ border: 1px solid #dfdfdf;
113
+ border-radius: 4px 4px 0 0;
114
+ color: #333;
115
+ font-size: 12px;
116
+ font-weight: 600;
117
+ text-shadow: 0 1px 1px #F5F5F5;
118
+ text-align: center;
119
+ line-height: 2.5em;
120
+ overflow: hidden;
121
+ }
122
+ .wpbc_listing_container div.wpbc_listing_usual_row.wpbc_list_header .wpbc_col_labels .content_text{
123
+ display: block;
124
+ }
125
+ .wpbc_listing_container div.wpbc_listing_usual_row.wpbc_list_header .wpbc_listing_col .content_text{
126
+ padding:8px 1em;
127
+ }
128
+ .wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_header > div:last-child{
129
+ text-align: center;
130
+ }
131
+ .wpbc_listing_container .wpbc_listing_usual_row.wpbc_list_header:first-child input[type="checkbox"] {
132
+ margin-left:5px;
133
+ }
134
+ /** Header action buttons **/
135
+ .wpbc_listing_container .wpbc_listing_header_action_icon {
136
+ padding: 0 1em;
137
+ }
138
+ .wpbc_listing_container .wpbc_listing_header_action_icon a,
139
+ .wpbc_listing_container .wpbc_listing_header_action_icon a:hover{
140
+ color: #555;
141
+ text-decoration: none;
142
+ }
143
+ /**********************************************************************************************************************/
144
+ /** Content of fields data **/
145
+ .wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue {
146
+ background: #FFF7D8;
147
+ margin: 0 5px 0 4px;
148
+ padding: 1px 5px;
149
+ }
150
+ .wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue.fieldsearchvalue {
151
+ background: #ff9900;
152
+ }
153
+ /** Labels ------------------------------------------------------------------------------------------------------- */
154
+ .wpbc_col_labels .content_text .wpbc_label.hidden_items {
155
+ display: none;
156
+ }
157
+ .wpbc_listing_container .wpbc_listing_usual_row .wpbc_col_labels div.content_text{
158
+ overflow: hidden;
159
+ }
160
+ .wpbc_col_labels .content_text {
161
+ display: flex;
162
+ flex-flow: row wrap;
163
+ justify-content: flex-start;
164
+ align-items: first baseline;
165
+ }
166
+ .wpbc_col_labels .content_text .wpbc_label{
167
+ flex: 0 1 auto;
168
+ padding: 0 10px;
169
+ line-height: 2.1em;
170
+ margin: 0 1em 5px 0;
171
+ word-wrap: anywhere;
172
+ white-space: nowrap;
173
+ min-width: 0;
174
+
175
+ display: flex;
176
+ flex-flow: row wrap;
177
+ justify-content: flex-start;
178
+ align-items: last baseline;
179
+ }
180
+ .wpbc_label{
181
+ white-space: pre-wrap;
182
+ border: 0;
183
+ box-shadow: 0 0 1px #ddd;
184
+ padding: 4px 10px 4px;
185
+ line-height: 2.5em;
186
+ margin-right: 10px;
187
+ font-size: 0.92em;
188
+ border-radius: .2em;
189
+ font-weight: 600;
190
+ background-color: #5bc0de;
191
+ display: inline;
192
+ color: #ffffff;
193
+ text-align: center;
194
+ vertical-align: baseline;
195
+ }
196
+ .wpbc_listing_col .wpbc_label{
197
+ padding: 4px 5px;
198
+ line-height: 2.5em;
199
+ }
200
+ .wpbc_listing_col .wpbc_label .menu_icon {
201
+ margin-right: 0.5em;
202
+ }
203
+ /* Label Colors --------------------------------------------------------------------------------------------------- */
204
+ .wpbc_label.wpbc_label_booking_id {
205
+ /*background-color: #acacac;*/
206
+ /*color: #909090;*/
207
+ /*background: #c5c5c500;*/
208
+ /*background: #fff;*/
209
+ /*box-shadow: 0px 0px 1px #c0c0c0;*/
210
+ background: #adadad;
211
+
212
+ background: #fff;
213
+ color: #979797;
214
+ box-shadow: 0 0 1px #b7b7b7;
215
+ }
216
+ .wpbc_label.wpbc_label_resource {
217
+ /*background-color: #5bc0de;*/
218
+ background-color: #5aa3c0;
219
+ }
220
+ .wpbc_label.wpbc_label_deleted_resource{
221
+ background-color: #ee6f48;
222
+ }
223
+ .wpbc_label.wpbc_label_pending{
224
+ background-color: #FFBB45;
225
+ background-color: #BB864D;
226
+ background-color: #ed9f0a;
227
+ color: #fff;
228
+ box-shadow: 0 0 1px #fde4c9;
229
+ }
230
+ .wpbc_label.wpbc_label_approved{
231
+ background-color: #9BE;
232
+
233
+ background-color: #64AA45;
234
+ color: #f7fff4;
235
+ box-shadow: 0 0 1px #b8c6b1;
236
+ }
237
+ .wpbc_label.wpbc_label_payment_status {
238
+ /* General class for all payment statuses */
239
+ }
240
+ .wpbc_label.wpbc_label_payment_status_success {
241
+ background-color: #468847;
242
+ }
243
+ .wpbc_label.wpbc_label_payment_status_pending {
244
+ background-color: #992;
245
+ }
246
+ .wpbc_label.wpbc_label_payment_status_unknown {
247
+ /*background-color: #999;*/
248
+ background-color: #e7e7e7;
249
+ color: #7c7c7c;
250
+ }
251
+ .wpbc_label.wpbc_label_payment_status_error {
252
+ background-color: #FA773D;
253
+ }
254
+ .wpbc_label.wpbc_label_imported {
255
+ background-color: #81A6C6;
256
+ }
257
+ .wpbc_label.wpbc_label_trash {
258
+ background: #D94A48;
259
+ color: #fff;
260
+ text-shadow: 0 0 1px #E00;
261
+ }
262
+
263
+ /* Read booking button -- EYE ------------------------------------------------------------------------------------- */
264
+ .wpbc_is_new_button,
265
+ .wpbc_is_new_button:hover {
266
+ display: flex;
267
+ position: absolute;
268
+ left: 0;
269
+ margin-left: -17px;
270
+ border:none !important;
271
+ outline: none !important;
272
+ box-shadow:none !important;
273
+ }
274
+ @media (max-width: 782px) {
275
+ .wpbc_is_new_button {
276
+ left: auto;
277
+ margin-left: auto;
278
+ right: 0;
279
+ margin-right: 22px;
280
+ }
281
+ }
282
+
283
+ /* Dates labels ---------------------------------------------------------------------------------------------------- */
284
+ .wpbc_label.wpbc_label_booking_dates:hover,
285
+ .wpbc_label.wpbc_label_booking_dates{
286
+ background-color: #FFBB45;
287
+ text-decoration: none;
288
+ color: #ffffff;
289
+
290
+ background-color: #BB864D;
291
+ background-color: #ed9f0a;
292
+ color: #fff;
293
+ box-shadow: 0 0 1px #fde4c9;
294
+ }
295
+ .wpbc_label.wpbc_label_booking_dates:focus{
296
+ box-shadow: none;
297
+ }
298
+ .wpbc_label.wpbc_label_booking_dates.approved{
299
+ background-color: #9BE;
300
+
301
+ background-color: #64AA45;
302
+ color: #f7fff4;
303
+ box-shadow: 0 0 1px #b8c6b1;
304
+ }
305
+
306
+ /* Dates internal ------------------------------------------------------------------------------------------------- */
307
+ .wpbc_col_labels .content_text .wpbc_label.wpbc_label_booking_dates{
308
+ margin: 0 0 5px 0;
309
+ }
310
+ .wpbc_listing_container .wpbc_col_dates .wpbc_label.wpbc_label_booking_dates .field-booking-time{
311
+ color: #3e3e3e;
312
+ text-decoration: none;
313
+ text-shadow: 0 0 1px #AAA;
314
+ line-height: 2em;
315
+ white-space: nowrap;
316
+ }
317
+ .wpbc_listing_container .wpbc_col_dates .date_tire {
318
+ font-size: 17px;
319
+ font-weight: 600;
320
+ margin: 0 7px 10px;
321
+ line-height: 18px;
322
+ }
323
+
324
+ /* Booking Actions Buttons ---------------------------------------------------------------------------------------- */
325
+ .wpbc_ajx_toolbar.wpbc_buttons_row_for_booking .ui_container .ui_group .ui_element {
326
+ margin-right:5px;
327
+ }
328
+
329
+ .ui_element .wpbc_ui_button.wpbc_ui_red .menu_icon,
330
+ .ui_element .wpbc_ui_button .menu_icon.wpbc_ui_red{
331
+ color:#e06741
332
+ }
333
+
334
+ /* Remark button and textarea ------------------------------------------------------------------------------------- */
335
+
336
+ .wpbc_ajx_toolbar .ui_container .ui_remark_section {
337
+ /*display: none;*/
338
+ flex: 0 1 auto;
339
+ width:100%;
340
+ }
341
+ .wpbc_ajx_toolbar .ui_container .ui_remark_section .ui_group {
342
+ justify-content: flex-end;
343
+ }
344
+ .wpbc_ajx_toolbar .ui_container .ui_remark_section .ui_group .ui_element{
345
+ margin:0 0 0 10px;
346
+ }
347
+
348
+
349
+ /**********************************************************************************************************************/
350
+ /** Colors inside of the data fields in CONTENT DATA AREA **/
351
+ /**********************************************************************************************************************/
352
+ /* Refund */
353
+ .wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue._refund{
354
+ color: #cc0202;
355
+ }
356
+ /* Order Number */
357
+ .wpbc_listing_container .wpbc_list_row .wpbc_col_data .fieldvalue._order_num{
358
+ font-weight: 600;
359
+ background: #9d9d9d;
360
+ color: #fff;
361
+ border-radius: 2px;
362
+ }
363
+ /**********************************************************************************************************************/
364
+ /** Selected row **/
365
+ .wpbc_selectable_body .row_selected_color {
366
+ /*background: #f9f9e7;*/
367
+ /*background: #ffffeb;*/
368
+ /*border-color: #d2d2d2 !important;*/
369
+ background: transparent;
370
+ border-color: #d2d2d2 !important;
371
+ border-left: 4px solid #08a !important;
372
+ }
373
+ /** Actions row with buttons **/
374
+ .wpbc_item_actions a.button,
375
+ .wpbc_item_actions a.button:hover {
376
+ flex: 0 0 auto;
377
+
378
+ margin: 0 1em 10px 0.25em;
379
+
380
+ color: #555;
381
+ border-color: #d8d8d8;
382
+ }
383
+
384
+ .wpbc_item_actions .wpbc_actions_buttons{
385
+ flex: 1 1 auto;
386
+ display: flex;
387
+ flex-flow: row wrap;
388
+ justify-content: flex-start;
389
+ margin-bottom: 5px;
390
+ }
391
+ .wpbc_item_actions .wpbc_actions_sysinfo{
392
+ flex: 0 1 auto;
393
+ margin-left:auto;
394
+
395
+ display: flex;
396
+ flex-flow: row wrap;
397
+ justify-content: flex-start;
398
+
399
+ align-items: stretch;
400
+ line-height: 4em;
401
+ font-size: 0.8em;
402
+ }
403
+ /**********************************************************************************************************************/
404
+ /* Terminal log screen section */
405
+ .wpbc_log_screen {
406
+ display: none;
407
+ margin: 0;
408
+ padding: 0.5em 1em;
409
+ line-height: 1.7em;
410
+ color: #fff;
411
+ background: #5b5b5b;
412
+ border-radius: 3px;
413
+ border: 1px solid;
414
+ text-shadow:none;
415
+ }
416
+ /* By default after page loading the sort selector is not visible*/
417
+ #wh_sort_selector {
418
+ display: none;
419
+ }
420
+ /* Source & booking ID in reminders */
421
+ .wpbc_next_booking_time{
422
+ font-size: 0.85em;
423
+ display: flex;
424
+ flex-flow: row wrap;
425
+ justify-content: flex-end;
426
+ align-items: center;
427
+ }
428
+ .wpbc_next_booking_time span {
429
+ flex: 0 1 auto;
430
+ }
431
+
432
+ /**********************************************************************************************************************/
433
+ /** Messages **/
434
+ /**********************************************************************************************************************/
435
+ #ajax_working {
436
+ position: relative;
437
+ }
438
+ #ajax_working > [id^="wpbc_notice_"] {
439
+ position: fixed;
440
+ top: 30px;
441
+ flex-flow: row nowrap;
442
+ justify-content: flex-end;
443
+ z-index: 100000;
444
+ right: 20px;
445
+ }
446
+ #ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message {
447
+ display: flex;
448
+ top: 50px;
449
+ flex-flow: row nowrap;
450
+ justify-content: flex-start;
451
+ }
452
+ #ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message .wpbc_inner_message {
453
+ /*display: flex;*/
454
+ /*flex-flow: row wrap;*/
455
+ /*justify-content: flex-end;*/
456
+ /*align-items: center;*/
457
+ width: 100%;
458
+ position: relative;
459
+ }
460
+
461
+ #ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message .wpbc_inner_message .close{
462
+ order: 9;
463
+ margin-left: 15px;
464
+ }
465
+ #ajax_working > [id^="wpbc_notice_"] .wpbc_alert_message .wpbc_inner_message > * {
466
+ /*margin: 0 0 0 1em;*/
467
+ }
468
+
469
+
470
+ /**********************************************************************************************************************/
471
+ /** Hidden Templates **/
472
+ /**********************************************************************************************************************/
473
+ .wpbc_hidden_templates ,
474
+ .ui__under_actions_row__section_in_booking ,
475
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element.ui__set_booking_cost__section_in_booking {
476
+ display:none;
477
+ }
478
+ .highlight_action_section {
479
+ background: #e7e7e7;
480
+ border-radius: 3px;
481
+ padding:0 10px;
482
+ }
includes/_listing_css_js/listing_ui.js ADDED
@@ -0,0 +1,188 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
+ // Checkbox Selection functions for Listing
3
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
4
+ /**
5
+ * Usual DOM Listing structure:
6
+ <div class="wpbc_listing_container wpbc_selectable_table wpbc_NAME_listing_container">
7
+ <div class="wpbc_listing_usual_row wpbc_list_header wpbc_selectable_head">
8
+ <div class="wpbc_listing_col wpbc_col_id check-column"><div class="content_text"><input type="checkbox" /></div></div>
9
+ <div class="wpbc_listing_col wpbc_col_labels"><div class="content_text"><?php echo esc_js( __( 'Actions', 'email-reminders' ) ); ?></div></div>
10
+ <div class="wpbc_listing_col wpbc_col_data"><div class="content_text"><?php echo esc_js( __( 'Data', 'email-reminders' ) ); ?></div></div>
11
+ </div>
12
+ <div id="row_id_{{{data.rules_id}}}" class="wpbc_listing_usual_row wpbc_list_row wpbc_row">
13
+ <div class="wpbc_listing_col wpbc_col_id check-column"><div class="content_text"><input type="checkbox" /></div></div>
14
+ <div class="wpbc_listing_col wpbc_col_labels">
15
+ <div class="content_text"><span class="wpbc_label"><?php _e('Email', 'email-reminders'); ?>: {{{data['rule']['email_template']}}}</span></div>
16
+ </div>
17
+ ...
18
+ </div>
19
+ */
20
+
21
+ /**
22
+ * Selections of several checkboxes like in gMail with shift :)
23
+ * Need to have this structure:
24
+ * .wpbc_selectable_table
25
+ * .wpbc_selectable_head
26
+ * .check-column
27
+ * :checkbox
28
+ * .wpbc_selectable_body
29
+ * .wpbc_row
30
+ * .check-column
31
+ * :checkbox
32
+ * .wpbc_selectable_foot
33
+ * .check-column
34
+ * :checkbox
35
+ */
36
+ function wpbc_define_gmail_checkbox_selection( $ ){
37
+
38
+ var checks, first, last, checked, sliced, lastClicked = false;
39
+
40
+ // Check all checkboxes
41
+ $('.wpbc_selectable_body').find('.check-column').find(':checkbox').on( 'click', function(e) {
42
+ //$('.wpbc_selectable_body').children().children('.check-column').find(':checkbox').on( 'click', function(e) {
43
+ if ( 'undefined' == e.shiftKey ) { return true; }
44
+ if ( e.shiftKey ) {
45
+ if ( !lastClicked ) { return true; }
46
+ //checks = $( lastClicked ).closest( 'form' ).find( ':checkbox' ).filter( ':visible:enabled' );
47
+ checks = $( lastClicked ).closest( '.wpbc_selectable_body' ).find( ':checkbox' ).filter( ':visible:enabled' );
48
+ first = checks.index( lastClicked );
49
+ last = checks.index( this );
50
+ checked = $(this).prop('checked');
51
+ if ( 0 < first && 0 < last && first != last ) {
52
+ sliced = ( last > first ) ? checks.slice( first, last ) : checks.slice( last, first );
53
+ sliced.prop( 'checked', function() {
54
+ if ( $(this).closest('.wpbc_row').is(':visible') )
55
+ return checked;
56
+
57
+ return false;
58
+ } ).trigger( 'change' );
59
+ }
60
+ }
61
+ lastClicked = this;
62
+
63
+ // toggle "check all" checkboxes
64
+ var unchecked = $(this).closest('.wpbc_selectable_body').find(':checkbox').filter(':visible:enabled').not(':checked');
65
+ $(this).closest('.wpbc_selectable_table').children('.wpbc_selectable_head, .wpbc_selectable_foot').find(':checkbox').prop('checked', function() {
66
+ return ( 0 === unchecked.length );
67
+ }).trigger( 'change' );
68
+
69
+ return true;
70
+ });
71
+
72
+ // Head || Foot clicking to select / deselect ALL
73
+ $('.wpbc_selectable_head, .wpbc_selectable_foot').find('.check-column :checkbox').on( 'click', function( event ) {
74
+ var $this = $(this),
75
+ $table = $this.closest( '.wpbc_selectable_table' ),
76
+ controlChecked = $this.prop('checked'),
77
+ toggle = event.shiftKey || $this.data('wp-toggle');
78
+
79
+ $table.children( '.wpbc_selectable_body' ).filter(':visible')
80
+ .find('.check-column').find(':checkbox')
81
+ //.children().children('.check-column').find(':checkbox')
82
+ .prop('checked', function() {
83
+ if ( $(this).is(':hidden,:disabled') ) {
84
+ return false;
85
+ }
86
+
87
+ if ( toggle ) {
88
+ return ! $(this).prop( 'checked' );
89
+ } else if ( controlChecked ) {
90
+ return true;
91
+ }
92
+
93
+ return false;
94
+ }).trigger( 'change' );
95
+
96
+ $table.children('.wpbc_selectable_head, .wpbc_selectable_foot').filter(':visible')
97
+ .find('.check-column').find(':checkbox')
98
+ //.children().children('.check-column').find(':checkbox')
99
+ .prop('checked', function() {
100
+ if ( toggle ) {
101
+ return false;
102
+ } else if ( controlChecked ) {
103
+ return true;
104
+ }
105
+
106
+ return false;
107
+ });
108
+ });
109
+
110
+
111
+ // Visually show selected border
112
+ $( '.wpbc_selectable_body' ).find( '.check-column :checkbox' ).on( 'change', function ( event ){
113
+ if ( jQuery( this ).is( ':checked' ) ){
114
+ jQuery( this ).closest( '.wpbc_list_row' ).addClass( 'row_selected_color' );
115
+ } else {
116
+ jQuery( this ).closest( '.wpbc_list_row' ).removeClass( 'row_selected_color' );
117
+ }
118
+
119
+ // Disable text selection while pressing 'shift'
120
+ document.getSelection().removeAllRanges();
121
+
122
+ // Show or hide buttons on Actions toolbar at Booking Listing page, if we have some selected bookings.
123
+ wpbc_show_hide_action_buttons_for_selected_bookings();
124
+ } );
125
+
126
+ wpbc_show_hide_action_buttons_for_selected_bookings();
127
+ }
128
+
129
+ /**
130
+ * Get ID of row, based on clciked element
131
+ *
132
+ * @param this_inbound_element - ususlly this
133
+ * @returns {number}
134
+ */
135
+ function wpbc_get_row_id_from_element( this_inbound_element ){
136
+
137
+ var element_id = jQuery( this_inbound_element ).closest('.wpbc_listing_usual_row').attr('id');
138
+
139
+ element_id = parseInt( element_id.replace( 'row_id_', '' ) );
140
+
141
+ return element_id;
142
+ }
143
+
144
+ /**
145
+ * Get ID array of selected elements
146
+ */
147
+ function wpbc_get_selected_row_id(){
148
+
149
+ var $table = jQuery( '.wpbc_listing_container.wpbc_selectable_table');
150
+
151
+ var checkboxes = $table.children( '.wpbc_selectable_body' ).filter( ':visible' ).find( '.check-column' ).find( ':checkbox' );
152
+
153
+ var selected_id = [];
154
+ jQuery.each( checkboxes, function( key, checkbox ) {
155
+
156
+ if ( jQuery( checkbox ).is( ':checked' ) ) {
157
+ var element_id = wpbc_get_row_id_from_element( checkbox ); // jQuery( checkbox ).closest('.wpbc_listing_usual_row').attr('id');
158
+
159
+ // element_id = parseInt( element_id.replace( 'row_id_', '' ) );
160
+
161
+ selected_id.push(element_id);
162
+ }
163
+
164
+ });
165
+
166
+ //console.log( 'wpbc_get_selected_row_id', selected_id );
167
+
168
+ return selected_id;
169
+
170
+ // _.each( json_items_arr, function ( p_val, p_key, p_data ){
171
+ //
172
+ // });
173
+ }
174
+
175
+
176
+ /**
177
+ * Show or hide buttons on Actions toolbar at Booking Listing page, if we have some selected bookings.
178
+ */
179
+ function wpbc_show_hide_action_buttons_for_selected_bookings(){
180
+
181
+ var selected_rows_arr = wpbc_get_selected_row_id();
182
+
183
+ if ( selected_rows_arr.length > 0 ){
184
+ jQuery( '.hide_button_if_no_selection' ).show();
185
+ } else {
186
+ jQuery( '.hide_button_if_no_selection' ).hide();
187
+ }
188
+ }
includes/_listing_css_js/listing_ui.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /**
2
+ * @version 1.0
3
+ * @description Listing
4
+ * @category Contacts Listings
5
+ * @author wpdevelop
6
+ *
7
+ * @web-site http://oplugins.com/
8
+ * @email info@oplugins.com
9
+ *
10
+ * @modified 2020-02-10
11
+ */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
+
15
+ class WPBC_Listing {
16
+
17
+ /**
18
+ * Define HOOKs for loading CSS and JavaScript files
19
+ */
20
+ public function init_load_css_js() {
21
+ // JS & CSS
22
+ add_action( 'wpbc_enqueue_js_files', array( $this, 'js_load_files' ), 50 );
23
+ add_action( 'wpbc_enqueue_css_files', array( $this, 'enqueue_css_files' ), 50 );
24
+ }
25
+
26
+ /** JSS */
27
+ public function js_load_files( $where_to_load ) {
28
+
29
+ $in_footer = true;
30
+
31
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
32
+
33
+ wp_enqueue_script( 'wpbc-listing_class', trailingslashit( plugins_url( '', __FILE__ ) ) . 'listing_ui.js' /* wpbc_plugin_url( '/_out/js/codemirror.js' ) */
34
+ , array( 'wpbc-global-vars' ), '1.1', $in_footer );
35
+ /**
36
+ wp_localize_script( 'wpbc-global-vars', 'wpbc_live_request_obj'
37
+ , array(
38
+ 'contacts' => '',
39
+ 'reminders' => ''
40
+ )
41
+ );
42
+ */
43
+ }
44
+ }
45
+
46
+ /** CSS */
47
+ public function enqueue_css_files( $where_to_load ) {
48
+
49
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
50
+
51
+ wp_enqueue_style( 'wpbc-listing_class', trailingslashit( plugins_url( '', __FILE__ ) ) . 'listing_ui.css', array(), WP_BK_VERSION_NUM );
52
+ }
53
+ }
54
+
55
+ // </editor-fold>
56
+
57
+ }
58
+
59
+ /**
60
+ * Just for loading CSS and JavaScript files
61
+ */
62
+ if ( true ) {
63
+ $js_css_loading = new WPBC_Listing;
64
+ $js_css_loading->init_load_css_js();
65
+ }
66
+
67
+
68
+ function wpbc_ajx_booking_listing__get_default_view_mode(){
69
+
70
+ if (
71
+ ( WPBC_EXIST_NEW_BOOKING_LISTING )
72
+ && ( 'On' != get_bk_option( 'booking_is_use_old_booking_listing' ) )
73
+ ) {
74
+ $booking_default_view_mode = wpbc_get_default_saved_view_mode_for_wpbc_page();
75
+ return $booking_default_view_mode;
76
+ }
77
+ return false;
78
+ }
includes/_pagination/pagination.css ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wpbc-bottom-pagination{
2
+ display: flex;
3
+ flex-flow: row wrap;
4
+ justify-content: flex-end;
5
+ align-items: stretch;
6
+ }
7
+ .wpbc-ajax-pagination_items_per_page,
8
+ .wpbc-ajax-pagination-container {
9
+ display:flex;
10
+ flex-flow: row wrap;
11
+ justify-content: flex-start;
12
+ align-items: stretch;
13
+
14
+ margin: 0;
15
+ }
16
+ .wpbc-ajax-pagination_items_per_page{
17
+ margin-left: 1em;
18
+ margin-top: -1px;
19
+ }
20
+ .wpbc-ajax-pagination_items_per_page .ui_element,
21
+ .wpbc-ajax-pagination .ui_element {
22
+ flex: 0 0 auto;
23
+ }
24
+ .wpbc-ajax-pagination .ui_element > .wpbc_ui_button {
25
+ height: 30px;
26
+ margin: 5px 5px;
27
+ padding: 0 14px;
28
+ }
29
+ .wpbc-ajax-pagination_items_per_page .ui_element > * {
30
+ height: 30px;
31
+ margin: 6px 5px;
32
+ }
33
+
34
+ .wpbc-ajax-pagination .ui_element .wpbc_ui_button.active:not(.inactive),
35
+ .wpbc-ajax-pagination .ui_element .wpbc_ui_button.active:hover:not(.inactive) {
36
+ transform: none;
37
+ }
38
+ @media (max-width: 782px) {
39
+
40
+ .wpbc-bottom-pagination .wpbc-ajax-pagination-container .ui_element > *,
41
+ .wpbc-bottom-pagination .wpbc-ajax-pagination_items_per_page .ui_element > * {
42
+ height: 38px;
43
+ }
44
+ .wpbc-bottom-pagination .wpbc-ajax-pagination-container .ui_element > .wpbc_ui_button,
45
+ .wpbc-bottom-pagination .wpbc-ajax-pagination_items_per_page .ui_element > .wpbc_ui_button {
46
+ padding: 0 15px 2px;
47
+ padding-bottom: 1px;
48
+ display: flex;
49
+ flex-flow: row wrap;
50
+ justify-content: center;
51
+ align-items: center;
52
+ }
53
+ }
includes/_pagination/pagination.js ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2
+ // Views
3
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
4
+
5
+ /**
6
+ * Show Pagination
7
+ *
8
+ * @param pagination_container - '.wpbc_rules_pagination'
9
+ * @param params_obj - JSON object ~ { 'page_active': $page_active, 'pages_count': $pages_count }
10
+ */
11
+ function wpbc_pagination_echo( pagination_container, params_obj ){
12
+
13
+ var pagination = wp.template( 'wpbc_pagination' );
14
+ jQuery( pagination_container ).html( '<div class="wpbc-bottom-pagination"></div>' );
15
+
16
+ // Pagination
17
+ jQuery( pagination_container + ' .wpbc-bottom-pagination').append( pagination( params_obj ) ) ;
18
+
19
+
20
+ // Number of items per page
21
+ var pagination_items_per_page = wp.template( 'wpbc_pagination_items_per_page' );
22
+ jQuery( pagination_container + ' .wpbc-bottom-pagination').append( pagination_items_per_page( params_obj ) ) ;
23
+
24
+ jQuery( pagination_container ).show();
25
+ }
26
+
27
+
28
+ /**
29
+ * Blank function. -- Redefine this function in specific page-XXXX.php file for specific actions
30
+ *
31
+ * @param page_number int
32
+ */
33
+ function wpbc_pagination_click_page( page_number ){
34
+ console.log( 'wpbc_pagination_click_page', page_number );
35
+ }
includes/_pagination/pagination.php ADDED
@@ -0,0 +1,318 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /**
2
+ * @version 1.0
3
+ * @description Pagination
4
+ * @category Pagination Class
5
+ * @author wpdevelop
6
+ *
7
+ * @web-site http://oplugins.com/
8
+ * @email info@oplugins.com
9
+ *
10
+ * @modified 2020-01-23
11
+ */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
+
15
+
16
+ /*
17
+ * Usage: Pagination Class
18
+
19
+ <div class="wpbc_rules_pagination"></div>
20
+ <?php
21
+ $wpbc_pagination = new WPBC_Pagination();
22
+ $wpbc_pagination->init(
23
+ array(
24
+ 'load_on_page' => 'wpbc-rules',
25
+ 'container' => '.wpbc_rules_pagination',
26
+ 'on_click' => 'wpbc_rules_pagination_click' // onclick = "javascript: wpbc_rules_listing_page( page_num );" - need to define this function in JS file
27
+ )
28
+ );
29
+ $wpbc_pagination->show( // Its showing with JavaScript on document ready
30
+ array(
31
+ 'page_active' => 3,
32
+ 'pages_count' => 20
33
+ )
34
+ );
35
+
36
+ OR (for showing with JavaScript) :
37
+
38
+ <script type="text/javascript">
39
+ jQuery( document ).ready( function (){
40
+
41
+ wpbc_pagination_echo( '.wpbc_rules_pagination',
42
+ {
43
+ 'page_active': page_number,
44
+ 'pages_count': Math.ceil( ajx_count / ajx_page_items_count )
45
+ }
46
+ );
47
+ } );
48
+ </script>
49
+
50
+ */
51
+
52
+
53
+ class WPBC_Pagination {
54
+
55
+ private $settings;
56
+
57
+ /**
58
+ * Get parameter Value
59
+ *
60
+ * @param string $parameter - name of parameter
61
+ *
62
+ * @return mixed
63
+ */
64
+ public function get_settings( $parameter ){
65
+
66
+ if ( ! empty( $this->settings[ $parameter ] ) ) {
67
+ return $this->settings[ $parameter ];
68
+ } else {
69
+ return false;
70
+ }
71
+ }
72
+
73
+
74
+ // <editor-fold defaultstate="collapsed" desc=" /// JS | CSS files /// " >
75
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
76
+ /// JS | CSS files
77
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
78
+
79
+ /**
80
+ * Define HOOKs for loading CSS and JavaScript files
81
+ */
82
+ public function init_load_css_js() {
83
+ // JS & CSS
84
+ add_action( 'wpbc_enqueue_js_files', array( $this, 'js_load_files' ), 50 );
85
+ add_action( 'wpbc_enqueue_css_files', array( $this, 'enqueue_css_files' ), 50 );
86
+ }
87
+
88
+ /** JSS */
89
+ public function js_load_files( $where_to_load ) {
90
+
91
+ $in_footer = true;
92
+
93
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
94
+
95
+ //wp_enqueue_script( 'wpbc-live_search', wpbc_plugin_url( '/_out/js/live_search.js' ), array( 'wpbc-global-vars' ), '1.1', $in_footer );
96
+ wp_enqueue_script( 'wpbc-pagination'
97
+ , trailingslashit( plugins_url( '', __FILE__ ) ) . 'pagination.js' /* wpbc_plugin_url( '/_out/js/codemirror.js' ) */
98
+ , array( 'wpbc-global-vars' ), '1.1', $in_footer );
99
+
100
+ /**
101
+ wp_localize_script( 'wpbc-global-vars', 'wpbc_live_request_obj'
102
+ , array(
103
+ 'contacts' => '',
104
+ 'reminders' => ''
105
+ )
106
+ );
107
+ */
108
+ }
109
+ }
110
+
111
+ /** CSS */
112
+ public function enqueue_css_files( $where_to_load ) {
113
+
114
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
115
+
116
+ wp_enqueue_style( 'wpbc-pagination', trailingslashit( plugins_url( '', __FILE__ ) ) . 'pagination.css', array(), WP_BK_VERSION_NUM );
117
+ }
118
+ }
119
+
120
+ // </editor-fold>
121
+
122
+
123
+ // <editor-fold defaultstate="collapsed" desc=" /// Templates /// " >
124
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
125
+ /// Templates
126
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
127
+
128
+ public function init_load_templates() {
129
+
130
+ add_action( 'wpbc_hook_settings_page_footer', array( $this, 'hook__page_footer_tmpl' ) );
131
+ }
132
+
133
+
134
+ /**
135
+ * Templates at footer of page
136
+ *
137
+ * @param $page string
138
+ */
139
+ public function hook__page_footer_tmpl( $page ){
140
+
141
+ if ( $this->get_settings( 'load_on_page' ) === $page ) {
142
+
143
+ $this->template__pagination();
144
+ }
145
+ }
146
+
147
+
148
+ private function template__pagination(){
149
+
150
+ // Pagination
151
+ ?><script type="text/html" id="tmpl-wpbc_pagination">
152
+ <div class="wpbc-ajax-pagination wpbc-ajax-pagination-container">
153
+ <# if ( data.pages_count > 1 ) { #>
154
+ <div class="ui_element">
155
+ <a class="wpbc_ui_control wpbc_ui_button <# if ( 1 == data.page_active ) { #> disabled<# } #>"
156
+ href="javascript:void(0)"
157
+ <# if ( 1 != data.page_active ) { #> onclick="javascript:<?php echo $this->get_settings( 'on_click' ); ?>( parseInt( {{ data.page_active }} ) - 1 );" <# } #>
158
+ >
159
+ <?php _e('Prev', 'booking'); ?>
160
+ </a>
161
+ </div>
162
+ <# }
163
+
164
+ /** Number visible pages (links) that linked to active page, other pages skipped by "..." */
165
+ var num_closed_steps = 2;
166
+
167
+ for ( var pg_num = 1; pg_num <= data.pages_count; pg_num++ ){
168
+
169
+ if ( ! (
170
+ ( data.pages_count > ( num_closed_steps * 4) )
171
+ && ( pg_num > num_closed_steps )
172
+ && ( ( data.pages_count - pg_num + 1 ) > num_closed_steps )
173
+ && ( Math.abs( data.page_active - pg_num ) > num_closed_steps )
174
+ ) )
175
+ {
176
+ #> <div class="ui_element"><a class="wpbc_ui_control wpbc_ui_button <# if ( pg_num == data.page_active ) { #> active<# } #>"
177
+ href="javascript:void(0)" onclick="javascript:<?php echo $this->get_settings( 'on_click' ); ?>( {{pg_num}} );" >
178
+ {{pg_num}}</a></div> <#
179
+
180
+ if ( ( data.pages_count > ( num_closed_steps * 4) )
181
+ && ( (pg_num+1) > num_closed_steps )
182
+ && ( ( data.pages_count - ( pg_num + 1 ) ) > num_closed_steps )
183
+ && ( Math.abs(data.page_active - ( pg_num + 1 ) ) > num_closed_steps )
184
+ ) {
185
+ #><div class="ui_element"><a class="wpbc_ui_control wpbc_ui_button disabled" href="javascript:void(0);">...</a></div><#
186
+ }
187
+ }
188
+ }
189
+
190
+ if ( data.pages_count > 1 ) { #>
191
+ <div class="ui_element">
192
+ <a class="wpbc_ui_control wpbc_ui_button <# if ( data.pages_count == data.page_active ) { #> disabled<# } #>"
193
+ href="javascript:void(0)"
194
+ <# if ( data.pages_count != data.page_active ) { #> onclick="javascript:<?php echo $this->get_settings( 'on_click' ); ?>( parseInt( {{ data.page_active }} ) + 1 );" <# } #>
195
+ >
196
+ <?php _e('Next', 'booking'); ?>
197
+ </a>
198
+ </div>
199
+ <# } #>
200
+ </div>
201
+ </script><?php
202
+
203
+ // Pagination Items per page
204
+ ?><script type="text/html" id="tmpl-wpbc_pagination_items_per_page">
205
+ <div class="wpbc-ajax-pagination_items_per_page">
206
+ <div class="ui_element">
207
+ <select class="wpbc_items_per_page wpbc_ui_control wpbc_ui_select " autocomplete="off">
208
+ <#
209
+ var my_options_arr = [5, 10, 50, 100];
210
+ var is_selected = '';
211
+ _.each( my_options_arr, function ( p_val, p_key, p_data ) {
212
+ is_selected = '';
213
+ if ( data.page_items_count == p_val ) {
214
+ is_selected = ' selected="selected" ';
215
+ }
216
+ #><option value="{{p_val}}" {{is_selected}}>{{p_val}}</option><#
217
+ });
218
+ #>
219
+ </select>
220
+ </div>
221
+ <div class="ui_element">
222
+ <label class="wpbc_ui_control_label"><?php _e('per page','booking') ?></label>
223
+ </div>
224
+ <?php
225
+
226
+ if (0) {
227
+ ?>
228
+ <div class="ui_element">
229
+ <select class="wpbc_items_sort_type wpbc_ui_control wpbc_ui_select" autocomplete="off">
230
+ <#
231
+ my_options_arr = {
232
+ 'ASC': '<?php echo esc_js(__( 'ASC', 'booking' )); ?>',
233
+ 'DESC': '<?php echo esc_js(__( 'DESC', 'booking' )); ?>',
234
+ };
235
+ is_selected = '';
236
+ _.each( my_options_arr, function ( p_val, p_key, p_data ) {
237
+ is_selected = '';
238
+ if ( data.sort_type == p_key ) {
239
+ is_selected = ' selected="selected" ';
240
+ }
241
+ #><option value="{{p_key}}" {{is_selected}}>{{p_val}}</option><#
242
+ });
243
+ #>
244
+ </select>
245
+ </div>
246
+ <?php } ?>
247
+ </div>
248
+ </script><?php
249
+ }
250
+
251
+ // </editor-fold>
252
+
253
+
254
+ /**
255
+ * Init Pagination on start - define 'load_on_page', 'container', 'on_click' function
256
+ *
257
+ * @param array $params = array(
258
+ 'load_on_page' => 'wpbc-settings', // defined at function in_page() {
259
+ 'container' => '.wpbc_settings_pagination', // defined in function content(), like <div class="wpbc_rules_pagination"></div>
260
+ 'on_click' => 'wpbc_pagination_click_page' // onclick = "javascript: wpbc_pagination_click_page( page_active );" - need to define this function in JS file
261
+ );
262
+ */
263
+ public function init( $params = array() ) {
264
+
265
+ $defaults = array(
266
+ 'load_on_page' => 'wpbc-settings', // defined at function in_page() {
267
+ 'container' => '.wpbc_settings_pagination', // defined in function content(), like <div class="wpbc_rules_pagination"></div>
268
+ 'on_click' => 'wpbc_pagination_click_page' // onclick = "javascript: wpbc_pagination_click_page( page_active );" - need to define this function in JS file
269
+ );
270
+ $this->settings = wp_parse_args( $params, $defaults );
271
+
272
+ $this->init_load_templates();
273
+ }
274
+
275
+
276
+ /**
277
+ * Show pagination
278
+ *
279
+ * @param array $params = array(
280
+ 'page_active' => 1,
281
+ 'pages_count' => 10
282
+ )
283
+ */
284
+ public function show( $params = array() ) {
285
+ $defaults = array(
286
+ 'page_active' => 1,
287
+ 'pages_count' => 1
288
+ );
289
+ $params = wp_parse_args( $params, $defaults );
290
+ ?>
291
+ <script type="text/javascript">
292
+
293
+ jQuery( document ).ready( function (){
294
+
295
+ wpbc_pagination_echo( '<?php echo $this->get_settings( 'container' ); ?>', <?php
296
+ echo wp_json_encode(
297
+ array(
298
+ 'page_active' => $params['page_active'],
299
+ 'pages_count' => $params['pages_count']
300
+ )
301
+ );
302
+ ?> );
303
+ } );
304
+ </script>
305
+ <?php
306
+ }
307
+ }
308
+
309
+ /**
310
+ * Just for loading CSS and JavaScript files for all Settings pages
311
+ */
312
+ if ( true ) {
313
+ $js_css_loading = new WPBC_Pagination;
314
+ $js_css_loading->init_load_css_js();
315
+ }
316
+
317
+
318
+ //TODO: delete ../email-reminders/_src/css/o-pagination.css
includes/_toolbar_ui/_out/toolbar_ui.css ADDED
@@ -0,0 +1,993 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* UI Toolbar *************************************************************************************************/
2
+ /* To Compile file: Alt + F12 and run command: "gulp wpbc" */
3
+ /* 1. Default Button Style ------------------------------------------------------------------------------------------ */
4
+ .ui_element .wpbc_ui_button {
5
+ display: -ms-flexbox;
6
+ display: flex;
7
+ -ms-flex-flow: row nowrap;
8
+ flex-flow: row nowrap;
9
+ -ms-flex-pack: start;
10
+ justify-content: flex-start;
11
+ -ms-flex-align: center;
12
+ align-items: center;
13
+ text-decoration: none;
14
+ /*font-size: 13px;*/
15
+ /*line-height: 2.15384615; !* 28px *!*/
16
+ /*min-height: 30px;*/
17
+ min-height: 24px;
18
+ margin: 0;
19
+ padding: 0 10px 2px;
20
+ padding-bottom: 1px;
21
+ cursor: pointer;
22
+ /*border-width: 1px; - Defined at Several elements in a Group. Point #2. */
23
+ border-style: solid;
24
+ -webkit-appearance: none;
25
+ /*border-radius: 3px; - Defined at Several elements in a Group. Point #2. */
26
+ white-space: nowrap;
27
+ box-sizing: border-box;
28
+ }
29
+
30
+ .ui_element .wpbc_ui_button,
31
+ .ui_element .wpbc_ui_button-secondary {
32
+ color: #555;
33
+ border-color: #d8d8d8;
34
+ background: #f7f7f7;
35
+ vertical-align: top;
36
+ }
37
+
38
+ /* :hover ---- */
39
+ .ui_element .wpbc_ui_button.hover:not(.inactive),
40
+ .ui_element .wpbc_ui_button:hover:not(.inactive),
41
+ .ui_element .wpbc_ui_button-secondary:hover:not(.inactive) {
42
+ background: #fafafa;
43
+ border-color: #d8d8d8;
44
+ color: #23282d;
45
+ text-decoration: none;
46
+ }
47
+
48
+ .ui_element .wpbc_ui_button.hover.inactive,
49
+ .ui_element .wpbc_ui_button.inactive:hover,
50
+ .ui_element .wpbc_ui_button-secondary.inactive:hover {
51
+ cursor: default;
52
+ }
53
+
54
+ /* :focus ---- */
55
+ .ui_element .wpbc_ui_button.focus,
56
+ .ui_element .wpbc_ui_button:focus,
57
+ .ui_element .wpbc_ui_button-secondary:focus {
58
+ background: #fafafa;
59
+ border-color: #d8d8d8;
60
+ color: #23282d;
61
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
62
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
63
+ z-index: 1;
64
+ text-decoration: none;
65
+ /* Only visible in Windows High Contrast mode */
66
+ outline: 2px solid transparent;
67
+ /* Reset inherited offset from Gutenberg */
68
+ outline-offset: 0;
69
+ }
70
+
71
+ /* :active ---- */
72
+ .wpbc_ui_dropdown.open > .wpbc_ui_button:not(.inactive),
73
+ .ui_element .wpbc_ui_button:active:not(.inactive),
74
+ .ui_element .wpbc_ui_button-secondary:active:not(.inactive) {
75
+ background: #f6f7f7;
76
+ border-color: #d8d8d8;
77
+ box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, 0.3);
78
+ -ms-transform: translateY(1px);
79
+ transform: translateY(1px);
80
+ outline: 0;
81
+ text-decoration: none;
82
+ }
83
+
84
+ /* :disabled ---- */
85
+ .ui_element .wpbc_ui_button:disabled,
86
+ .ui_element .wpbc_ui_button[disabled],
87
+ .ui_element.disabled .wpbc_ui_button,
88
+ .ui_element .wpbc_ui_button.disabled,
89
+ .ui_element .wpbc_ui_button-secondary[disabled],
90
+ .ui_element .wpbc_ui_button-secondary:disabled,
91
+ .ui_element .wpbc_ui_button-secondary.disabled,
92
+ .ui_element .wpbc_ui_button-disabled {
93
+ color: #a7aaad !important;
94
+ border-color: #dcdcde !important;
95
+ background: #f6f7f7 !important;
96
+ box-shadow: none !important;
97
+ cursor: default;
98
+ -ms-transform: none !important;
99
+ transform: none !important;
100
+ }
101
+
102
+ /* .active CLASS - pressed button, pressed state e.g. a selected setting */
103
+ .ui_element .wpbc_ui_button.active:not(.inactive),
104
+ .ui_element .wpbc_ui_button.active:hover:not(.inactive) {
105
+ background: #f6f7f7;
106
+ border-color: #d8d8d8;
107
+ box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, 0.3);
108
+ -ms-transform: translateY(1px);
109
+ transform: translateY(1px);
110
+ outline: 0;
111
+ text-decoration: none;
112
+ }
113
+
114
+ .ui_element .wpbc_ui_button.active:focus:not(.inactive) {
115
+ border-color: #3582c4;
116
+ box-shadow: inset 0 1px 5px -3px #0a4b78, 0 0 1px 1px rgba(79, 148, 212, 0.1);
117
+ }
118
+
119
+ /* 2. Primary Button Style ----------------------------------------------------------------------------------------- */
120
+ .ui_element .wpbc_ui_button_primary {
121
+ background: #0085ba;
122
+ border-color: #0073aa #006799 #006799;
123
+ color: #fff;
124
+ text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
125
+ text-decoration: none;
126
+ box-shadow: 0 1px 0px #f1f1f1;
127
+ /*background: #2271b1;*/
128
+ /*border-color: #2271b1;*/
129
+ /*color: #fff;*/
130
+ /*text-decoration: none;*/
131
+ /*text-shadow: none;*/
132
+ }
133
+
134
+ /* :hover, :focus ---- */
135
+ .ui_element .wpbc_ui_button_primary.hover:not(.inactive),
136
+ .ui_element .wpbc_ui_button_primary:hover:not(.inactive),
137
+ .ui_element .wpbc_ui_button_primary.focus:not(.inactive),
138
+ .ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
139
+ /*background: #135e96;*/
140
+ /*border-color: #135e96;*/
141
+ /*color: #fff;*/
142
+ background: #008ec2;
143
+ border-color: #006799;
144
+ color: #fff;
145
+ }
146
+
147
+ /* :focus ---- */
148
+ .ui_element .wpbc_ui_button_primary.focus:not(.inactive),
149
+ .ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
150
+ box-shadow: 0 0 0 0px #fff, 0 0 2px 1px #a4d7ff;
151
+ }
152
+
153
+ /* :active ---- */
154
+ .ui_element .wpbc_ui_button_primary.active:not(.inactive),
155
+ .ui_element .wpbc_ui_button_primary.active:hover:not(.inactive),
156
+ .ui_element .wpbc_ui_button_primary.active:focus:not(.inactive),
157
+ .ui_element .wpbc_ui_button_primary:active:not(.inactive) {
158
+ background: #0c7ca8;
159
+ border-color: #0b79a4;
160
+ box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, 0.3);
161
+ color: #fff;
162
+ }
163
+
164
+ /* :disabled ---- */
165
+ .ui_element .wpbc_ui_button_primary[disabled],
166
+ .ui_element .wpbc_ui_button_primary:disabled,
167
+ .ui_element .wpbc_ui_button_primary-disabled,
168
+ .ui_element .wpbc_ui_button_primary.disabled {
169
+ color: #a7aaad !important;
170
+ background: #f6f7f7 !important;
171
+ border-color: #dcdcde !important;
172
+ box-shadow: none !important;
173
+ text-shadow: none !important;
174
+ cursor: default;
175
+ }
176
+
177
+ @media (max-width: 782px) {
178
+ .ui_element .in-button-text {
179
+ display: none;
180
+ }
181
+ }
182
+
183
+ /* 3.1 Text --------------------------------------------------------------------------------------------------------- */
184
+ .ui_element .wpbc_ui_text {
185
+ border: 1px solid #d6d6d6;
186
+ -ms-flex: 1 1 120px;
187
+ flex: 1 1 120px;
188
+ }
189
+
190
+ /* :focus ---- */
191
+ .ui_element .wpbc_ui_text.focus,
192
+ .ui_element .wpbc_ui_text:focus {
193
+ border-color: #2271b1;
194
+ box-shadow: 0 0 0 1px #2271b1;
195
+ border-color: #d8d8d8;
196
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
197
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
198
+ z-index: 1;
199
+ /* Only visible in Windows High Contrast mode */
200
+ outline: 2px solid transparent;
201
+ }
202
+
203
+ /* 3.2 Select-box ------------------------------------------------------------------------------------------------- */
204
+ .ui_element .wpbc_ui_select {
205
+ border: 1px solid #d6d6d6;
206
+ -ms-flex: 1 1 auto;
207
+ flex: 1 1 auto;
208
+ }
209
+
210
+ /* :focus ---- */
211
+ .ui_element .wpbc_ui_select.focus,
212
+ .ui_element .wpbc_ui_select:focus {
213
+ border-color: #2271b1;
214
+ box-shadow: 0 0 0 1px #2271b1;
215
+ border-color: #d8d8d8;
216
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
217
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
218
+ z-index: 1;
219
+ /* Only visible in Windows High Contrast mode */
220
+ outline: 2px solid transparent;
221
+ }
222
+
223
+ /* 3.3 Check-box & Radio ----------------------------------------------------------------------------------------- */
224
+ .ui_element .wpbc_ui_checkbox,
225
+ .ui_element .wpbc_ui_radio {
226
+ border: 1px solid #bcbcbc;
227
+ border-radius: 4px;
228
+ background: #fff;
229
+ color: #50575e;
230
+ clear: none;
231
+ cursor: pointer;
232
+ display: inline-block;
233
+ line-height: 0 !important;
234
+ height: 1rem !important;
235
+ margin: -0.25rem 0.25rem 0 0;
236
+ outline: 0;
237
+ padding: 0 !important;
238
+ text-align: center;
239
+ vertical-align: middle;
240
+ width: 1rem;
241
+ min-width: 1rem;
242
+ -webkit-appearance: none;
243
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
244
+ transition: .05s border-color ease-in-out;
245
+ margin: 0;
246
+ -ms-flex-item-align: center;
247
+ align-self: center;
248
+ }
249
+
250
+ .ui_element .wpbc_ui_radio {
251
+ border-radius: 50%;
252
+ margin-right: 0.25rem;
253
+ line-height: 0.71428571;
254
+ }
255
+
256
+ /* :focus ---- */
257
+ .ui_element .wpbc_ui_checkbox.focus,
258
+ .ui_element .wpbc_ui_checkbox:focus,
259
+ .ui_element .wpbc_ui_radio.focus,
260
+ .ui_element .wpbc_ui_radio:focus {
261
+ border-color: #2271b1;
262
+ box-shadow: 0 0 0 1px #2271b1;
263
+ border-color: #d8d8d8;
264
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
265
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
266
+ z-index: 1;
267
+ /* Only visible in Windows High Contrast mode */
268
+ outline: 2px solid transparent !important;
269
+ }
270
+
271
+ .ui_element .wpbc_ui_radio + .wpbc_ui_control_label,
272
+ .ui_element .wpbc_ui_checkbox + .wpbc_ui_control_label {
273
+ padding-left: 5px;
274
+ padding-right: 5px;
275
+ }
276
+
277
+ @media screen and (max-width: 782px) {
278
+ .ui_element .wpbc_ui_checkbox,
279
+ .ui_element .wpbc_ui_radio {
280
+ height: 1.5625rem !important;
281
+ width: 1.5625rem;
282
+ }
283
+ }
284
+
285
+ /* 3.4. Addon ------------------------------------------------------------------------------------------------------ */
286
+ .ui_element .wpbc_ui_addon {
287
+ -ms-flex: 0 1 auto;
288
+ flex: 0 1 auto;
289
+ display: -ms-flexbox;
290
+ display: flex;
291
+ -ms-flex-flow: row wrap;
292
+ flex-flow: row wrap;
293
+ -ms-flex-pack: stretch;
294
+ justify-content: stretch;
295
+ -ms-flex-align: center;
296
+ align-items: center;
297
+ }
298
+
299
+ /* 3.5 Labels ------------------------------------------------------------------------------------------------------ */
300
+ .ui_element label.wpbc_ui_control_label {
301
+ -ms-flex: 0 1 auto;
302
+ flex: 0 1 auto;
303
+ display: -ms-flexbox;
304
+ display: flex;
305
+ -ms-flex-flow: row wrap;
306
+ flex-flow: row wrap;
307
+ -ms-flex-pack: start;
308
+ justify-content: flex-start;
309
+ -ms-flex-align: center;
310
+ align-items: center;
311
+ padding: 0 5px 2px 0;
312
+ padding-bottom: 1px;
313
+ }
314
+
315
+ .ui_element label.wpbc_ui_control_label + .wpbc_ui_control:first-of-type {
316
+ border-top-left-radius: 3px !important;
317
+ border-bottom-left-radius: 3px !important;
318
+ }
319
+
320
+ /**********************************************************************************************************************/
321
+ /* 4. Dropdown List */
322
+ /**********************************************************************************************************************/
323
+ .ui_element .wpbc_ui_dropdown__outside_label {
324
+ -ms-flex: 0 1 auto;
325
+ flex: 0 1 auto;
326
+ display: -ms-flexbox;
327
+ display: flex;
328
+ -ms-flex-flow: row nowrap;
329
+ flex-flow: row nowrap;
330
+ -ms-flex-pack: start;
331
+ justify-content: flex-start;
332
+ -ms-flex-align: center;
333
+ align-items: center;
334
+ padding: 0 10px 2px 0;
335
+ padding-bottom: 1px;
336
+ }
337
+
338
+ .ui_element .wpbc_ui_dropdown {
339
+ -ms-flex: 0 1 auto;
340
+ flex: 0 1 auto;
341
+ display: -ms-flexbox;
342
+ display: flex;
343
+ -ms-flex-flow: row nowrap;
344
+ flex-flow: row nowrap;
345
+ -ms-flex-pack: start;
346
+ justify-content: flex-start;
347
+ -ms-flex-align: stretch;
348
+ align-items: stretch;
349
+ position: relative;
350
+ }
351
+
352
+ .ui_element .wpbc_ui_dropdown * {
353
+ box-sizing: border-box;
354
+ }
355
+
356
+ .ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_label {
357
+ font-weight: 600;
358
+ margin: 0;
359
+ padding: 0 0.5em 0 0;
360
+ }
361
+
362
+ .ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_caret {
363
+ display: inline-block;
364
+ width: 0;
365
+ height: 0;
366
+ margin-left: 7px;
367
+ vertical-align: middle;
368
+ border-top: 4px dashed;
369
+ border-top: 4px solid \9;
370
+ border-right: 4px solid transparent;
371
+ border-left: 4px solid transparent;
372
+ }
373
+
374
+ /* ---------------------------------------------------------------------------------------------------------- */
375
+ /* BORDER RADIUS */
376
+ /* ---------------------------------------------------------------------------------------------------------- */
377
+ .ui_element .wpbc_ui_dropdown:last-child > .wpbc_ui_button:last-of-type {
378
+ border-top-right-radius: 3px;
379
+ border-bottom-right-radius: 3px;
380
+ }
381
+
382
+ /* In case, if have several elements in .ui_element (like "button dropdown button"), - make borders not round */
383
+ /* Left border not round */
384
+ .ui_element .wpbc_ui_dropdown:not(:first-child) > .wpbc_ui_button:first-child {
385
+ border-top-left-radius: 0;
386
+ border-bottom-left-radius: 0;
387
+ }
388
+
389
+ /* Right border not round */
390
+ .ui_element .wpbc_ui_dropdown:not(:last-child) > .wpbc_ui_button:last-child {
391
+ border-top-right-radius: 0;
392
+ border-bottom-right-radius: 0;
393
+ }
394
+
395
+ /* If we have outside label, then we need to make left border round */
396
+ .ui_element .wpbc_ui_dropdown__outside_label + .wpbc_ui_dropdown > .wpbc_ui_button:first-child {
397
+ border-top-left-radius: 3px;
398
+ border-bottom-left-radius: 3px;
399
+ }
400
+
401
+ /* ---------------------------------------------------------------------------------------------------------- */
402
+ /* OPTIONS (Drop Down Menu) in Dropdown List */
403
+ /* ---------------------------------------------------------------------------------------------------------- */
404
+ /* Complex OPTION - this option include some INPUT elements --------------- */
405
+ .wpbc_ui_dropdown .ui_dropdown_menu li.ui_complex_option_element {
406
+ display: -ms-flexbox;
407
+ display: flex;
408
+ -ms-flex-flow: row wrap;
409
+ flex-flow: row wrap;
410
+ -ms-flex-pack: start;
411
+ justify-content: flex-start;
412
+ -ms-flex-align: center;
413
+ align-items: center;
414
+ margin: 0;
415
+ padding: 0 15px;
416
+ }
417
+
418
+ .wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element {
419
+ -ms-flex: 0 1 50%;
420
+ flex: 0 1 50%;
421
+ display: -ms-flexbox;
422
+ display: flex;
423
+ -ms-flex-flow: row nowrap;
424
+ flex-flow: row nowrap;
425
+ -ms-flex-pack: start;
426
+ justify-content: flex-start;
427
+ -ms-flex-align: center;
428
+ align-items: center;
429
+ margin: 0;
430
+ padding: 4px 0;
431
+ }
432
+
433
+ .wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element > * {
434
+ -ms-flex: 0 1 auto;
435
+ flex: 0 1 auto;
436
+ margin: 0;
437
+ height: auto;
438
+ max-width: 210px;
439
+ }
440
+
441
+ /* ---------------------------- General backdrop --------------------------- */
442
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu {
443
+ display: none;
444
+ position: absolute;
445
+ top: 100%;
446
+ left: 0;
447
+ z-index: 1000;
448
+ float: left;
449
+ min-width: 160px;
450
+ padding: 5px 0;
451
+ margin: 0;
452
+ list-style: none;
453
+ text-align: left;
454
+ background-color: #ffffff;
455
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
456
+ border: 1px solid #cccccc;
457
+ border: 1px solid rgba(0, 0, 0, 0.15);
458
+ border-radius: 0 0 3px 3px;
459
+ background-clip: padding-box;
460
+ }
461
+
462
+ .ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu * {
463
+ font-size: 13px;
464
+ }
465
+
466
+ @media screen and (max-width: 782px) {
467
+ .ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu * {
468
+ font-size: 14px;
469
+ }
470
+ }
471
+
472
+ /* ---------------------------- Open --------------------------------------- */
473
+ .ui_element .wpbc_ui_dropdown.open > .ui_dropdown_menu {
474
+ display: block;
475
+ }
476
+
477
+ /* ---------------------------- Align: left | right ------------------------ */
478
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu.pull-right,
479
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_right {
480
+ left: auto;
481
+ right: 0;
482
+ }
483
+
484
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_left {
485
+ left: 0;
486
+ right: auto;
487
+ }
488
+
489
+ /* ---------------------------- Divider ------------------------------------ */
490
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu hr {
491
+ height: 1px;
492
+ margin: 5px 0;
493
+ overflow: hidden;
494
+ background: none;
495
+ border: 0;
496
+ border-top: 1px solid #eeeeee;
497
+ }
498
+
499
+ /* ---------------------------- Header ------------------------------------- */
500
+ .wpbc_ui_dropdown .ui_dropdown_menu li.dropdown-header {
501
+ padding: 0 15px;
502
+ color: #999;
503
+ font-size: 0.8em;
504
+ font-style: italic;
505
+ font-weight: 600;
506
+ }
507
+
508
+ /* ---------------------------- LI ----------------------------------------- */
509
+ .wpbc_ui_dropdown .ui_dropdown_menu li {
510
+ padding: 0;
511
+ margin: 0;
512
+ }
513
+
514
+ /* ---------------------------- A ------------------------------------------ */
515
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu a {
516
+ clear: both;
517
+ display: block;
518
+ font-weight: 400;
519
+ padding: 5px 15px;
520
+ white-space: nowrap;
521
+ /*font-size: 13px;*/
522
+ line-height: 18px;
523
+ }
524
+
525
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a {
526
+ color: #333333;
527
+ text-decoration: none;
528
+ font-weight: 400;
529
+ padding: 5px 15px;
530
+ white-space: nowrap;
531
+ display: block;
532
+ clear: both;
533
+ font-size: 1em;
534
+ line-height: 1.42857143;
535
+ }
536
+
537
+ /* ---------------------------- A :hover :focus .active -------------------- */
538
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:hover,
539
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:focus,
540
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a,
541
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:hover,
542
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:focus {
543
+ color: #fff;
544
+ background: #08c;
545
+ text-decoration: none;
546
+ outline: none;
547
+ box-shadow: none;
548
+ }
549
+
550
+ /* ---------------------------- .disabled A ------------------------------ */
551
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a,
552
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
553
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
554
+ color: #ccc;
555
+ }
556
+
557
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
558
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
559
+ text-decoration: none;
560
+ background-color: transparent;
561
+ background-image: none;
562
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
563
+ cursor: not-allowed;
564
+ }
565
+
566
+ .ui_element .wpbc_ui_dropdown .dropdown-backdrop {
567
+ position: fixed;
568
+ left: 0;
569
+ right: 0;
570
+ bottom: 0;
571
+ top: 0;
572
+ z-index: 990;
573
+ }
574
+
575
+ /**********************************************************************************************************************/
576
+ /* 5. Several elements in a ".ui_element" group -------------------------------------------------------------------- */
577
+ .ui_element .wpbc_ui_control {
578
+ border-radius: 0;
579
+ border-width: 1px;
580
+ /*border-right-width:0;*/
581
+ border-right-width: 1px;
582
+ margin-right: -1px !important;
583
+ }
584
+
585
+ .ui_element .wpbc_ui_control:first-child {
586
+ border-radius: 3px 0 0 3px;
587
+ }
588
+
589
+ .ui_element .wpbc_ui_control:last-child {
590
+ border-radius: 0 3px 3px 0;
591
+ border-width: 1px;
592
+ }
593
+
594
+ .ui_element .wpbc_ui_control:first-child:last-child {
595
+ border-radius: 3px;
596
+ }
597
+
598
+ /**********************************************************************************************************************/
599
+ /** Toolbar */
600
+ /**********************************************************************************************************************/
601
+ .ui_nowrap {
602
+ -ms-flex-wrap: nowrap !important;
603
+ flex-wrap: nowrap !important;
604
+ }
605
+
606
+ /* Toolbar --------------------------------------------------------------------------------------------------------- */
607
+ .wpbc_ajx_toolbar {
608
+ position: relative;
609
+ margin: 0 0 10px 50px;
610
+ }
611
+
612
+ .wpbc_ajx_toolbar * {
613
+ box-sizing: border-box;
614
+ }
615
+
616
+ /* Row of simple buttons somewhere in a page */
617
+ .wpbc_ajx_toolbar.wpbc_buttons_row {
618
+ position: initial;
619
+ margin: 0;
620
+ float: left;
621
+ }
622
+
623
+ .wpbc_ajx_toolbar.wpbc_buttons_row .ui_container {
624
+ background: none;
625
+ border: none;
626
+ margin: 0;
627
+ padding: 0;
628
+ }
629
+
630
+ /* Container ------------------------------------------------------------------------------------------------------- */
631
+ .wpbc_ajx_toolbar .ui_container {
632
+ display: -ms-flexbox;
633
+ display: flex;
634
+ -ms-flex-flow: row wrap;
635
+ flex-flow: row wrap;
636
+ -ms-flex-pack: start;
637
+ justify-content: flex-start;
638
+ -ms-flex-align: stretch;
639
+ align-items: stretch;
640
+ margin: 0;
641
+ box-shadow: none;
642
+ border: 1px solid #ccc;
643
+ border-top: none;
644
+ background: #f5f5f5;
645
+ font-size: 14px;
646
+ padding: 6px 15px;
647
+ }
648
+
649
+ .wpbc_ajx_toolbar .ui_container:last-child {
650
+ border-radius: 0 0 2px 2px;
651
+ }
652
+
653
+ /* Groups in container --------------------------------------------------------------------------------------------- */
654
+ .wpbc_ajx_toolbar .ui_container .ui_group {
655
+ -ms-flex: 0 1 auto;
656
+ flex: 0 1 auto;
657
+ padding: 0;
658
+ display: -ms-flexbox;
659
+ display: flex;
660
+ -ms-flex-flow: row wrap;
661
+ flex-flow: row wrap;
662
+ -ms-flex-pack: start;
663
+ justify-content: flex-start;
664
+ -ms-flex-align: stretch;
665
+ align-items: stretch;
666
+ border: none;
667
+ margin: 0 20px 0 0;
668
+ }
669
+
670
+ .wpbc_ajx_toolbar .ui_container .ui_group:last-child {
671
+ margin: 0;
672
+ }
673
+
674
+ /* Elements -------------------------------------------------------------------------------------------------------- */
675
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element {
676
+ display: -ms-flexbox;
677
+ display: flex;
678
+ -ms-flex-flow: row wrap;
679
+ flex-flow: row wrap;
680
+ -ms-flex-pack: start;
681
+ justify-content: flex-start;
682
+ -ms-flex-align: stretch;
683
+ align-items: stretch;
684
+ -ms-flex: 0 1 auto;
685
+ flex: 0 1 auto;
686
+ position: relative;
687
+ margin: 0px 15px 0px 0;
688
+ }
689
+
690
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element:last-child {
691
+ margin-right: 0;
692
+ }
693
+
694
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
695
+ margin: 5px 0;
696
+ }
697
+
698
+ .ui_elements_divider {
699
+ margin-left: 15px;
700
+ }
701
+
702
+ /**********************************************************************************************************************/
703
+ /** Customization */
704
+ /**********************************************************************************************************************/
705
+ .wpbc_ajx_toolbar .ui_container.ui_container_small * {
706
+ font-size: 13px;
707
+ }
708
+
709
+ @media (max-width: 782px) {
710
+ .wpbc_ajx_toolbar .ui_container.ui_container_small * {
711
+ font-size: 14px;
712
+ }
713
+ }
714
+
715
+ /* Elements Height ------------------------------------------------------------------------------------------------- */
716
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
717
+ height: 38px;
718
+ }
719
+
720
+ .wpbc_ajx_toolbar .ui_container.ui_container_small .ui_group .ui_element > * {
721
+ height: 30px;
722
+ }
723
+
724
+ @media (max-width: 782px) {
725
+ .wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > *,
726
+ #toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
727
+ height: 38px;
728
+ }
729
+ .wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > .wpbc_ui_button,
730
+ #toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > .wpbc_ui_button {
731
+ padding: 0 15px 2px;
732
+ padding-bottom: 1px;
733
+ display: -ms-flexbox;
734
+ display: flex;
735
+ -ms-flex-flow: row wrap;
736
+ flex-flow: row wrap;
737
+ -ms-flex-pack: center;
738
+ justify-content: center;
739
+ -ms-flex-align: center;
740
+ align-items: center;
741
+ }
742
+ }
743
+
744
+ /* Keyword -------------------------------------------------------------------------------------------------------- */
745
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__dates_status {
746
+ margin-right: 2.5em;
747
+ }
748
+
749
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword {
750
+ -ms-flex: 1 1 auto;
751
+ flex: 1 1 auto;
752
+ }
753
+
754
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element {
755
+ -ms-flex: 1 1 auto;
756
+ flex: 1 1 auto;
757
+ }
758
+
759
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element .wpbc_search_field {
760
+ width: 100%;
761
+ }
762
+
763
+ /* 2nd row -------------------------------------------------------------------------------------------------------- */
764
+ .wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 {
765
+ padding: 4px 15px;
766
+ }
767
+
768
+ .wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 .ui_group.ui_group__statuses {
769
+ -ms-flex: 1 1 auto;
770
+ flex: 1 1 auto;
771
+ }
772
+
773
+ /**********************************************************************************************************************/
774
+ /** Booking resources - Chosen
775
+ /**********************************************************************************************************************/
776
+ /**
777
+ * Choozen Structure
778
+
779
+ <select multiple="MULTIPLE"...
780
+
781
+ div#wh_booking_type_chosen .chzn-container.chzn-container-multi .chzn-with-drop.chzn-container-active (if active)
782
+ ul.chzn-choices
783
+ li.search-choice
784
+ <span>
785
+ a.search-choice-close
786
+
787
+ li.search-field
788
+ input[type="text"].chzn-search-input .default (if no selected values)
789
+
790
+ div.chzn-drop
791
+ ul.chzn-results
792
+ li.result-selected || li.active-result .highlighted (if active)
793
+ */
794
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
795
+ -ms-flex: 1 1 auto;
796
+ flex: 1 1 auto;
797
+ display: -ms-flexbox;
798
+ display: flex;
799
+ -ms-flex-flow: column wrap;
800
+ flex-flow: column wrap;
801
+ -ms-flex-pack: center;
802
+ justify-content: center;
803
+ -ms-flex-align: center;
804
+ align-items: center;
805
+ height: initial;
806
+ width: auto !important;
807
+ min-width: 10em;
808
+ margin-right: -1px;
809
+ }
810
+
811
+ @media (max-width: 782px) {
812
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
813
+ height: initial !important;
814
+ }
815
+ }
816
+
817
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices {
818
+ -ms-flex: 1 1 auto;
819
+ flex: 1 1 auto;
820
+ display: -ms-flexbox;
821
+ display: flex;
822
+ -ms-flex-flow: row wrap;
823
+ flex-flow: row wrap;
824
+ -ms-flex-pack: start;
825
+ justify-content: flex-start;
826
+ -ms-flex-align: center;
827
+ align-items: center;
828
+ -ms-flex-line-pack: center;
829
+ align-content: center;
830
+ margin: 0;
831
+ padding: 0 0 0 5px;
832
+ height: auto;
833
+ min-height: 28px !important;
834
+ border-radius: 3px 0 0 3px;
835
+ }
836
+
837
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi.chzn-container-active ul.chzn-choices {
838
+ border-color: #d8d8d8 !important;
839
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
840
+ z-index: 1;
841
+ outline: 2px solid transparent;
842
+ }
843
+
844
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice {
845
+ -ms-flex: 0 1 auto;
846
+ flex: 0 1 auto;
847
+ display: -ms-flexbox;
848
+ display: flex;
849
+ -ms-flex-flow: row nowrap;
850
+ flex-flow: row nowrap;
851
+ -ms-flex-pack: start;
852
+ justify-content: flex-start;
853
+ -ms-flex-align: baseline;
854
+ align-items: baseline;
855
+ margin: 3px 0.5em 3px 0;
856
+ padding: 3px 5px 3px 8px;
857
+ }
858
+
859
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice span {
860
+ word-wrap: break-word;
861
+ }
862
+
863
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close {
864
+ font-family: "Glyphicons Halflings";
865
+ font-style: normal;
866
+ font-weight: 400;
867
+ font-size: 9px;
868
+ color: #555;
869
+ text-decoration: none;
870
+ position: relative;
871
+ top: auto;
872
+ left: auto;
873
+ right: auto;
874
+ bottom: auto;
875
+ margin: 0 0 0 1em;
876
+ display: -ms-flexbox;
877
+ display: flex;
878
+ -ms-flex-flow: column wrap;
879
+ flex-flow: column wrap;
880
+ -ms-flex-pack: center;
881
+ justify-content: center;
882
+ -ms-flex-line-pack: center;
883
+ align-content: center;
884
+ width: auto;
885
+ height: auto;
886
+ }
887
+
888
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:before {
889
+ content: "\e014";
890
+ }
891
+
892
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:hover {
893
+ text-decoration: none;
894
+ }
895
+
896
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field {
897
+ -ms-flex: 0 1 1px;
898
+ flex: 0 1 1px;
899
+ display: -ms-flexbox;
900
+ display: flex;
901
+ -ms-flex-flow: row wrap;
902
+ flex-flow: row wrap;
903
+ -ms-flex-pack: start;
904
+ justify-content: flex-start;
905
+ -ms-flex-align: center;
906
+ align-items: center;
907
+ margin: 0px 0 0px 0;
908
+ padding: 0;
909
+ white-space: nowrap;
910
+ }
911
+
912
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"].default {
913
+ min-width: 12em;
914
+ }
915
+
916
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"] {
917
+ font-family: inherit;
918
+ }
919
+
920
+ .ui_container .ui_group .ui_element .chzn-container div.chzn-drop ul.chzn-results li.highlighted {
921
+ color: #fff;
922
+ background: #08c;
923
+ text-decoration: none;
924
+ outline: none;
925
+ box-shadow: none;
926
+ }
927
+
928
+ /*
929
+ #wh_booking_type_chosen {
930
+ width: auto !important;
931
+ display: flex;
932
+ flex-flow: row wrap;
933
+ justify-content: center;
934
+ align-items: stretch;
935
+ flex: 1 1 auto;
936
+ height: initial;
937
+ min-width: 10em;
938
+ }
939
+
940
+ #wh_booking_type_chosen .chzn-choices {
941
+ display: flex;
942
+ flex-flow: row wrap;
943
+ justify-content: stretch;
944
+ align-items: center;
945
+ margin: 0px 0px;
946
+ padding: 0 5px;
947
+ min-height: auto !important;
948
+ flex: 1 1 auto;
949
+ border-radius: 3px 0 0 3px;
950
+ }
951
+
952
+ .chzn-container-multi .chzn-choices .search-choice a.search-choice-close {
953
+ background: none;
954
+ display: inline-block;
955
+ font-family: "Glyphicons Halflings";
956
+ font-style: normal;
957
+ font-weight: 400;
958
+ font-size: 9px;
959
+ line-height: 1;
960
+ position: relative;
961
+ top: 0px;
962
+ left: 15px;
963
+ color: #555;
964
+ text-decoration: none;
965
+ }
966
+ .chzn-container-multi .chzn-choices .search-choice a.search-choice-close:hover {
967
+ text-decoration: none;
968
+ }
969
+ .chzn-container-multi .chzn-choices .search-choice a.search-choice-close:before {
970
+ content: "\e014";
971
+ }
972
+
973
+ #wh_booking_type_chosen .chzn-search-input.default {
974
+ min-width: 12em;
975
+ }
976
+ #wh_booking_type_chosen.chzn-container.chzn-container-multi.chzn-container-active .chzn-choices {
977
+
978
+ border-color: #d8d8d8 !important;
979
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
980
+ z-index: 1;
981
+ outline: 2px solid transparent;
982
+ }
983
+ .chzn-container-multi .chzn-choices li.search-field input[type="text"] {
984
+ font-family: inherit;
985
+ }
986
+ .chzn-container .chzn-results li.highlighted {
987
+ color: #fff;
988
+ background: #08c;
989
+ text-decoration: none;
990
+ outline: none;
991
+ box-shadow: none;
992
+ }
993
+ /**/
includes/_toolbar_ui/_out/toolbar_ui.js ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /**
3
+ * Encode HTML text to safe HTML entities
4
+ *
5
+ * Replace all characters in the given range (unicode 00A0 - 9999, as well as ampersand, greater & less than)
6
+ * with their html entity equivalents, which is simply &#nnn; where nnn is the unicode value we get from charCodeAt
7
+ *
8
+ * @param rawStr
9
+ * @returns {*}
10
+ */
11
+
12
+ function wpbc_get_safe_html_text(rawStr) {
13
+ var encodedStr = rawStr.replace(/[\u00A0-\u9999<>\&]/g, function (i) {
14
+ return '&#' + i.charCodeAt(0) + ';';
15
+ });
16
+ return encodedStr;
17
+ }
18
+ /**
19
+ * Change Value and Title of dropdown after clicking on Apply button
20
+ *
21
+ * @param params Example: { 'dropdown_id': 'wh_booking_date', 'dropdown_radio_name': 'ui_wh_booking_date_radio' }
22
+ */
23
+
24
+
25
+ function wpbc_ui_dropdown_apply_click(params) {
26
+ // Get input values of all elements in LI section, where RADIO was selected
27
+ var filter_ui_dates_arr = jQuery('input[name="' + params['dropdown_radio_name'] + '"]:checked').parents('li').find(':input').map(function () {
28
+ return wpbc_get_safe_html_text(jQuery(this).val());
29
+ }).get();
30
+
31
+ if (0 !== filter_ui_dates_arr.length) {
32
+ // Continue only if radio button was selected, and we are having value
33
+ // Get titles of all elements in LI section, where RADIO was selected
34
+ var filter_ui_titles_arr = jQuery('input[name="' + params['dropdown_radio_name'] + '"]:checked').parents('li').find(':input').map(function () {
35
+ if ('text' == jQuery(this).prop('type')) {
36
+ return jQuery(this).val();
37
+ }
38
+
39
+ if ('select-one' == jQuery(this).prop('type')) {
40
+ return jQuery(this).find(':selected').text();
41
+ }
42
+
43
+ if ('radio' == jQuery(this).prop('type') || 'checkbox' == jQuery(this).prop('type')) {
44
+ var input_selected = jQuery(this).filter(':checked').next('.wpbc_ui_control_label').html();
45
+
46
+ if (undefined == input_selected) {
47
+ input_selected = jQuery(this).filter(':checked').prev('.wpbc_ui_control_label').html();
48
+ }
49
+
50
+ return undefined !== input_selected ? input_selected : '';
51
+ }
52
+
53
+ return jQuery(this).val();
54
+ }).get(); // Update Value to dropdown input hidden elements. Such value stringify.
55
+
56
+ jQuery('#' + params['dropdown_id']).val(JSON.stringify(filter_ui_dates_arr)); // Generate change action, for ability to send Ajax request
57
+
58
+ jQuery('#' + params['dropdown_id']).trigger('change'); // Get Label of selected Radio button
59
+
60
+ var filter_ui_dates_title = jQuery('input[name="' + params['dropdown_radio_name'] + '"]:checked').next('.wpbc_ui_control_label').html() + ': '; // Remove selected value of radio button from beginning, we will use Label title instead
61
+
62
+ filter_ui_titles_arr.shift(); // Update Title in dropdown
63
+
64
+ var encoded_html_text = wpbc_get_safe_html_text(filter_ui_dates_title + filter_ui_titles_arr.join(' - '));
65
+ jQuery('#' + params['dropdown_id'] + '_selector .wpbc_selected_in_dropdown').html(encoded_html_text);
66
+ }
67
+
68
+ jQuery('#' + params['dropdown_id'] + '_container').hide();
69
+ }
70
+ /**
71
+ * Close dropdown after clicking on Close button
72
+ *
73
+ * @param dropdown_id ID of dropdown
74
+ */
75
+
76
+
77
+ function wpbc_ui_dropdown_close_click(dropdown_id) {
78
+ jQuery('#' + dropdown_id + '_container').hide();
79
+ }
80
+ /**
81
+ * Simple option click on dropdown
82
+ *
83
+ * @param params Example: { 'dropdown_id': 'wh_booking_date', 'is_this_simple_list': true, 'value': '5', '_this': this }
84
+ */
85
+
86
+
87
+ function wpbc_ui_dropdown_simple_click(params) {
88
+ jQuery('#' + params['dropdown_id'] + '_selector .wpbc_selected_in_dropdown').html(jQuery(params['_this']).html());
89
+ jQuery('#' + params['dropdown_id']).val(JSON.stringify([params['value']]));
90
+ jQuery('#' + params['dropdown_id'] + '_container li input[type=checkbox],' + '#' + params['dropdown_id'] + '_container li input[type=radio]').prop('checked', false);
91
+ jQuery('#' + params['dropdown_id']).trigger('change');
92
+
93
+ if (!params['is_this_simple_list']) {
94
+ jQuery('#' + params['dropdown_id'] + '_container').hide();
95
+ }
96
+ }
97
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL190b29sYmFyX3VpL19zcmMvdG9vbGJhcl91aS5qcyJdLCJuYW1lcyI6WyJ3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCIsInJhd1N0ciIsImVuY29kZWRTdHIiLCJyZXBsYWNlIiwiaSIsImNoYXJDb2RlQXQiLCJ3cGJjX3VpX2Ryb3Bkb3duX2FwcGx5X2NsaWNrIiwicGFyYW1zIiwiZmlsdGVyX3VpX2RhdGVzX2FyciIsImpRdWVyeSIsInBhcmVudHMiLCJmaW5kIiwibWFwIiwidmFsIiwiZ2V0IiwibGVuZ3RoIiwiZmlsdGVyX3VpX3RpdGxlc19hcnIiLCJwcm9wIiwidGV4dCIsImlucHV0X3NlbGVjdGVkIiwiZmlsdGVyIiwibmV4dCIsImh0bWwiLCJ1bmRlZmluZWQiLCJwcmV2IiwiSlNPTiIsInN0cmluZ2lmeSIsInRyaWdnZXIiLCJmaWx0ZXJfdWlfZGF0ZXNfdGl0bGUiLCJzaGlmdCIsImVuY29kZWRfaHRtbF90ZXh0Iiwiam9pbiIsImhpZGUiLCJ3cGJjX3VpX2Ryb3Bkb3duX2Nsb3NlX2NsaWNrIiwiZHJvcGRvd25faWQiLCJ3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayJdLCJtYXBwaW5ncyI6IkFBQUE7QUFHQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsU0FBU0EsdUJBQVQsQ0FBa0NDLE1BQWxDLEVBQTBDO0FBRXpDLE1BQUlDLFVBQVUsR0FBR0QsTUFBTSxDQUFDRSxPQUFQLENBQWdCLHNCQUFoQixFQUF3QyxVQUFXQyxDQUFYLEVBQWM7QUFDdEUsV0FBTyxPQUFPQSxDQUFDLENBQUNDLFVBQUYsQ0FBYyxDQUFkLENBQVAsR0FBMkIsR0FBbEM7QUFDQSxHQUZnQixDQUFqQjtBQUlBLFNBQU9ILFVBQVA7QUFDQTtBQUdEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNJLDRCQUFULENBQXVDQyxNQUF2QyxFQUErQztBQUU5QztBQUNBLE1BQUlDLG1CQUFtQixHQUFHQyxN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QUUsTUFBTUYsTUFBTSxDQUFFLGFBQUYsQ0FBWixHQUFnQyxZQUFsQyxDQUFOLENBQXVEeUIsSUFBdkQ7QUFDQTtBQUNEIiwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XHJcblxyXG5cclxuLyoqXHJcbiAqIEVuY29kZSBIVE1MIHRleHQgdG8gc2FmZSBIVE1MIGVudGl0aWVzXHJcbiAqXHJcbiAqIFJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGdpdmVuIHJhbmdlICh1bmljb2RlIDAwQTAgLSA5OTk5LCBhcyB3ZWxsIGFzIGFtcGVyc2FuZCwgZ3JlYXRlciAmIGxlc3MgdGhhbilcclxuICogd2l0aCB0aGVpciBodG1sIGVudGl0eSBlcXVpdmFsZW50cywgd2hpY2ggaXMgc2ltcGx5ICYjbm5uOyB3aGVyZSBubm4gaXMgdGhlIHVuaWNvZGUgdmFsdWUgd2UgZ2V0IGZyb20gY2hhckNvZGVBdFxyXG4gKlxyXG4gKiBAcGFyYW0gcmF3U3RyXHJcbiAqIEByZXR1cm5zIHsqfVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19nZXRfc2FmZV9odG1sX3RleHQoIHJhd1N0ciApe1xyXG5cclxuXHR2YXIgZW5jb2RlZFN0ciA9IHJhd1N0ci5yZXBsYWNlKCAvW1xcdTAwQTAtXFx1OTk5OTw+XFwmXS9nLCBmdW5jdGlvbiAoIGkgKXtcclxuXHRcdHJldHVybiAnJiMnICsgaS5jaGFyQ29kZUF0KCAwICkgKyAnOyc7XHJcblx0fSApO1xyXG5cclxuXHRyZXR1cm4gZW5jb2RlZFN0cjtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiBDaGFuZ2UgVmFsdWUgYW5kIFRpdGxlIG9mIGRyb3Bkb3duIGFmdGVyIGNsaWNraW5nIG9uIEFwcGx5IGJ1dHRvblxyXG4gKlxyXG4gKiBAcGFyYW0gcGFyYW1zXHRFeGFtcGxlOiB7ICdkcm9wZG93bl9pZCc6ICd3aF9ib29raW5nX2RhdGUnLCAnZHJvcGRvd25fcmFkaW9fbmFtZSc6ICd1aV93aF9ib29raW5nX2RhdGVfcmFkaW8nIH1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfdWlfZHJvcGRvd25fYXBwbHlfY2xpY2soIHBhcmFtcyApe1xyXG5cclxuXHQvLyBHZXQgaW5wdXQgdmFsdWVzIG9mIGFsbCBlbGVtZW50cyBpbiBMSSBzZWN0aW9uLCAgd2hlcmUgUkFESU8gd2FzIHNlbGVjdGVkXHJcblx0dmFyIGZpbHRlcl91aV9kYXRlc19hcnIgPSBqUXVlcnkoICdpbnB1dFtuYW1lPVwiJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX3JhZGlvX25hbWUnIF0gKyAnXCJdOmNoZWNrZWQnIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQucGFyZW50cyggJ2xpJyApLmZpbmQoICc6aW5wdXQnIClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHQubWFwKCBmdW5jdGlvbiAoKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCggalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9ICkuZ2V0KCk7XHJcblxyXG5cdGlmICggMCAhPT0gZmlsdGVyX3VpX2RhdGVzX2Fyci5sZW5ndGggKXsgIC8vIENvbnRpbnVlIG9ubHkgaWYgcmFkaW8gYnV0dG9uICB3YXMgc2VsZWN0ZWQsIGFuZCB3ZSBhcmUgaGF2aW5nIHZhbHVlXHJcblxyXG5cdFx0Ly8gR2V0IHRpdGxlcyBvZiBhbGwgZWxlbWVudHMgaW4gTEkgc2VjdGlvbiwgIHdoZXJlIFJBRElPIHdhcyBzZWxlY3RlZFxyXG5cdFx0dmFyIGZpbHRlcl91aV90aXRsZXNfYXJyID0galF1ZXJ5KCAnaW5wdXRbbmFtZT1cIicgKyBwYXJhbXNbICdkcm9wZG93bl9yYWRpb19uYW1lJyBdICsgJ1wiXTpjaGVja2VkJyApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0ICBcdC5wYXJlbnRzKCAnbGknICkuZmluZCggJzppbnB1dCcgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Lm1hcCggZnVuY3Rpb24gKCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggJ3RleHQnID09IGpRdWVyeSggdGhpcyApLnByb3AoICd0eXBlJyApICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGpRdWVyeSggdGhpcyApLnZhbCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggJ3NlbGVjdC1vbmUnID09IGpRdWVyeSggdGhpcyApLnByb3AoICd0eXBlJyApICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGpRdWVyeSggdGhpcyApLmZpbmQoICc6c2VsZWN0ZWQnICkudGV4dCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggJ3JhZGlvJyA9PSBqUXVlcnkoIHRoaXMgKS5wcm9wKCAndHlwZScgKSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0IHx8ICggJ2NoZWNrYm94JyA9PSBqUXVlcnkoIHRoaXMgKS5wcm9wKCAndHlwZScgKSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dmFyIGlucHV0X3NlbGVjdGVkID0galF1ZXJ5KCB0aGlzICkuZmlsdGVyKCc6Y2hlY2tlZCcpLm5leHQoICcud3BiY191aV9jb250cm9sX2xhYmVsJyApLmh0bWwoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVuZGVmaW5lZCA9PSBpbnB1dF9zZWxlY3RlZCApIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlucHV0X3NlbGVjdGVkID0galF1ZXJ5KCB0aGlzICkuZmlsdGVyKCc6Y2hlY2tlZCcpLnByZXYoICcud3BiY191aV9jb250cm9sX2xhYmVsJyApLmh0bWwoKTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuICggdW5kZWZpbmVkICE9PSBpbnB1dF9zZWxlY3RlZCApID8gaW5wdXRfc2VsZWN0ZWQgOiAnJztcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGpRdWVyeSggdGhpcyApLnZhbCgpO1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApLmdldCgpO1xyXG5cclxuXHRcdC8vIFVwZGF0ZSBWYWx1ZSB0byAgZHJvcGRvd24gaW5wdXQgaGlkZGVuIGVsZW1lbnRzLiBTdWNoICB2YWx1ZSBzdHJpbmdpZnkuXHJcblx0XHRqUXVlcnkoICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICkudmFsKCBKU09OLnN0cmluZ2lmeSggZmlsdGVyX3VpX2RhdGVzX2FyciApICk7XHJcblxyXG5cdFx0Ly8gR2VuZXJhdGUgY2hhbmdlIGFjdGlvbiwgIGZvciBhYmlsaXR5IHRvICBzZW5kIEFqYXggcmVxdWVzdFxyXG5cdFx0alF1ZXJ5KCAnIycgKyBwYXJhbXNbICdkcm9wZG93bl9pZCcgXSApLnRyaWdnZXIoICdjaGFuZ2UnICk7XHJcblxyXG5cdFx0Ly8gR2V0IExhYmVsIG9mIHNlbGVjdGVkIFJhZGlvIGJ1dHRvblxyXG5cdFx0dmFyIGZpbHRlcl91aV9kYXRlc190aXRsZSA9IGpRdWVyeSggJ2lucHV0W25hbWU9XCInICsgcGFyYW1zWyAnZHJvcGRvd25fcmFkaW9fbmFtZScgXSArICdcIl06Y2hlY2tlZCcgKS5uZXh0KCAnLndwYmNfdWlfY29udHJvbF9sYWJlbCcgKS5odG1sKCkgKyAnOiAnO1xyXG5cclxuXHRcdC8vIFJlbW92ZSBzZWxlY3RlZCB2YWx1ZSBvZiByYWRpbyBidXR0b24gZnJvbSBiZWdpbm5pbmcsIHdlIHdpbGwgdXNlIExhYmVsIHRpdGxlIGluc3RlYWRcclxuXHRcdGZpbHRlcl91aV90aXRsZXNfYXJyLnNoaWZ0KCk7XHJcblxyXG5cdFx0Ly8gVXBkYXRlIFRpdGxlIGluIGRyb3Bkb3duXHJcblx0XHR2YXIgZW5jb2RlZF9odG1sX3RleHQgPSB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCggZmlsdGVyX3VpX2RhdGVzX3RpdGxlICsgZmlsdGVyX3VpX3RpdGxlc19hcnIuam9pbiggJyAtICcgKSApO1xyXG5cdFx0alF1ZXJ5KCAnIycgKyBwYXJhbXNbICdkcm9wZG93bl9pZCcgXSArICdfc2VsZWN0b3IgLndwYmNfc2VsZWN0ZWRfaW5fZHJvcGRvd24nICkuaHRtbCggZW5jb2RlZF9odG1sX3RleHQgKTtcclxuXHR9XHJcblxyXG5cdGpRdWVyeSggJyMnICsgcGFyYW1zWyAnZHJvcGRvd25faWQnIF0gKyAnX2NvbnRhaW5lcicgKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogQ2xvc2UgZHJvcGRvd24gYWZ0ZXIgY2xpY2tpbmcgb24gQ2xvc2UgYnV0dG9uXHJcbiAqXHJcbiAqIEBwYXJhbSBkcm9wZG93bl9pZFx0SUQgb2YgZHJvcGRvd25cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfdWlfZHJvcGRvd25fY2xvc2VfY2xpY2soIGRyb3Bkb3duX2lkICl7XHJcblxyXG5cdGpRdWVyeSggJyMnICsgZHJvcGRvd25faWQgKyAnX2NvbnRhaW5lcicgKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogU2ltcGxlIG9wdGlvbiBjbGljayBvbiBkcm9wZG93blxyXG4gKlxyXG4gKiBAcGFyYW0gcGFyYW1zXHRFeGFtcGxlOiB7ICdkcm9wZG93bl9pZCc6ICd3aF9ib29raW5nX2RhdGUnLCAnaXNfdGhpc19zaW1wbGVfbGlzdCc6IHRydWUsICd2YWx1ZSc6ICc1JywgJ190aGlzJzogdGhpcyB9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayggcGFyYW1zICl7XHJcblxyXG5cdGpRdWVyeSggJyMnICsgcGFyYW1zWyAnZHJvcGRvd25faWQnIF0gKyAnX3NlbGVjdG9yIC53cGJjX3NlbGVjdGVkX2luX2Ryb3Bkb3duJyApLmh0bWwoIGpRdWVyeSggcGFyYW1zWyAnX3RoaXMnIF0gKS5odG1sKCkgKTtcclxuXHJcblx0alF1ZXJ5KCAnIycgKyBwYXJhbXNbICdkcm9wZG93bl9pZCcgXSApLnZhbCggSlNPTi5zdHJpbmdpZnkoIFtwYXJhbXNbICd2YWx1ZScgXV0gKSApO1xyXG5cclxuXHRqUXVlcnkoICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICsgJ19jb250YWluZXIgbGkgaW5wdXRbdHlwZT1jaGVja2JveF0sJ1xyXG5cdFx0ICArICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICsgJ19jb250YWluZXIgbGkgaW5wdXRbdHlwZT1yYWRpb10nICkucHJvcCggJ2NoZWNrZWQnLCBmYWxzZSApO1xyXG5cclxuXHRqUXVlcnkoICcjJyArIHBhcmFtc1sgJ2Ryb3Bkb3duX2lkJyBdICkudHJpZ2dlciggJ2NoYW5nZScgKTtcclxuXHJcblx0aWYgKCAhIHBhcmFtc1sgJ2lzX3RoaXNfc2ltcGxlX2xpc3QnIF0gKXtcclxuXHRcdGpRdWVyeSggJyMnICsgcGFyYW1zWyAnZHJvcGRvd25faWQnIF0gKyAnX2NvbnRhaW5lcicgKS5oaWRlKCk7XHJcblx0fVxyXG59Il0sImZpbGUiOiJpbmNsdWRlcy9fdG9vbGJhcl91aS9fb3V0L3Rvb2xiYXJfdWkuanMifQ==
includes/_toolbar_ui/_out/toolbar_ui.min.css ADDED
@@ -0,0 +1,2 @@
 
 
1
+ .ui_element .wpbc_ui_button{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;-webkit-appearance:none;border-style:solid;box-sizing:border-box;cursor:pointer;display:-ms-flexbox;display:flex;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;margin:0;min-height:24px;padding:0 10px 1px;text-decoration:none;white-space:nowrap}.ui_element .wpbc_ui_button,.ui_element .wpbc_ui_button-secondary{background:#f7f7f7;border-color:#d8d8d8;color:#555;vertical-align:top}.ui_element .wpbc_ui_button-secondary:hover:not(.inactive),.ui_element .wpbc_ui_button.hover:not(.inactive),.ui_element .wpbc_ui_button:hover:not(.inactive){background:#fafafa;border-color:#d8d8d8;color:#23282d;text-decoration:none}.ui_element .wpbc_ui_button-secondary.inactive:hover,.ui_element .wpbc_ui_button.hover.inactive,.ui_element .wpbc_ui_button.inactive:hover{cursor:default}.ui_element .wpbc_ui_button-secondary:focus,.ui_element .wpbc_ui_button.focus,.ui_element .wpbc_ui_button:focus{background:#fafafa;border-color:#d8d8d8;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);color:#23282d;outline:2px solid transparent;outline-offset:0;text-decoration:none;z-index:1}.ui_element .wpbc_ui_button-secondary:active:not(.inactive),.ui_element .wpbc_ui_button:active:not(.inactive),.wpbc_ui_dropdown.open>.wpbc_ui_button:not(.inactive){background:#f6f7f7;border-color:#d8d8d8;box-shadow:inset 0 1px 7px -3px rgba(0,0,0,.3);outline:0;text-decoration:none;-ms-transform:translateY(1px);transform:translateY(1px)}.ui_element.disabled .wpbc_ui_button,.ui_element .wpbc_ui_button-disabled,.ui_element .wpbc_ui_button-secondary.disabled,.ui_element .wpbc_ui_button-secondary:disabled,.ui_element .wpbc_ui_button-secondary[disabled],.ui_element .wpbc_ui_button.disabled,.ui_element .wpbc_ui_button:disabled,.ui_element .wpbc_ui_button[disabled]{background:#f6f7f7!important;border-color:#dcdcde!important;box-shadow:none!important;color:#a7aaad!important;cursor:default;-ms-transform:none!important;transform:none!important}.ui_element .wpbc_ui_button.active:hover:not(.inactive),.ui_element .wpbc_ui_button.active:not(.inactive){background:#f6f7f7;border-color:#d8d8d8;box-shadow:inset 0 1px 7px -3px rgba(0,0,0,.3);outline:0;text-decoration:none;-ms-transform:translateY(1px);transform:translateY(1px)}.ui_element .wpbc_ui_button.active:focus:not(.inactive){border-color:#3582c4;box-shadow:inset 0 1px 5px -3px #0a4b78,0 0 1px 1px rgba(79,148,212,.1)}.ui_element .wpbc_ui_button_primary{background:#0085ba;border-color:#0073aa #006799 #006799;box-shadow:0 1px 0 #f1f1f1;color:#fff;text-decoration:none;text-shadow:0 -1px 1px #006799,1px 0 1px #006799,0 1px 1px #006799,-1px 0 1px #006799}.ui_element .wpbc_ui_button_primary.focus:not(.inactive),.ui_element .wpbc_ui_button_primary.hover:not(.inactive),.ui_element .wpbc_ui_button_primary:focus:not(.inactive),.ui_element .wpbc_ui_button_primary:hover:not(.inactive){background:#008ec2;border-color:#006799;color:#fff}.ui_element .wpbc_ui_button_primary.focus:not(.inactive),.ui_element .wpbc_ui_button_primary:focus:not(.inactive){box-shadow:0 0 0 0 #fff,0 0 2px 1px #a4d7ff}.ui_element .wpbc_ui_button_primary.active:focus:not(.inactive),.ui_element .wpbc_ui_button_primary.active:hover:not(.inactive),.ui_element .wpbc_ui_button_primary.active:not(.inactive),.ui_element .wpbc_ui_button_primary:active:not(.inactive){background:#0c7ca8;border-color:#0b79a4;box-shadow:inset 0 1px 7px -3px rgba(0,0,0,.3);color:#fff}.ui_element .wpbc_ui_button_primary-disabled,.ui_element .wpbc_ui_button_primary.disabled,.ui_element .wpbc_ui_button_primary:disabled,.ui_element .wpbc_ui_button_primary[disabled]{background:#f6f7f7!important;border-color:#dcdcde!important;box-shadow:none!important;color:#a7aaad!important;cursor:default;text-shadow:none!important}@media (max-width:782px){.ui_element .in-button-text{display:none}}.ui_element .wpbc_ui_text{border:1px solid #d6d6d6;-ms-flex:1 1 120px;flex:1 1 120px}.ui_element .wpbc_ui_text.focus,.ui_element .wpbc_ui_text:focus{border-color:#d8d8d8;box-shadow:0 0 0 1px #2271b1;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);outline:2px solid transparent;z-index:1}.ui_element .wpbc_ui_select{border:1px solid #d6d6d6;-ms-flex:1 1 auto;flex:1 1 auto}.ui_element .wpbc_ui_select.focus,.ui_element .wpbc_ui_select:focus{border-color:#d8d8d8;box-shadow:0 0 0 1px #2271b1;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);outline:2px solid transparent;z-index:1}.ui_element .wpbc_ui_checkbox,.ui_element .wpbc_ui_radio{-ms-flex-item-align:center;align-self:center;-webkit-appearance:none;background:#fff;border:1px solid #bcbcbc;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1);clear:none;color:#50575e;cursor:pointer;display:inline-block;height:1rem!important;line-height:0!important;margin:0;min-width:1rem;outline:0;padding:0!important;text-align:center;transition:border-color .05s ease-in-out;vertical-align:middle;width:1rem}.ui_element .wpbc_ui_radio{border-radius:50%;line-height:.71428571;margin-right:.25rem}.ui_element .wpbc_ui_checkbox.focus,.ui_element .wpbc_ui_checkbox:focus,.ui_element .wpbc_ui_radio.focus,.ui_element .wpbc_ui_radio:focus{border-color:#d8d8d8;box-shadow:0 0 0 1px #2271b1;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8);outline:2px solid transparent!important;z-index:1}.ui_element .wpbc_ui_checkbox+.wpbc_ui_control_label,.ui_element .wpbc_ui_radio+.wpbc_ui_control_label{padding-left:5px;padding-right:5px}@media screen and (max-width:782px){.ui_element .wpbc_ui_checkbox,.ui_element .wpbc_ui_radio{height:1.5625rem!important;width:1.5625rem}}.ui_element .wpbc_ui_addon{-ms-flex-pack:stretch;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:stretch}.ui_element label.wpbc_ui_control_label{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;padding:0 5px 1px 0}.ui_element label.wpbc_ui_control_label+.wpbc_ui_control:first-of-type{border-bottom-left-radius:3px!important;border-top-left-radius:3px!important}.ui_element .wpbc_ui_dropdown__outside_label{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;padding:0 10px 1px 0}.ui_element .wpbc_ui_dropdown{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;position:relative}.ui_element .wpbc_ui_dropdown *{box-sizing:border-box}.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_label{font-weight:600;margin:0;padding:0 .5em 0 0}.ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_caret{border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px dashed;border-top:4px solid\9;display:inline-block;height:0;margin-left:7px;vertical-align:middle;width:0}.ui_element .wpbc_ui_dropdown:last-child>.wpbc_ui_button:last-of-type{border-bottom-right-radius:3px;border-top-right-radius:3px}.ui_element .wpbc_ui_dropdown:not(:first-child)>.wpbc_ui_button:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.ui_element .wpbc_ui_dropdown:not(:last-child)>.wpbc_ui_button:last-child{border-bottom-right-radius:0;border-top-right-radius:0}.ui_element .wpbc_ui_dropdown__outside_label+.wpbc_ui_dropdown>.wpbc_ui_button:first-child{border-bottom-left-radius:3px;border-top-left-radius:3px}.wpbc_ui_dropdown .ui_dropdown_menu li.ui_complex_option_element{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0;padding:0 15px}.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 50%;flex:0 1 50%;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;margin:0;padding:4px 0}.wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element>*{-ms-flex:0 1 auto;flex:0 1 auto;height:auto;margin:0;max-width:210px}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu{background-clip:padding-box;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:0 0 3px 3px;box-shadow:0 6px 12px rgba(0,0,0,.175);display:none;float:left;left:0;list-style:none;margin:0;min-width:160px;padding:5px 0;position:absolute;text-align:left;top:100%;z-index:1000}.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{font-size:13px}@media screen and (max-width:782px){.ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{font-size:14px}}.ui_element .wpbc_ui_dropdown.open>.ui_dropdown_menu{display:block}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.pull-right,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_right{left:auto;right:0}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_left{left:0;right:auto}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu hr{background:none;border:0;border-top:1px solid #eee;height:1px;margin:5px 0;overflow:hidden}.wpbc_ui_dropdown .ui_dropdown_menu li.dropdown-header{color:#999;font-size:.8em;font-style:italic;font-weight:600;padding:0 15px}.wpbc_ui_dropdown .ui_dropdown_menu li{margin:0;padding:0}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu a{clear:both;display:block;font-weight:400;line-height:18px;padding:5px 15px;white-space:nowrap}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>li>a{clear:both;color:#333;display:block;font-size:1em;font-weight:400;line-height:1.42857143;padding:5px 15px;text-decoration:none;white-space:nowrap}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.active>a,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.active>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.active>a:hover,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>li>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>li>a:hover{background:#08c;box-shadow:none;color:#fff;outline:none;text-decoration:none}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:hover{color:#ccc}.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:focus,.ui_element .wpbc_ui_dropdown .ui_dropdown_menu>.disabled>a:hover{background-color:transparent;background-image:none;cursor:not-allowed;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);text-decoration:none}.ui_element .wpbc_ui_dropdown .dropdown-backdrop{bottom:0;left:0;position:fixed;right:0;top:0;z-index:990}.ui_element .wpbc_ui_control{border-radius:0;border-width:1px;margin-right:-1px!important}.ui_element .wpbc_ui_control:first-child{border-radius:3px 0 0 3px}.ui_element .wpbc_ui_control:last-child{border-radius:0 3px 3px 0;border-width:1px}.ui_element .wpbc_ui_control:first-child:last-child{border-radius:3px}.ui_nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.wpbc_ajx_toolbar{margin:0 0 10px 50px;position:relative}.wpbc_ajx_toolbar *{box-sizing:border-box}.wpbc_ajx_toolbar.wpbc_buttons_row{float:left;margin:0;position:static}.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container{background:none;border:none;margin:0;padding:0}.wpbc_ajx_toolbar .ui_container{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;background:#f5f5f5;border:1px solid #ccc;border-top:none;box-shadow:none;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;font-size:14px;justify-content:flex-start;margin:0;padding:6px 15px}.wpbc_ajx_toolbar .ui_container:last-child{border-radius:0 0 2px 2px}.wpbc_ajx_toolbar .ui_container .ui_group{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;border:none;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0 20px 0 0;padding:0}.wpbc_ajx_toolbar .ui_container .ui_group:last-child{margin:0}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element{-ms-flex-pack:start;-ms-flex-align:stretch;align-items:stretch;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0 15px 0 0;position:relative}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element:last-child{margin-right:0}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>*{margin:5px 0}.ui_elements_divider{margin-left:15px}.wpbc_ajx_toolbar .ui_container.ui_container_small *{font-size:13px}@media (max-width:782px){.wpbc_ajx_toolbar .ui_container.ui_container_small *{font-size:14px}}.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>*{height:38px}.wpbc_ajx_toolbar .ui_container.ui_container_small .ui_group .ui_element>*{height:30px}@media (max-width:782px){#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>*,.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element>*{height:38px}#toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element>.wpbc_ui_button,.wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element>.wpbc_ui_button{-ms-flex-pack:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:center;padding:0 15px 1px}}.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__dates_status{margin-right:2.5em}.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword,.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element{-ms-flex:1 1 auto;flex:1 1 auto}.wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element .wpbc_search_field{width:100%}.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2{padding:4px 15px}.wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 .ui_group.ui_group__statuses{-ms-flex:1 1 auto;flex:1 1 auto}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi{-ms-flex-pack:center;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:column wrap;flex-flow:column wrap;height:auto;justify-content:center;margin-right:-1px;min-width:10em;width:auto!important}@media (max-width:782px){.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi{height:auto!important}}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices{-ms-flex-pack:start;-ms-flex-align:center;-ms-flex-line-pack:center;align-content:center;align-items:center;border-radius:3px 0 0 3px;display:-ms-flexbox;display:flex;-ms-flex:1 1 auto;flex:1 1 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;height:auto;justify-content:flex-start;margin:0;min-height:28px!important;padding:0 0 0 5px}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi.chzn-container-active ul.chzn-choices{border-color:#d8d8d8!important;box-shadow:0 0 0 0 #4f94d4,0 0 1px 1px rgba(79,148,212,.8)!important;outline:2px solid transparent;z-index:1}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice{-ms-flex-pack:start;-ms-flex-align:baseline;align-items:baseline;display:-ms-flexbox;display:flex;-ms-flex:0 1 auto;flex:0 1 auto;-ms-flex-flow:row nowrap;flex-flow:row nowrap;justify-content:flex-start;margin:3px .5em 3px 0;padding:3px 5px 3px 8px}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice span{word-wrap:break-word}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close{-ms-flex-pack:center;-ms-flex-line-pack:center;align-content:center;bottom:auto;color:#555;display:-ms-flexbox;display:flex;-ms-flex-flow:column wrap;flex-flow:column wrap;font-family:Glyphicons Halflings;font-size:9px;font-style:normal;font-weight:400;height:auto;justify-content:center;left:auto;margin:0 0 0 1em;position:relative;right:auto;text-decoration:none;top:auto;width:auto}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:before{content:"\e014"}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:hover{text-decoration:none}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field{-ms-flex-pack:start;-ms-flex-align:center;align-items:center;display:-ms-flexbox;display:flex;-ms-flex:0 1 1px;flex:0 1 1px;-ms-flex-flow:row wrap;flex-flow:row wrap;justify-content:flex-start;margin:0;padding:0;white-space:nowrap}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type=text].default{min-width:12em}.ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type=text]{font-family:inherit}.ui_container .ui_group .ui_element .chzn-container div.chzn-drop ul.chzn-results li.highlighted{background:#08c;box-shadow:none;color:#fff;outline:none;text-decoration:none}
2
+ /*# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL190b29sYmFyX3VpL19vdXQvdG9vbGJhcl91aS5jc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsNEJBS0UsbUJBQW9CLENBRXBCLHFCQUFzQixDQUNsQixrQkFBbUIsQ0FZdkIsdUJBQXdCLENBRHhCLGtCQUFtQixDQUluQixxQkFBc0IsQ0FOdEIsY0FBZSxDQWhCZixtQkFBb0IsQ0FDcEIsWUFBYSxDQUNiLHdCQUF5QixDQUNyQixvQkFBcUIsQ0FFckIsMEJBQTJCLENBUS9CLFFBQVMsQ0FEVCxlQUFnQixDQUdoQixrQkFBbUIsQ0FQbkIsb0JBQXFCLENBYXJCLGtCQUVGLENBRUEsa0VBSUUsa0JBQW1CLENBRG5CLG9CQUFxQixDQURyQixVQUFXLENBR1gsa0JBQ0YsQ0FHQSw2SkFHRSxrQkFBbUIsQ0FDbkIsb0JBQXFCLENBQ3JCLGFBQWMsQ0FDZCxvQkFDRixDQUVBLDJJQUdFLGNBQ0YsQ0FHQSxnSEFHRSxrQkFBbUIsQ0FDbkIsb0JBQXFCLENBR3JCLDBEQUFrRSxDQUZsRSxhQUFjLENBTWQsNkJBQThCLENBRTlCLGdCQUFpQixDQUpqQixvQkFBcUIsQ0FEckIsU0FNRixDQUdBLG9LQUdFLGtCQUFtQixDQUNuQixvQkFBcUIsQ0FDckIsOENBQW1ELENBR25ELFNBQVUsQ0FDVixvQkFBcUIsQ0FIckIsNkJBQThCLENBQzFCLHlCQUdOLENBR0Esd1VBVUUsNEJBQThCLENBRDlCLDhCQUFnQyxDQUVoQyx5QkFBMkIsQ0FIM0IsdUJBQXlCLENBSXpCLGNBQWUsQ0FDZiw0QkFBOEIsQ0FDMUIsd0JBQ04sQ0FHQSwwR0FFRSxrQkFBbUIsQ0FDbkIsb0JBQXFCLENBQ3JCLDhDQUFtRCxDQUduRCxTQUFVLENBQ1Ysb0JBQXFCLENBSHJCLDZCQUE4QixDQUMxQix5QkFHTixDQUVBLHdEQUNFLG9CQUFxQixDQUNyQix1RUFDRixDQUdBLG9DQUNFLGtCQUFtQixDQUNuQixvQ0FBcUMsQ0FJckMsMEJBQTZCLENBSDdCLFVBQVcsQ0FFWCxv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bi5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBVSSBUb29sYmFyICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogVG8gQ29tcGlsZSBmaWxlOiBBbHQgKyBGMTIgICBhbmQgcnVuIGNvbW1hbmQ6ICBcImd1bHAgd3BiY1wiICAqL1xuLyogMS4gRGVmYXVsdCBCdXR0b24gU3R5bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24ge1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIC8qZm9udC1zaXplOiAxM3B4OyovXG4gIC8qbGluZS1oZWlnaHQ6IDIuMTUzODQ2MTU7ICEqIDI4cHggKiEqL1xuICAvKm1pbi1oZWlnaHQ6IDMwcHg7Ki9cbiAgbWluLWhlaWdodDogMjRweDtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwIDEwcHggMnB4O1xuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICBjdXJzb3I6IHBvaW50ZXI7XG4gIC8qYm9yZGVyLXdpZHRoOiAxcHg7ICBcdC0gRGVmaW5lZCBhdCBTZXZlcmFsIGVsZW1lbnRzIGluIGEgR3JvdXAuIFBvaW50ICMyLiAqL1xuICBib3JkZXItc3R5bGU6IHNvbGlkO1xuICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7XG4gIC8qYm9yZGVyLXJhZGl1czogM3B4O1x0LSBEZWZpbmVkIGF0IFNldmVyYWwgZWxlbWVudHMgaW4gYSBHcm91cC4gUG9pbnQgIzIuICovXG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbixcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnkge1xuICBjb2xvcjogIzU1NTtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICBiYWNrZ3JvdW5kOiAjZjdmN2Y3O1xuICB2ZXJ0aWNhbC1hbGlnbjogdG9wO1xufVxuXG4vKiA6aG92ZXIgIC0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5ob3Zlcjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbjpob3Zlcjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnk6aG92ZXI6bm90KC5pbmFjdGl2ZSkge1xuICBiYWNrZ3JvdW5kOiAjZmFmYWZhO1xuICBib3JkZXItY29sb3I6ICNkOGQ4ZDg7XG4gIGNvbG9yOiAjMjMyODJkO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5ob3Zlci5pbmFjdGl2ZSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5pbmFjdGl2ZTpob3Zlcixcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnkuaW5hY3RpdmU6aG92ZXIge1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uLmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uOmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uLXNlY29uZGFyeTpmb2N1cyB7XG4gIGJhY2tncm91bmQ6ICNmYWZhZmE7XG4gIGJvcmRlci1jb2xvcjogI2Q4ZDhkODtcbiAgY29sb3I6ICMyMzI4MmQ7XG4gIC8qYm94LXNoYWRvdzogMCAwIDAgMXB4ICM0Zjk0ZDQsIDAgMCAycHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1x0XHRUaGlzIGlzIERlZmF1bHQ6IFdvcmRQcmVzcyAqL1xuICBib3gtc2hhZG93OiAwIDAgMCAwcHggIzRmOTRkNCwgMCAwIDFweCAxcHggcmdiYSg3OSwgMTQ4LCAyMTIsIDAuOCk7XG4gIHotaW5kZXg6IDE7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgLyogT25seSB2aXNpYmxlIGluIFdpbmRvd3MgSGlnaCBDb250cmFzdCBtb2RlICovXG4gIG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgLyogUmVzZXQgaW5oZXJpdGVkIG9mZnNldCBmcm9tIEd1dGVuYmVyZyAqL1xuICBvdXRsaW5lLW9mZnNldDogMDtcbn1cblxuLyogOmFjdGl2ZSAgLS0tLSAqL1xuLndwYmNfdWlfZHJvcGRvd24ub3BlbiA+IC53cGJjX3VpX2J1dHRvbjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbjphY3RpdmU6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24tc2Vjb25kYXJ5OmFjdGl2ZTpub3QoLmluYWN0aXZlKSB7XG4gIGJhY2tncm91bmQ6ICNmNmY3Zjc7XG4gIGJvcmRlci1jb2xvcjogI2Q4ZDhkODtcbiAgYm94LXNoYWRvdzogaW5zZXQgMCAxcHggN3B4IC0zcHggcmdiYSgwLCAwLCAwLCAwLjMpO1xuICAtbXMtdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7XG4gICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcbiAgb3V0bGluZTogMDtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4vKiA6ZGlzYWJsZWQgIC0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbjpkaXNhYmxlZCxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbltkaXNhYmxlZF0sXG4udWlfZWxlbWVudC5kaXNhYmxlZCAud3BiY191aV9idXR0b24sXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24uZGlzYWJsZWQsXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24tc2Vjb25kYXJ5W2Rpc2FibGVkXSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi1zZWNvbmRhcnk6ZGlzYWJsZWQsXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24tc2Vjb25kYXJ5LmRpc2FibGVkLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uLWRpc2FibGVkIHtcbiAgY29sb3I6ICNhN2FhYWQgIWltcG9ydGFudDtcbiAgYm9yZGVyLWNvbG9yOiAjZGNkY2RlICFpbXBvcnRhbnQ7XG4gIGJhY2tncm91bmQ6ICNmNmY3ZjcgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG4gIC1tcy10cmFuc2Zvcm06IG5vbmUgIWltcG9ydGFudDtcbiAgICAgIHRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50O1xufVxuXG4vKiAuYWN0aXZlIENMQVNTIC0gcHJlc3NlZCBidXR0b24sIHByZXNzZWQgc3RhdGUgZS5nLiBhIHNlbGVjdGVkIHNldHRpbmcgKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5hY3RpdmU6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b24uYWN0aXZlOmhvdmVyOm5vdCguaW5hY3RpdmUpIHtcbiAgYmFja2dyb3VuZDogI2Y2ZjdmNztcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCA3cHggLTNweCByZ2JhKDAsIDAsIDAsIDAuMyk7XG4gIC1tcy10cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTtcbiAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgxcHgpO1xuICBvdXRsaW5lOiAwO1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbi5hY3RpdmU6Zm9jdXM6bm90KC5pbmFjdGl2ZSkge1xuICBib3JkZXItY29sb3I6ICMzNTgyYzQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDVweCAtM3B4ICMwYTRiNzgsIDAgMCAxcHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjEpO1xufVxuXG4vKiAgMi4gUHJpbWFyeSBCdXR0b24gU3R5bGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbl9wcmltYXJ5IHtcbiAgYmFja2dyb3VuZDogIzAwODViYTtcbiAgYm9yZGVyLWNvbG9yOiAjMDA3M2FhICMwMDY3OTkgIzAwNjc5OTtcbiAgY29sb3I6ICNmZmY7XG4gIHRleHQtc2hhZG93OiAwIC0xcHggMXB4ICMwMDY3OTksIDFweCAwIDFweCAjMDA2Nzk5LCAwIDFweCAxcHggIzAwNjc5OSwgLTFweCAwIDFweCAjMDA2Nzk5O1xuICB0ZXh0LWRlY29yYXRpb246IG5vbmU7XG4gIGJveC1zaGFkb3c6IDAgMXB4IDBweCAjZjFmMWYxO1xuICAvKmJhY2tncm91bmQ6ICMyMjcxYjE7Ki9cbiAgLypib3JkZXItY29sb3I6ICMyMjcxYjE7Ki9cbiAgLypjb2xvcjogI2ZmZjsqL1xuICAvKnRleHQtZGVjb3JhdGlvbjogbm9uZTsqL1xuICAvKnRleHQtc2hhZG93OiBub25lOyovXG59XG5cbi8qIDpob3ZlciwgOmZvY3VzICAtLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5ob3Zlcjpub3QoLmluYWN0aXZlKSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbl9wcmltYXJ5OmhvdmVyOm5vdCguaW5hY3RpdmUpLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnkuZm9jdXM6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeTpmb2N1czpub3QoLmluYWN0aXZlKSB7XG4gIC8qYmFja2dyb3VuZDogIzEzNWU5NjsqL1xuICAvKmJvcmRlci1jb2xvcjogIzEzNWU5NjsqL1xuICAvKmNvbG9yOiAjZmZmOyovXG4gIGJhY2tncm91bmQ6ICMwMDhlYzI7XG4gIGJvcmRlci1jb2xvcjogIzAwNjc5OTtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnkuZm9jdXM6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeTpmb2N1czpub3QoLmluYWN0aXZlKSB7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDBweCAjZmZmLCAwIDAgMnB4IDFweCAjYTRkN2ZmO1xufVxuXG4vKiA6YWN0aXZlICAtLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5hY3RpdmU6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5hY3RpdmU6aG92ZXI6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS5hY3RpdmU6Zm9jdXM6bm90KC5pbmFjdGl2ZSksXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeTphY3RpdmU6bm90KC5pbmFjdGl2ZSkge1xuICBiYWNrZ3JvdW5kOiAjMGM3Y2E4O1xuICBib3JkZXItY29sb3I6ICMwYjc5YTQ7XG4gIGJveC1zaGFkb3c6IGluc2V0IDAgMXB4IDdweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKTtcbiAgY29sb3I6ICNmZmY7XG59XG5cbi8qIDpkaXNhYmxlZCAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnlbZGlzYWJsZWRdLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfYnV0dG9uX3ByaW1hcnk6ZGlzYWJsZWQsXG4udWlfZWxlbWVudCAud3BiY191aV9idXR0b25fcHJpbWFyeS1kaXNhYmxlZCxcbi51aV9lbGVtZW50IC53cGJjX3VpX2J1dHRvbl9wcmltYXJ5LmRpc2FibGVkIHtcbiAgY29sb3I6ICNhN2FhYWQgIWltcG9ydGFudDtcbiAgYmFja2dyb3VuZDogI2Y2ZjdmNyAhaW1wb3J0YW50O1xuICBib3JkZXItY29sb3I6ICNkY2RjZGUgIWltcG9ydGFudDtcbiAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICB0ZXh0LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50O1xuICBjdXJzb3I6IGRlZmF1bHQ7XG59XG5cbkBtZWRpYSAobWF4LXdpZHRoOiA3ODJweCkge1xuICAudWlfZWxlbWVudCAuaW4tYnV0dG9uLXRleHQge1xuICAgIGRpc3BsYXk6IG5vbmU7XG4gIH1cbn1cblxuLyogMy4xIFRleHQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfdGV4dCB7XG4gIGJvcmRlcjogMXB4IHNvbGlkICNkNmQ2ZDY7XG4gIC1tcy1mbGV4OiAxIDEgMTIwcHg7XG4gICAgICBmbGV4OiAxIDEgMTIwcHg7XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfdGV4dC5mb2N1cyxcbi51aV9lbGVtZW50IC53cGJjX3VpX3RleHQ6Zm9jdXMge1xuICBib3JkZXItY29sb3I6ICMyMjcxYjE7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDFweCAjMjI3MWIxO1xuICBib3JkZXItY29sb3I6ICNkOGQ4ZDg7XG4gIC8qYm94LXNoYWRvdzogMCAwIDAgMXB4ICM0Zjk0ZDQsIDAgMCAycHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1x0XHRUaGlzIGlzIERlZmF1bHQ6IFdvcmRQcmVzcyAqL1xuICBib3gtc2hhZG93OiAwIDAgMCAwcHggIzRmOTRkNCwgMCAwIDFweCAxcHggcmdiYSg3OSwgMTQ4LCAyMTIsIDAuOCk7XG4gIHotaW5kZXg6IDE7XG4gIC8qIE9ubHkgdmlzaWJsZSBpbiBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSAqL1xuICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi8qIDMuMiBTZWxlY3QtYm94ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfc2VsZWN0IHtcbiAgYm9yZGVyOiAxcHggc29saWQgI2Q2ZDZkNjtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG59XG5cbi8qIDpmb2N1cyAgLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfc2VsZWN0LmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfc2VsZWN0OmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjMjI3MWIxO1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzIyNzFiMTtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICAvKmJveC1zaGFkb3c6IDAgMCAwIDFweCAjNGY5NGQ0LCAwIDAgMnB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KTtcdFx0VGhpcyBpcyBEZWZhdWx0OiBXb3JkUHJlc3MgKi9cbiAgYm94LXNoYWRvdzogMCAwIDAgMHB4ICM0Zjk0ZDQsIDAgMCAxcHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1xuICB6LWluZGV4OiAxO1xuICAvKiBPbmx5IHZpc2libGUgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUgKi9cbiAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xufVxuXG4vKiAzLjMgQ2hlY2stYm94ICAmICBSYWRpbyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94LFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfcmFkaW8ge1xuICBib3JkZXI6IDFweCBzb2xpZCAjYmNiY2JjO1xuICBib3JkZXItcmFkaXVzOiA0cHg7XG4gIGJhY2tncm91bmQ6ICNmZmY7XG4gIGNvbG9yOiAjNTA1NzVlO1xuICBjbGVhcjogbm9uZTtcbiAgY3Vyc29yOiBwb2ludGVyO1xuICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG4gIGxpbmUtaGVpZ2h0OiAwICFpbXBvcnRhbnQ7XG4gIGhlaWdodDogMXJlbSAhaW1wb3J0YW50O1xuICBtYXJnaW46IC0wLjI1cmVtIDAuMjVyZW0gMCAwO1xuICBvdXRsaW5lOiAwO1xuICBwYWRkaW5nOiAwICFpbXBvcnRhbnQ7XG4gIHRleHQtYWxpZ246IGNlbnRlcjtcbiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTtcbiAgd2lkdGg6IDFyZW07XG4gIG1pbi13aWR0aDogMXJlbTtcbiAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lO1xuICBib3gtc2hhZG93OiBpbnNldCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjEpO1xuICB0cmFuc2l0aW9uOiAuMDVzIGJvcmRlci1jb2xvciBlYXNlLWluLW91dDtcbiAgbWFyZ2luOiAwO1xuICAtbXMtZmxleC1pdGVtLWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1zZWxmOiBjZW50ZXI7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX3JhZGlvIHtcbiAgYm9yZGVyLXJhZGl1czogNTAlO1xuICBtYXJnaW4tcmlnaHQ6IDAuMjVyZW07XG4gIGxpbmUtaGVpZ2h0OiAwLjcxNDI4NTcxO1xufVxuXG4vKiA6Zm9jdXMgIC0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94LmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfY2hlY2tib3g6Zm9jdXMsXG4udWlfZWxlbWVudCAud3BiY191aV9yYWRpby5mb2N1cyxcbi51aV9lbGVtZW50IC53cGJjX3VpX3JhZGlvOmZvY3VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjMjI3MWIxO1xuICBib3gtc2hhZG93OiAwIDAgMCAxcHggIzIyNzFiMTtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4O1xuICAvKmJveC1zaGFkb3c6IDAgMCAwIDFweCAjNGY5NGQ0LCAwIDAgMnB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KTtcdFx0VGhpcyBpcyBEZWZhdWx0OiBXb3JkUHJlc3MgKi9cbiAgYm94LXNoYWRvdzogMCAwIDAgMHB4ICM0Zjk0ZDQsIDAgMCAxcHggMXB4IHJnYmEoNzksIDE0OCwgMjEyLCAwLjgpO1xuICB6LWluZGV4OiAxO1xuICAvKiBPbmx5IHZpc2libGUgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUgKi9cbiAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX3JhZGlvICsgLndwYmNfdWlfY29udHJvbF9sYWJlbCxcbi51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94ICsgLndwYmNfdWlfY29udHJvbF9sYWJlbCB7XG4gIHBhZGRpbmctbGVmdDogNXB4O1xuICBwYWRkaW5nLXJpZ2h0OiA1cHg7XG59XG5cbkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc4MnB4KSB7XG4gIC51aV9lbGVtZW50IC53cGJjX3VpX2NoZWNrYm94LFxuICAudWlfZWxlbWVudCAud3BiY191aV9yYWRpbyB7XG4gICAgaGVpZ2h0OiAxLjU2MjVyZW0gIWltcG9ydGFudDtcbiAgICB3aWR0aDogMS41NjI1cmVtO1xuICB9XG59XG5cbi8qIDMuNC4gQWRkb24gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfYWRkb24ge1xuICAtbXMtZmxleDogMCAxIGF1dG87XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RyZXRjaDtcbiAgICAgIGp1c3RpZnktY29udGVudDogc3RyZXRjaDtcbiAgLW1zLWZsZXgtYWxpZ246IGNlbnRlcjtcbiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG5cbi8qIDMuNSBMYWJlbHMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgbGFiZWwud3BiY191aV9jb250cm9sX2xhYmVsIHtcbiAgLW1zLWZsZXg6IDAgMSBhdXRvO1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMCA1cHggMnB4IDA7XG4gIHBhZGRpbmctYm90dG9tOiAxcHg7XG59XG5cbi51aV9lbGVtZW50IGxhYmVsLndwYmNfdWlfY29udHJvbF9sYWJlbCArIC53cGJjX3VpX2NvbnRyb2w6Zmlyc3Qtb2YtdHlwZSB7XG4gIGJvcmRlci10b3AtbGVmdC1yYWRpdXM6IDNweCAhaW1wb3J0YW50O1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAzcHggIWltcG9ydGFudDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiA0LiBEcm9wZG93biBMaXN0ICAgIFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd25fX291dHNpZGVfbGFiZWwge1xuICAtbXMtZmxleDogMCAxIGF1dG87XG4gICAgICBmbGV4OiAwIDEgYXV0bztcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyBub3dyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogMCAxMHB4IDJweCAwO1xuICBwYWRkaW5nLWJvdHRvbTogMXB4O1xufVxuXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biB7XG4gIC1tcy1mbGV4OiAwIDEgYXV0bztcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBzdHJldGNoO1xuICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbn1cblxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC53cGJjX3VpX2Ryb3Bkb3duX19pbnNpZGVfbGFiZWwge1xuICBmb250LXdlaWdodDogNjAwO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAgMC41ZW0gMCAwO1xufVxuXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAud3BiY191aV9kcm9wZG93bl9faW5zaWRlX2NhcmV0IHtcbiAgZGlzcGxheTogaW5saW5lLWJsb2NrO1xuICB3aWR0aDogMDtcbiAgaGVpZ2h0OiAwO1xuICBtYXJnaW4tbGVmdDogN3B4O1xuICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuICBib3JkZXItdG9wOiA0cHggZGFzaGVkO1xuICBib3JkZXItdG9wOiA0cHggc29saWQgXFw5O1xuICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbiAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogQk9SREVSIFJBRElVUyAqL1xuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd246bGFzdC1jaGlsZCA+IC53cGJjX3VpX2J1dHRvbjpsYXN0LW9mLXR5cGUge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogM3B4O1xuICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogM3B4O1xufVxuXG4vKiBJbiBjYXNlLCBpZiBoYXZlIHNldmVyYWwgZWxlbWVudHMgaW4gLnVpX2VsZW1lbnQgKGxpa2UgXCJidXR0b24gZHJvcGRvd24gYnV0dG9uXCIpLCAtIG1ha2UgYm9yZGVycyBub3Qgcm91bmQgKi9cbi8qIExlZnQgYm9yZGVyIG5vdCByb3VuZCAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd246bm90KDpmaXJzdC1jaGlsZCkgPiAud3BiY191aV9idXR0b246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAwO1xuICBib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOiAwO1xufVxuXG4vKiBSaWdodCBib3JkZXIgbm90IHJvdW5kICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93bjpub3QoOmxhc3QtY2hpbGQpID4gLndwYmNfdWlfYnV0dG9uOmxhc3QtY2hpbGQge1xuICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogMDtcbiAgYm9yZGVyLWJvdHRvbS1yaWdodC1yYWRpdXM6IDA7XG59XG5cbi8qIElmIHdlIGhhdmUgb3V0c2lkZSBsYWJlbCwgdGhlbiB3ZSBuZWVkIHRvIG1ha2UgbGVmdCBib3JkZXIgcm91bmQgKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duX19vdXRzaWRlX2xhYmVsICsgLndwYmNfdWlfZHJvcGRvd24gPiAud3BiY191aV9idXR0b246Zmlyc3QtY2hpbGQge1xuICBib3JkZXItdG9wLWxlZnQtcmFkaXVzOiAzcHg7XG4gIGJvcmRlci1ib3R0b20tbGVmdC1yYWRpdXM6IDNweDtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLyogT1BUSU9OUyAgIChEcm9wIERvd24gTWVudSkgICBpbiBEcm9wZG93biBMaXN0ICovXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vKiBDb21wbGV4IE9QVElPTiAgLSB0aGlzIG9wdGlvbiBpbmNsdWRlIHNvbWUgSU5QVVQgZWxlbWVudHMgLS0tLS0tLS0tLS0tLS0tICovXG4ud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBsaS51aV9jb21wbGV4X29wdGlvbl9lbGVtZW50IHtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDAgMTVweDtcbn1cblxuLndwYmNfdWlfZHJvcGRvd24gdWwudWlfZHJvcGRvd25fbWVudSBsaS51aV9jb21wbGV4X29wdGlvbl9lbGVtZW50IC51aV9lbGVtZW50IHtcbiAgLW1zLWZsZXg6IDAgMSA1MCU7XG4gICAgICBmbGV4OiAwIDEgNTAlO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW46IDA7XG4gIHBhZGRpbmc6IDRweCAwO1xufVxuXG4ud3BiY191aV9kcm9wZG93biB1bC51aV9kcm9wZG93bl9tZW51IGxpLnVpX2NvbXBsZXhfb3B0aW9uX2VsZW1lbnQgLnVpX2VsZW1lbnQgPiAqIHtcbiAgLW1zLWZsZXg6IDAgMSBhdXRvO1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gIG1hcmdpbjogMDtcbiAgaGVpZ2h0OiBhdXRvO1xuICBtYXgtd2lkdGg6IDIxMHB4O1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEdlbmVyYWwgYmFja2Ryb3AgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSB7XG4gIGRpc3BsYXk6IG5vbmU7XG4gIHBvc2l0aW9uOiBhYnNvbHV0ZTtcbiAgdG9wOiAxMDAlO1xuICBsZWZ0OiAwO1xuICB6LWluZGV4OiAxMDAwO1xuICBmbG9hdDogbGVmdDtcbiAgbWluLXdpZHRoOiAxNjBweDtcbiAgcGFkZGluZzogNXB4IDA7XG4gIG1hcmdpbjogMDtcbiAgbGlzdC1zdHlsZTogbm9uZTtcbiAgdGV4dC1hbGlnbjogbGVmdDtcbiAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZmZmZjtcbiAgYm94LXNoYWRvdzogMCA2cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTc1KTtcbiAgYm9yZGVyOiAxcHggc29saWQgI2NjY2NjYztcbiAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjE1KTtcbiAgYm9yZGVyLXJhZGl1czogMCAwIDNweCAzcHg7XG4gIGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIHVsLnVpX2Ryb3Bkb3duX21lbnUgKiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzgycHgpIHtcbiAgLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gdWwudWlfZHJvcGRvd25fbWVudSAqIHtcbiAgICBmb250LXNpemU6IDE0cHg7XG4gIH1cbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBPcGVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24ub3BlbiA+IC51aV9kcm9wZG93bl9tZW51IHtcbiAgZGlzcGxheTogYmxvY2s7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQWxpZ246IGxlZnQgfCByaWdodCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51LnB1bGwtcmlnaHQsXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudS51aV9kcm9wZG93bl9tZW51X3JpZ2h0IHtcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IDA7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51LnVpX2Ryb3Bkb3duX21lbnVfbGVmdCB7XG4gIGxlZnQ6IDA7XG4gIHJpZ2h0OiBhdXRvO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIERpdmlkZXIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBociB7XG4gIGhlaWdodDogMXB4O1xuICBtYXJnaW46IDVweCAwO1xuICBvdmVyZmxvdzogaGlkZGVuO1xuICBiYWNrZ3JvdW5kOiBub25lO1xuICBib3JkZXI6IDA7XG4gIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZWVlZWVlO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhlYWRlciAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4ud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBsaS5kcm9wZG93bi1oZWFkZXIge1xuICBwYWRkaW5nOiAwIDE1cHg7XG4gIGNvbG9yOiAjOTk5O1xuICBmb250LXNpemU6IDAuOGVtO1xuICBmb250LXN0eWxlOiBpdGFsaWM7XG4gIGZvbnQtd2VpZ2h0OiA2MDA7XG59XG5cbi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gTEkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51IGxpIHtcbiAgcGFkZGluZzogMDtcbiAgbWFyZ2luOiAwO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEEgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSBhIHtcbiAgY2xlYXI6IGJvdGg7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBmb250LXdlaWdodDogNDAwO1xuICBwYWRkaW5nOiA1cHggMTVweDtcbiAgd2hpdGUtc3BhY2U6IG5vd3JhcDtcbiAgLypmb250LXNpemU6IDEzcHg7Ki9cbiAgbGluZS1oZWlnaHQ6IDE4cHg7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gbGkgPiBhIHtcbiAgY29sb3I6ICMzMzMzMzM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgZm9udC13ZWlnaHQ6IDQwMDtcbiAgcGFkZGluZzogNXB4IDE1cHg7XG4gIHdoaXRlLXNwYWNlOiBub3dyYXA7XG4gIGRpc3BsYXk6IGJsb2NrO1xuICBjbGVhcjogYm90aDtcbiAgZm9udC1zaXplOiAxZW07XG4gIGxpbmUtaGVpZ2h0OiAxLjQyODU3MTQzO1xufVxuXG4vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEEgOmhvdmVyIDpmb2N1cyAuYWN0aXZlIC0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSA+IGxpID4gYTpob3Zlcixcbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gbGkgPiBhOmZvY3VzLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuYWN0aXZlID4gYSxcbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gLmFjdGl2ZSA+IGE6aG92ZXIsXG4udWlfZWxlbWVudCAud3BiY191aV9kcm9wZG93biAudWlfZHJvcGRvd25fbWVudSA+IC5hY3RpdmUgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNmZmY7XG4gIGJhY2tncm91bmQ6ICMwOGM7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgb3V0bGluZTogbm9uZTtcbiAgYm94LXNoYWRvdzogbm9uZTtcbn1cblxuLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAuZGlzYWJsZWQgIEEgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuZGlzYWJsZWQgPiBhLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuZGlzYWJsZWQgPiBhOmhvdmVyLFxuLnVpX2VsZW1lbnQgLndwYmNfdWlfZHJvcGRvd24gLnVpX2Ryb3Bkb3duX21lbnUgPiAuZGlzYWJsZWQgPiBhOmZvY3VzIHtcbiAgY29sb3I6ICNjY2M7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gLmRpc2FibGVkID4gYTpob3Zlcixcbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC51aV9kcm9wZG93bl9tZW51ID4gLmRpc2FibGVkID4gYTpmb2N1cyB7XG4gIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcbiAgYmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG4gIGJhY2tncm91bmQtaW1hZ2U6IG5vbmU7XG4gIGZpbHRlcjogcHJvZ2lkOkRYSW1hZ2VUcmFuc2Zvcm0uTWljcm9zb2Z0LmdyYWRpZW50KGVuYWJsZWQgPSBmYWxzZSk7XG4gIGN1cnNvcjogbm90LWFsbG93ZWQ7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2Ryb3Bkb3duIC5kcm9wZG93bi1iYWNrZHJvcCB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgbGVmdDogMDtcbiAgcmlnaHQ6IDA7XG4gIGJvdHRvbTogMDtcbiAgdG9wOiAwO1xuICB6LWluZGV4OiA5OTA7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyogNS4gU2V2ZXJhbCBlbGVtZW50cyBpbiBhIFwiLnVpX2VsZW1lbnRcIiBncm91cCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi51aV9lbGVtZW50IC53cGJjX3VpX2NvbnRyb2wge1xuICBib3JkZXItcmFkaXVzOiAwO1xuICBib3JkZXItd2lkdGg6IDFweDtcbiAgLypib3JkZXItcmlnaHQtd2lkdGg6MDsqL1xuICBib3JkZXItcmlnaHQtd2lkdGg6IDFweDtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4ICFpbXBvcnRhbnQ7XG59XG5cbi51aV9lbGVtZW50IC53cGJjX3VpX2NvbnRyb2w6Zmlyc3QtY2hpbGQge1xuICBib3JkZXItcmFkaXVzOiAzcHggMCAwIDNweDtcbn1cblxuLnVpX2VsZW1lbnQgLndwYmNfdWlfY29udHJvbDpsYXN0LWNoaWxkIHtcbiAgYm9yZGVyLXJhZGl1czogMCAzcHggM3B4IDA7XG4gIGJvcmRlci13aWR0aDogMXB4O1xufVxuXG4udWlfZWxlbWVudCAud3BiY191aV9jb250cm9sOmZpcnN0LWNoaWxkOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmFkaXVzOiAzcHg7XG59XG5cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLyoqIFRvb2xiYXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi51aV9ub3dyYXAge1xuICAtbXMtZmxleC13cmFwOiBub3dyYXAgIWltcG9ydGFudDtcbiAgICAgIGZsZXgtd3JhcDogbm93cmFwICFpbXBvcnRhbnQ7XG59XG5cbi8qIFRvb2xiYXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLndwYmNfYWp4X3Rvb2xiYXIge1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIG1hcmdpbjogMCAwIDEwcHggNTBweDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgKiB7XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG59XG5cbi8qIFJvdyBvZiBzaW1wbGUgYnV0dG9ucyBzb21ld2hlcmUgaW4gYSBwYWdlICovXG4ud3BiY19hanhfdG9vbGJhci53cGJjX2J1dHRvbnNfcm93IHtcbiAgcG9zaXRpb246IGluaXRpYWw7XG4gIG1hcmdpbjogMDtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi53cGJjX2FqeF90b29sYmFyLndwYmNfYnV0dG9uc19yb3cgLnVpX2NvbnRhaW5lciB7XG4gIGJhY2tncm91bmQ6IG5vbmU7XG4gIGJvcmRlcjogbm9uZTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4vKiBDb250YWluZXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIge1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgbWFyZ2luOiAwO1xuICBib3gtc2hhZG93OiBub25lO1xuICBib3JkZXI6IDFweCBzb2xpZCAjY2NjO1xuICBib3JkZXItdG9wOiBub25lO1xuICBiYWNrZ3JvdW5kOiAjZjVmNWY1O1xuICBmb250LXNpemU6IDE0cHg7XG4gIHBhZGRpbmc6IDZweCAxNXB4O1xufVxuXG4ud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyOmxhc3QtY2hpbGQge1xuICBib3JkZXItcmFkaXVzOiAwIDAgMnB4IDJweDtcbn1cblxuLyogR3JvdXBzIGluIGNvbnRhaW5lciAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4ud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyIC51aV9ncm91cCB7XG4gIC1tcy1mbGV4OiAwIDEgYXV0bztcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICBwYWRkaW5nOiAwO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgYm9yZGVyOiBub25lO1xuICBtYXJnaW46IDAgMjBweCAwIDA7XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwOmxhc3QtY2hpbGQge1xuICBtYXJnaW46IDA7XG59XG5cbi8qIEVsZW1lbnRzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQge1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICBmbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAtbXMtZmxleC1wYWNrOiBzdGFydDtcbiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcbiAgLW1zLWZsZXgtYWxpZ246IHN0cmV0Y2g7XG4gICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDtcbiAgLW1zLWZsZXg6IDAgMSBhdXRvO1xuICAgICAgZmxleDogMCAxIGF1dG87XG4gIHBvc2l0aW9uOiByZWxhdGl2ZTtcbiAgbWFyZ2luOiAwcHggMTVweCAwcHggMDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQ6bGFzdC1jaGlsZCB7XG4gIG1hcmdpbi1yaWdodDogMDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgPiAqIHtcbiAgbWFyZ2luOiA1cHggMDtcbn1cblxuLnVpX2VsZW1lbnRzX2RpdmlkZXIge1xuICBtYXJnaW4tbGVmdDogMTVweDtcbn1cblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4vKiogQ3VzdG9taXphdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi9cbi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lci51aV9jb250YWluZXJfc21hbGwgKiB7XG4gIGZvbnQtc2l6ZTogMTNweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc4MnB4KSB7XG4gIC53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIudWlfY29udGFpbmVyX3NtYWxsICoge1xuICAgIGZvbnQtc2l6ZTogMTRweDtcbiAgfVxufVxuXG4vKiBFbGVtZW50cyBIZWlnaHQgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50ID4gKiB7XG4gIGhlaWdodDogMzhweDtcbn1cblxuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lci51aV9jb250YWluZXJfc21hbGwgLnVpX2dyb3VwIC51aV9lbGVtZW50ID4gKiB7XG4gIGhlaWdodDogMzBweDtcbn1cblxuQG1lZGlhIChtYXgtd2lkdGg6IDc4MnB4KSB7XG4gIC53cGJjX2FqeF90b29sYmFyLndwYmNfYnV0dG9uc19yb3cgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgPiAqLFxuICAjdG9vbGJhcl9ib29raW5nX2xpc3Rpbmcud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCA+ICoge1xuICAgIGhlaWdodDogMzhweDtcbiAgfVxuICAud3BiY19hanhfdG9vbGJhci53cGJjX2J1dHRvbnNfcm93IC51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50ID4gLndwYmNfdWlfYnV0dG9uLFxuICAjdG9vbGJhcl9ib29raW5nX2xpc3Rpbmcud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCA+IC53cGJjX3VpX2J1dHRvbiB7XG4gICAgcGFkZGluZzogMCAxNXB4IDJweDtcbiAgICBwYWRkaW5nLWJvdHRvbTogMXB4O1xuICAgIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICAgIGRpc3BsYXk6IGZsZXg7XG4gICAgLW1zLWZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gICAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcbiAgICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICB9XG59XG5cbi8qIEtleXdvcmQgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuLndwYmNfYWp4X3Rvb2xiYXIgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAudWlfZ3JvdXBfX2RhdGVzX3N0YXR1cyB7XG4gIG1hcmdpbi1yaWdodDogMi41ZW07XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwLnVpX2dyb3VwX19rZXl3b3JkIHtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwLnVpX2dyb3VwX19rZXl3b3JkIC51aV9lbGVtZW50IHtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG59XG5cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIgLnVpX2dyb3VwLnVpX2dyb3VwX19rZXl3b3JkIC51aV9lbGVtZW50IC53cGJjX3NlYXJjaF9maWVsZCB7XG4gIHdpZHRoOiAxMDAlO1xufVxuXG4vKiAybmQgcm93ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cbi53cGJjX2FqeF90b29sYmFyIC51aV9jb250YWluZXIudWlfY29udGFpbmVyX2ZpbHRlcl9yb3dfMiB7XG4gIHBhZGRpbmc6IDRweCAxNXB4O1xufVxuXG4ud3BiY19hanhfdG9vbGJhciAudWlfY29udGFpbmVyLnVpX2NvbnRhaW5lcl9maWx0ZXJfcm93XzIgLnVpX2dyb3VwLnVpX2dyb3VwX19zdGF0dXNlcyB7XG4gIC1tcy1mbGV4OiAxIDEgYXV0bztcbiAgICAgIGZsZXg6IDEgMSBhdXRvO1xufVxuXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKiBCb29raW5nIHJlc291cmNlcyBcdC1cdENob3NlblxyXG4vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbi8qKlxyXG4gKiBDaG9vemVuIFN0cnVjdHVyZVxyXG5cclxuPHNlbGVjdCBtdWx0aXBsZT1cIk1VTFRJUExFXCIuLi5cclxuXHJcbmRpdiN3aF9ib29raW5nX3R5cGVfY2hvc2VuICAgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpXHQuY2h6bi13aXRoLWRyb3AuY2h6bi1jb250YWluZXItYWN0aXZlIChpZiBhY3RpdmUpXHJcblx0dWwuY2h6bi1jaG9pY2VzXHJcblx0XHRsaS5zZWFyY2gtY2hvaWNlXHJcblx0XHRcdDxzcGFuPlxyXG5cdFx0XHRhLnNlYXJjaC1jaG9pY2UtY2xvc2VcclxuXHJcblx0XHRsaS5zZWFyY2gtZmllbGRcclxuXHRcdFx0aW5wdXRbdHlwZT1cInRleHRcIl0uY2h6bi1zZWFyY2gtaW5wdXRcdFx0XHRcdFx0LmRlZmF1bHQgKGlmIG5vIHNlbGVjdGVkIHZhbHVlcylcclxuXHJcblx0ZGl2LmNoem4tZHJvcFxyXG5cdFx0dWwuY2h6bi1yZXN1bHRzXHJcblx0XHRcdGxpLnJlc3VsdC1zZWxlY3RlZFx0fHwgIGxpLmFjdGl2ZS1yZXN1bHQgIFx0XHRcdFx0LmhpZ2hsaWdodGVkIChpZiBhY3RpdmUpXHJcbiovXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkge1xuICAtbXMtZmxleDogMSAxIGF1dG87XG4gICAgICBmbGV4OiAxIDEgYXV0bztcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IGNvbHVtbiB3cmFwO1xuICAgICAgZmxleC1mbG93OiBjb2x1bW4gd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogY2VudGVyO1xuICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBoZWlnaHQ6IGluaXRpYWw7XG4gIHdpZHRoOiBhdXRvICFpbXBvcnRhbnQ7XG4gIG1pbi13aWR0aDogMTBlbTtcbiAgbWFyZ2luLXJpZ2h0OiAtMXB4O1xufVxuXG5AbWVkaWEgKG1heC13aWR0aDogNzgycHgpIHtcbiAgLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpIHtcbiAgICBoZWlnaHQ6IGluaXRpYWwgIWltcG9ydGFudDtcbiAgfVxufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIHtcbiAgLW1zLWZsZXg6IDEgMSBhdXRvO1xuICAgICAgZmxleDogMSAxIGF1dG87XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC1mbG93OiByb3cgd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IHdyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IHN0YXJ0O1xuICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LXN0YXJ0O1xuICAtbXMtZmxleC1hbGlnbjogY2VudGVyO1xuICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgLW1zLWZsZXgtbGluZS1wYWNrOiBjZW50ZXI7XG4gICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMCAwIDAgNXB4O1xuICBoZWlnaHQ6IGF1dG87XG4gIG1pbi1oZWlnaHQ6IDI4cHggIWltcG9ydGFudDtcbiAgYm9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7XG59XG5cbi51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50IC5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aS5jaHpuLWNvbnRhaW5lci1hY3RpdmUgdWwuY2h6bi1jaG9pY2VzIHtcbiAgYm9yZGVyLWNvbG9yOiAjZDhkOGQ4ICFpbXBvcnRhbnQ7XG4gIGJveC1zaGFkb3c6IDAgMCAwIDBweCAjNGY5NGQ0LCAwIDAgMXB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KSAhaW1wb3J0YW50O1xuICB6LWluZGV4OiAxO1xuICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbi51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50IC5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aSB1bC5jaHpuLWNob2ljZXMgbGkuc2VhcmNoLWNob2ljZSB7XG4gIC1tcy1mbGV4OiAwIDEgYXV0bztcbiAgICAgIGZsZXg6IDAgMSBhdXRvO1xuICBkaXNwbGF5OiAtbXMtZmxleGJveDtcbiAgZGlzcGxheTogZmxleDtcbiAgLW1zLWZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogcm93IG5vd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBiYXNlbGluZTtcbiAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTtcbiAgbWFyZ2luOiAzcHggMC41ZW0gM3B4IDA7XG4gIHBhZGRpbmc6IDNweCA1cHggM3B4IDhweDtcbn1cblxuLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpIHVsLmNoem4tY2hvaWNlcyBsaS5zZWFyY2gtY2hvaWNlIHNwYW4ge1xuICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7XG59XG5cbi51aV9jb250YWluZXIgLnVpX2dyb3VwIC51aV9lbGVtZW50IC5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aSB1bC5jaHpuLWNob2ljZXMgbGkuc2VhcmNoLWNob2ljZSBhLnNlYXJjaC1jaG9pY2UtY2xvc2Uge1xuICBmb250LWZhbWlseTogXCJHbHlwaGljb25zIEhhbGZsaW5nc1wiO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGZvbnQtd2VpZ2h0OiA0MDA7XG4gIGZvbnQtc2l6ZTogOXB4O1xuICBjb2xvcjogIzU1NTtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBwb3NpdGlvbjogcmVsYXRpdmU7XG4gIHRvcDogYXV0bztcbiAgbGVmdDogYXV0bztcbiAgcmlnaHQ6IGF1dG87XG4gIGJvdHRvbTogYXV0bztcbiAgbWFyZ2luOiAwIDAgMCAxZW07XG4gIGRpc3BsYXk6IC1tcy1mbGV4Ym94O1xuICBkaXNwbGF5OiBmbGV4O1xuICAtbXMtZmxleC1mbG93OiBjb2x1bW4gd3JhcDtcbiAgICAgIGZsZXgtZmxvdzogY29sdW1uIHdyYXA7XG4gIC1tcy1mbGV4LXBhY2s6IGNlbnRlcjtcbiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xuICAtbXMtZmxleC1saW5lLXBhY2s6IGNlbnRlcjtcbiAgICAgIGFsaWduLWNvbnRlbnQ6IGNlbnRlcjtcbiAgd2lkdGg6IGF1dG87XG4gIGhlaWdodDogYXV0bztcbn1cblxuLnVpX2NvbnRhaW5lciAudWlfZ3JvdXAgLnVpX2VsZW1lbnQgLmNoem4tY29udGFpbmVyLmNoem4tY29udGFpbmVyLW11bHRpIHVsLmNoem4tY2hvaWNlcyBsaS5zZWFyY2gtY2hvaWNlIGEuc2VhcmNoLWNob2ljZS1jbG9zZTpiZWZvcmUge1xuICBjb250ZW50OiBcIlxcZTAxNFwiO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1jaG9pY2UgYS5zZWFyY2gtY2hvaWNlLWNsb3NlOmhvdmVyIHtcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCB7XG4gIC1tcy1mbGV4OiAwIDEgMXB4O1xuICAgICAgZmxleDogMCAxIDFweDtcbiAgZGlzcGxheTogLW1zLWZsZXhib3g7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIC1tcy1mbGV4LWZsb3c6IHJvdyB3cmFwO1xuICAgICAgZmxleC1mbG93OiByb3cgd3JhcDtcbiAgLW1zLWZsZXgtcGFjazogc3RhcnQ7XG4gICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtc3RhcnQ7XG4gIC1tcy1mbGV4LWFsaWduOiBjZW50ZXI7XG4gICAgICBhbGlnbi1pdGVtczogY2VudGVyO1xuICBtYXJnaW46IDBweCAwIDBweCAwO1xuICBwYWRkaW5nOiAwO1xuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCBpbnB1dFt0eXBlPVwidGV4dFwiXS5kZWZhdWx0IHtcbiAgbWluLXdpZHRoOiAxMmVtO1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIuY2h6bi1jb250YWluZXItbXVsdGkgdWwuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XG4gIGZvbnQtZmFtaWx5OiBpbmhlcml0O1xufVxuXG4udWlfY29udGFpbmVyIC51aV9ncm91cCAudWlfZWxlbWVudCAuY2h6bi1jb250YWluZXIgZGl2LmNoem4tZHJvcCB1bC5jaHpuLXJlc3VsdHMgbGkuaGlnaGxpZ2h0ZWQge1xuICBjb2xvcjogI2ZmZjtcbiAgYmFja2dyb3VuZDogIzA4YztcbiAgdGV4dC1kZWNvcmF0aW9uOiBub25lO1xuICBvdXRsaW5lOiBub25lO1xuICBib3gtc2hhZG93OiBub25lO1xufVxuXG4vKlxyXG4jd2hfYm9va2luZ190eXBlX2Nob3NlbiB7XHJcblx0d2lkdGg6IGF1dG8gIWltcG9ydGFudDtcclxuXHRkaXNwbGF5OiBmbGV4O1xyXG5cdGZsZXgtZmxvdzogcm93IHdyYXA7XHJcblx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XHJcblx0YWxpZ24taXRlbXM6IHN0cmV0Y2g7XHJcblx0ZmxleDogMSAxIGF1dG87XHJcblx0aGVpZ2h0OiBpbml0aWFsO1xyXG5cdG1pbi13aWR0aDogMTBlbTtcclxufVxyXG5cclxuI3doX2Jvb2tpbmdfdHlwZV9jaG9zZW4gLmNoem4tY2hvaWNlcyB7XHJcblx0ZGlzcGxheTogZmxleDtcclxuXHRmbGV4LWZsb3c6IHJvdyB3cmFwO1xyXG5cdGp1c3RpZnktY29udGVudDogc3RyZXRjaDtcclxuXHRhbGlnbi1pdGVtczogY2VudGVyO1xyXG5cdG1hcmdpbjogMHB4IDBweDtcclxuXHRwYWRkaW5nOiAwIDVweDtcclxuXHRtaW4taGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7XHJcblx0ZmxleDogMSAxIGF1dG87XHJcblx0Ym9yZGVyLXJhZGl1czogM3B4IDAgMCAzcHg7XHJcbn1cclxuXHJcbi5jaHpuLWNvbnRhaW5lci1tdWx0aSAuY2h6bi1jaG9pY2VzIC5zZWFyY2gtY2hvaWNlIGEuc2VhcmNoLWNob2ljZS1jbG9zZSB7XHJcblx0YmFja2dyb3VuZDogbm9uZTtcclxuXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XHJcblx0Zm9udC1mYW1pbHk6IFwiR2x5cGhpY29ucyBIYWxmbGluZ3NcIjtcclxuXHRmb250LXN0eWxlOiBub3JtYWw7XHJcblx0Zm9udC13ZWlnaHQ6IDQwMDtcclxuXHRmb250LXNpemU6IDlweDtcclxuXHRsaW5lLWhlaWdodDogMTtcclxuXHRwb3NpdGlvbjogcmVsYXRpdmU7XHJcblx0dG9wOiAwcHg7XHJcblx0bGVmdDogMTVweDtcclxuXHRjb2xvcjogIzU1NTtcclxuXHR0ZXh0LWRlY29yYXRpb246IG5vbmU7XHJcbn1cclxuXHQuY2h6bi1jb250YWluZXItbXVsdGkgLmNoem4tY2hvaWNlcyAuc2VhcmNoLWNob2ljZSBhLnNlYXJjaC1jaG9pY2UtY2xvc2U6aG92ZXIge1xyXG5cdFx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdH1cclxuXHQuY2h6bi1jb250YWluZXItbXVsdGkgLmNoem4tY2hvaWNlcyAuc2VhcmNoLWNob2ljZSBhLnNlYXJjaC1jaG9pY2UtY2xvc2U6YmVmb3JlIHtcclxuXHRcdGNvbnRlbnQ6IFwiXFxlMDE0XCI7XHJcblx0fVxyXG5cclxuI3doX2Jvb2tpbmdfdHlwZV9jaG9zZW4gLmNoem4tc2VhcmNoLWlucHV0LmRlZmF1bHQge1xyXG5cdG1pbi13aWR0aDogMTJlbTtcclxufVxyXG4jd2hfYm9va2luZ190eXBlX2Nob3Nlbi5jaHpuLWNvbnRhaW5lci5jaHpuLWNvbnRhaW5lci1tdWx0aS5jaHpuLWNvbnRhaW5lci1hY3RpdmUgLmNoem4tY2hvaWNlcyB7XHJcblxyXG5cdGJvcmRlci1jb2xvcjogI2Q4ZDhkOCAhaW1wb3J0YW50O1xyXG5cdGJveC1zaGFkb3c6IDAgMCAwIDBweCAjNGY5NGQ0LCAwIDAgMXB4IDFweCByZ2JhKDc5LCAxNDgsIDIxMiwgMC44KSAhaW1wb3J0YW50O1xyXG5cdHotaW5kZXg6IDE7XHJcblx0b3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xyXG59XHJcbi5jaHpuLWNvbnRhaW5lci1tdWx0aSAuY2h6bi1jaG9pY2VzIGxpLnNlYXJjaC1maWVsZCBpbnB1dFt0eXBlPVwidGV4dFwiXSB7XHJcblx0Zm9udC1mYW1pbHk6IGluaGVyaXQ7XHJcbn1cclxuLmNoem4tY29udGFpbmVyIC5jaHpuLXJlc3VsdHMgbGkuaGlnaGxpZ2h0ZWQge1xyXG5cdGNvbG9yOiAjZmZmO1xyXG5cdGJhY2tncm91bmQ6ICMwOGM7XHJcblx0dGV4dC1kZWNvcmF0aW9uOiBub25lO1xyXG5cdG91dGxpbmU6IG5vbmU7XHJcblx0Ym94LXNoYWRvdzogbm9uZTtcclxufVxyXG4vKiovXG4iXX0= */
includes/_toolbar_ui/_out/toolbar_ui.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ "use strict";function wpbc_get_safe_html_text(e){return e.replace(/[\u00A0-\u9999<>\&]/g,function(e){return"&#"+e.charCodeAt(0)+";"})}function wpbc_ui_dropdown_apply_click(e){var t,r=jQuery('input[name="'+e.dropdown_radio_name+'"]:checked').parents("li").find(":input").map(function(){return wpbc_get_safe_html_text(jQuery(this).val())}).get();0!==r.length&&(t=jQuery('input[name="'+e.dropdown_radio_name+'"]:checked').parents("li").find(":input").map(function(){if("text"==jQuery(this).prop("type"))return jQuery(this).val();if("select-one"==jQuery(this).prop("type"))return jQuery(this).find(":selected").text();if("radio"!=jQuery(this).prop("type")&&"checkbox"!=jQuery(this).prop("type"))return jQuery(this).val();var e=jQuery(this).filter(":checked").next(".wpbc_ui_control_label").html();return void 0!==(e=null==e?jQuery(this).filter(":checked").prev(".wpbc_ui_control_label").html():e)?e:""}).get(),jQuery("#"+e.dropdown_id).val(JSON.stringify(r)),jQuery("#"+e.dropdown_id).trigger("change"),r=jQuery('input[name="'+e.dropdown_radio_name+'"]:checked').next(".wpbc_ui_control_label").html()+": ",t.shift(),t=wpbc_get_safe_html_text(r+t.join(" - ")),jQuery("#"+e.dropdown_id+"_selector .wpbc_selected_in_dropdown").html(t)),jQuery("#"+e.dropdown_id+"_container").hide()}function wpbc_ui_dropdown_close_click(e){jQuery("#"+e+"_container").hide()}function wpbc_ui_dropdown_simple_click(e){jQuery("#"+e.dropdown_id+"_selector .wpbc_selected_in_dropdown").html(jQuery(e._this).html()),jQuery("#"+e.dropdown_id).val(JSON.stringify([e.value])),jQuery("#"+e.dropdown_id+"_container li input[type=checkbox],#"+e.dropdown_id+"_container li input[type=radio]").prop("checked",!1),jQuery("#"+e.dropdown_id).trigger("change"),e.is_this_simple_list||jQuery("#"+e.dropdown_id+"_container").hide()}
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvX3Rvb2xiYXJfdWkvX291dC90b29sYmFyX3VpLm1pbi5qcyIsInNvdXJjZXMiOlsiaW5jbHVkZXMvX3Rvb2xiYXJfdWkvX291dC90b29sYmFyX3VpLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXHJcbiAqIEVuY29kZSBIVE1MIHRleHQgdG8gc2FmZSBIVE1MIGVudGl0aWVzXHJcbiAqXHJcbiAqIFJlcGxhY2UgYWxsIGNoYXJhY3RlcnMgaW4gdGhlIGdpdmVuIHJhbmdlICh1bmljb2RlIDAwQTAgLSA5OTk5LCBhcyB3ZWxsIGFzIGFtcGVyc2FuZCwgZ3JlYXRlciAmIGxlc3MgdGhhbilcclxuICogd2l0aCB0aGVpciBodG1sIGVudGl0eSBlcXVpdmFsZW50cywgd2hpY2ggaXMgc2ltcGx5ICYjbm5uOyB3aGVyZSBubm4gaXMgdGhlIHVuaWNvZGUgdmFsdWUgd2UgZ2V0IGZyb20gY2hhckNvZGVBdFxyXG4gKlxyXG4gKiBAcGFyYW0gcmF3U3RyXHJcbiAqIEByZXR1cm5zIHsqfVxyXG4gKi9cblxuZnVuY3Rpb24gd3BiY19nZXRfc2FmZV9odG1sX3RleHQocmF3U3RyKSB7XG4gIHZhciBlbmNvZGVkU3RyID0gcmF3U3RyLnJlcGxhY2UoL1tcXHUwMEEwLVxcdTk5OTk8PlxcJl0vZywgZnVuY3Rpb24gKGkpIHtcbiAgICByZXR1cm4gJyYjJyArIGkuY2hhckNvZGVBdCgwKSArICc7JztcbiAgfSk7XG4gIHJldHVybiBlbmNvZGVkU3RyO1xufVxuLyoqXHJcbiAqIENoYW5nZSBWYWx1ZSBhbmQgVGl0bGUgb2YgZHJvcGRvd24gYWZ0ZXIgY2xpY2tpbmcgb24gQXBwbHkgYnV0dG9uXHJcbiAqXHJcbiAqIEBwYXJhbSBwYXJhbXNcdEV4YW1wbGU6IHsgJ2Ryb3Bkb3duX2lkJzogJ3doX2Jvb2tpbmdfZGF0ZScsICdkcm9wZG93bl9yYWRpb19uYW1lJzogJ3VpX3doX2Jvb2tpbmdfZGF0ZV9yYWRpbycgfVxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX2FwcGx5X2NsaWNrKHBhcmFtcykge1xuICAvLyBHZXQgaW5wdXQgdmFsdWVzIG9mIGFsbCBlbGVtZW50cyBpbiBMSSBzZWN0aW9uLCAgd2hlcmUgUkFESU8gd2FzIHNlbGVjdGVkXG4gIHZhciBmaWx0ZXJfdWlfZGF0ZXNfYXJyID0galF1ZXJ5KCdpbnB1dFtuYW1lPVwiJyArIHBhcmFtc1snZHJvcGRvd25fcmFkaW9fbmFtZSddICsgJ1wiXTpjaGVja2VkJykucGFyZW50cygnbGknKS5maW5kKCc6aW5wdXQnKS5tYXAoZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dChqUXVlcnkodGhpcykudmFsKCkpO1xuICB9KS5nZXQoKTtcblxuICBpZiAoMCAhPT0gZmlsdGVyX3VpX2RhdGVzX2Fyci5sZW5ndGgpIHtcbiAgICAvLyBDb250aW51ZSBvbmx5IGlmIHJhZGlvIGJ1dHRvbiAgd2FzIHNlbGVjdGVkLCBhbmQgd2UgYXJlIGhhdmluZyB2YWx1ZVxuICAgIC8vIEdldCB0aXRsZXMgb2YgYWxsIGVsZW1lbnRzIGluIExJIHNlY3Rpb24sICB3aGVyZSBSQURJTyB3YXMgc2VsZWN0ZWRcbiAgICB2YXIgZmlsdGVyX3VpX3RpdGxlc19hcnIgPSBqUXVlcnkoJ2lucHV0W25hbWU9XCInICsgcGFyYW1zWydkcm9wZG93bl9yYWRpb19uYW1lJ10gKyAnXCJdOmNoZWNrZWQnKS5wYXJlbnRzKCdsaScpLmZpbmQoJzppbnB1dCcpLm1hcChmdW5jdGlvbiAoKSB7XG4gICAgICBpZiAoJ3RleHQnID09IGpRdWVyeSh0aGlzKS5wcm9wKCd0eXBlJykpIHtcbiAgICAgICAgcmV0dXJuIGpRdWVyeSh0aGlzKS52YWwoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCdzZWxlY3Qtb25lJyA9PSBqUXVlcnkodGhpcykucHJvcCgndHlwZScpKSB7XG4gICAgICAgIHJldHVybiBqUXVlcnkodGhpcykuZmluZCgnOnNlbGVjdGVkJykudGV4dCgpO1xuICAgICAgfVxuXG4gICAgICBpZiAoJ3JhZGlvJyA9PSBqUXVlcnkodGhpcykucHJvcCgndHlwZScpIHx8ICdjaGVja2JveCcgPT0galF1ZXJ5KHRoaXMpLnByb3AoJ3R5cGUnKSkge1xuICAgICAgICB2YXIgaW5wdXRfc2VsZWN0ZWQgPSBqUXVlcnkodGhpcykuZmlsdGVyKCc6Y2hlY2tlZCcpLm5leHQoJy53cGJjX3VpX2NvbnRyb2xfbGFiZWwnKS5odG1sKCk7XG5cbiAgICAgICAgaWYgKHVuZGVmaW5lZCA9PSBpbnB1dF9zZWxlY3RlZCkge1xuICAgICAgICAgIGlucHV0X3NlbGVjdGVkID0galF1ZXJ5KHRoaXMpLmZpbHRlcignOmNoZWNrZWQnKS5wcmV2KCcud3BiY191aV9jb250cm9sX2xhYmVsJykuaHRtbCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZCAhPT0gaW5wdXRfc2VsZWN0ZWQgPyBpbnB1dF9zZWxlY3RlZCA6ICcnO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4galF1ZXJ5KHRoaXMpLnZhbCgpO1xuICAgIH0pLmdldCgpOyAvLyBVcGRhdGUgVmFsdWUgdG8gIGRyb3Bkb3duIGlucHV0IGhpZGRlbiBlbGVtZW50cy4gU3VjaCAgdmFsdWUgc3RyaW5naWZ5LlxuXG4gICAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSkudmFsKEpTT04uc3RyaW5naWZ5KGZpbHRlcl91aV9kYXRlc19hcnIpKTsgLy8gR2VuZXJhdGUgY2hhbmdlIGFjdGlvbiwgIGZvciBhYmlsaXR5IHRvICBzZW5kIEFqYXggcmVxdWVzdFxuXG4gICAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSkudHJpZ2dlcignY2hhbmdlJyk7IC8vIEdldCBMYWJlbCBvZiBzZWxlY3RlZCBSYWRpbyBidXR0b25cblxuICAgIHZhciBmaWx0ZXJfdWlfZGF0ZXNfdGl0bGUgPSBqUXVlcnkoJ2lucHV0W25hbWU9XCInICsgcGFyYW1zWydkcm9wZG93bl9yYWRpb19uYW1lJ10gKyAnXCJdOmNoZWNrZWQnKS5uZXh0KCcud3BiY191aV9jb250cm9sX2xhYmVsJykuaHRtbCgpICsgJzogJzsgLy8gUmVtb3ZlIHNlbGVjdGVkIHZhbHVlIG9mIHJhZGlvIGJ1dHRvbiBmcm9tIGJlZ2lubmluZywgd2Ugd2lsbCB1c2UgTGFiZWwgdGl0bGUgaW5zdGVhZFxuXG4gICAgZmlsdGVyX3VpX3RpdGxlc19hcnIuc2hpZnQoKTsgLy8gVXBkYXRlIFRpdGxlIGluIGRyb3Bkb3duXG5cbiAgICB2YXIgZW5jb2RlZF9odG1sX3RleHQgPSB3cGJjX2dldF9zYWZlX2h0bWxfdGV4dChmaWx0ZXJfdWlfZGF0ZXNfdGl0bGUgKyBmaWx0ZXJfdWlfdGl0bGVzX2Fyci5qb2luKCcgLSAnKSk7XG4gICAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSArICdfc2VsZWN0b3IgLndwYmNfc2VsZWN0ZWRfaW5fZHJvcGRvd24nKS5odG1sKGVuY29kZWRfaHRtbF90ZXh0KTtcbiAgfVxuXG4gIGpRdWVyeSgnIycgKyBwYXJhbXNbJ2Ryb3Bkb3duX2lkJ10gKyAnX2NvbnRhaW5lcicpLmhpZGUoKTtcbn1cbi8qKlxyXG4gKiBDbG9zZSBkcm9wZG93biBhZnRlciBjbGlja2luZyBvbiBDbG9zZSBidXR0b25cclxuICpcclxuICogQHBhcmFtIGRyb3Bkb3duX2lkXHRJRCBvZiBkcm9wZG93blxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX2Nsb3NlX2NsaWNrKGRyb3Bkb3duX2lkKSB7XG4gIGpRdWVyeSgnIycgKyBkcm9wZG93bl9pZCArICdfY29udGFpbmVyJykuaGlkZSgpO1xufVxuLyoqXHJcbiAqIFNpbXBsZSBvcHRpb24gY2xpY2sgb24gZHJvcGRvd25cclxuICpcclxuICogQHBhcmFtIHBhcmFtc1x0RXhhbXBsZTogeyAnZHJvcGRvd25faWQnOiAnd2hfYm9va2luZ19kYXRlJywgJ2lzX3RoaXNfc2ltcGxlX2xpc3QnOiB0cnVlLCAndmFsdWUnOiAnNScsICdfdGhpcyc6IHRoaXMgfVxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayhwYXJhbXMpIHtcbiAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSArICdfc2VsZWN0b3IgLndwYmNfc2VsZWN0ZWRfaW5fZHJvcGRvd24nKS5odG1sKGpRdWVyeShwYXJhbXNbJ190aGlzJ10pLmh0bWwoKSk7XG4gIGpRdWVyeSgnIycgKyBwYXJhbXNbJ2Ryb3Bkb3duX2lkJ10pLnZhbChKU09OLnN0cmluZ2lmeShbcGFyYW1zWyd2YWx1ZSddXSkpO1xuICBqUXVlcnkoJyMnICsgcGFyYW1zWydkcm9wZG93bl9pZCddICsgJ19jb250YWluZXIgbGkgaW5wdXRbdHlwZT1jaGVja2JveF0sJyArICcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSArICdfY29udGFpbmVyIGxpIGlucHV0W3R5cGU9cmFkaW9dJykucHJvcCgnY2hlY2tlZCcsIGZhbHNlKTtcbiAgalF1ZXJ5KCcjJyArIHBhcmFtc1snZHJvcGRvd25faWQnXSkudHJpZ2dlcignY2hhbmdlJyk7XG5cbiAgaWYgKCFwYXJhbXNbJ2lzX3RoaXNfc2ltcGxlX2xpc3QnXSkge1xuICAgIGpRdWVyeSgnIycgKyBwYXJhbXNbJ2Ryb3Bkb3duX2lkJ10gKyAnX2NvbnRhaW5lcicpLmhpZGUoKTtcbiAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMMTkwYjI5c1ltRnlYM1ZwTDE5emNtTXZkRzl2YkdKaGNsOTFhUzVxY3lKZExDSnVZVzFsY3lJNld5SjNjR0pqWDJkbGRGOXpZV1psWDJoMGJXeGZkR1Y0ZENJc0luSmhkMU4wY2lJc0ltVnVZMjlrWldSVGRISWlMQ0p5WlhCc1lXTmxJaXdpYVNJc0ltTm9ZWEpEYjJSbFFYUWlMQ0ozY0dKalgzVnBYMlJ5YjNCa2IzZHVYMkZ3Y0d4NVgyTnNhV05ySWl3aWNHRnlZVzF6SWl3aVptbHNkR1Z5WDNWcFgyUmhkR1Z6WDJGeWNpSXNJbXBSZFdWeWVTSXNJbkJoY21WdWRITWlMQ0ptYVc1a0lpd2liV0Z3SWl3aWRtRnNJaXdpWjJWMElpd2liR1Z1WjNSb0lpd2labWxzZEdWeVgzVnBYM1JwZEd4bGMxOWhjbklpTENKd2NtOXdJaXdpZEdWNGRDSXNJbWx1Y0hWMFgzTmxiR1ZqZEdWa0lpd2labWxzZEdWeUlpd2libVY0ZENJc0ltaDBiV3dpTENKMWJtUmxabWx1WldRaUxDSndjbVYySWl3aVNsTlBUaUlzSW5OMGNtbHVaMmxtZVNJc0luUnlhV2RuWlhJaUxDSm1hV3gwWlhKZmRXbGZaR0YwWlhOZmRHbDBiR1VpTENKemFHbG1kQ0lzSW1WdVkyOWtaV1JmYUhSdGJGOTBaWGgwSWl3aWFtOXBiaUlzSW1ocFpHVWlMQ0ozY0dKalgzVnBYMlJ5YjNCa2IzZHVYMk5zYjNObFgyTnNhV05ySWl3aVpISnZjR1J2ZDI1ZmFXUWlMQ0ozY0dKalgzVnBYMlJ5YjNCa2IzZHVYM05wYlhCc1pWOWpiR2xqYXlKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN1FVRkhRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN08wRkJRMEVzVTBGQlUwRXNkVUpCUVZRc1EwRkJhME5ETEUxQlFXeERMRVZCUVRCRE8wRkJSWHBETEUxQlFVbERMRlZCUVZVc1IwRkJSMFFzVFVGQlRTeERRVUZEUlN4UFFVRlFMRU5CUVdkQ0xITkNRVUZvUWl4RlFVRjNReXhWUVVGWFF5eERRVUZZTEVWQlFXTTdRVUZEZEVVc1YwRkJUeXhQUVVGUFFTeERRVUZETEVOQlFVTkRMRlZCUVVZc1EwRkJZeXhEUVVGa0xFTkJRVkFzUjBGQk1rSXNSMEZCYkVNN1FVRkRRU3hIUVVablFpeERRVUZxUWp0QlFVbEJMRk5CUVU5SUxGVkJRVkE3UVVGRFFUdEJRVWRFTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTkpMRFJDUVVGVUxFTkJRWFZEUXl4TlFVRjJReXhGUVVFclF6dEJRVVU1UXp0QlFVTkJMRTFCUVVsRExHMUNRVUZ0UWl4SFFVRkhReXhOUVVGTkxFTkJRVVVzYVVKQlFXbENSaXhOUVVGTkxFTkJRVVVzY1VKQlFVWXNRMEZCZGtJc1IwRkJiVVFzV1VGQmNrUXNRMEZCVGl4RFFVTm9Ra2NzVDBGRVowSXNRMEZEVUN4SlFVUlBMRVZCUTBGRExFbEJSRUVzUTBGRFRTeFJRVVJPTEVWQlJXaENReXhIUVVablFpeERRVVZZTEZsQlFWYzdRVUZEYUVJc1YwRkJUMW9zZFVKQlFYVkNMRU5CUVVWVExFMUJRVTBzUTBGQlJTeEpRVUZHTEVOQlFVNHNRMEZCWlVrc1IwRkJaaXhGUVVGR0xFTkJRVGxDTzBGQlEwRXNSMEZLWjBJc1JVRkpZa01zUjBGS1lTeEZRVUV4UWpzN1FVRk5RU3hOUVVGTExFMUJRVTFPTEcxQ1FVRnRRaXhEUVVGRFR5eE5RVUV2UWl4RlFVRjFRenRCUVVGSE8wRkJSWHBETzBGQlEwRXNVVUZCU1VNc2IwSkJRVzlDTEVkQlFVZFFMRTFCUVUwc1EwRkJSU3hwUWtGQmFVSkdMRTFCUVUwc1EwRkJSU3h4UWtGQlJpeERRVUYyUWl4SFFVRnRSQ3haUVVGeVJDeERRVUZPTEVOQlEyWkhMRTlCUkdVc1EwRkRUaXhKUVVSTkxFVkJRME5ETEVsQlJFUXNRMEZEVHl4UlFVUlFMRVZCUldwQ1F5eEhRVVpwUWl4RFFVVmFMRmxCUVZjN1FVRkRhRUlzVlVGQlN5eFZRVUZWU0N4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1ZSTEVsQlFXWXNRMEZCY1VJc1RVRkJja0lzUTBGQlppeEZRVUU0UXp0QlFVTTNReXhsUVVGUFVpeE5RVUZOTEVOQlFVVXNTVUZCUml4RFFVRk9MRU5CUVdWSkxFZEJRV1lzUlVGQlVEdEJRVU5CT3p0QlFVTkVMRlZCUVVzc1owSkJRV2RDU2l4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1ZSTEVsQlFXWXNRMEZCY1VJc1RVRkJja0lzUTBGQmNrSXNSVUZCYjBRN1FVRkRia1FzWlVGQlQxSXNUVUZCVFN4RFFVRkZMRWxCUVVZc1EwRkJUaXhEUVVGbFJTeEpRVUZtTEVOQlFYRkNMRmRCUVhKQ0xFVkJRVzFEVHl4SlFVRnVReXhGUVVGUU8wRkJRMEU3TzBGQlEwUXNWVUZEU1N4WFFVRlhWQ3hOUVVGTkxFTkJRVVVzU1VGQlJpeERRVUZPTEVOQlFXVlJMRWxCUVdZc1EwRkJjVUlzVFVGQmNrSXNRMEZCWWl4SlFVTkxMR05CUVdOU0xFMUJRVTBzUTBGQlJTeEpRVUZHTEVOQlFVNHNRMEZCWlZFc1NVRkJaaXhEUVVGeFFpeE5RVUZ5UWl4RFFVWnlRaXhGUVVkRE8wRkJRMEVzV1VGQlNVVXNZMEZCWXl4SFFVRkhWaXhOUVVGTkxFTkJRVVVzU1VGQlJpeERRVUZPTEVOQlFXVlhMRTFCUVdZc1EwRkJjMElzVlVGQmRFSXNSVUZCYTBORExFbEJRV3hETEVOQlFYZERMSGRDUVVGNFF5eEZRVUZ0UlVNc1NVRkJia1VzUlVGQmNrSTdPMEZCUTBFc1dVRkJTME1zVTBGQlV5eEpRVUZKU2l4alFVRnNRaXhGUVVGdFF6dEJRVU5zUTBFc1ZVRkJRVUVzWTBGQll5eEhRVUZIVml4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1ZYTEUxQlFXWXNRMEZCYzBJc1ZVRkJkRUlzUlVGQmEwTkpMRWxCUVd4RExFTkJRWGRETEhkQ1FVRjRReXhGUVVGdFJVWXNTVUZCYmtVc1JVRkJha0k3UVVGRFFUczdRVUZEUkN4bFFVRlRReXhUUVVGVExFdEJRVXRLTEdOQlFXaENMRWRCUVcxRFFTeGpRVUZ1UXl4SFFVRnZSQ3hGUVVFelJEdEJRVU5CT3p0QlFVVkVMR0ZCUVU5V0xFMUJRVTBzUTBGQlJTeEpRVUZHTEVOQlFVNHNRMEZCWlVrc1IwRkJaaXhGUVVGUU8wRkJRMEVzUzBGeVFtbENMRVZCY1VKa1F5eEhRWEpDWXl4RlFVRXpRaXhEUVVoelF5eERRVEJDZEVNN08wRkJRMEZNTEVsQlFVRkJMRTFCUVUwc1EwRkJSU3hOUVVGTlJpeE5RVUZOTEVOQlFVVXNZVUZCUml4RFFVRmtMRU5CUVU0c1EwRkJkME5OTEVkQlFYaERMRU5CUVRaRFdTeEpRVUZKTEVOQlFVTkRMRk5CUVV3c1EwRkJaMEpzUWl4dFFrRkJhRUlzUTBGQk4wTXNSVUV6UW5ORExFTkJOa0owUXpzN1FVRkRRVU1zU1VGQlFVRXNUVUZCVFN4RFFVRkZMRTFCUVUxR0xFMUJRVTBzUTBGQlJTeGhRVUZHTEVOQlFXUXNRMEZCVGl4RFFVRjNRMjlDTEU5QlFYaERMRU5CUVdsRUxGRkJRV3BFTEVWQk9VSnpReXhEUVdkRGRFTTdPMEZCUTBFc1VVRkJTVU1zY1VKQlFYRkNMRWRCUVVkdVFpeE5RVUZOTEVOQlFVVXNhVUpCUVdsQ1JpeE5RVUZOTEVOQlFVVXNjVUpCUVVZc1EwRkJka0lzUjBGQmJVUXNXVUZCY2tRc1EwRkJUaXhEUVVFd1JXTXNTVUZCTVVVc1EwRkJaMFlzZDBKQlFXaEdMRVZCUVRKSFF5eEpRVUV6Unl4TFFVRnZTQ3hKUVVGb1NpeERRV3BEYzBNc1EwRnRRM1JET3p0QlFVTkJUaXhKUVVGQlFTeHZRa0ZCYjBJc1EwRkJRMkVzUzBGQmNrSXNSMEZ3UTNORExFTkJjME4wUXpzN1FVRkRRU3hSUVVGSlF5eHBRa0ZCYVVJc1IwRkJSemxDTEhWQ1FVRjFRaXhEUVVGRk5FSXNjVUpCUVhGQ0xFZEJRVWRhTEc5Q1FVRnZRaXhEUVVGRFpTeEpRVUZ5UWl4RFFVRXlRaXhMUVVFelFpeERRVUV4UWl4RFFVRXZRenRCUVVOQmRFSXNTVUZCUVVFc1RVRkJUU3hEUVVGRkxFMUJRVTFHTEUxQlFVMHNRMEZCUlN4aFFVRkdMRU5CUVZvc1IwRkJaME1zYzBOQlFXeERMRU5CUVU0c1EwRkJhVVpsTEVsQlFXcEdMRU5CUVhWR1VTeHBRa0ZCZGtZN1FVRkRRVHM3UVVGRlJISkNMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeE5RVUZOUml4TlFVRk5MRU5CUVVVc1lVRkJSaXhEUVVGYUxFZEJRV2RETEZsQlFXeERMRU5CUVU0c1EwRkJkVVI1UWl4SlFVRjJSRHRCUVVOQk8wRkJSMFE3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUwTXNORUpCUVZRc1EwRkJkVU5ETEZkQlFYWkRMRVZCUVc5RU8wRkJSVzVFZWtJc1JVRkJRVUVzVFVGQlRTeERRVUZGTEUxQlFVMTVRaXhYUVVGT0xFZEJRVzlDTEZsQlFYUkNMRU5CUVU0c1EwRkJNa05HTEVsQlFUTkRPMEZCUTBFN1FVRkhSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3pzN1FVRkRRU3hUUVVGVFJ5dzJRa0ZCVkN4RFFVRjNRelZDTEUxQlFYaERMRVZCUVdkRU8wRkJSUzlEUlN4RlFVRkJRU3hOUVVGTkxFTkJRVVVzVFVGQlRVWXNUVUZCVFN4RFFVRkZMR0ZCUVVZc1EwRkJXaXhIUVVGblF5eHpRMEZCYkVNc1EwRkJUaXhEUVVGcFJtVXNTVUZCYWtZc1EwRkJkVVppTEUxQlFVMHNRMEZCUlVZc1RVRkJUU3hEUVVGRkxFOUJRVVlzUTBGQlVpeERRVUZPTEVOQlFUUkNaU3hKUVVFMVFpeEZRVUYyUmp0QlFVVkJZaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNUVUZCVFVZc1RVRkJUU3hEUVVGRkxHRkJRVVlzUTBGQlpDeERRVUZPTEVOQlFYZERUU3hIUVVGNFF5eERRVUUyUTFrc1NVRkJTU3hEUVVGRFF5eFRRVUZNTEVOQlFXZENMRU5CUVVOdVFpeE5RVUZOTEVOQlFVVXNUMEZCUml4RFFVRlFMRU5CUVdoQ0xFTkJRVGRETzBGQlJVRkZMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeE5RVUZOUml4TlFVRk5MRU5CUVVVc1lVRkJSaXhEUVVGYUxFZEJRV2RETEhGRFFVRm9ReXhIUVVOSUxFZEJSRWNzUjBGRFIwRXNUVUZCVFN4RFFVRkZMR0ZCUVVZc1EwRkVWQ3hIUVVNMlFpeHBRMEZFTDBJc1EwRkJUaXhEUVVONVJWVXNTVUZFZWtVc1EwRkRLMFVzVTBGRUwwVXNSVUZETUVZc1MwRkVNVVk3UVVGSFFWSXNSVUZCUVVFc1RVRkJUU3hEUVVGRkxFMUJRVTFHTEUxQlFVMHNRMEZCUlN4aFFVRkdMRU5CUVdRc1EwRkJUaXhEUVVGM1EyOUNMRTlCUVhoRExFTkJRV2xFTEZGQlFXcEVPenRCUVVWQkxFMUJRVXNzUTBGQlJYQkNMRTFCUVUwc1EwRkJSU3h4UWtGQlJpeERRVUZpTEVWQlFYZERPMEZCUTNaRFJTeEpRVUZCUVN4TlFVRk5MRU5CUVVVc1RVRkJUVVlzVFVGQlRTeERRVUZGTEdGQlFVWXNRMEZCV2l4SFFVRm5ReXhaUVVGc1F5eERRVUZPTEVOQlFYVkVlVUlzU1VGQmRrUTdRVUZEUVR0QlFVTkVJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWENKMWMyVWdjM1J5YVdOMFhDSTdYSEpjYmx4eVhHNWNjbHh1THlvcVhISmNiaUFxSUVWdVkyOWtaU0JJVkUxTUlIUmxlSFFnZEc4Z2MyRm1aU0JJVkUxTUlHVnVkR2wwYVdWelhISmNiaUFxWEhKY2JpQXFJRkpsY0d4aFkyVWdZV3hzSUdOb1lYSmhZM1JsY25NZ2FXNGdkR2hsSUdkcGRtVnVJSEpoYm1kbElDaDFibWxqYjJSbElEQXdRVEFnTFNBNU9UazVMQ0JoY3lCM1pXeHNJR0Z6SUdGdGNHVnljMkZ1WkN3Z1ozSmxZWFJsY2lBbUlHeGxjM01nZEdoaGJpbGNjbHh1SUNvZ2QybDBhQ0IwYUdWcGNpQm9kRzFzSUdWdWRHbDBlU0JsY1hWcGRtRnNaVzUwY3l3Z2QyaHBZMmdnYVhNZ2MybHRjR3g1SUNZamJtNXVPeUIzYUdWeVpTQnVibTRnYVhNZ2RHaGxJSFZ1YVdOdlpHVWdkbUZzZFdVZ2QyVWdaMlYwSUdaeWIyMGdZMmhoY2tOdlpHVkJkRnh5WEc0Z0tseHlYRzRnS2lCQWNHRnlZVzBnY21GM1UzUnlYSEpjYmlBcUlFQnlaWFIxY201eklIc3FmVnh5WEc0Z0tpOWNjbHh1Wm5WdVkzUnBiMjRnZDNCaVkxOW5aWFJmYzJGbVpWOW9kRzFzWDNSbGVIUW9JSEpoZDFOMGNpQXBlMXh5WEc1Y2NseHVYSFIyWVhJZ1pXNWpiMlJsWkZOMGNpQTlJSEpoZDFOMGNpNXlaWEJzWVdObEtDQXZXMXhjZFRBd1FUQXRYRngxT1RrNU9UdytYRndtWFM5bkxDQm1kVzVqZEdsdmJpQW9JR2tnS1h0Y2NseHVYSFJjZEhKbGRIVnliaUFuSmlNbklDc2dhUzVqYUdGeVEyOWtaVUYwS0NBd0lDa2dLeUFuT3ljN1hISmNibHgwZlNBcE8xeHlYRzVjY2x4dVhIUnlaWFIxY200Z1pXNWpiMlJsWkZOMGNqdGNjbHh1ZlZ4eVhHNWNjbHh1WEhKY2JpOHFLbHh5WEc0Z0tpQkRhR0Z1WjJVZ1ZtRnNkV1VnWVc1a0lGUnBkR3hsSUc5bUlHUnliM0JrYjNkdUlHRm1kR1Z5SUdOc2FXTnJhVzVuSUc5dUlFRndjR3g1SUdKMWRIUnZibHh5WEc0Z0tseHlYRzRnS2lCQWNHRnlZVzBnY0dGeVlXMXpYSFJGZUdGdGNHeGxPaUI3SUNka2NtOXdaRzkzYmw5cFpDYzZJQ2QzYUY5aWIyOXJhVzVuWDJSaGRHVW5MQ0FuWkhKdmNHUnZkMjVmY21Ga2FXOWZibUZ0WlNjNklDZDFhVjkzYUY5aWIyOXJhVzVuWDJSaGRHVmZjbUZrYVc4bklIMWNjbHh1SUNvdlhISmNibVoxYm1OMGFXOXVJSGR3WW1OZmRXbGZaSEp2Y0dSdmQyNWZZWEJ3YkhsZlkyeHBZMnNvSUhCaGNtRnRjeUFwZTF4eVhHNWNjbHh1WEhRdkx5QkhaWFFnYVc1d2RYUWdkbUZzZFdWeklHOW1JR0ZzYkNCbGJHVnRaVzUwY3lCcGJpQk1TU0J6WldOMGFXOXVMQ0FnZDJobGNtVWdVa0ZFU1U4Z2QyRnpJSE5sYkdWamRHVmtYSEpjYmx4MGRtRnlJR1pwYkhSbGNsOTFhVjlrWVhSbGMxOWhjbklnUFNCcVVYVmxjbmtvSUNkcGJuQjFkRnR1WVcxbFBWd2lKeUFySUhCaGNtRnRjMXNnSjJSeWIzQmtiM2R1WDNKaFpHbHZYMjVoYldVbklGMGdLeUFuWENKZE9tTm9aV05yWldRbklDbGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRdWNHRnlaVzUwY3lnZ0oyeHBKeUFwTG1acGJtUW9JQ2M2YVc1d2RYUW5JQ2xjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXViV0Z3S0NCbWRXNWpkR2x2YmlBb0tYdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RISmxkSFZ5YmlCM2NHSmpYMmRsZEY5ellXWmxYMmgwYld4ZmRHVjRkQ2dnYWxGMVpYSjVLQ0IwYUdseklDa3VkbUZzS0NrZ0tUdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSOUlDa3VaMlYwS0NrN1hISmNibHh5WEc1Y2RHbG1JQ2dnTUNBaFBUMGdabWxzZEdWeVgzVnBYMlJoZEdWelgyRnljaTVzWlc1bmRHZ2dLWHNnSUM4dklFTnZiblJwYm5WbElHOXViSGtnYVdZZ2NtRmthVzhnWW5WMGRHOXVJQ0IzWVhNZ2MyVnNaV04wWldRc0lHRnVaQ0IzWlNCaGNtVWdhR0YyYVc1bklIWmhiSFZsWEhKY2JseHlYRzVjZEZ4MEx5OGdSMlYwSUhScGRHeGxjeUJ2WmlCaGJHd2daV3hsYldWdWRITWdhVzRnVEVrZ2MyVmpkR2x2Yml3Z0lIZG9aWEpsSUZKQlJFbFBJSGRoY3lCelpXeGxZM1JsWkZ4eVhHNWNkRngwZG1GeUlHWnBiSFJsY2w5MWFWOTBhWFJzWlhOZllYSnlJRDBnYWxGMVpYSjVLQ0FuYVc1d2RYUmJibUZ0WlQxY0lpY2dLeUJ3WVhKaGJYTmJJQ2RrY205d1pHOTNibDl5WVdScGIxOXVZVzFsSnlCZElDc2dKMXdpWFRwamFHVmphMlZrSnlBcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSUNCY2RDNXdZWEpsYm5SektDQW5iR2tuSUNrdVptbHVaQ2dnSnpwcGJuQjFkQ2NnS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwTG0xaGNDZ2dablZ1WTNScGIyNGdLQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDZ2dKM1JsZUhRbklEMDlJR3BSZFdWeWVTZ2dkR2hwY3lBcExuQnliM0FvSUNkMGVYQmxKeUFwSUNsN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBjbVYwZFhKdUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5aaGJDZ3BPMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFI5WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDZ2dKM05sYkdWamRDMXZibVVuSUQwOUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5CeWIzQW9JQ2QwZVhCbEp5QXBJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGNtVjBkWEp1SUdwUmRXVnllU2dnZEdocGN5QXBMbVpwYm1Rb0lDYzZjMlZzWldOMFpXUW5JQ2t1ZEdWNGRDZ3BPMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFI5WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDaGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENnZ0ozSmhaR2x2SnlBOVBTQnFVWFZsY25rb0lIUm9hWE1nS1M1d2NtOXdLQ0FuZEhsd1pTY2dLU0FwWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MElIeDhJQ2dnSjJOb1pXTnJZbTk0SnlBOVBTQnFVWFZsY25rb0lIUm9hWE1nS1M1d2NtOXdLQ0FuZEhsd1pTY2dLU0FwWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENsN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBkbUZ5SUdsdWNIVjBYM05sYkdWamRHVmtJRDBnYWxGMVpYSjVLQ0IwYUdseklDa3VabWxzZEdWeUtDYzZZMmhsWTJ0bFpDY3BMbTVsZUhRb0lDY3VkM0JpWTE5MWFWOWpiMjUwY205c1gyeGhZbVZzSnlBcExtaDBiV3dvS1R0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUnBaaUFvSUhWdVpHVm1hVzVsWkNBOVBTQnBibkIxZEY5elpXeGxZM1JsWkNBcElIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsdWNIVjBYM05sYkdWamRHVmtJRDBnYWxGMVpYSjVLQ0IwYUdseklDa3VabWxzZEdWeUtDYzZZMmhsWTJ0bFpDY3BMbkJ5WlhZb0lDY3VkM0JpWTE5MWFWOWpiMjUwY205c1gyeGhZbVZzSnlBcExtaDBiV3dvS1R0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwY21WMGRYSnVJQ2dnZFc1a1pXWnBibVZrSUNFOVBTQnBibkIxZEY5elpXeGxZM1JsWkNBcElEOGdhVzV3ZFhSZmMyVnNaV04wWldRZ09pQW5KenRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlZ4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBjbVYwZFhKdUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5aaGJDZ3BPMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBmU0FwTG1kbGRDZ3BPMXh5WEc1Y2NseHVYSFJjZEM4dklGVndaR0YwWlNCV1lXeDFaU0IwYnlBZ1pISnZjR1J2ZDI0Z2FXNXdkWFFnYUdsa1pHVnVJR1ZzWlcxbGJuUnpMaUJUZFdOb0lDQjJZV3gxWlNCemRISnBibWRwWm5rdVhISmNibHgwWEhScVVYVmxjbmtvSUNjakp5QXJJSEJoY21GdGMxc2dKMlJ5YjNCa2IzZHVYMmxrSnlCZElDa3VkbUZzS0NCS1UwOU9Mbk4wY21sdVoybG1lU2dnWm1sc2RHVnlYM1ZwWDJSaGRHVnpYMkZ5Y2lBcElDazdYSEpjYmx4eVhHNWNkRngwTHk4Z1IyVnVaWEpoZEdVZ1kyaGhibWRsSUdGamRHbHZiaXdnSUdadmNpQmhZbWxzYVhSNUlIUnZJQ0J6Wlc1a0lFRnFZWGdnY21WeGRXVnpkRnh5WEc1Y2RGeDBhbEYxWlhKNUtDQW5JeWNnS3lCd1lYSmhiWE5iSUNka2NtOXdaRzkzYmw5cFpDY2dYU0FwTG5SeWFXZG5aWElvSUNkamFHRnVaMlVuSUNrN1hISmNibHh5WEc1Y2RGeDBMeThnUjJWMElFeGhZbVZzSUc5bUlITmxiR1ZqZEdWa0lGSmhaR2x2SUdKMWRIUnZibHh5WEc1Y2RGeDBkbUZ5SUdacGJIUmxjbDkxYVY5a1lYUmxjMTkwYVhSc1pTQTlJR3BSZFdWeWVTZ2dKMmx1Y0hWMFcyNWhiV1U5WENJbklDc2djR0Z5WVcxeld5QW5aSEp2Y0dSdmQyNWZjbUZrYVc5ZmJtRnRaU2NnWFNBcklDZGNJbDA2WTJobFkydGxaQ2NnS1M1dVpYaDBLQ0FuTG5kd1ltTmZkV2xmWTI5dWRISnZiRjlzWVdKbGJDY2dLUzVvZEcxc0tDa2dLeUFuT2lBbk8xeHlYRzVjY2x4dVhIUmNkQzh2SUZKbGJXOTJaU0J6Wld4bFkzUmxaQ0IyWVd4MVpTQnZaaUJ5WVdScGJ5QmlkWFIwYjI0Z1puSnZiU0JpWldkcGJtNXBibWNzSUhkbElIZHBiR3dnZFhObElFeGhZbVZzSUhScGRHeGxJR2x1YzNSbFlXUmNjbHh1WEhSY2RHWnBiSFJsY2w5MWFWOTBhWFJzWlhOZllYSnlMbk5vYVdaMEtDazdYSEpjYmx4eVhHNWNkRngwTHk4Z1ZYQmtZWFJsSUZScGRHeGxJR2x1SUdSeWIzQmtiM2R1WEhKY2JseDBYSFIyWVhJZ1pXNWpiMlJsWkY5b2RHMXNYM1JsZUhRZ1BTQjNjR0pqWDJkbGRGOXpZV1psWDJoMGJXeGZkR1Y0ZENnZ1ptbHNkR1Z5WDNWcFgyUmhkR1Z6WDNScGRHeGxJQ3NnWm1sc2RHVnlYM1ZwWDNScGRHeGxjMTloY25JdWFtOXBiaWdnSnlBdElDY2dLU0FwTzF4eVhHNWNkRngwYWxGMVpYSjVLQ0FuSXljZ0t5QndZWEpoYlhOYklDZGtjbTl3Wkc5M2JsOXBaQ2NnWFNBcklDZGZjMlZzWldOMGIzSWdMbmR3WW1OZmMyVnNaV04wWldSZmFXNWZaSEp2Y0dSdmQyNG5JQ2t1YUhSdGJDZ2daVzVqYjJSbFpGOW9kRzFzWDNSbGVIUWdLVHRjY2x4dVhIUjlYSEpjYmx4eVhHNWNkR3BSZFdWeWVTZ2dKeU1uSUNzZ2NHRnlZVzF6V3lBblpISnZjR1J2ZDI1ZmFXUW5JRjBnS3lBblgyTnZiblJoYVc1bGNpY2dLUzVvYVdSbEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dRMnh2YzJVZ1pISnZjR1J2ZDI0Z1lXWjBaWElnWTJ4cFkydHBibWNnYjI0Z1EyeHZjMlVnWW5WMGRHOXVYSEpjYmlBcVhISmNiaUFxSUVCd1lYSmhiU0JrY205d1pHOTNibDlwWkZ4MFNVUWdiMllnWkhKdmNHUnZkMjVjY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZkV2xmWkhKdmNHUnZkMjVmWTJ4dmMyVmZZMnhwWTJzb0lHUnliM0JrYjNkdVgybGtJQ2w3WEhKY2JseHlYRzVjZEdwUmRXVnllU2dnSnlNbklDc2daSEp2Y0dSdmQyNWZhV1FnS3lBblgyTnZiblJoYVc1bGNpY2dLUzVvYVdSbEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dVMmx0Y0d4bElHOXdkR2x2YmlCamJHbGpheUJ2YmlCa2NtOXdaRzkzYmx4eVhHNGdLbHh5WEc0Z0tpQkFjR0Z5WVcwZ2NHRnlZVzF6WEhSRmVHRnRjR3hsT2lCN0lDZGtjbTl3Wkc5M2JsOXBaQ2M2SUNkM2FGOWliMjlyYVc1blgyUmhkR1VuTENBbmFYTmZkR2hwYzE5emFXMXdiR1ZmYkdsemRDYzZJSFJ5ZFdVc0lDZDJZV3gxWlNjNklDYzFKeXdnSjE5MGFHbHpKem9nZEdocGN5QjlYSEpjYmlBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgzVnBYMlJ5YjNCa2IzZHVYM05wYlhCc1pWOWpiR2xqYXlnZ2NHRnlZVzF6SUNsN1hISmNibHh5WEc1Y2RHcFJkV1Z5ZVNnZ0p5TW5JQ3NnY0dGeVlXMXpXeUFuWkhKdmNHUnZkMjVmYVdRbklGMGdLeUFuWDNObGJHVmpkRzl5SUM1M2NHSmpYM05sYkdWamRHVmtYMmx1WDJSeWIzQmtiM2R1SnlBcExtaDBiV3dvSUdwUmRXVnllU2dnY0dGeVlXMXpXeUFuWDNSb2FYTW5JRjBnS1M1b2RHMXNLQ2tnS1R0Y2NseHVYSEpjYmx4MGFsRjFaWEo1S0NBbkl5Y2dLeUJ3WVhKaGJYTmJJQ2RrY205d1pHOTNibDlwWkNjZ1hTQXBMblpoYkNnZ1NsTlBUaTV6ZEhKcGJtZHBabmtvSUZ0d1lYSmhiWE5iSUNkMllXeDFaU2NnWFYwZ0tTQXBPMXh5WEc1Y2NseHVYSFJxVVhWbGNua29JQ2NqSnlBcklIQmhjbUZ0YzFzZ0oyUnliM0JrYjNkdVgybGtKeUJkSUNzZ0oxOWpiMjUwWVdsdVpYSWdiR2tnYVc1d2RYUmJkSGx3WlQxamFHVmphMkp2ZUYwc0oxeHlYRzVjZEZ4MElDQXJJQ2NqSnlBcklIQmhjbUZ0YzFzZ0oyUnliM0JrYjNkdVgybGtKeUJkSUNzZ0oxOWpiMjUwWVdsdVpYSWdiR2tnYVc1d2RYUmJkSGx3WlQxeVlXUnBiMTBuSUNrdWNISnZjQ2dnSjJOb1pXTnJaV1FuTENCbVlXeHpaU0FwTzF4eVhHNWNjbHh1WEhScVVYVmxjbmtvSUNjakp5QXJJSEJoY21GdGMxc2dKMlJ5YjNCa2IzZHVYMmxrSnlCZElDa3VkSEpwWjJkbGNpZ2dKMk5vWVc1blpTY2dLVHRjY2x4dVhISmNibHgwYVdZZ0tDQWhJSEJoY21GdGMxc2dKMmx6WDNSb2FYTmZjMmx0Y0d4bFgyeHBjM1FuSUYwZ0tYdGNjbHh1WEhSY2RHcFJkV1Z5ZVNnZ0p5TW5JQ3NnY0dGeVlXMXpXeUFuWkhKdmNHUnZkMjVmYVdRbklGMGdLeUFuWDJOdmJuUmhhVzVsY2ljZ0tTNW9hV1JsS0NrN1hISmNibHgwZlZ4eVhHNTlJbDBzSW1acGJHVWlPaUpwYm1Oc2RXUmxjeTlmZEc5dmJHSmhjbDkxYVM5ZmIzVjBMM1J2YjJ4aVlYSmZkV2t1YW5NaWZRPT1cbiJdLCJuYW1lcyI6WyJ3cGJjX2dldF9zYWZlX2h0bWxfdGV4dCIsInJhd1N0ciIsInJlcGxhY2UiLCJpIiwiY2hhckNvZGVBdCIsIndwYmNfdWlfZHJvcGRvd25fYXBwbHlfY2xpY2siLCJwYXJhbXMiLCJlbmNvZGVkX2h0bWxfdGV4dCIsImZpbHRlcl91aV9kYXRlc19hcnIiLCJqUXVlcnkiLCJwYXJlbnRzIiwiZmluZCIsIm1hcCIsInRoaXMiLCJ2YWwiLCJnZXQiLCJsZW5ndGgiLCJmaWx0ZXJfdWlfdGl0bGVzX2FyciIsInByb3AiLCJ0ZXh0IiwiaW5wdXRfc2VsZWN0ZWQiLCJmaWx0ZXIiLCJuZXh0IiwiaHRtbCIsInVuZGVmaW5lZCIsInByZXYiLCJKU09OIiwic3RyaW5naWZ5IiwidHJpZ2dlciIsImZpbHRlcl91aV9kYXRlc190aXRsZSIsInNoaWZ0Iiwiam9pbiIsImhpZGUiLCJ3cGJjX3VpX2Ryb3Bkb3duX2Nsb3NlX2NsaWNrIiwiZHJvcGRvd25faWQiLCJ3cGJjX3VpX2Ryb3Bkb3duX3NpbXBsZV9jbGljayJdLCJtYXBwaW5ncyI6ImFBV0EsU0FBU0Esd0JBQXdCQyxHQUkvQixPQUhpQkEsRUFBT0MsUUFBUSx1QkFBd0IsU0FBVUMsR0FDaEUsTUFBTyxLQUFPQSxFQUFFQyxXQUFXLEdBQUssTUFXcEMsU0FBU0MsNkJBQTZCQyxHQUVwQyxJQXFDTUMsRUFyQ0ZDLEVBQXNCQyxPQUFPLGVBQWlCSCxFQUE0QixvQkFBSSxjQUFjSSxRQUFRLE1BQU1DLEtBQUssVUFBVUMsSUFBSSxXQUMvSCxPQUFPWix3QkFBd0JTLE9BQU9JLE1BQU1DLFNBQzNDQyxNQUVDLElBQU1QLEVBQW9CUSxTQUd4QkMsRUFBdUJSLE9BQU8sZUFBaUJILEVBQTRCLG9CQUFJLGNBQWNJLFFBQVEsTUFBTUMsS0FBSyxVQUFVQyxJQUFJLFdBQ2hJLEdBQUksUUFBVUgsT0FBT0ksTUFBTUssS0FBSyxRQUM5QixPQUFPVCxPQUFPSSxNQUFNQyxNQUd0QixHQUFJLGNBQWdCTCxPQUFPSSxNQUFNSyxLQUFLLFFBQ3BDLE9BQU9ULE9BQU9JLE1BQU1GLEtBQUssYUFBYVEsT0FHeEMsR0FBSSxTQUFXVixPQUFPSSxNQUFNSyxLQUFLLFNBQVcsWUFBY1QsT0FBT0ksTUFBTUssS0FBSyxRQVU1RSxPQUFPVCxPQUFPSSxNQUFNQyxNQVRsQixJQUFJTSxFQUFpQlgsT0FBT0ksTUFBTVEsT0FBTyxZQUFZQyxLQUFLLDBCQUEwQkMsT0FNcEYsWUFBT0MsS0FITEosRUFERUksTUFBYUosRUFDRVgsT0FBT0ksTUFBTVEsT0FBTyxZQUFZSSxLQUFLLDBCQUEwQkYsT0FHN0RILEdBQWlCQSxFQUFpQixLQUl4REwsTUFFSE4sT0FBTyxJQUFNSCxFQUFvQixhQUFHUSxJQUFJWSxLQUFLQyxVQUFVbkIsSUFFdkRDLE9BQU8sSUFBTUgsRUFBb0IsYUFBR3NCLFFBQVEsVUFFeENDLEVBQXdCcEIsT0FBTyxlQUFpQkgsRUFBNEIsb0JBQUksY0FBY2dCLEtBQUssMEJBQTBCQyxPQUFTLEtBRTFJTixFQUFxQmEsUUFFakJ2QixFQUFvQlAsd0JBQXdCNkIsRUFBd0JaLEVBQXFCYyxLQUFLLFFBQ2xHdEIsT0FBTyxJQUFNSCxFQUFvQixZQUFJLHdDQUF3Q2lCLEtBQUtoQixJQUdwRkUsT0FBTyxJQUFNSCxFQUFvQixZQUFJLGNBQWMwQixPQVNyRCxTQUFTQyw2QkFBNkJDLEdBQ3BDekIsT0FBTyxJQUFNeUIsRUFBYyxjQUFjRixPQVMzQyxTQUFTRyw4QkFBOEI3QixHQUNyQ0csT0FBTyxJQUFNSCxFQUFvQixZQUFJLHdDQUF3Q2lCLEtBQUtkLE9BQU9ILEVBQWMsT0FBR2lCLFFBQzFHZCxPQUFPLElBQU1ILEVBQW9CLGFBQUdRLElBQUlZLEtBQUtDLFVBQVUsQ0FBQ3JCLEVBQWMsU0FDdEVHLE9BQU8sSUFBTUgsRUFBb0IsWUFBSSx1Q0FBOENBLEVBQW9CLFlBQUksbUNBQW1DWSxLQUFLLFdBQVcsR0FDOUpULE9BQU8sSUFBTUgsRUFBb0IsYUFBR3NCLFFBQVEsVUFFdkN0QixFQUE0QixxQkFDL0JHLE9BQU8sSUFBTUgsRUFBb0IsWUFBSSxjQUFjMEIifQ==
includes/_toolbar_ui/_src/toolbar_ui.css ADDED
@@ -0,0 +1,889 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* UI Toolbar *************************************************************************************************/
2
+ /* To Compile file: Alt + F12 and run command: "gulp wpbc" */
3
+
4
+ /* 1. Default Button Style ------------------------------------------------------------------------------------------ */
5
+ .ui_element .wpbc_ui_button{
6
+ display: flex;
7
+ flex-flow: row nowrap;
8
+ justify-content: flex-start;
9
+ align-items: center;
10
+
11
+ text-decoration: none;
12
+ /*font-size: 13px;*/
13
+ /*line-height: 2.15384615; !* 28px *!*/
14
+ /*min-height: 30px;*/
15
+ min-height: 24px;
16
+ margin: 0;
17
+ padding: 0 10px 2px;
18
+ padding-bottom: 1px;
19
+ cursor: pointer;
20
+ /*border-width: 1px; - Defined at Several elements in a Group. Point #2. */
21
+ border-style: solid;
22
+ -webkit-appearance: none;
23
+ /*border-radius: 3px; - Defined at Several elements in a Group. Point #2. */
24
+ white-space: nowrap;
25
+ box-sizing: border-box;
26
+ }
27
+ .ui_element .wpbc_ui_button,
28
+ .ui_element .wpbc_ui_button-secondary {
29
+ color: #555;
30
+ border-color: #d8d8d8;
31
+ background: #f7f7f7;
32
+ vertical-align: top;
33
+ }
34
+ /* :hover ---- */
35
+ .ui_element .wpbc_ui_button.hover:not(.inactive),
36
+ .ui_element .wpbc_ui_button:hover:not(.inactive),
37
+ .ui_element .wpbc_ui_button-secondary:hover:not(.inactive){
38
+ background: #fafafa;
39
+ border-color: #d8d8d8;;
40
+ color: #23282d;
41
+ text-decoration: none;
42
+ }
43
+ .ui_element .wpbc_ui_button.hover.inactive,
44
+ .ui_element .wpbc_ui_button.inactive:hover,
45
+ .ui_element .wpbc_ui_button-secondary.inactive:hover{
46
+ cursor: default;
47
+ }
48
+ /* :focus ---- */
49
+ .ui_element .wpbc_ui_button.focus,
50
+ .ui_element .wpbc_ui_button:focus,
51
+ .ui_element .wpbc_ui_button-secondary:focus {
52
+ background: #fafafa;
53
+ border-color: #d8d8d8;
54
+ color: #23282d;
55
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
56
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
57
+ z-index: 1;
58
+ text-decoration: none;
59
+
60
+ /* Only visible in Windows High Contrast mode */
61
+ outline: 2px solid transparent;
62
+ /* Reset inherited offset from Gutenberg */
63
+ outline-offset: 0;
64
+ }
65
+ /* :active ---- */
66
+ .wpbc_ui_dropdown.open > .wpbc_ui_button:not(.inactive),
67
+ .ui_element .wpbc_ui_button:active:not(.inactive),
68
+ .ui_element .wpbc_ui_button-secondary:active:not(.inactive) {
69
+ background: #f6f7f7;
70
+ border-color: #d8d8d8;
71
+ box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, .3);
72
+ transform: translateY(1px);
73
+ outline: 0;
74
+ text-decoration: none;
75
+ }
76
+ /* :disabled ---- */
77
+ .ui_element .wpbc_ui_button:disabled,
78
+ .ui_element .wpbc_ui_button[disabled],
79
+ .ui_element.disabled .wpbc_ui_button,
80
+ .ui_element .wpbc_ui_button.disabled,
81
+ .ui_element .wpbc_ui_button-secondary[disabled],
82
+ .ui_element .wpbc_ui_button-secondary:disabled,
83
+ .ui_element .wpbc_ui_button-secondary.disabled,
84
+ .ui_element .wpbc_ui_button-disabled {
85
+ color: #a7aaad !important;
86
+ border-color: #dcdcde !important;
87
+ background: #f6f7f7 !important;
88
+ box-shadow: none !important;
89
+ cursor: default;
90
+ transform: none !important;
91
+ }
92
+ /* .active CLASS - pressed button, pressed state e.g. a selected setting */
93
+ .ui_element .wpbc_ui_button.active:not(.inactive),
94
+ .ui_element .wpbc_ui_button.active:hover:not(.inactive) {
95
+ background: #f6f7f7;
96
+ border-color: #d8d8d8;
97
+ box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, .3);
98
+ transform: translateY(1px);
99
+ outline: 0;
100
+ text-decoration: none;
101
+ }
102
+ .ui_element .wpbc_ui_button.active:focus:not(.inactive) {
103
+ border-color: #3582c4;
104
+ box-shadow:inset 0 1px 5px -3px #0a4b78, 0 0 1px 1px rgba(79, 148, 212, 0.1);
105
+ }
106
+
107
+ /* 2. Primary Button Style ----------------------------------------------------------------------------------------- */
108
+ .ui_element .wpbc_ui_button_primary {
109
+ background: #0085ba;
110
+ border-color: #0073aa #006799 #006799;
111
+ color: #fff;
112
+ text-shadow: 0 -1px 1px #006799, 1px 0 1px #006799, 0 1px 1px #006799, -1px 0 1px #006799;
113
+ text-decoration: none;
114
+ box-shadow: 0 1px 0px #f1f1f1;
115
+ /*background: #2271b1;*/
116
+ /*border-color: #2271b1;*/
117
+ /*color: #fff;*/
118
+ /*text-decoration: none;*/
119
+ /*text-shadow: none;*/
120
+ }
121
+ /* :hover, :focus ---- */
122
+ .ui_element .wpbc_ui_button_primary.hover:not(.inactive),
123
+ .ui_element .wpbc_ui_button_primary:hover:not(.inactive),
124
+ .ui_element .wpbc_ui_button_primary.focus:not(.inactive),
125
+ .ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
126
+ /*background: #135e96;*/
127
+ /*border-color: #135e96;*/
128
+ /*color: #fff;*/
129
+ background: #008ec2;
130
+ border-color: #006799;
131
+ color: #fff;
132
+ }
133
+ /* :focus ---- */
134
+ .ui_element .wpbc_ui_button_primary.focus:not(.inactive),
135
+ .ui_element .wpbc_ui_button_primary:focus:not(.inactive) {
136
+ box-shadow:0 0 0 0px #fff, 0 0 2px 1px #a4d7ff;
137
+ }
138
+ /* :active ---- */
139
+ .ui_element .wpbc_ui_button_primary.active:not(.inactive),
140
+ .ui_element .wpbc_ui_button_primary.active:hover:not(.inactive),
141
+ .ui_element .wpbc_ui_button_primary.active:focus:not(.inactive),
142
+ .ui_element .wpbc_ui_button_primary:active:not(.inactive) {
143
+ background: #0c7ca8;
144
+ border-color: #0b79a4;
145
+ box-shadow: inset 0 1px 7px -3px rgba(0, 0, 0, .3);
146
+ color: #fff;
147
+ }
148
+ /* :disabled ---- */
149
+ .ui_element .wpbc_ui_button_primary[disabled],
150
+ .ui_element .wpbc_ui_button_primary:disabled,
151
+ .ui_element .wpbc_ui_button_primary-disabled,
152
+ .ui_element .wpbc_ui_button_primary.disabled {
153
+ color: #a7aaad !important;
154
+ background: #f6f7f7 !important;
155
+ border-color: #dcdcde !important;
156
+ box-shadow: none !important;
157
+ text-shadow: none !important;
158
+ cursor: default;
159
+ }
160
+
161
+ @media (max-width: 782px) {
162
+ .ui_element .in-button-text {
163
+ display: none;
164
+ }
165
+ }
166
+
167
+ /* 3.1 Text --------------------------------------------------------------------------------------------------------- */
168
+ .ui_element .wpbc_ui_text {
169
+ border: 1px solid #d6d6d6;
170
+ flex: 1 1 120px;
171
+ }
172
+ /* :focus ---- */
173
+ .ui_element .wpbc_ui_text.focus,
174
+ .ui_element .wpbc_ui_text:focus {
175
+
176
+ border-color: #2271b1;
177
+ box-shadow: 0 0 0 1px #2271b1;
178
+
179
+ border-color: #d8d8d8;
180
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
181
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
182
+ z-index: 1;
183
+ /* Only visible in Windows High Contrast mode */
184
+ outline: 2px solid transparent;
185
+ }
186
+
187
+ /* 3.2 Select-box ------------------------------------------------------------------------------------------------- */
188
+ .ui_element .wpbc_ui_select {
189
+ border: 1px solid #d6d6d6;
190
+ flex: 1 1 auto;
191
+ }
192
+ /* :focus ---- */
193
+ .ui_element .wpbc_ui_select.focus,
194
+ .ui_element .wpbc_ui_select:focus {
195
+
196
+ border-color: #2271b1;
197
+ box-shadow: 0 0 0 1px #2271b1;
198
+
199
+ border-color: #d8d8d8;
200
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
201
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
202
+ z-index: 1;
203
+ /* Only visible in Windows High Contrast mode */
204
+ outline: 2px solid transparent;
205
+ }
206
+
207
+ /* 3.3 Check-box & Radio ----------------------------------------------------------------------------------------- */
208
+ .ui_element .wpbc_ui_checkbox,
209
+ .ui_element .wpbc_ui_radio {
210
+ border: 1px solid #bcbcbc;
211
+ border-radius: 4px;
212
+ background: #fff;
213
+ color: #50575e;
214
+ clear: none;
215
+ cursor: pointer;
216
+ display: inline-block;
217
+ line-height: 0 !important;
218
+ height: 1rem !important;
219
+ margin: -0.25rem 0.25rem 0 0;
220
+ outline: 0;
221
+ padding: 0 !important;
222
+ text-align: center;
223
+ vertical-align: middle;
224
+ width: 1rem;
225
+ min-width: 1rem;
226
+ -webkit-appearance: none;
227
+ box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
228
+ transition: .05s border-color ease-in-out;
229
+
230
+ margin: 0;
231
+ align-self: center;
232
+ }
233
+ .ui_element .wpbc_ui_radio {
234
+ border-radius: 50%;
235
+ margin-right: 0.25rem;
236
+ line-height: 0.71428571;
237
+ }
238
+ /* :focus ---- */
239
+ .ui_element .wpbc_ui_checkbox.focus,
240
+ .ui_element .wpbc_ui_checkbox:focus,
241
+ .ui_element .wpbc_ui_radio.focus,
242
+ .ui_element .wpbc_ui_radio:focus {
243
+
244
+ border-color: #2271b1;
245
+ box-shadow: 0 0 0 1px #2271b1;
246
+
247
+ border-color: #d8d8d8;
248
+ /*box-shadow: 0 0 0 1px #4f94d4, 0 0 2px 1px rgba(79, 148, 212, 0.8); This is Default: WordPress */
249
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8);
250
+ z-index: 1;
251
+ /* Only visible in Windows High Contrast mode */
252
+ outline: 2px solid transparent !important;
253
+ }
254
+ .ui_element .wpbc_ui_radio + .wpbc_ui_control_label,
255
+ .ui_element .wpbc_ui_checkbox + .wpbc_ui_control_label {
256
+ padding-left: 5px;
257
+ padding-right: 5px;
258
+ }
259
+ @media screen and (max-width: 782px) {
260
+ .ui_element .wpbc_ui_checkbox,
261
+ .ui_element .wpbc_ui_radio {
262
+ height: 1.5625rem !important;
263
+ width: 1.5625rem;
264
+ }
265
+ }
266
+
267
+ /* 3.4. Addon ------------------------------------------------------------------------------------------------------ */
268
+ .ui_element .wpbc_ui_addon {
269
+ flex: 0 1 auto;
270
+ display: flex;
271
+ flex-flow: row wrap;
272
+ justify-content: stretch;
273
+ align-items: center;
274
+ }
275
+
276
+ /* 3.5 Labels ------------------------------------------------------------------------------------------------------ */
277
+ .ui_element label.wpbc_ui_control_label {
278
+ flex: 0 1 auto;
279
+ display: flex;
280
+ flex-flow: row wrap;
281
+ justify-content: flex-start;
282
+ align-items: center;
283
+ padding: 0 5px 2px 0;
284
+ padding-bottom: 1px;
285
+ }
286
+ .ui_element label.wpbc_ui_control_label + .wpbc_ui_control:first-of-type {
287
+ border-top-left-radius: 3px !important;
288
+ border-bottom-left-radius: 3px !important;
289
+ }
290
+
291
+ /**********************************************************************************************************************/
292
+ /* 4. Dropdown List */
293
+ /**********************************************************************************************************************/
294
+ .ui_element .wpbc_ui_dropdown__outside_label{
295
+ flex: 0 1 auto;
296
+ display: flex;
297
+ flex-flow: row nowrap;
298
+ justify-content: flex-start;
299
+ align-items: center;
300
+ padding: 0 10px 2px 0;
301
+ padding-bottom: 1px;
302
+ }
303
+ .ui_element .wpbc_ui_dropdown {
304
+ flex: 0 1 auto;
305
+
306
+ display: flex;
307
+ flex-flow: row nowrap;
308
+ justify-content: flex-start;
309
+ align-items: stretch;
310
+
311
+ position: relative;
312
+ }
313
+ .ui_element .wpbc_ui_dropdown * {
314
+ box-sizing: border-box;
315
+ }
316
+ .ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_label{
317
+ font-weight: 600;
318
+ margin:0;
319
+ padding:0 0.5em 0 0;
320
+ }
321
+ .ui_element .wpbc_ui_dropdown .wpbc_ui_dropdown__inside_caret {
322
+ display: inline-block;
323
+ width: 0;
324
+ height: 0;
325
+ margin-left: 7px;
326
+ vertical-align: middle;
327
+ border-top: 4px dashed;
328
+ border-top: 4px solid \9;
329
+ border-right: 4px solid transparent;
330
+ border-left: 4px solid transparent;
331
+ }
332
+ /* ---------------------------------------------------------------------------------------------------------- */
333
+ /* BORDER RADIUS */
334
+ /* ---------------------------------------------------------------------------------------------------------- */
335
+ .ui_element .wpbc_ui_dropdown:last-child > .wpbc_ui_button:last-of-type {
336
+ border-top-right-radius: 3px;
337
+ border-bottom-right-radius: 3px;
338
+ }
339
+ /* In case, if have several elements in .ui_element (like "button dropdown button"), - make borders not round */
340
+ /* Left border not round */
341
+ .ui_element .wpbc_ui_dropdown:not(:first-child) > .wpbc_ui_button:first-child{
342
+ border-top-left-radius: 0;
343
+ border-bottom-left-radius: 0;
344
+ }
345
+ /* Right border not round */
346
+ .ui_element .wpbc_ui_dropdown:not(:last-child) > .wpbc_ui_button:last-child{
347
+ border-top-right-radius: 0;
348
+ border-bottom-right-radius: 0;
349
+ }
350
+ /* If we have outside label, then we need to make left border round */
351
+ .ui_element .wpbc_ui_dropdown__outside_label + .wpbc_ui_dropdown > .wpbc_ui_button:first-child{
352
+ border-top-left-radius: 3px;
353
+ border-bottom-left-radius: 3px;
354
+ }
355
+ /* ---------------------------------------------------------------------------------------------------------- */
356
+ /* OPTIONS (Drop Down Menu) in Dropdown List */
357
+ /* ---------------------------------------------------------------------------------------------------------- */
358
+ /* Complex OPTION - this option include some INPUT elements --------------- */
359
+ .wpbc_ui_dropdown .ui_dropdown_menu li.ui_complex_option_element{
360
+ display: flex;
361
+ flex-flow: row wrap;
362
+ justify-content: flex-start;
363
+ align-items: center;
364
+
365
+ margin:0;
366
+ padding: 0 15px;
367
+ }
368
+ .wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element {
369
+ flex: 0 1 50%;
370
+
371
+ display: flex;
372
+ flex-flow: row nowrap;
373
+ justify-content: flex-start;
374
+ align-items: center;
375
+
376
+ margin:0;
377
+ padding: 4px 0;
378
+ }
379
+ .wpbc_ui_dropdown ul.ui_dropdown_menu li.ui_complex_option_element .ui_element > * {
380
+ flex: 0 1 auto;
381
+
382
+ margin:0;
383
+ height:auto;
384
+ max-width: 210px;
385
+ }
386
+ /* ---------------------------- General backdrop --------------------------- */
387
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu {
388
+ display: none;
389
+
390
+ position: absolute;
391
+ top: 100%;
392
+ left: 0;
393
+ z-index: 1000;
394
+ float: left;
395
+
396
+ min-width: 160px;
397
+ padding: 5px 0;
398
+ margin: 0;
399
+
400
+ list-style: none;
401
+
402
+ text-align: left;
403
+
404
+ background-color: #ffffff;
405
+ box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);
406
+
407
+ border: 1px solid #cccccc;
408
+ border: 1px solid rgba(0, 0, 0, 0.15);
409
+
410
+ border-radius: 0 0 3px 3px;
411
+ background-clip: padding-box;
412
+ }
413
+ .ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{
414
+ font-size: 13px;
415
+ }
416
+ @media screen and (max-width: 782px) {
417
+ .ui_element .wpbc_ui_dropdown ul.ui_dropdown_menu *{
418
+ font-size: 14px;
419
+ }
420
+ }
421
+ /* ---------------------------- Open --------------------------------------- */
422
+ .ui_element .wpbc_ui_dropdown.open > .ui_dropdown_menu {
423
+ display: block;
424
+ }
425
+ /* ---------------------------- Align: left | right ------------------------ */
426
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu.pull-right,
427
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_right {
428
+ left: auto;
429
+ right: 0;
430
+ }
431
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu.ui_dropdown_menu_left {
432
+ left: 0;
433
+ right: auto;
434
+ }
435
+ /* ---------------------------- Divider ------------------------------------ */
436
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu hr{
437
+ height: 1px;
438
+ margin: 5px 0;
439
+ overflow: hidden;
440
+ background: none;
441
+ border: 0;
442
+ border-top: 1px solid #eeeeee;
443
+ }
444
+ /* ---------------------------- Header ------------------------------------- */
445
+ .wpbc_ui_dropdown .ui_dropdown_menu li.dropdown-header {
446
+ padding:0 15px;
447
+ color: #999;
448
+ font-size: 0.8em;
449
+ font-style: italic;
450
+ font-weight: 600;
451
+ }
452
+ /* ---------------------------- LI ----------------------------------------- */
453
+ .wpbc_ui_dropdown .ui_dropdown_menu li {
454
+ padding:0;
455
+ margin:0;
456
+ }
457
+ /* ---------------------------- A ------------------------------------------ */
458
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu a {
459
+ clear: both;
460
+ display: block;
461
+ font-weight: 400;
462
+ padding: 5px 15px;
463
+ white-space: nowrap;
464
+ /*font-size: 13px;*/
465
+ line-height: 18px;
466
+ }
467
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a {
468
+ color: #333333;
469
+ text-decoration: none;
470
+ font-weight: 400;
471
+ padding:5px 15px;
472
+ white-space: nowrap;
473
+
474
+ display: block;
475
+ clear: both;
476
+
477
+ font-size: 1em;
478
+ line-height: 1.42857143;
479
+ }
480
+ /* ---------------------------- A :hover :focus .active -------------------- */
481
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:hover,
482
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > li > a:focus,
483
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a,
484
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:hover,
485
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .active > a:focus {
486
+ color: #fff;
487
+ background: #08c;
488
+ text-decoration: none;
489
+ outline: none;
490
+ box-shadow: none;
491
+ }
492
+ /* ---------------------------- .disabled A ------------------------------ */
493
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a,
494
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
495
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
496
+ color: #ccc;
497
+ }
498
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:hover,
499
+ .ui_element .wpbc_ui_dropdown .ui_dropdown_menu > .disabled > a:focus {
500
+ text-decoration: none;
501
+ background-color: transparent;
502
+ background-image: none;
503
+ filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
504
+ cursor: not-allowed;
505
+ }
506
+
507
+ .ui_element .wpbc_ui_dropdown .dropdown-backdrop {
508
+ position: fixed;
509
+ left: 0;
510
+ right: 0;
511
+ bottom: 0;
512
+ top: 0;
513
+ z-index: 990;
514
+ }
515
+
516
+ /**********************************************************************************************************************/
517
+
518
+ /* 5. Several elements in a ".ui_element" group -------------------------------------------------------------------- */
519
+ .ui_element .wpbc_ui_control {
520
+ border-radius: 0;
521
+ border-width:1px;
522
+ /*border-right-width:0;*/
523
+ border-right-width:1px;
524
+ margin-right:-1px!important;
525
+ }
526
+ .ui_element .wpbc_ui_control:first-child{
527
+ border-radius: 3px 0 0 3px;
528
+ }
529
+ .ui_element .wpbc_ui_control:last-child {
530
+ border-radius: 0 3px 3px 0;
531
+ border-width:1px;
532
+ }
533
+ .ui_element .wpbc_ui_control:first-child:last-child {
534
+ border-radius: 3px;
535
+ }
536
+
537
+ /**********************************************************************************************************************/
538
+ /** Toolbar */
539
+ /**********************************************************************************************************************/
540
+
541
+ .ui_nowrap {
542
+ flex-wrap:nowrap !important;
543
+ }
544
+
545
+ /* Toolbar --------------------------------------------------------------------------------------------------------- */
546
+ .wpbc_ajx_toolbar {
547
+ position:relative;
548
+ margin: 0 0 10px 50px;
549
+ }
550
+ .wpbc_ajx_toolbar * {
551
+ box-sizing: border-box;
552
+ }
553
+ /* Row of simple buttons somewhere in a page */
554
+ .wpbc_ajx_toolbar.wpbc_buttons_row {
555
+ position: initial;
556
+ margin:0;
557
+ float:left;
558
+
559
+ }
560
+ .wpbc_ajx_toolbar.wpbc_buttons_row .ui_container {
561
+ background: none;
562
+ border: none;
563
+ margin: 0;
564
+ padding: 0;
565
+ }
566
+ /* Container ------------------------------------------------------------------------------------------------------- */
567
+ .wpbc_ajx_toolbar .ui_container{
568
+ display: flex;
569
+ flex-flow: row wrap;
570
+ justify-content: flex-start;
571
+ align-items: stretch;
572
+
573
+ margin: 0;
574
+
575
+ box-shadow: none;
576
+ border: 1px solid #ccc;
577
+ border-top: none;
578
+ background: #f5f5f5;
579
+
580
+ font-size:14px;
581
+ padding: 6px 15px;
582
+ }
583
+ .wpbc_ajx_toolbar .ui_container:last-child{
584
+ border-radius: 0 0 2px 2px;
585
+ }
586
+
587
+ /* Groups in container --------------------------------------------------------------------------------------------- */
588
+ .wpbc_ajx_toolbar .ui_container .ui_group{
589
+ flex: 0 1 auto;
590
+ padding: 0;
591
+
592
+ display: flex;
593
+ flex-flow: row wrap;
594
+ justify-content: flex-start;
595
+ align-items: stretch;
596
+ border:none;
597
+ margin: 0 20px 0 0;
598
+ }
599
+ .wpbc_ajx_toolbar .ui_container .ui_group:last-child {
600
+ margin: 0;
601
+ }
602
+
603
+ /* Elements -------------------------------------------------------------------------------------------------------- */
604
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element {
605
+ display: flex;
606
+ flex-flow: row wrap;
607
+ justify-content: flex-start;
608
+ align-items: stretch;
609
+ flex: 0 1 auto;
610
+ position: relative;
611
+
612
+ margin: 0px 15px 0px 0;
613
+ }
614
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element:last-child {
615
+ margin-right: 0;
616
+ }
617
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
618
+ margin: 5px 0;
619
+ }
620
+
621
+ .ui_elements_divider {
622
+ margin-left: 15px;
623
+ }
624
+ /**********************************************************************************************************************/
625
+ /** Customization */
626
+ /**********************************************************************************************************************/
627
+
628
+ .wpbc_ajx_toolbar .ui_container.ui_container_small *{
629
+ font-size:13px;
630
+ }
631
+ @media (max-width: 782px) {
632
+ .wpbc_ajx_toolbar .ui_container.ui_container_small *{
633
+ font-size:14px;
634
+ }
635
+ }
636
+ /* Elements Height ------------------------------------------------------------------------------------------------- */
637
+ .wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
638
+ height: 38px;
639
+ }
640
+ .wpbc_ajx_toolbar .ui_container.ui_container_small .ui_group .ui_element > * {
641
+ height: 30px;
642
+ }
643
+ @media (max-width: 782px) {
644
+ .wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > *,
645
+ #toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > * {
646
+ height: 38px;
647
+ }
648
+ .wpbc_ajx_toolbar.wpbc_buttons_row .ui_container .ui_group .ui_element > .wpbc_ui_button,
649
+ #toolbar_booking_listing.wpbc_ajx_toolbar .ui_container .ui_group .ui_element > .wpbc_ui_button {
650
+ padding: 0 15px 2px;
651
+ padding-bottom: 1px;
652
+ display: flex;
653
+ flex-flow: row wrap;
654
+ justify-content: center;
655
+ align-items: center;
656
+ }
657
+ }
658
+
659
+ /* Keyword -------------------------------------------------------------------------------------------------------- */
660
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__dates_status {
661
+ margin-right:2.5em;
662
+ }
663
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword {
664
+ flex: 1 1 auto;
665
+ }
666
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element{
667
+ flex: 1 1 auto;
668
+ }
669
+ .wpbc_ajx_toolbar .ui_container .ui_group.ui_group__keyword .ui_element .wpbc_search_field {
670
+ width: 100%;
671
+ }
672
+
673
+ /* 2nd row -------------------------------------------------------------------------------------------------------- */
674
+ .wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 {
675
+ padding: 4px 15px;
676
+ }
677
+ .wpbc_ajx_toolbar .ui_container.ui_container_filter_row_2 .ui_group.ui_group__statuses {
678
+ flex: 1 1 auto;
679
+ }
680
+
681
+
682
+
683
+ /**********************************************************************************************************************/
684
+ /** Booking resources - Chosen
685
+ /**********************************************************************************************************************/
686
+
687
+ /**
688
+ * Choozen Structure
689
+
690
+ <select multiple="MULTIPLE"...
691
+
692
+ div#wh_booking_type_chosen .chzn-container.chzn-container-multi .chzn-with-drop.chzn-container-active (if active)
693
+ ul.chzn-choices
694
+ li.search-choice
695
+ <span>
696
+ a.search-choice-close
697
+
698
+ li.search-field
699
+ input[type="text"].chzn-search-input .default (if no selected values)
700
+
701
+ div.chzn-drop
702
+ ul.chzn-results
703
+ li.result-selected || li.active-result .highlighted (if active)
704
+ */
705
+
706
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
707
+ flex: 1 1 auto;
708
+
709
+ display: flex;
710
+ flex-flow: column wrap;
711
+ justify-content: center;
712
+ align-items: center;
713
+
714
+ height: initial;
715
+ width: auto !important;
716
+ min-width: 10em;
717
+
718
+ margin-right: -1px;
719
+ }
720
+ @media (max-width: 782px) {
721
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi {
722
+ height: initial !important;
723
+ }
724
+ }
725
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices {
726
+ flex: 1 1 auto;
727
+
728
+ display: flex;
729
+ flex-flow: row wrap;
730
+ justify-content: flex-start;
731
+ align-items: center;
732
+ align-content: center;
733
+
734
+ margin: 0;
735
+ padding: 0 0 0 5px;
736
+
737
+ height: auto;
738
+ min-height: 28px !important;
739
+
740
+ border-radius: 3px 0 0 3px;
741
+ }
742
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi.chzn-container-active ul.chzn-choices {
743
+ border-color: #d8d8d8 !important;
744
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
745
+ z-index: 1;
746
+ outline: 2px solid transparent;
747
+ }
748
+
749
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice{
750
+ flex: 0 1 auto;
751
+
752
+ display: flex;
753
+ flex-flow: row nowrap;
754
+ justify-content: flex-start;
755
+ align-items: baseline;
756
+
757
+ margin: 3px 0.5em 3px 0;
758
+ padding: 3px 5px 3px 8px;
759
+ }
760
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice span {
761
+ word-wrap: break-word;
762
+ }
763
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close{
764
+ font-family: "Glyphicons Halflings";
765
+ font-style: normal;
766
+ font-weight: 400;
767
+ font-size: 9px;
768
+
769
+ color: #555;
770
+ text-decoration: none;
771
+
772
+ position: relative;
773
+ top: auto;
774
+ left: auto;
775
+ right: auto;
776
+ bottom: auto;
777
+
778
+ margin: 0 0 0 1em;
779
+
780
+ display: flex;
781
+ flex-flow: column wrap;
782
+ justify-content: center;
783
+ align-content: center;
784
+
785
+ width: auto;
786
+ height: auto;
787
+ }
788
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:before {
789
+ content: "\e014";
790
+ }
791
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-choice a.search-choice-close:hover {
792
+ text-decoration: none;
793
+ }
794
+
795
+
796
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field{
797
+ flex: 0 1 1px;
798
+
799
+ display: flex;
800
+ flex-flow: row wrap;
801
+ justify-content: flex-start;
802
+ align-items: center;
803
+
804
+ margin: 0px 0 0px 0;
805
+ padding: 0;
806
+
807
+ white-space: nowrap;
808
+ }
809
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"].default {
810
+ min-width: 12em;
811
+ }
812
+ .ui_container .ui_group .ui_element .chzn-container.chzn-container-multi ul.chzn-choices li.search-field input[type="text"] {
813
+ font-family: inherit;
814
+ }
815
+
816
+ .ui_container .ui_group .ui_element .chzn-container div.chzn-drop ul.chzn-results li.highlighted {
817
+ color: #fff;
818
+ background: #08c;
819
+ text-decoration: none;
820
+ outline: none;
821
+ box-shadow: none;
822
+ }
823
+
824
+ /*
825
+ #wh_booking_type_chosen {
826
+ width: auto !important;
827
+ display: flex;
828
+ flex-flow: row wrap;
829
+ justify-content: center;
830
+ align-items: stretch;
831
+ flex: 1 1 auto;
832
+ height: initial;
833
+ min-width: 10em;
834
+ }
835
+
836
+ #wh_booking_type_chosen .chzn-choices {
837
+ display: flex;
838
+ flex-flow: row wrap;
839
+ justify-content: stretch;
840
+ align-items: center;
841
+ margin: 0px 0px;
842
+ padding: 0 5px;
843
+ min-height: auto !important;
844
+ flex: 1 1 auto;
845
+ border-radius: 3px 0 0 3px;
846
+ }
847
+
848
+ .chzn-container-multi .chzn-choices .search-choice a.search-choice-close {
849
+ background: none;
850
+ display: inline-block;
851
+ font-family: "Glyphicons Halflings";
852
+ font-style: normal;
853
+ font-weight: 400;
854
+ font-size: 9px;
855
+ line-height: 1;
856
+ position: relative;
857
+ top: 0px;
858
+ left: 15px;
859
+ color: #555;
860
+ text-decoration: none;
861
+ }
862
+ .chzn-container-multi .chzn-choices .search-choice a.search-choice-close:hover {
863
+ text-decoration: none;
864
+ }
865
+ .chzn-container-multi .chzn-choices .search-choice a.search-choice-close:before {
866
+ content: "\e014";
867
+ }
868
+
869
+ #wh_booking_type_chosen .chzn-search-input.default {
870
+ min-width: 12em;
871
+ }
872
+ #wh_booking_type_chosen.chzn-container.chzn-container-multi.chzn-container-active .chzn-choices {
873
+
874
+ border-color: #d8d8d8 !important;
875
+ box-shadow: 0 0 0 0px #4f94d4, 0 0 1px 1px rgba(79, 148, 212, 0.8) !important;
876
+ z-index: 1;
877
+ outline: 2px solid transparent;
878
+ }
879
+ .chzn-container-multi .chzn-choices li.search-field input[type="text"] {
880
+ font-family: inherit;
881
+ }
882
+ .chzn-container .chzn-results li.highlighted {
883
+ color: #fff;
884
+ background: #08c;
885
+ text-decoration: none;
886
+ outline: none;
887
+ box-shadow: none;
888
+ }
889
+ /**/
includes/_toolbar_ui/_src/toolbar_ui.js ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+
3
+
4
+ /**
5
+ * Encode HTML text to safe HTML entities
6
+ *
7
+ * Replace all characters in the given range (unicode 00A0 - 9999, as well as ampersand, greater & less than)
8
+ * with their html entity equivalents, which is simply &#nnn; where nnn is the unicode value we get from charCodeAt
9
+ *
10
+ * @param rawStr
11
+ * @returns {*}
12
+ */
13
+ function wpbc_get_safe_html_text( rawStr ){
14
+
15
+ var encodedStr = rawStr.replace( /[\u00A0-\u9999<>\&]/g, function ( i ){
16
+ return '&#' + i.charCodeAt( 0 ) + ';';
17
+ } );
18
+
19
+ return encodedStr;
20
+ }
21
+
22
+
23
+ /**
24
+ * Change Value and Title of dropdown after clicking on Apply button
25
+ *
26
+ * @param params Example: { 'dropdown_id': 'wh_booking_date', 'dropdown_radio_name': 'ui_wh_booking_date_radio' }
27
+ */
28
+ function wpbc_ui_dropdown_apply_click( params ){
29
+
30
+ // Get input values of all elements in LI section, where RADIO was selected
31
+ var filter_ui_dates_arr = jQuery( 'input[name="' + params[ 'dropdown_radio_name' ] + '"]:checked' )
32
+ .parents( 'li' ).find( ':input' )
33
+ .map( function (){
34
+ return wpbc_get_safe_html_text( jQuery( this ).val() );
35
+ } ).get();
36
+
37
+ if ( 0 !== filter_ui_dates_arr.length ){ // Continue only if radio button was selected, and we are having value
38
+
39
+ // Get titles of all elements in LI section, where RADIO was selected
40
+ var filter_ui_titles_arr = jQuery( 'input[name="' + params[ 'dropdown_radio_name' ] + '"]:checked' )
41
+ .parents( 'li' ).find( ':input' )
42
+ .map( function (){
43
+ if ( 'text' == jQuery( this ).prop( 'type' ) ){
44
+ return jQuery( this ).val();
45
+ }
46
+ if ( 'select-one' == jQuery( this ).prop( 'type' ) ){
47
+ return jQuery( this ).find( ':selected' ).text();
48
+ }
49
+ if (
50
+ ( 'radio' == jQuery( this ).prop( 'type' ) )
51
+ || ( 'checkbox' == jQuery( this ).prop( 'type' ) )
52
+ ){
53
+ var input_selected = jQuery( this ).filter(':checked').next( '.wpbc_ui_control_label' ).html();
54
+ if ( undefined == input_selected ) {
55
+ input_selected = jQuery( this ).filter(':checked').prev( '.wpbc_ui_control_label' ).html();
56
+ }
57
+ return ( undefined !== input_selected ) ? input_selected : '';
58
+ }
59
+
60
+ return jQuery( this ).val();
61
+ } ).get();
62
+
63
+ // Update Value to dropdown input hidden elements. Such value stringify.
64
+ jQuery( '#' + params[ 'dropdown_id' ] ).val( JSON.stringify( filter_ui_dates_arr ) );
65
+
66
+ // Generate change action, for ability to send Ajax request
67
+ jQuery( '#' + params[ 'dropdown_id' ] ).trigger( 'change' );
68
+
69
+ // Get Label of selected Radio button
70
+ var filter_ui_dates_title = jQuery( 'input[name="' + params[ 'dropdown_radio_name' ] + '"]:checked' ).next( '.wpbc_ui_control_label' ).html() + ': ';
71
+
72
+ // Remove selected value of radio button from beginning, we will use Label title instead
73
+ filter_ui_titles_arr.shift();
74
+
75
+ // Update Title in dropdown
76
+ var encoded_html_text = wpbc_get_safe_html_text( filter_ui_dates_title + filter_ui_titles_arr.join( ' - ' ) );
77
+ jQuery( '#' + params[ 'dropdown_id' ] + '_selector .wpbc_selected_in_dropdown' ).html( encoded_html_text );
78
+ }
79
+
80
+ jQuery( '#' + params[ 'dropdown_id' ] + '_container' ).hide();
81
+ }
82
+
83
+
84
+ /**
85
+ * Close dropdown after clicking on Close button
86
+ *
87
+ * @param dropdown_id ID of dropdown
88
+ */
89
+ function wpbc_ui_dropdown_close_click( dropdown_id ){
90
+
91
+ jQuery( '#' + dropdown_id + '_container' ).hide();
92
+ }
93
+
94
+
95
+ /**
96
+ * Simple option click on dropdown
97
+ *
98
+ * @param params Example: { 'dropdown_id': 'wh_booking_date', 'is_this_simple_list': true, 'value': '5', '_this': this }
99
+ */
100
+ function wpbc_ui_dropdown_simple_click( params ){
101
+
102
+ jQuery( '#' + params[ 'dropdown_id' ] + '_selector .wpbc_selected_in_dropdown' ).html( jQuery( params[ '_this' ] ).html() );
103
+
104
+ jQuery( '#' + params[ 'dropdown_id' ] ).val( JSON.stringify( [params[ 'value' ]] ) );
105
+
106
+ jQuery( '#' + params[ 'dropdown_id' ] + '_container li input[type=checkbox],'
107
+ + '#' + params[ 'dropdown_id' ] + '_container li input[type=radio]' ).prop( 'checked', false );
108
+
109
+ jQuery( '#' + params[ 'dropdown_id' ] ).trigger( 'change' );
110
+
111
+ if ( ! params[ 'is_this_simple_list' ] ){
112
+ jQuery( '#' + params[ 'dropdown_id' ] + '_container' ).hide();
113
+ }
114
+ }
includes/_toolbar_ui/toolbar_ui.php ADDED
@@ -0,0 +1,3652 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /**
2
+ * @version 1.1
3
+ * @package Any
4
+ * @category Toolbar. UI Elements for Admin Panel
5
+ * @author wpdevelop
6
+ *
7
+ * @web-site http://oplugins.com/
8
+ * @email info@oplugins.com
9
+ *
10
+ * @modified 2022-05-07
11
+ */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit, if accessed directly
14
+
15
+ ////////////////////////////////////////////////////////////////////////////////
16
+ // T o o l b a r s
17
+ ////////////////////////////////////////////////////////////////////////////////
18
+
19
+ /**
20
+ * Show top toolbar on Booking Listing page
21
+ *
22
+ * @param $escaped_search_request_params - escaped search request parameters array
23
+ */
24
+ function wpbc_ajx_bookings_toolbar( $escaped_search_request_params ) {
25
+
26
+ wpbc_clear_div();
27
+
28
+ //wpbc_toolbar_search_by_id_bookings(); // Search bookings by ID - form at the top right side of the page
29
+
30
+ wpbc_toolbar_btn__view_mode(); // Vertical Buttons
31
+
32
+ // Toolbar ////////////////////////////////////////////////////////////////
33
+
34
+ $default_param_values = wpbc_ajx_get__request_params__names_default( 'default' );
35
+
36
+ $selected_tab = ( isset( $escaped_search_request_params['ui_usr__default_selected_toolbar'] ) )
37
+ ? $escaped_search_request_params['ui_usr__default_selected_toolbar']
38
+ : $default_param_values['ui_usr__default_selected_toolbar'];
39
+
40
+ ?><div id="toolbar_booking_listing" class="wpbc_ajx_toolbar"><?php
41
+
42
+ // <editor-fold defaultstate="collapsed" desc=" T O P T A B s " >
43
+
44
+ wpbc_bs_toolbar_tabs_html_container_start();
45
+
46
+ wpbc_bs_display_tab( array(
47
+ 'title' => '&nbsp;' . __('Filters', 'booking')
48
+ , 'hint' => array( 'title' => __('Filter bookings' ,'booking') , 'position' => 'top' )
49
+ , 'onclick' => "jQuery('.ui_container_toolbar').hide();"
50
+ . "jQuery('.ui_container_filters').show();"
51
+ . "jQuery('.nav-tab').removeClass('nav-tab-active');"
52
+ . "jQuery(this).addClass('nav-tab-active');"
53
+ . "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
54
+ . "jQuery('.nav-tab-active i').addClass('icon-white');"
55
+ /**
56
+ * It will save such changes, and if we have selected bookings, then deselect them
57
+ */
58
+ // . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__default_selected_toolbar': 'filters' });"
59
+ /**
60
+ * It will save changes with NEXT search request, but not immediately
61
+ * it is handy, in case if we have selected bookings,
62
+ * we will not lose selection.
63
+ */
64
+ . "wpbc_ajx_booking_listing.search_set_param( 'ui_usr__default_selected_toolbar', 'filters' );"
65
+ , 'font_icon' => 'wpbc_icn_published_with_changes' //FixIn: 9.0.1.4 'glyphicon glyphicon-random'
66
+ , 'default' => ( $selected_tab == 'filters' ) ? true : false
67
+ ) );
68
+ wpbc_bs_display_tab( array(
69
+ 'title' => __('Actions', 'booking')
70
+ , 'hint' => array( 'title' => __('Manage bookings' ,'booking') , 'position' => 'top' )
71
+ , 'onclick' => "jQuery('.ui_container_toolbar').hide();"
72
+ . "jQuery('.ui_container_actions').show();"
73
+ . "jQuery('.nav-tab').removeClass('nav-tab-active');"
74
+ . "jQuery(this).addClass('nav-tab-active');"
75
+ . "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
76
+ . "jQuery('.nav-tab-active i').addClass('icon-white');"
77
+ /**
78
+ * It will save such changes, and if we have selected bookings, then deselect them
79
+ */
80
+ // . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__default_selected_toolbar': 'actions' });"
81
+ /**
82
+ * It will save changes with NEXT search request, but not immediately
83
+ * it is handy, in case if we have selected bookings,
84
+ * we will not lose selection.
85
+ */
86
+ . "wpbc_ajx_booking_listing.search_set_param( 'ui_usr__default_selected_toolbar', 'actions' );"
87
+ , 'font_icon' => 'wpbc_icn_adjust' //FixIn: 9.0.1.4 'glyphicon glyphicon-fire'
88
+ , 'default' => ( $selected_tab == 'actions' ) ? true : false
89
+
90
+ ) );
91
+
92
+ wpbc_bs_display_tab( array(
93
+ 'title' => ''//__('Options', 'booking')
94
+ , 'hint' => array( 'title' => __('User Options' ,'booking') , 'position' => 'top' )
95
+ , 'onclick' => "jQuery('.ui_container_toolbar').hide();"
96
+ . "jQuery('.ui_container_options').show();"
97
+ . "jQuery('.nav-tab').removeClass('nav-tab-active');"
98
+ . "jQuery(this).addClass('nav-tab-active');"
99
+ . "jQuery('.nav-tab i.icon-white').removeClass('icon-white');"
100
+ . "jQuery('.nav-tab-active i').addClass('icon-white');"
101
+ /**
102
+ * It will save such changes, and if we have selected bookings, then deselect them
103
+ */
104
+ // . "wpbc_ajx_booking_send_search_request_with_params( { 'ui_usr__default_selected_toolbar': 'options' });"
105
+ /**
106
+ * It will save changes with NEXT search request, but not immediately
107
+ * it is handy, in case if we have selected bookings,
108
+ * we will not lose selection.
109
+ */
110
+ . "wpbc_ajx_booking_listing.search_set_param( 'ui_usr__default_selected_toolbar', 'options' );"
111
+ , 'font_icon' => 'wpbc_icn_tune' //FixIn: 9.0.1.4 'glyphicon glyphicon-fire'
112
+ , 'default' => ( $selected_tab == 'options' ) ? true : false
113
+ //, 'position' => 'right'
114
+
115
+ ) );
116
+
117
+ wpbc_bs_dropdown_menu_help();
118
+
119
+ wpbc_bs_toolbar_tabs_html_container_end();
120
+
121
+ // </editor-fold>
122
+
123
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
124
+ // Filters
125
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
126
+ ?><div><?php //Required for bottom border radius in container
127
+
128
+ ?><div class="ui_container ui_container_toolbar ui_container_filters ui_container_filter_row_1" style="<?php echo ( $selected_tab == 'filters' ) ? 'display: flex' : 'display: none' ?>;"><?php
129
+
130
+ ?><div class="ui_group ui_group__dates_status ui_search_fields_group_1"><?php // array( 'class' => 'group_nowrap' ) // Elements at Several or One Line
131
+
132
+ wpbc_ajx__ui__booked_dates( $escaped_search_request_params, $default_param_values );
133
+
134
+ wpbc_ajx__ui__booking_status( $escaped_search_request_params, $default_param_values );
135
+
136
+ ?></div><?php
137
+
138
+ ?><div class="ui_group ui_group__keyword ui_search_fields_group_2"><?php // array( 'class' => 'group_nowrap' ) // Elements at Several or One Line
139
+
140
+ wpbc_ajx_toolbar_keyword_search( $escaped_search_request_params, $default_param_values );
141
+
142
+ wpbc_ajx_toolbar_reset_button( $escaped_search_request_params, $default_param_values );
143
+
144
+ ?></div><?php
145
+
146
+ ?></div><?php
147
+
148
+
149
+ ?><div class="ui_container ui_container_toolbar ui_container_small ui_container_filters ui_container_filter_row_2" style="<?php echo ( $selected_tab == 'filters' ) ? 'display: flex' : 'display: none' ?>;"><?php
150
+
151
+ ?><div class="ui_group ui_group__statuses ui_search_fields_group_1"><?php // array( 'class' => 'group_nowrap' ) // Elements at Several or One Line
152
+
153
+ wpbc_ajx__ui__booking_resources( $escaped_search_request_params, $default_param_values );
154
+
155
+ wpbc_ajx__ui__existing_or_trash( $escaped_search_request_params, $default_param_values );
156
+
157
+ wpbc_ajx__ui__all_or_new( $escaped_search_request_params, $default_param_values );
158
+
159
+ wpbc_ajx__ui__creation_date( $escaped_search_request_params, $default_param_values );
160
+
161
+ wpbc_ajx__ui__payment_status( $escaped_search_request_params, $default_param_values );
162
+
163
+ wpbc_ajx__ui__cost_min_max( $escaped_search_request_params, $default_param_values );
164
+
165
+ wpbc_ajx_toolbar_force_reload_button( $escaped_search_request_params, $default_param_values );
166
+
167
+ ?></div><?php
168
+
169
+ ?></div><?php
170
+
171
+ ?></div><?php //Required for bottom border radius in container
172
+
173
+
174
+ // <editor-fold defaultstate="collapsed" desc=" A c t i o n s t o o l b a r " >
175
+
176
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
177
+ // Actions
178
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
179
+
180
+ ?><div class="ui_container ui_container_toolbar ui_container_small ui_container_actions ui_container_actions_row_1" style="<?php echo ( $selected_tab == 'actions' ) ? 'display: flex' : 'display: none' ?>;"><?php
181
+
182
+ ?><div class="ui_group"><?php
183
+
184
+ // Approve // Pending
185
+ ?><div class="ui_element hide_button_if_no_selection"><?php
186
+ wpbc_ajx__ui__action_button__approve( $escaped_search_request_params );
187
+ wpbc_ajx__ui__action_button__pending( $escaped_search_request_params );
188
+ ?></div><?php
189
+
190
+ // Trash / Reject // Restore // Delete
191
+ ?><div class="ui_element hide_button_if_no_selection"><?php
192
+ wpbc_ajx__ui__action_button__trash( $escaped_search_request_params );
193
+ wpbc_ajx__ui__action_button__restore( $escaped_search_request_params );
194
+ wpbc_ajx__ui__action_button__delete( $escaped_search_request_params );
195
+ wpbc_ajx__ui__action_text__delete_reason( $escaped_search_request_params );
196
+ ?></div><?php
197
+
198
+ // Empty Trash
199
+ ?><div class="ui_element"><?php
200
+ wpbc_ajx__ui__action_button__empty_trash( $escaped_search_request_params );
201
+ ?></div><?php
202
+
203
+ // Read All // Read // Unread
204
+ ?><div class="ui_element"><?php
205
+ wpbc_ajx__ui__action_button__readall( $escaped_search_request_params );
206
+ wpbc_ajx__ui__action_button__read( $escaped_search_request_params );
207
+ wpbc_ajx__ui__action_button__unread( $escaped_search_request_params );
208
+ ?></div><?php
209
+
210
+ // Print
211
+ ?><div class="ui_element"><?php
212
+ wpbc_ajx__ui__action_button__print( $escaped_search_request_params );
213
+ ?></div><?php
214
+
215
+ // Import
216
+ ?><div class="ui_element"><?php
217
+ wpbc_ajx__ui__action_button__import( $escaped_search_request_params );
218
+ ?></div><?php
219
+
220
+ // Export page to CSV // Export all pages to CSV
221
+ ?><div class="ui_element"><?php
222
+ wpbc_ajx__ui__action_button__export_csv( $escaped_search_request_params );
223
+ // wpbc_ajx__ui__action_button__export_csv_page( $escaped_search_request_params );
224
+ // wpbc_ajx__ui__action_button__export_csv_all( $escaped_search_request_params );
225
+ ?></div><?php
226
+
227
+ ?></div><?php
228
+
229
+ ?></div><?php
230
+ // </editor-fold>
231
+
232
+
233
+ // <editor-fold defaultstate="collapsed" desc=" O p t i o n s t o o l b a r " >
234
+
235
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
236
+ // Options
237
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////
238
+
239
+ ?><div class="ui_container ui_container_toolbar ui_container_small ui_container_options ui_container_options_row_1" style="<?php echo ( $selected_tab == 'options' ) ? 'display: flex' : 'display: none' ?>;"><?php
240
+
241
+ ?><div class="ui_group"><?php
242
+
243
+
244
+ // Is send Emails
245
+ ?><div class="ui_element"><?php
246
+ wpbc_ajx__ui__options_checkbox__send_emails( $escaped_search_request_params, $default_param_values );
247
+ ?></div><?php
248
+
249
+ if ( class_exists( 'wpdev_bk_personal' ) ) {
250
+ // Is Expand Notes
251
+ ?><div class="ui_element"><?php
252
+
253
+ wpbc_ajx__ui__options_checkbox__is_expand_remarks( $escaped_search_request_params, $default_param_values );
254
+
255
+ ?></div><?php
256
+ }
257
+
258
+ ?></div><?php
259
+
260
+ ?></div><?php
261
+ // </editor-fold>
262
+
263
+ ?></div><?php
264
+ }
265
+
266
+ /**
267
+ * Sorting
268
+ *
269
+ * @param $escaped_search_request_params - escaped search request parameters array
270
+ * @param $defaults - default parameters values
271
+ */
272
+ function wpbc_ajx__ui__booking_sorting( $escaped_search_request_params, $defaults ){
273
+
274
+ $params_addon = array(
275
+ 'type' => 'span'
276
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
277
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_swap_vert', 'position' => 'right', 'icon_img' => '' )
278
+ , 'class' => 'wpbc_ui_button inactive'
279
+ , 'style' => ''
280
+ , 'attr' => array()
281
+ );
282
+
283
+ $select_options = array (
284
+ 'booking_id__asc' => __( 'ID', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>',
285
+ 'booking_id__desc' => __( 'ID', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>',
286
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
287
+ 'dates__asc' => __( 'Dates', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>',
288
+ 'dates__desc' => __( 'Dates', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>',
289
+ );
290
+ if ( class_exists( 'wpdev_bk_personal' ) ) {
291
+ $select_options['divider2'] = array( 'type' => 'html', 'html' => '<hr/>' );
292
+ $select_options['resource__asc'] = __( 'Resource', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>';
293
+ $select_options['resource__desc'] = __( 'Resource', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>';
294
+
295
+ }
296
+ if ( class_exists( 'wpdev_bk_biz_s' ) ) {
297
+ $select_options['divider3'] = array( 'type' => 'html', 'html' => '<hr/>' );
298
+ $select_options['cost__asc'] = __( 'Cost', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-up-short"></i>';
299
+ $select_options['cost__desc'] = __( 'Cost', 'booking' ) . ' <i class="menu_icon icon-1x wpbc-bi-arrow-down-short"></i>';
300
+ }
301
+
302
+ $params = array(
303
+ 'id' => 'wh_sort'
304
+ , 'default' => isset( $escaped_search_request_params['wh_sort'] ) ? $escaped_search_request_params['wh_sort'] : $defaults['wh_sort']
305
+ , 'label' => ''//__('Sort by', 'booking') . ':'
306
+ , 'title' => __('Sort by', 'booking')
307
+ , 'hint' => array( 'title' => __('Sort bookings by' ,'booking') , 'position' => 'top' )
308
+ , 'li_options' => $select_options
309
+ );
310
+
311
+ ?><div class="wpbc_ajx_toolbar wpbc_buttons_row">
312
+ <div class="ui_container ui_container_small">
313
+ <div class="ui_group">
314
+ <div class="ui_element"><?php
315
+
316
+ //wpbc_flex_addon( $params_addon );
317
+
318
+ wpbc_flex_dropdown( $params );
319
+
320
+ ?></div></div></div></div><?php
321
+ }
322
+
323
+
324
+
325
+ // <editor-fold defaultstate="collapsed" desc=" T o o l b a r F i l t e r B u t t o n s " >
326
+
327
+ ////////////////////////////////////////////////////////////////////////////////
328
+ /// 1st row
329
+ ////////////////////////////////////////////////////////////////////////////////
330
+
331
+ /**
332
+ * Booked dates
333
+ *
334
+ * @param $escaped_search_request_params - escaped search request parameters array
335
+ * @param $defaults - default parameters values
336
+ */
337
+ function wpbc_ajx__ui__booked_dates( $escaped_search_request_params, $defaults ){
338
+
339
+ $params_addon = array(
340
+ 'type' => 'span'
341
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
342
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_event', 'position' => 'right', 'icon_img' => '' )
343
+ , 'class' => 'wpbc_ui_button inactive'
344
+ , 'style' => ''
345
+ , 'hint' => array( 'title' => __('Filter bookings by booking dates' ,'booking') , 'position' => 'top' )
346
+ , 'attr' => array()
347
+ );
348
+
349
+ $dates_interval = array(
350
+ 1 => '1' . ' ' . __('day' ,'booking')
351
+ , 2 => '2' . ' ' . __('days' ,'booking')
352
+ , 3 => '3' . ' ' . __('days' ,'booking')
353
+ , 4 => '4' . ' ' . __('days' ,'booking')
354
+ , 5 => '5' . ' ' . __('days' ,'booking')
355
+ , 6 => '6' . ' ' . __('days' ,'booking')
356
+ , 7 => '1' . ' ' . __('week' ,'booking')
357
+ , 14 => '2' . ' ' . __('weeks' ,'booking')
358
+ , 30 => '1' . ' ' . __('month' ,'booking')
359
+ , 60 => '2' . ' ' . __('months' ,'booking')
360
+ , 90 => '3' . ' ' . __('months' ,'booking')
361
+ , 183 => '6' . ' ' . __('months' ,'booking')
362
+ , 365 => '1' . ' ' . __('Year' ,'booking')
363
+ );
364
+
365
+ $request_input_el_default = array(
366
+ 'wh_booking_date' => isset( $escaped_search_request_params['wh_booking_date'] ) ? $escaped_search_request_params['wh_booking_date'] : $defaults['wh_booking_date'],
367
+ 'ui_wh_booking_date_radio' => isset( $escaped_search_request_params['ui_wh_booking_date_radio'] ) ? $escaped_search_request_params['ui_wh_booking_date_radio'] : $defaults['ui_wh_booking_date_radio'],
368
+ 'ui_wh_booking_date_next' => isset( $escaped_search_request_params['ui_wh_booking_date_next'] ) ? $escaped_search_request_params['ui_wh_booking_date_next'] : $defaults['ui_wh_booking_date_next'],
369
+ 'ui_wh_booking_date_prior' => isset( $escaped_search_request_params['ui_wh_booking_date_prior'] ) ? $escaped_search_request_params['ui_wh_booking_date_prior'] : $defaults['ui_wh_booking_date_prior'],
370
+ 'ui_wh_booking_date_checkin' => isset( $escaped_search_request_params['ui_wh_booking_date_checkin'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkin'] : $defaults['ui_wh_booking_date_checkin'],
371
+ 'ui_wh_booking_date_checkout' => isset( $escaped_search_request_params['ui_wh_booking_date_checkout'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkout'] : $defaults['ui_wh_booking_date_checkout']
372
+ );
373
+
374
+ $options = array (
375
+ // 'header2' => array( 'type' => 'header', 'title' => __( 'Complex Days', 'booking' ) ),
376
+ // 'disabled1' => array( 'type' => 'simple', 'value' => '19', 'title' => __( 'This is option was disabled', 'booking' ), 'disabled' => true ),
377
+
378
+ '0' => __( 'Current dates', 'booking' ),
379
+ '1' => __( 'Today', 'booking' ),
380
+ '2' => __( 'Previous dates', 'booking' ),
381
+ '3' => __( 'All dates', 'booking' ),
382
+
383
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
384
+
385
+ '9' => __( 'Today check in/out', 'booking' ),
386
+ '10' => __( 'Check in - Today', 'booking' ),
387
+ '11' => __( 'Check out - Today', 'booking' ),
388
+ '7' => __( 'Check in - Tomorrow', 'booking' ),
389
+ '8' => __( 'Check out - Tomorrow', 'booking' ),
390
+
391
+ 'divider2' => array( 'type' => 'html', 'html' => '<hr/>' ),
392
+
393
+ // Next [ '4', '10' ] - radio button (if selected) value '4' and select-box with selected value '10'
394
+ 'next' => array(
395
+ 'type' => 'complex',
396
+ 'class' => 'ui_complex_option_element',
397
+ // recheck if LI selected: $options['next']['selected_options_value'] == $params['default], e.g. ~ [ '4', '10' ]
398
+ 'selected_options_value' => array(
399
+ 1 => array( 'value' ), // $options['next']['input_options'][ 1 ]['value'] '4'
400
+ 4 => array( 'value' ) // $options['next']['input_options'][ 4 ]['value'] '10'
401
+ ),
402
+ // Get selected Title, for dropdown if $options['next'] selected
403
+ 'selected_options_title' => array(
404
+ 1 => array( 'label', 'title' ), // $options['next']['input_options'][ 1 ]['label'][ 'title' ] 'Next'
405
+ 'text1' => ': ', // if key 'text1' not exist in ['input_options'], then it text ': '
406
+ 4 => array( 'options', $request_input_el_default['ui_wh_booking_date_next'] ) // '10 days'
407
+ ),
408
+ 'input_options' => array(
409
+ array( 'type' => 'html', 'html' => '<div class="ui_element">' )
410
+ , array( // Default options from simple input element, like: wpbc_flex_radio()
411
+ 'type' => 'radio'
412
+ , 'id' => 'ui_wh_booking_date_radio_1' // HTML ID of element
413
+ , 'name' => 'ui_wh_booking_date_radio'
414
+ , 'label' => array( 'title' => __('Next' ,'booking') , 'position' => 'right' )
415
+ , 'style' => '' // CSS of select element
416
+ , 'class' => '' // CSS Class of select element
417
+ , 'disabled' => false
418
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
419
+ , 'legend' => '' // aria-label parameter
420
+ , 'value' => '4'
421
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '4' ) ? true : false // Selected or not
422
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
423
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
424
+ )
425
+ , array( 'type' => 'html', 'html' => '</div>' )
426
+ , array( 'type' => 'html', 'html' => '<div class="ui_element">' )
427
+ , array(
428
+ 'type' => 'select'
429
+ , 'attr' => array()
430
+ , 'name' => 'ui_wh_booking_date_next'
431
+ , 'id' => 'ui_wh_booking_date_next'
432
+ , 'options' => $dates_interval
433
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_next']
434
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_1').prop('checked', true);" // JavaScript code
435
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
436
+ )
437
+ , array( 'type' => 'html', 'html' => '</div>' )
438
+ )
439
+ ),
440
+
441
+ // Prior [ '5', '10' ]
442
+ 'prior' => array(
443
+ 'type' => 'complex',
444
+ 'class' => 'ui_complex_option_element',
445
+ 'style' => 'min-width: 244px;',
446
+ 'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
447
+ 'selected_options_title' => array( 1 => array( 'label', 'title' )
448
+ , 'text1' => ': '
449
+ , 4 => array( 'options' , $request_input_el_default[ 'ui_wh_booking_date_prior'] )
450
+ ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
451
+ 'input_options' => array(
452
+ array( 'type' => 'html', 'html' => '<div class="ui_element">' )
453
+ , array(
454
+ 'type' => 'radio'
455
+
456
+ , 'id' => 'ui_wh_booking_date_radio_2' // HTML ID of element
457
+ , 'name' => 'ui_wh_booking_date_radio'
458
+ , 'label' => array( 'title' => __('Prior' ,'booking') , 'position' => 'right' )
459
+ , 'style' => '' // CSS of select element
460
+ , 'class' => '' // CSS Class of select element
461
+ , 'disabled' => false
462
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
463
+ , 'legend' => '' // aria-label parameter
464
+ , 'value' => '5' // Some Value from optins array that selected by default
465
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '5' ) ? true : false // Selected or not
466
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
467
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
468
+ )
469
+ , array( 'type' => 'html', 'html' => '</div>' )
470
+ , array( 'type' => 'html', 'html' => '<div class="ui_element">' )
471
+ , array(
472
+ 'type' => 'select'
473
+ , 'attr' => array()
474
+ , 'name' => 'ui_wh_booking_date_prior'
475
+ , 'id' => 'ui_wh_booking_date_prior'
476
+ , 'options' => $dates_interval
477
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_prior']
478
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_2').prop('checked', true);" // JavaScript code
479
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
480
+ )
481
+ , array( 'type' => 'html', 'html' => '</div>' )
482
+ )
483
+ ),
484
+
485
+ // Fixed [ '6', '', '2022-05-21']
486
+ 'fixed' => array(
487
+ 'type' => 'complex',
488
+ 'class' => 'ui_complex_option_element',
489
+ 'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ), 7 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
490
+ 'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ), 'text2' => ' - ' ,7 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
491
+ 'input_options' => array(
492
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
493
+ , array(
494
+ 'type' => 'radio'
495
+
496
+ , 'id' => 'ui_wh_booking_date_radio_3' // HTML ID of element
497
+ , 'name' => 'ui_wh_booking_date_radio'
498
+ , 'label' => array( 'title' => __('Dates' ,'booking') , 'position' => 'right' )
499
+ , 'style' => '' // CSS of select element
500
+ , 'class' => '' // CSS Class of select element
501
+ , 'disabled' => false
502
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
503
+ , 'legend' => '' // aria-label parameter
504
+ , 'value' => '6' // Some Value from optins array that selected by default
505
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '6' ) ? true : false // Selected or not
506
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
507
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
508
+ )
509
+ , array( 'type' => 'html', 'html' => '</div>' )
510
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 4px 4px 0;">' )
511
+ , array(
512
+ 'type' => 'text'
513
+ , 'id' => 'ui_wh_booking_date_checkin' // HTML ID of element
514
+ , 'name' => 'ui_wh_booking_date_checkin'
515
+ , 'label' => ''//__('Check-in' ,'booking')
516
+ , 'style' => 'width:100%;' // CSS of select element
517
+ , 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
518
+ , 'disabled' => false
519
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
520
+ , 'placeholder' => __('Check-in' ,'booking')
521
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkin'] // Some Value from optins array that selected by default
522
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
523
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
524
+ )
525
+ , array( 'type' => 'html', 'html' => '</div>' )
526
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 0 4px 4px;">' )
527
+ , array(
528
+ 'type' => 'text'
529
+ , 'id' => 'ui_wh_booking_date_checkout' // HTML ID of element
530
+ , 'name' => 'ui_wh_booking_date_checkout'
531
+ , 'label' => ''//__('Check-out' ,'booking')
532
+ , 'style' => 'width:100%;' // CSS of select element
533
+ , 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
534
+ , 'disabled' => false
535
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
536
+ , 'placeholder' => __('Check-out' ,'booking')
537
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkout'] // Some Value from optins array that selected by default
538
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
539
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
540
+ )
541
+ , array( 'type' => 'html', 'html' => '</div>' )
542
+ )
543
+ ),
544
+
545
+ 'divider3' => array( 'type' => 'html', 'html' => '<hr/>' ),
546
+
547
+ // Buttons
548
+ 'buttons1' => array(
549
+ 'type' => 'complex',
550
+ 'class' => 'ui_complex_option_element',
551
+ 'style' => 'justify-content: flex-end;',
552
+ 'input_options' => array(
553
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
554
+ , array(
555
+ 'type' => 'button'
556
+ , 'title' => __( 'Apply', 'booking' ) // Title of the button
557
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
558
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
559
+ , 'action' => "wpbc_ui_dropdown_apply_click( {
560
+ 'dropdown_id' : 'wh_booking_date',
561
+ 'dropdown_radio_name': 'ui_wh_booking_date_radio'
562
+ } );" // JavaScript code
563
+ , 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
564
+ , 'icon' => ''
565
+ , 'font_icon' => ''
566
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
567
+ , 'style' => '' // Any CSS class here
568
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
569
+ , 'attr' => array()
570
+ )
571
+ , array( 'type' => 'html', 'html' => '</div>' )
572
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
573
+ , array(
574
+ 'type' => 'button'
575
+ , 'title' => __( 'Close', 'booking' ) // Title of the button
576
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
577
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
578
+ , 'action' => "wpbc_ui_dropdown_close_click( 'wh_booking_date' );" // JavaScript code
579
+ , 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
580
+ , 'icon' => ''
581
+ , 'font_icon' => ''
582
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
583
+ , 'style' => '' // Any CSS class here
584
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
585
+ , 'attr' => array()
586
+ )
587
+ , array( 'type' => 'html', 'html' => '</div>' )
588
+ )
589
+ ),
590
+ );
591
+
592
+ $params = array(
593
+ 'id' => 'wh_booking_date'
594
+ , 'default' => $request_input_el_default[ 'wh_booking_date' ]
595
+ , 'label' => ''//__('Approve 1', 'booking') . ':'
596
+ , 'title' => ''//__('Approve 2', 'booking')
597
+ , 'hint' => array( 'title' => __('Filter bookings by booking dates' ,'booking') , 'position' => 'top' )
598
+ , 'align' => 'left'
599
+ , 'li_options' => $options
600
+ );
601
+
602
+ ?><div class="ui_element ui_nowrap"><?php
603
+
604
+ wpbc_flex_addon( $params_addon );
605
+
606
+ wpbc_flex_dropdown( $params );
607
+
608
+ ?></div><?php
609
+ }
610
+
611
+ /**
612
+ * Approved | Pending | All
613
+ *
614
+ * @param $escaped_search_request_params - escaped search request parameters array
615
+ * @param $defaults - default parameters values
616
+ */
617
+ function wpbc_ajx__ui__booking_status( $escaped_search_request_params, $defaults ){
618
+
619
+ $params_addon = array(
620
+ 'type' => 'span'
621
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
622
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_done_all', 'position' => 'right', 'icon_img' => '' )
623
+ , 'class' => 'wpbc_ui_button inactive'
624
+ , 'style' => ''
625
+ , 'attr' => array()
626
+ );
627
+
628
+ $params = array(
629
+ 'id' => 'wh_approved'
630
+ , 'default' => isset( $escaped_search_request_params['wh_approved'] ) ? $escaped_search_request_params['wh_approved'] : $defaults['wh_approved']
631
+ , 'label' => ''//__('Status', 'booking') . ':'
632
+ , 'title' => __('Status', 'booking')
633
+ , 'hint' => array( 'title' => __('Filter bookings by booking status' ,'booking') , 'position' => 'top' )
634
+ , 'li_options' => array (
635
+ '0' => __( 'Pending', 'booking' ),
636
+ '1' => __( 'Approved', 'booking' ),
637
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
638
+ // 'header1' => array( 'type' => 'header', 'title' => __( 'Default', 'booking' ) ),
639
+ 'any' => array(
640
+ 'type' => 'simple',
641
+ 'value' => '',
642
+ // 'disabled' => true,
643
+ 'title' => __( 'Any', 'booking' )
644
+ ),
645
+ )
646
+ );
647
+
648
+ ?><div class="ui_element ui_nowrap"><?php
649
+
650
+ //wpbc_flex_addon( $params_addon );
651
+
652
+ wpbc_flex_dropdown( $params );
653
+
654
+ ?></div><?php
655
+ }
656
+
657
+ /**
658
+ * Keywords
659
+ *
660
+ * @param $escaped_search_request_params - escaped search request parameters array
661
+ * @param $defaults - default parameters values
662
+ */
663
+ function wpbc_ajx_toolbar_keyword_search( $escaped_search_request_params, $defaults ){
664
+
665
+ $el_id = 'wpbc_search_field';
666
+
667
+ $default_value = '';
668
+
669
+ // Old way of searching booking ID
670
+ if ( ! empty( $_REQUEST['wh_booking_id'] ) ) {
671
+ $wh_booking_id = intval( $_REQUEST['wh_booking_id'] );
672
+ if ( $wh_booking_id > 0 ) {
673
+ $_REQUEST['overwrite'] = 1;
674
+ $_REQUEST['keyword'] = 'id:' . $wh_booking_id;
675
+ }
676
+ }
677
+
678
+ if ( ( ! empty( $_REQUEST['overwrite'] ) ) && ( ! empty( $_REQUEST['keyword'] ) ) ) {
679
+
680
+ // Searching for booking(s) from URL: http://beta/wp-admin/admin.php?page=wpbc&view_mode=vm_booking_listing&keyword=id:2&overwrite=1
681
+
682
+ $default_value = wpbc_sanitize_text( $_REQUEST['keyword'] );
683
+
684
+ ?><script type="text/javascript">
685
+ jQuery( document ).ready( function (){
686
+ // setTimeout( function () {
687
+ // wpbc_ajx_booking_listing.search_set_param( 'wh_booking_type', [0] );
688
+ // }, 950 );
689
+ wpbc_ajx_booking_searching_after_few_seconds( '#<?php echo $el_id; ?>', 1000 ); // Immediate search after 0.5 second
690
+ } );
691
+ </script><?php
692
+ }
693
+
694
+ $params = array(
695
+ 'type' => 'text'
696
+ , 'id' => $el_id
697
+ , 'name' => $el_id
698
+ , 'label' => ''
699
+ , 'disabled' => false
700
+ , 'class' => ''
701
+ , 'style' => ''
702
+ , 'placeholder' => __( 'Enter keyword to search...', 'booking' )
703
+ , 'attr' => array()
704
+ , 'value' => $default_value
705
+ , 'onfocus' => ''
706
+ );
707
+ ?><div class="ui_element"><?php
708
+ wpbc_flex_text( $params );
709
+ ?></div><?php
710
+ }
711
+
712
+ /**
713
+ * Reset button - init default filter options
714
+ *
715
+ * @param $escaped_search_request_params - escaped search request parameters array
716
+ * @param $defaults - default parameters values
717
+ */
718
+ function wpbc_ajx_toolbar_reset_button( $escaped_search_request_params, $defaults ){
719
+
720
+ $params = array(
721
+ 'type' => 'button' ,
722
+ 'title' => '',//__( 'Reset', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
723
+ 'hint' => array( 'title' => __( 'Reset search filter and user options to default values', 'booking' ), 'position' => 'top' ), // Hint
724
+ 'link' => 'javascript:void(0)', // Direct link or skip it
725
+ 'action' => "wpbc_ajx_booking_send_search_request_with_params( {
726
+ 'ui_reset': 'make_reset',
727
+ 'page_num': 1
728
+ } );", // JavaScript
729
+ 'icon' => array(
730
+ 'icon_font' => 'wpbc_icn_settings_backup_restore', //'wpbc_icn_rotate_left',
731
+ 'position' => 'left',
732
+ 'icon_img' => ''
733
+ ),
734
+ 'class' => 'wpbc_ui_button', // '' | 'wpbc_ui_button_primary'
735
+ 'style' => '', // Any CSS class here
736
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
737
+ 'attr' => array()
738
+ );
739
+
740
+ ?><div class="ui_element" style="flex: 0 1 auto;"><?php
741
+ wpbc_flex_button( $params );
742
+ ?></div><?php
743
+ }
744
+
745
+ ////////////////////////////////////////////////////////////////////////////////
746
+ /// 2nd row
747
+ ////////////////////////////////////////////////////////////////////////////////
748
+
749
+ /**
750
+ * Booking resources
751
+ *
752
+ * @param $escaped_search_request_params - escaped search request parameters array
753
+ * @param $defaults - default parameters values
754
+ */
755
+ function wpbc_ajx__ui__booking_resources( $escaped_search_request_params, $defaults ){
756
+
757
+ if ( ! class_exists( 'wpdev_bk_personal' ) ) {
758
+ return false;
759
+ }
760
+
761
+ $params_button = array(
762
+ 'type' => 'button' ,
763
+ 'title' => '',//__( 'Reset', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
764
+ 'hint' => array( 'title' => __( 'Remove all booking resources', 'booking' ), 'position' => 'top' ), // Hint
765
+ 'link' => 'javascript:void(0)', // Direct link or skip it
766
+ 'action' => "remove_all_options_from_choozen('#wh_booking_type');", // JavaScript
767
+ 'icon' => array(
768
+ 'icon_font' => 'wpbc_icn_close',
769
+ 'position' => 'left',
770
+ 'icon_img' => ''
771
+ ),
772
+ 'class' => 'wpbc_ui_button', // '' | 'wpbc_ui_button_primary'
773
+ 'style' => '', // Any CSS class here
774
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
775
+ 'attr' => array( 'id' => 'wpbc_booking_listing_reload_button')
776
+ );
777
+
778
+ /**
779
+ * result = {array} [12]
780
+ 1 = {array} [10]
781
+ booking_type_id = "1"
782
+ title = "Standard"
783
+ users = "3"
784
+ import = null
785
+ export = null
786
+ cost = "25"
787
+ default_form = "owner-custom-form-1"
788
+ prioritet = "2"
789
+ parent = "0"
790
+ visitors = "2"
791
+ 2 = {array} [10]
792
+ booking_type_id = "2"
793
+ title = "Apartment#1" ...
794
+ */
795
+ $resources_sql_arr = wpbc_ajx_get_all_booking_resources_arr();
796
+
797
+ /**
798
+ * $resources_arr = array( linear_resources = {array} [12] single_or_parent = {array} [5] child = {array} [2] )
799
+ *
800
+ $resources_arr = {array} [3]
801
+ linear_resources = {array} [12]
802
+ 1 = {array} [12]
803
+ booking_type_id = "1"
804
+ title = "Standard"
805
+ users = "3"
806
+ import = null
807
+ export = null
808
+ cost = "25"
809
+ default_form = "owner-custom-form-1"
810
+ prioritet = "2"
811
+ parent = "0"
812
+ visitors = "2"
813
+ id = "1"
814
+ count = {int} 5
815
+ 5 = {array} [12]
816
+ booking_type_id = "5"
817
+ title = "Standard-1"
818
+ users = "1"
819
+ import = null
820
+ */
821
+ $resources_arr = wpbc_ajx_arrange_booking_resources_arr( $resources_sql_arr );
822
+ $style = '';
823
+ if ( ! empty( $resources_arr ) ) {
824
+
825
+ $linear_resources_arr = $resources_arr['linear_resources'];
826
+
827
+ $select_box_options = array();
828
+
829
+ if ( count( $linear_resources_arr ) > 1 ) {
830
+
831
+ $resources_id_arr = array();
832
+ foreach ( $linear_resources_arr as $bkr ) {
833
+ $resources_id_arr[] = $bkr['id'];
834
+ }
835
+
836
+ $select_box_options[ /*implode( ',', $resources_id_arr )*/0 ] = array(
837
+ 'title' => __( 'All resources', 'booking' )
838
+ , 'attr' => array( 'title' => '<strong>' . __( 'All resources', 'booking' ) . '</strong>' )
839
+ , 'style' => 'font-weight:600;'
840
+ );
841
+ }
842
+
843
+ foreach ( $linear_resources_arr as $bkr ) {
844
+
845
+ $option_title = apply_bk_filter( 'wpdev_check_for_active_language', $bkr['title'] );
846
+
847
+ if ( isset( $bkr['parent'] ) ) {
848
+ if ( $bkr ['parent'] == 0 ) {
849
+ $option_title = $option_title;
850
+ $style = 'font-weight:600;';
851
+ } else {
852
+ $option_title = '&nbsp;&nbsp;&nbsp;' . $option_title;
853
+ $style = 'font-weight:400;';
854
+ }
855
+ }
856
+ $select_box_options[ $bkr ['id'] ] = array(
857
+ 'title' => $option_title
858
+ , 'attr' => array( 'title' => $option_title )
859
+ , 'style' => $style
860
+ );
861
+ }
862
+ }
863
+
864
+
865
+
866
+ $el_id = 'wh_booking_type';
867
+ $params_select = array(
868
+ 'id' => $el_id // HTML ID of element
869
+ , 'name' => $el_id
870
+ , 'label' => '' // __( 'Next Days', 'booking' ) // Label (optional)
871
+ , 'style' => '' // CSS of select element
872
+ , 'class' => 'chzn-select' // CSS Class of select element
873
+ , 'multiple' => true
874
+ , 'attr' => array( 'data-placeholder' => __( 'Select booking resources', 'booking' ) ) // Any additional attributes, if this radio | checkbox element
875
+ , 'disabled' => false
876
+ , 'disabled_options' => array() // If some options disabled, then it has to list here
877
+ , 'options' => $select_box_options
878
+
879
+ , 'value' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ] // Some Value from options array that selected by default
880
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
881
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
882
+
883
+ );
884
+
885
+ // Booking resources
886
+ ?><div class="ui_element ui_nowrap"><?php
887
+
888
+ wpbc_flex_select( $params_select );
889
+
890
+ wpbc_flex_button( $params_button );
891
+
892
+ ?></div><?php
893
+
894
+ ?><script type="text/javascript">
895
+ function remove_all_options_from_choozen( selectbox_id ){
896
+ jQuery( selectbox_id + ' option' ).prop( 'selected', false ); // Disable selection in the real selectbox
897
+ jQuery( selectbox_id ).trigger( 'chosen:updated' ); // Remove all fields from the Choozen field //FixIn: 8.7.9.9
898
+ jQuery( selectbox_id ).trigger( 'change' );
899
+ }
900
+
901
+ if ( 'function' === typeof( jQuery("#<?php echo $el_id; ?>").chosen ) ) {
902
+
903
+ jQuery( "#<?php echo $el_id; ?>" ).chosen( {no_results_text: "No results matched"} );
904
+
905
+ jQuery("#<?php echo $el_id; ?>").chosen().on('change', function(va){ // Catch any selections in the Choozen
906
+
907
+ if ( jQuery( "#<?php echo $el_id; ?>" ).val() != null ){
908
+ //So we are having aready values
909
+ jQuery.each( jQuery( "#<?php echo $el_id; ?>" ).val(), function ( index, value ){
910
+
911
+ if ( (value.indexOf( ',' ) > 0) || ('0' === value) ){ // Ok we are have array with all booking resources ID
912
+
913
+ // Disable selection in the real selectbox
914
+ jQuery( '#<?php echo $el_id; ?>' + ' option' ).removeAttr( 'selected' );
915
+
916
+ // Select "All resources" option in real selectbox
917
+ jQuery( '#<?php echo $el_id; ?>' + ' option:first-child' ).prop( "selected", true );
918
+
919
+ //Highlight options in chosen, before removing
920
+ jQuery( '#<?php echo $el_id; ?>_chosen li.search-choice:not(:contains(' + '<?php echo html_entity_decode( esc_js( __( 'All resources', 'booking' ) ) ); ?>' + '))' )
921
+ .fadeOut( 350 ).fadeIn( 300 )
922
+ .fadeOut( 350 ).fadeIn( 400 )
923
+ .fadeOut( 350 ).fadeIn( 300 )
924
+ .fadeOut( 350 ).fadeIn( 400 )
925
+ .animate( {opacity: 1}, 4000 ) ;
926
+
927
+ // Update chosen LI choices, relative selected options in selectbox
928
+ var all_resources_timer = setTimeout( function (){
929
+
930
+ jQuery( '#<?php echo $el_id; ?>' ).trigger( 'chosen:updated' ); // Remove all fields from the Choozen field
931
+ }, 2000 );
932
+
933
+ var my_message = '<?php echo html_entity_decode( esc_js( __( 'Please note, its not possible to add new resources, if "All resources" option is selected. Please clear the selection, then add new resources.', 'booking' ) ), ENT_QUOTES ); ?>';
934
+ wpbc_admin_show_message( my_message, 'warning', 10000 );
935
+ }
936
+ } );
937
+ }
938
+ });
939
+
940
+ } else {
941
+ alert( 'WPBC Error. JavaScript library "chosen" was not defined.' );
942
+ }
943
+ </script><?php
944
+ }
945
+
946
+ /**
947
+ * Existing | Trash | Any
948
+ *
949
+ * @param $escaped_search_request_params - escaped search request parameters array
950
+ * @param $defaults - default parameters values
951
+ */
952
+ function wpbc_ajx__ui__existing_or_trash( $escaped_search_request_params, $defaults ){
953
+
954
+ $params_addon = array(
955
+ 'type' => 'span'
956
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
957
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_delete_outline', 'position' => 'right', 'icon_img' => '' )
958
+ , 'class' => 'wpbc_ui_button inactive'
959
+ , 'style' => ''
960
+ , 'attr' => array()
961
+ , 'hint' => array( 'title' => __('Show trashed or existing bookings' ,'booking') , 'position' => 'top' )
962
+ );
963
+
964
+ $el_id = 'wh_trash';
965
+ $params = array(
966
+ 'id' => $el_id
967
+ , 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
968
+ , 'label' => ''
969
+ , 'title' => '' //__('Bookings', 'booking')
970
+ , 'hint' => array( 'title' => __('Show trashed or existing bookings' ,'booking') , 'position' => 'top' )
971
+ , 'li_options' => array(
972
+ '0' => __( 'Existing', 'booking' ),
973
+ 'trash' => __( 'In Trash / Rejected', 'booking' ),
974
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
975
+ 'any' => __( 'Any', 'booking' )
976
+ )
977
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
978
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
979
+ //, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() )[0], 'page_num': 1 } );"
980
+ );
981
+
982
+ ?><div class="ui_element ui_nowrap"><?php
983
+
984
+ wpbc_flex_addon( $params_addon );
985
+
986
+ wpbc_flex_dropdown( $params );
987
+
988
+ ?></div><?php
989
+ }
990
+
991
+ /**
992
+ * All bookings | New bookings | Imported bookings | Plugin bookings
993
+ *
994
+ * @param $escaped_search_request_params - escaped search request parameters array
995
+ * @param $defaults - default parameters values
996
+ */
997
+ function wpbc_ajx__ui__all_or_new( $escaped_search_request_params, $defaults ){
998
+
999
+ $params_addon = array(
1000
+ 'type' => 'span'
1001
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
1002
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_visibility', 'position' => 'right', 'icon_img' => '' )
1003
+ , 'class' => 'wpbc_ui_button inactive'
1004
+ , 'style' => ''
1005
+ , 'attr' => array()
1006
+ , 'hint' => array( 'title' => __('Filter bookings by additional criteria' ,'booking') , 'position' => 'top' )
1007
+ );
1008
+
1009
+ $el_id = 'wh_what_bookings';
1010
+ $params = array(
1011
+ 'id' => $el_id
1012
+ , 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
1013
+ , 'label' => ''
1014
+ , 'title' => '' //__('Show', 'booking')
1015
+ , 'hint' => array( 'title' => __('Filter bookings by additional criteria' ,'booking') , 'position' => 'top' )
1016
+ , 'li_options' => array(
1017
+ 'all' => array(
1018
+ 'type' => 'simple',
1019
+ 'value' => 'any',
1020
+ 'title' => __( 'Any', 'booking' )
1021
+ ),
1022
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
1023
+ 'new' => __( 'New', 'booking' ),
1024
+ 'imported' => __( 'Imported', 'booking' ),
1025
+ 'in_plugin' => __( 'Plugin bookings', 'booking' )
1026
+ )
1027
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1028
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1029
+ //, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() )[0], 'page_num': 1 } );"
1030
+ );
1031
+
1032
+
1033
+ ?><div class="ui_element ui_nowrap"><?php
1034
+
1035
+ wpbc_flex_addon( $params_addon );
1036
+
1037
+ wpbc_flex_dropdown( $params );
1038
+
1039
+ ?></div><?php
1040
+ }
1041
+
1042
+ /**
1043
+ * "Creation Date" of bookings
1044
+ *
1045
+ * @param $escaped_search_request_params - escaped search request parameters array
1046
+ * @param $defaults - default parameters values
1047
+ */
1048
+ function wpbc_ajx__ui__creation_date( $escaped_search_request_params, $defaults ){
1049
+
1050
+ $params_addon = array(
1051
+ 'type' => 'span'
1052
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
1053
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_edit_calendar', 'position' => 'right', 'icon_img' => '' )
1054
+ , 'class' => 'wpbc_ui_button inactive'
1055
+ , 'style' => ''
1056
+ , 'attr' => array()
1057
+ , 'hint' => array( 'title' => __('Filter bookings by creation booking date' ,'booking') , 'position' => 'top' )
1058
+ );
1059
+
1060
+ $dates_interval = array(
1061
+ 1 => '1' . ' ' . __('day' ,'booking')
1062
+ , 2 => '2' . ' ' . __('days' ,'booking')
1063
+ , 3 => '3' . ' ' . __('days' ,'booking')
1064
+ , 4 => '4' . ' ' . __('days' ,'booking')
1065
+ , 5 => '5' . ' ' . __('days' ,'booking')
1066
+ , 6 => '6' . ' ' . __('days' ,'booking')
1067
+ , 7 => '1' . ' ' . __('week' ,'booking')
1068
+ , 14 => '2' . ' ' . __('weeks' ,'booking')
1069
+ , 30 => '1' . ' ' . __('month' ,'booking')
1070
+ , 60 => '2' . ' ' . __('months' ,'booking')
1071
+ , 90 => '3' . ' ' . __('months' ,'booking')
1072
+ , 183 => '6' . ' ' . __('months' ,'booking')
1073
+ , 365 => '1' . ' ' . __('Year' ,'booking')
1074
+ );
1075
+
1076
+ $el_id = 'wh_modification_date';
1077
+
1078
+ $request_input_el_default = array(
1079
+ $el_id => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ],
1080
+ 'ui_wh_modification_date_radio' => isset( $escaped_search_request_params['ui_wh_modification_date_radio'] ) ? $escaped_search_request_params['ui_wh_modification_date_radio'] : $defaults['ui_wh_modification_date_radio'],
1081
+ 'ui_wh_modification_date_prior' => isset( $escaped_search_request_params['ui_wh_modification_date_prior'] ) ? $escaped_search_request_params['ui_wh_modification_date_prior'] : $defaults['ui_wh_modification_date_prior'],
1082
+ 'ui_wh_modification_date_checkin' => isset( $escaped_search_request_params['ui_wh_modification_date_checkin'] ) ? $escaped_search_request_params['ui_wh_modification_date_checkin'] : $defaults['ui_wh_modification_date_checkin'],
1083
+ 'ui_wh_modification_date_checkout' => isset( $escaped_search_request_params['ui_wh_modification_date_checkout'] ) ? $escaped_search_request_params['ui_wh_modification_date_checkout'] : $defaults['ui_wh_modification_date_checkout']
1084
+ );
1085
+
1086
+ $options = array (
1087
+ '1' => __( 'Today', 'booking' ),
1088
+ '3' => __( 'All dates', 'booking' ),
1089
+
1090
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
1091
+
1092
+ // Prior [ '5', '10' ]
1093
+ 'prior' => array(
1094
+ 'type' => 'complex',
1095
+ 'class' => 'ui_complex_option_element',
1096
+ 'style' => 'min-width: 244px;',
1097
+ 'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
1098
+ 'selected_options_title' => array( 1 => array( 'label', 'title' )
1099
+ , 'text1' => ': '
1100
+ , 4 => array( 'options' , $request_input_el_default[ 'ui_wh_modification_date_prior'] )
1101
+ ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
1102
+ 'input_options' => array(
1103
+ array( 'type' => 'html', 'html' => '<div class="ui_element">' )
1104
+ , array(
1105
+ 'type' => 'radio'
1106
+
1107
+ , 'id' => 'ui_wh_modification_date_radio_2' // HTML ID of element
1108
+ , 'name' => 'ui_wh_modification_date_radio'
1109
+ , 'label' => array( 'title' => __('Prior' ,'booking') , 'position' => 'right' )
1110
+ , 'style' => '' // CSS of select element
1111
+ , 'class' => '' // CSS Class of select element
1112
+ , 'disabled' => false
1113
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1114
+ , 'legend' => '' // aria-label parameter
1115
+ , 'value' => '5' // Some Value from optins array that selected by default
1116
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_modification_date_radio' ] == '5' ) ? true : false // Selected or not
1117
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1118
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1119
+ )
1120
+ , array( 'type' => 'html', 'html' => '</div>' )
1121
+ , array( 'type' => 'html', 'html' => '<div class="ui_element">' )
1122
+ , array(
1123
+ 'type' => 'select'
1124
+ , 'attr' => array()
1125
+ , 'name' => 'ui_wh_modification_date_prior'
1126
+ , 'id' => 'ui_wh_modification_date_prior'
1127
+ , 'options' => $dates_interval
1128
+ , 'value' => $request_input_el_default[ 'ui_wh_modification_date_prior']
1129
+ , 'onfocus' => "jQuery('#ui_wh_modification_date_radio_2').prop('checked', true);" // JavaScript code
1130
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1131
+ )
1132
+ , array( 'type' => 'html', 'html' => '</div>' )
1133
+ )
1134
+ ),
1135
+
1136
+ // Fixed [ '6', '', '2022-05-21']
1137
+ 'fixed' => array(
1138
+ 'type' => 'complex',
1139
+ 'class' => 'ui_complex_option_element',
1140
+ 'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ), 7 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
1141
+ 'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ), 'text2' => ' - ' ,7 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
1142
+ 'input_options' => array(
1143
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
1144
+ , array(
1145
+ 'type' => 'radio'
1146
+
1147
+ , 'id' => 'ui_wh_modification_date_radio_3' // HTML ID of element
1148
+ , 'name' => 'ui_wh_modification_date_radio'
1149
+ , 'label' => array( 'title' => __('Dates' ,'booking') , 'position' => 'right' )
1150
+ , 'style' => '' // CSS of select element
1151
+ , 'class' => '' // CSS Class of select element
1152
+ , 'disabled' => false
1153
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1154
+ , 'legend' => '' // aria-label parameter
1155
+ , 'value' => '6' // Some Value from optins array that selected by default
1156
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_modification_date_radio' ] == '6' ) ? true : false // Selected or not
1157
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1158
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1159
+ )
1160
+ , array( 'type' => 'html', 'html' => '</div>' )
1161
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 4px 4px 0;">' )
1162
+ , array(
1163
+ 'type' => 'text'
1164
+ , 'id' => 'ui_wh_modification_date_checkin' // HTML ID of element
1165
+ , 'name' => 'ui_wh_modification_date_checkin'
1166
+ , 'label' => ''//__('Check-in' ,'booking')
1167
+ , 'style' => 'width:100%;' // CSS of select element
1168
+ , 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
1169
+ , 'disabled' => false
1170
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1171
+ , 'placeholder' => __('From' ,'booking') // date( 'Y-m-d' )
1172
+ , 'value' => $request_input_el_default[ 'ui_wh_modification_date_checkin'] // Some Value from optins array that selected by default
1173
+ , 'onfocus' => "jQuery('#ui_wh_modification_date_radio_3').prop('checked', true);" // JavaScript code
1174
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1175
+ )
1176
+ , array( 'type' => 'html', 'html' => '</div>' )
1177
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 0 4px 4px;">' )
1178
+ , array(
1179
+ 'type' => 'text'
1180
+ , 'id' => 'ui_wh_modification_date_checkout' // HTML ID of element
1181
+ , 'name' => 'ui_wh_modification_date_checkout'
1182
+ , 'label' => ''//__('Check-out' ,'booking')
1183
+ , 'style' => 'width:100%;' // CSS of select element
1184
+ , 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
1185
+ , 'disabled' => false
1186
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1187
+ , 'placeholder' => __('To' ,'booking') // date( 'Y-m-d' )
1188
+ , 'value' => $request_input_el_default[ 'ui_wh_modification_date_checkout'] // Some Value from optins array that selected by default
1189
+ , 'onfocus' => "jQuery('#ui_wh_modification_date_radio_3').prop('checked', true);" // JavaScript code
1190
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1191
+ )
1192
+ , array( 'type' => 'html', 'html' => '</div>' )
1193
+ )
1194
+ ),
1195
+
1196
+ 'divider3' => array( 'type' => 'html', 'html' => '<hr/>' ),
1197
+
1198
+ // Buttons
1199
+ 'buttons1' => array(
1200
+ 'type' => 'complex',
1201
+ 'class' => 'ui_complex_option_element',
1202
+ 'style' => 'justify-content: flex-end;',
1203
+ 'input_options' => array(
1204
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
1205
+ , array(
1206
+ 'type' => 'button'
1207
+ , 'title' => __( 'Apply', 'booking' ) // Title of the button
1208
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
1209
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
1210
+ , 'action' => "wpbc_ui_dropdown_apply_click( {
1211
+ 'dropdown_id' : 'wh_modification_date',
1212
+ 'dropdown_radio_name': 'ui_wh_modification_date_radio'
1213
+ } );" // JavaScript code
1214
+ , 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
1215
+ , 'icon' => ''
1216
+ , 'font_icon' => ''
1217
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
1218
+ , 'style' => '' // Any CSS class here
1219
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
1220
+ , 'attr' => array()
1221
+ )
1222
+ , array( 'type' => 'html', 'html' => '</div>' )
1223
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
1224
+ , array(
1225
+ 'type' => 'button'
1226
+ , 'title' => __( 'Close', 'booking' ) // Title of the button
1227
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
1228
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
1229
+ , 'action' => "wpbc_ui_dropdown_close_click( 'wh_modification_date' );" // JavaScript code
1230
+ , 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
1231
+ , 'icon' => ''
1232
+ , 'font_icon' => ''
1233
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
1234
+ , 'style' => '' // Any CSS class here
1235
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
1236
+ , 'attr' => array()
1237
+ )
1238
+ , array( 'type' => 'html', 'html' => '</div>' )
1239
+ )
1240
+ ),
1241
+ );
1242
+
1243
+ $params = array(
1244
+ 'id' => $el_id
1245
+ , 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
1246
+ , 'label' => ''
1247
+ , 'title' => ''//__('Creation', 'booking')
1248
+ , 'hint' => array( 'title' => __('Filter bookings by creation booking date' ,'booking') , 'position' => 'top' )
1249
+ , 'li_options' => $options
1250
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1251
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1252
+ //, 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() ), 'page_num': 1 "
1253
+ // // Frontend selected elements (saving for future use, after F5)
1254
+ // . " ,'ui_wh_modification_date_radio' : jQuery( 'input[name=\"ui_wh_modification_date_radio\"]:checked' ).val()"
1255
+ // . " ,'ui_wh_modification_date_prior' : jQuery( '#ui_wh_modification_date_prior' ).val()"
1256
+ // . " ,'ui_wh_modification_date_checkin' : jQuery( '#ui_wh_modification_date_checkin' ).val()"
1257
+ // . " ,'ui_wh_modification_date_checkout': jQuery( '#ui_wh_modification_date_checkout' ).val()"
1258
+ // ."} );"
1259
+ );
1260
+
1261
+ ?><div class="ui_element ui_nowrap"><?php
1262
+
1263
+ wpbc_flex_addon( $params_addon );
1264
+
1265
+ wpbc_flex_dropdown( $params );
1266
+
1267
+ ?></div><?php
1268
+ }
1269
+
1270
+ /**
1271
+ * Payment Status
1272
+ *
1273
+ * @param $escaped_search_request_params - escaped search request parameters array
1274
+ * @param $defaults - default parameters values
1275
+ */
1276
+ function wpbc_ajx__ui__payment_status( $escaped_search_request_params, $defaults ){
1277
+
1278
+ if ( ! class_exists( 'wpdev_bk_biz_s' ) ) {
1279
+ return false;
1280
+ }
1281
+
1282
+ $params_addon = array(
1283
+ 'type' => 'span'
1284
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
1285
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_payments', 'position' => 'right', 'icon_img' => '' )
1286
+ , 'class' => 'wpbc_ui_button inactive'
1287
+ , 'style' => ''
1288
+ , 'attr' => array()
1289
+ , 'hint' => array( 'title' => __('Filter bookings by payment status' ,'booking') , 'position' => 'top' )
1290
+ );
1291
+
1292
+ $el_id = 'wh_pay_status';
1293
+
1294
+ $request_input_el_default = array(
1295
+ $el_id => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ],
1296
+ 'ui_wh_pay_status_radio' => isset( $escaped_search_request_params['ui_wh_pay_status_radio'] ) ? $escaped_search_request_params['ui_wh_pay_status_radio'] : $defaults['ui_wh_pay_status_radio'],
1297
+ 'ui_wh_pay_status_custom' => isset( $escaped_search_request_params['ui_wh_pay_status_custom'] ) ? $escaped_search_request_params['ui_wh_pay_status_custom'] : $defaults['ui_wh_pay_status_custom']
1298
+ );
1299
+
1300
+ $options = array (
1301
+ 'all' => __( 'Any Status', 'booking' ),
1302
+ 'divider0' => array( 'type' => 'html', 'html' => '<hr/>' ),
1303
+ 'group_ok' => __( 'Paid OK', 'booking' ),
1304
+ 'group_unknown' => __( 'Unknown Status', 'booking' ),
1305
+ 'group_pending' => __( 'Not Completed', 'booking' ),
1306
+ 'group_failed' => __( 'Failed', 'booking' ),
1307
+
1308
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
1309
+
1310
+ // Fixed [ '6', '', '2022-05-21']
1311
+ 'custom' => array(
1312
+ 'type' => 'complex',
1313
+ 'class' => 'ui_complex_option_element',
1314
+ 'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
1315
+ 'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
1316
+ 'input_options' => array(
1317
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
1318
+ , array(
1319
+ 'type' => 'radio'
1320
+
1321
+ , 'id' => 'ui_wh_pay_status_radio_1' // HTML ID of element
1322
+ , 'name' => 'ui_wh_pay_status_radio'
1323
+ , 'label' => array( 'title' => __('Custom' ,'booking') , 'position' => 'right' )
1324
+ , 'style' => '' // CSS of select element
1325
+ , 'class' => '' // CSS Class of select element
1326
+ , 'disabled' => false
1327
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1328
+ , 'legend' => '' // aria-label parameter
1329
+ , 'value' => 'user_entered' // Some Value from optins array that selected by default
1330
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_pay_status_radio' ] == 'user_entered' ) ? true : false // Selected or not
1331
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1332
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1333
+ )
1334
+ , array( 'type' => 'html', 'html' => '</div>' )
1335
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;">' )
1336
+ , array(
1337
+ 'type' => 'text'
1338
+ , 'id' => 'ui_wh_pay_status_custom' // HTML ID of element
1339
+ , 'name' => 'ui_wh_pay_status_custom'
1340
+ , 'label' => ''//__('Check-out' ,'booking')
1341
+ , 'style' => 'max-width:100%;width:100%;' // CSS of select element
1342
+ , 'class' => '' // CSS Class of select element
1343
+ , 'disabled' => false
1344
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1345
+ , 'placeholder' => __('Payment status' ,'booking') // date( 'Y-m-d' )
1346
+ , 'value' => $request_input_el_default[ 'ui_wh_pay_status_custom'] // Some Value from optins array that selected by default
1347
+ , 'onfocus' => "jQuery('#ui_wh_pay_status_radio_1').prop('checked', true);" // JavaScript code
1348
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
1349
+ )
1350
+ , array( 'type' => 'html', 'html' => '</div>' )
1351
+ )
1352
+ ),
1353
+
1354
+
1355
+ // Buttons
1356
+ 'buttons1' => array(
1357
+ 'type' => 'complex',
1358
+ 'class' => 'ui_complex_option_element',
1359
+ 'style' => 'justify-content: flex-end;',
1360
+ 'input_options' => array(
1361
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
1362
+ , array(
1363
+ 'type' => 'button'
1364
+ , 'title' => __( 'Apply', 'booking' ) // Title of the button
1365
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
1366
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
1367
+ , 'action' => "wpbc_ui_dropdown_apply_click( {
1368
+ 'dropdown_id' : 'wh_pay_status',
1369
+ 'dropdown_radio_name': 'ui_wh_pay_status_radio'
1370
+ } );" // JavaScript code
1371
+ , 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
1372
+ , 'icon' => ''
1373
+ , 'font_icon' => ''
1374
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
1375
+ , 'style' => '' // Any CSS class here
1376
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
1377
+ , 'attr' => array()
1378
+ )
1379
+ , array( 'type' => 'html', 'html' => '</div>' )
1380
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
1381
+ , array(
1382
+ 'type' => 'button'
1383
+ , 'title' => __( 'Close', 'booking' ) // Title of the button
1384
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
1385
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
1386
+ , 'action' => "wpbc_ui_dropdown_close_click( 'wh_pay_status' );" // JavaScript code
1387
+ , 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
1388
+ , 'icon' => ''
1389
+ , 'font_icon' => ''
1390
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
1391
+ , 'style' => '' // Any CSS class here
1392
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
1393
+ , 'attr' => array()
1394
+ )
1395
+ , array( 'type' => 'html', 'html' => '</div>' )
1396
+ )
1397
+ ),
1398
+ );
1399
+
1400
+ $params = array(
1401
+ 'id' => $el_id
1402
+ , 'default' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
1403
+ , 'label' => ''
1404
+ , 'title' => ''//__('Payment', 'booking')
1405
+ , 'hint' => array( 'title' => __('Filter bookings by payment status' ,'booking') , 'position' => 'top' )
1406
+ , 'li_options' => $options
1407
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( '#{$el_id}' ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1408
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1409
+ ///*, 'onchange' =>*/. "wpbc_ajx_booking_send_search_request_with_params( { '{$el_id}': JSON.parse( jQuery( this ).val() ), 'page_num': 1 "
1410
+ // // Frontend selected elements (saving for future use, after F5)
1411
+ // . " ,'ui_wh_pay_status_radio' : ( undefined === jQuery( 'input[name=\"ui_wh_pay_status_radio\"]:checked' ).val() ) ? '' : jQuery( 'input[name=\"ui_wh_pay_status_radio\"]:checked' ).val()"
1412
+ // . " ,'ui_wh_pay_status_custom' : jQuery( '#ui_wh_pay_status_custom' ).val()"
1413
+ // ."} );"
1414
+ );
1415
+
1416
+
1417
+ ?><div class="ui_element ui_nowrap"><?php
1418
+
1419
+ wpbc_flex_addon( $params_addon );
1420
+
1421
+ wpbc_flex_dropdown( $params );
1422
+
1423
+ ?></div><?php
1424
+ }
1425
+
1426
+ /**
1427
+ * Costs Min - Max
1428
+ *
1429
+ * @param $escaped_search_request_params - escaped search request parameters array
1430
+ * @param $defaults - default parameters values
1431
+ */
1432
+ function wpbc_ajx__ui__cost_min_max( $escaped_search_request_params, $defaults ){
1433
+
1434
+ if ( ! class_exists( 'wpdev_bk_biz_s' ) ) {
1435
+ return false;
1436
+ }
1437
+
1438
+ $el_id = 'wh_cost';
1439
+
1440
+ $params = array(
1441
+ 'id' => $el_id // HTML ID of element
1442
+ , 'name' => $el_id
1443
+ , 'label' => '<span class="" style="font-weight:600;">' . __( 'Cost', 'booking' ) . ' <em style="color:#888;">(' . __( 'min-max', 'booking' ) . '):</em></span>'
1444
+ , 'style' => 'max-width: 69px;' // CSS of select element
1445
+ , 'class' => '' // CSS Class of select element
1446
+ , 'disabled' => false
1447
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1448
+ , 'placeholder' => '0'
1449
+ , 'value' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
1450
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1451
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1452
+ );
1453
+ ?><div class="ui_element" style="margin-right: 5px;"><?php
1454
+
1455
+ wpbc_flex_text( $params );
1456
+
1457
+ ?></div><?php
1458
+
1459
+
1460
+ $el_id = 'wh_cost2';
1461
+
1462
+ $params = array(
1463
+ 'id' => $el_id // HTML ID of element
1464
+ , 'name' => $el_id
1465
+ , 'label' => '<span class="" style="font-weight:600;"> &dash; </span>'
1466
+ , 'style' => 'max-width: 69px;' // CSS of select element
1467
+ , 'class' => '' // CSS Class of select element
1468
+ , 'disabled' => false
1469
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
1470
+ , 'placeholder' => '10000'
1471
+ , 'value' => isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ]
1472
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1473
+ //, 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
1474
+ );
1475
+ ?><div class="ui_element"><?php
1476
+
1477
+ wpbc_flex_text( $params );
1478
+
1479
+ ?></div><?php
1480
+
1481
+ }
1482
+
1483
+ /**
1484
+ * Reload button - force loading of ajax data
1485
+ *
1486
+ * @param $escaped_search_request_params - escaped search request parameters array
1487
+ * @param $defaults - default parameters values
1488
+ */
1489
+ function wpbc_ajx_toolbar_force_reload_button( $escaped_search_request_params, $defaults ){
1490
+
1491
+ $params = array(
1492
+ 'type' => 'button' ,
1493
+ 'title' => '',//__( 'Reset', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1494
+ 'hint' => array( 'title' => __( 'Reload bookings listing', 'booking' ), 'position' => 'top' ), // Hint
1495
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1496
+ 'action' => "wpbc_ajx_booking_send_search_request_with_params( { } );", // Some JavaScript
1497
+ 'icon' => array(
1498
+ 'icon_font' => 'wpbc_icn_rotate_right wpbc_spin', //'wpbc_icn_rotate_left',
1499
+ 'position' => 'left',
1500
+ 'icon_img' => ''
1501
+ ),
1502
+ 'class' => 'wpbc_ui_button wpbc_ui_button_primary', // '' | 'wpbc_ui_button_primary'
1503
+ 'style' => '', // Any CSS class here
1504
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
1505
+ 'attr' => array( 'id' => 'wpbc_booking_listing_reload_button')
1506
+ );
1507
+
1508
+ ?><div class="ui_element" style="margin-left: auto;"><?php
1509
+ wpbc_flex_button( $params );
1510
+ ?></div><?php
1511
+ }
1512
+
1513
+ // </editor-fold>
1514
+
1515
+
1516
+ // <editor-fold defaultstate="collapsed" desc=" T o o l b a r A c t i o n B u t t o n s " >
1517
+
1518
+ ////////////////////////////////////////////////////////////////////////////////
1519
+ // T o o l b a r A C T I O N S UI elements
1520
+ ////////////////////////////////////////////////////////////////////////////////
1521
+
1522
+ function wpbc_ajx__ui__action_button__approve( $escaped_search_request_params ){
1523
+
1524
+ $booking_action = 'set_booking_approved';
1525
+
1526
+ $el_id = 'ui_btn_' . $booking_action;
1527
+
1528
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1529
+ return false;
1530
+ }
1531
+
1532
+ $params = array(
1533
+ 'type' => 'button' ,
1534
+ 'title' => __( 'Approve', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1535
+ 'hint' => array( 'title' => __( 'Approve selected bookings', 'booking' ), 'position' => 'top' ), // Hint
1536
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1537
+ 'action' => "wpbc_ajx_booking_ajax_action_request( {
1538
+ 'booking_action' : '{$booking_action}',
1539
+ 'booking_id' : wpbc_get_selected_row_id(),
1540
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1541
+ 'ui_clicked_element_id': '{$el_id}'
1542
+ } );
1543
+ wpbc_button_enable_loading_icon( this ); " ,
1544
+ 'icon' => array(
1545
+ 'icon_font' => 'wpbc_icn_check_circle_outline',
1546
+ 'position' => 'right',
1547
+ 'icon_img' => ''
1548
+ ),
1549
+ 'class' => 'wpbc_ui_button_primary hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
1550
+ 'style' => '', // Any CSS class here
1551
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
1552
+ 'attr' => array( 'id' => $el_id )
1553
+ );
1554
+
1555
+ wpbc_flex_button( $params );
1556
+ }
1557
+
1558
+ function wpbc_ajx__ui__action_button__pending( $escaped_search_request_params ){
1559
+
1560
+ $booking_action = 'set_booking_pending';
1561
+
1562
+ $el_id = 'ui_btn_' . $booking_action;
1563
+
1564
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1565
+ return false;
1566
+ }
1567
+
1568
+ $params = array(
1569
+ 'type' => 'button' ,
1570
+ 'title' => __( 'Pending', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1571
+ 'hint' => array( 'title' => __( 'Set selected bookings as pending', 'booking' ), 'position' => 'top' ), // Hint
1572
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1573
+ 'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to set booking as pending ?', 'booking' ) ) . "') ) {
1574
+ wpbc_ajx_booking_ajax_action_request( {
1575
+ 'booking_action' : '{$booking_action}',
1576
+ 'booking_id' : wpbc_get_selected_row_id(),
1577
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1578
+ 'ui_clicked_element_id': '{$el_id}'
1579
+ } );
1580
+ wpbc_button_enable_loading_icon( this );
1581
+ }" ,
1582
+ 'icon' => array(
1583
+ 'icon_font' => 'wpbc_icn_block',
1584
+ 'position' => 'right',
1585
+ 'icon_img' => ''
1586
+ ),
1587
+ 'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
1588
+ 'style' => '', // Any CSS class here
1589
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
1590
+ 'attr' => array( 'id' => $el_id )
1591
+ );
1592
+
1593
+ wpbc_flex_button( $params );
1594
+ }
1595
+
1596
+ function wpbc_ajx__ui__action_button__trash( $escaped_search_request_params ){
1597
+
1598
+ $booking_action = 'move_booking_to_trash';
1599
+
1600
+ $el_id = 'ui_btn_' . $booking_action;
1601
+
1602
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1603
+ return false;
1604
+ }
1605
+
1606
+ $params = array(
1607
+ 'type' => 'button' ,
1608
+ 'title' => __( 'Trash / Reject', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1609
+ 'hint' => array( 'title' => __( 'Reject booking - move selected bookings to trash', 'booking' ), 'position' => 'top' ), // Hint
1610
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1611
+ 'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to do this ?', 'booking' ) ) . "') ) {
1612
+ wpbc_ajx_booking_ajax_action_request( {
1613
+ 'booking_action' : '{$booking_action}',
1614
+ 'booking_id' : wpbc_get_selected_row_id(),
1615
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1616
+ 'ui_clicked_element_id': '{$el_id}'
1617
+ } );
1618
+ wpbc_button_enable_loading_icon( this );
1619
+ }" ,
1620
+ 'icon' => array(
1621
+ 'icon_font' => 'wpbc_icn_delete_outline',
1622
+ 'position' => 'right',
1623
+ 'icon_img' => ''
1624
+ ),
1625
+ 'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
1626
+ 'style' => '', // Any CSS class here
1627
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
1628
+ 'attr' => array( 'id' => $el_id )
1629
+ );
1630
+
1631
+ wpbc_flex_button( $params );
1632
+ }
1633
+
1634
+ function wpbc_ajx__ui__action_button__restore( $escaped_search_request_params ){
1635
+
1636
+ $booking_action = 'restore_booking_from_trash';
1637
+
1638
+ $el_id = 'ui_btn_' . $booking_action;
1639
+
1640
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1641
+ return false;
1642
+ }
1643
+
1644
+ $params = array(
1645
+ 'type' => 'button' ,
1646
+ 'title' => __( 'Restore', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1647
+ 'hint' => array( 'title' => __( 'Restore selected bookings', 'booking' ), 'position' => 'top' ), // Hint
1648
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1649
+ 'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to do this ?', 'booking' ) ) . "') ) {
1650
+ wpbc_ajx_booking_ajax_action_request( {
1651
+ 'booking_action' : '{$booking_action}',
1652
+ 'booking_id' : wpbc_get_selected_row_id(),
1653
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1654
+ 'ui_clicked_element_id': '{$el_id}'
1655
+ } );
1656
+ wpbc_button_enable_loading_icon( this );
1657
+ }" ,
1658
+ 'icon' => array(
1659
+ 'icon_font' => 'wpbc_icn_rotate_left',
1660
+ 'position' => 'right',
1661
+ 'icon_img' => ''
1662
+ ),
1663
+ 'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
1664
+ 'style' => '', // Any CSS class here
1665
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
1666
+ 'attr' => array( 'id' => $el_id )
1667
+ );
1668
+
1669
+ wpbc_flex_button( $params );
1670
+ }
1671
+
1672
+ function wpbc_ajx__ui__action_button__delete( $escaped_search_request_params ){
1673
+
1674
+ $booking_action = 'delete_booking_completely';
1675
+
1676
+ $el_id = 'ui_btn_' . $booking_action;
1677
+
1678
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1679
+ return false;
1680
+ }
1681
+
1682
+ $params = array(
1683
+ 'type' => 'button' ,
1684
+ 'title' => __( 'Delete', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1685
+ 'hint' => array( 'title' => __( 'Delete selected bookings', 'booking' ), 'position' => 'top' ), // Hint
1686
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1687
+ 'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to delete selected booking(s) ?', 'booking' ) ) . "') ) {
1688
+ wpbc_ajx_booking_ajax_action_request( {
1689
+ 'booking_action' : '{$booking_action}',
1690
+ 'booking_id' : wpbc_get_selected_row_id(),
1691
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1692
+ 'ui_clicked_element_id': '{$el_id}'
1693
+ } );
1694
+ wpbc_button_enable_loading_icon( this );
1695
+ }" ,
1696
+ 'icon' => array(
1697
+ 'icon_font' => 'wpbc_icn_close',
1698
+ 'position' => 'right',
1699
+ 'icon_img' => ''
1700
+ ),
1701
+ 'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
1702
+ 'style' => '', // Any CSS class here
1703
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
1704
+ 'attr' => array( 'id' => $el_id )
1705
+ );
1706
+
1707
+ wpbc_flex_button( $params );
1708
+ }
1709
+
1710
+ function wpbc_ajx__ui__action_text__delete_reason( $escaped_search_request_params ){
1711
+
1712
+ $params = array(
1713
+ 'type' => 'text'
1714
+ , 'id' => 'reason_of_action'
1715
+ , 'name' => 'reason_of_action'
1716
+ , 'label' => ''
1717
+ , 'disabled' => false
1718
+ , 'class' => 'hide_button_if_no_selection'
1719
+ , 'style' => ''
1720
+ , 'placeholder' => __( 'Reason of action', 'booking' )
1721
+ , 'attr' => array()
1722
+ , 'value' => ''
1723
+ , 'onfocus' => ''
1724
+ );
1725
+ wpbc_flex_text( $params );
1726
+ }
1727
+
1728
+ function wpbc_ajx__ui__action_button__readall( $escaped_search_request_params ){
1729
+
1730
+ $booking_action = 'set_booking_as_read';
1731
+
1732
+ $el_id = 'ui_btn_all_' . $booking_action;
1733
+
1734
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1735
+ return false;
1736
+ }
1737
+
1738
+ $params = array(
1739
+ 'type' => 'button' ,
1740
+ 'title' => __( 'Read All', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1741
+ 'hint' => array( 'title' => __( 'Mark as read all bookings', 'booking' ), 'position' => 'top' ), // Hint
1742
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1743
+ 'action' => "wpbc_ajx_booking_ajax_action_request( {
1744
+ 'booking_action' : '{$booking_action}',
1745
+ 'booking_id' : '-1',
1746
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1747
+ 'ui_clicked_element_id': '{$el_id}'
1748
+ } );
1749
+ wpbc_button_enable_loading_icon( this ); " ,
1750
+ 'icon' => array(
1751
+ 'icon_font' => 'wpbc_icn_disabled_visible',
1752
+ 'position' => 'right',
1753
+ 'icon_img' => ''
1754
+ ),
1755
+ 'class' => '', // '' | 'wpbc_ui_button_primary'
1756
+ 'style' => '', // Any CSS class here
1757
+ 'mobile_show_text' => !true, // Show or hide text, when viewing on Mobile devices (small window size).
1758
+ 'attr' => array( 'id' => $el_id )
1759
+ );
1760
+
1761
+ wpbc_flex_button( $params );
1762
+ }
1763
+
1764
+ function wpbc_ajx__ui__action_button__read( $escaped_search_request_params ){
1765
+
1766
+ $booking_action = 'set_booking_as_read';
1767
+
1768
+ $el_id = 'ui_btn_' . $booking_action;
1769
+
1770
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1771
+ return false;
1772
+ }
1773
+
1774
+ $params = array(
1775
+ 'type' => 'button' ,
1776
+ 'title' => __( 'Read', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1777
+ 'hint' => array( 'title' => __( 'Mark as read selected bookings', 'booking' ), 'position' => 'top' ), // Hint
1778
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1779
+ 'action' => "wpbc_ajx_booking_ajax_action_request( {
1780
+ 'booking_action' : '{$booking_action}',
1781
+ 'booking_id' : wpbc_get_selected_row_id(),
1782
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1783
+ 'ui_clicked_element_id': '{$el_id}'
1784
+ } );
1785
+ wpbc_button_enable_loading_icon( this ); " ,
1786
+ 'icon' => array(
1787
+ 'icon_font' => 'wpbc_icn_visibility_off',
1788
+ 'position' => 'right',
1789
+ 'icon_img' => ''
1790
+ ),
1791
+ 'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
1792
+ 'style' => '', // Any CSS class here
1793
+ 'mobile_show_text' => !true, // Show or hide text, when viewing on Mobile devices (small window size).
1794
+ 'attr' => array( 'id' => $el_id )
1795
+ );
1796
+
1797
+ wpbc_flex_button( $params );
1798
+ }
1799
+
1800
+ function wpbc_ajx__ui__action_button__unread( $escaped_search_request_params ){
1801
+
1802
+ $booking_action = 'set_booking_as_unread';
1803
+
1804
+ $el_id = 'ui_btn_' . $booking_action;
1805
+
1806
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1807
+ return false;
1808
+ }
1809
+
1810
+ $params = array(
1811
+ 'type' => 'button' ,
1812
+ 'title' => __( 'Unread', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
1813
+ 'hint' => array( 'title' => __( 'Mark as Unread selected bookings', 'booking' ), 'position' => 'top' ), // Hint
1814
+ 'link' => 'javascript:void(0)', // Direct link or skip it
1815
+ 'action' => "wpbc_ajx_booking_ajax_action_request( {
1816
+ 'booking_action' : '{$booking_action}',
1817
+ 'booking_id' : wpbc_get_selected_row_id(),
1818
+ 'reason_of_action' : jQuery( '#reason_of_action' ).val(),
1819
+ 'ui_clicked_element_id': '{$el_id}'
1820
+ } );
1821
+ wpbc_button_enable_loading_icon( this ); " ,
1822
+ 'icon' => array(
1823
+ 'icon_font' => 'wpbc_icn_visibility',
1824
+ 'position' => 'right',
1825
+ 'icon_img' => ''
1826
+ ),
1827
+ 'class' => 'hide_button_if_no_selection', // '' | 'wpbc_ui_button_primary'
1828
+ 'style' => '', // Any CSS class here
1829
+ 'mobile_show_text' => !true, // Show or hide text, when viewing on Mobile devices (small window size).
1830
+ 'attr' => array( 'id' => $el_id )
1831
+ );
1832
+
1833
+ wpbc_flex_button( $params );
1834
+ }
1835
+
1836
+ function wpbc_ajx__ui__action_button__print( $escaped_search_request_params ){
1837
+ $user_bk_id = 1;
1838
+ $params = array(
1839
+ 'type' => 'button',
1840
+ 'title' => __( 'Print', 'booking' ) . '&nbsp;&nbsp;',
1841
+ 'hint' => array(
1842
+ 'title' => __( 'Print bookings listing', 'booking' ),
1843
+ 'position' => 'top'
1844
+ ),
1845
+ 'link' => 'javascript:void(0)',
1846
+ 'action' => "wpbc_print_dialog__show();",
1847
+ 'icon' => array(
1848
+ 'icon_font' => 'wpbc_icn_print',
1849
+ 'position' => 'right',
1850
+ 'icon_img' => ''
1851
+ ),
1852
+ 'class' => '',
1853
+ 'style' => '',
1854
+ 'attr' => array(),
1855
+ 'mobile_show_text' => true
1856
+ );
1857
+ wpbc_flex_button( $params );
1858
+ }
1859
+
1860
+ function wpbc_ajx__ui__action_button__import( $escaped_search_request_params ){
1861
+
1862
+ $booking_action = 'import_google_calendar';
1863
+
1864
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1865
+ return false;
1866
+ }
1867
+
1868
+
1869
+ $booking_gcal_feed = get_bk_option( 'booking_gcal_feed');
1870
+
1871
+ if ( ( ! class_exists( 'wpdev_bk_personal' ) ) && ( $booking_gcal_feed == '' ) ) {
1872
+ $is_this_btn_disabled = true;
1873
+ } else {
1874
+ $is_this_btn_disabled = false;
1875
+ }
1876
+
1877
+ $params = array(
1878
+ 'type' => 'button',
1879
+ 'title' => __( 'Import', 'booking' ) . '&nbsp;&nbsp;',
1880
+ 'hint' => array(
1881
+ 'title' => __( 'Import Google Calendar Events', 'booking' ),
1882
+ 'position' => 'top'
1883
+ ),
1884
+ 'link' => 'javascript:void(0)',
1885
+ 'action' => " if ( 'function' === typeof( jQuery('#wpbc_modal__import_google_calendar__section').wpbc_my_modal ) ) {
1886
+ jQuery('#wpbc_modal__import_google_calendar__section').wpbc_my_modal('show');
1887
+ } else {
1888
+ alert( 'Warning! wpbc_my_modal module has not found. Please, recheck about any conflicts by deactivating other plugins.');
1889
+ }",
1890
+ 'icon' => array(
1891
+ 'icon_font' => 'wpbc_icn_event',
1892
+ 'position' => 'right',
1893
+ 'icon_img' => ''
1894
+ ),
1895
+ 'class' => '',//( $is_this_btn_disabled ? ' disabled' : '' ),
1896
+ 'style' => '',
1897
+ 'attr' => array(),
1898
+ 'mobile_show_text' => true
1899
+ );
1900
+ wpbc_flex_button( $params );
1901
+ }
1902
+
1903
+ function wpbc_ajx__ui__action_button__export_csv( $escaped_search_request_params ){
1904
+
1905
+ if ( ! class_exists( 'wpdev_bk_personal' ) ) {
1906
+ return false;
1907
+ }
1908
+
1909
+ $booking_action = 'export_csv';
1910
+ $el_id = 'ui_btn_' . $booking_action;
1911
+
1912
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1913
+ return false;
1914
+ }
1915
+
1916
+ $params = array(
1917
+ 'type' => 'button',
1918
+ 'title' => __( 'Export to CSV', 'booking' ) . '&nbsp;&nbsp;',
1919
+ 'hint' => array(
1920
+ 'title' => __( 'Export bookings to CSV format', 'booking' ),
1921
+ 'position' => 'top'
1922
+ ),
1923
+ 'link' => 'javascript:void(0)',
1924
+ //'action' => wpbc_csv_get_url_for_button( 'page' ),
1925
+ 'action' => "if ( 'function' === typeof( jQuery('#wpbc_modal__export_csv__section').wpbc_my_modal ) ) {
1926
+ jQuery('#wpbc_modal__export_csv__section').wpbc_my_modal('show');
1927
+ } else {
1928
+ alert( 'Warning! wpbc_my_modal module has not found. Please, recheck about any conflicts by deactivating other plugins.');
1929
+ }",
1930
+ 'icon' => array(
1931
+ 'icon_font' => 'wpbc_icn_file_upload',
1932
+ 'position' => 'right',
1933
+ 'icon_img' => ''
1934
+ ),
1935
+ 'class' => '',
1936
+ 'style' => '',
1937
+ 'attr' => array( 'id' => $el_id ),
1938
+ 'mobile_show_text' => true
1939
+ );
1940
+ wpbc_flex_button( $params );
1941
+ }
1942
+
1943
+ function wpbc_ajx__ui__action_button__export_csv_page( $escaped_search_request_params ){
1944
+
1945
+ if ( ! class_exists( 'wpdev_bk_personal' ) ) {
1946
+ return false;
1947
+ }
1948
+
1949
+ $booking_action = 'export_csv';
1950
+ $el_id = 'ui_btn_' . $booking_action;
1951
+
1952
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1953
+ return false;
1954
+ }
1955
+
1956
+ $params = array(
1957
+ 'type' => 'button',
1958
+ 'title' => __( 'Export page to CSV', 'booking' ) . '&nbsp;&nbsp;',
1959
+ 'hint' => array(
1960
+ 'title' => __( 'Export only current page of bookings to CSV format', 'booking' ),
1961
+ 'position' => 'top'
1962
+ ),
1963
+ 'link' => 'javascript:void(0)',
1964
+ //'action' => wpbc_csv_get_url_for_button( 'page' ),
1965
+ 'action' => "wpbc_ajx_booking__ui_click__export_csv( {
1966
+ 'booking_action' : '{$booking_action}',
1967
+ 'ui_clicked_element_id': '{$el_id}',
1968
+ 'export_type': 'csv_page'
1969
+ } );",
1970
+ 'icon' => array(
1971
+ 'icon_font' => 'wpbc_icn_file_upload',
1972
+ 'position' => 'right',
1973
+ 'icon_img' => ''
1974
+ ),
1975
+ 'class' => '',
1976
+ 'style' => '',
1977
+ 'attr' => array( 'id' => $el_id ),
1978
+ 'mobile_show_text' => true
1979
+ );
1980
+ wpbc_flex_button( $params );
1981
+ }
1982
+
1983
+ function wpbc_ajx__ui__action_button__export_csv_all( $escaped_search_request_params ){
1984
+
1985
+ if ( ! class_exists( 'wpdev_bk_personal' ) ) {
1986
+ return false;
1987
+ }
1988
+
1989
+ $booking_action = 'export_csv';
1990
+ $el_id = 'ui_btn_' . $booking_action . '_all';
1991
+
1992
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
1993
+ return false;
1994
+ }
1995
+
1996
+ $params = array(
1997
+ 'type' => 'button',
1998
+ 'title' => __( 'Export all pages to CSV', 'booking' ) . '&nbsp;&nbsp;',
1999
+ 'hint' => array(
2000
+ 'title' => __( 'Export All bookings to CSV format', 'booking' ),
2001
+ 'position' => 'top'
2002
+ ),
2003
+ 'link' => 'javascript:void(0)',
2004
+ //'action' => wpbc_csv_get_url_for_button( 'all' ),
2005
+ 'action' => "wpbc_ajx_booking__ui_click__export_csv( {
2006
+ 'booking_action' : '{$booking_action}',
2007
+ 'ui_clicked_element_id': '{$el_id}',
2008
+ 'export_type': 'csv_all'
2009
+ } );",
2010
+
2011
+ 'icon' => array(
2012
+ 'icon_font' => 'wpbc_icn_publish',
2013
+ 'position' => 'right',
2014
+ 'icon_img' => ''
2015
+ ),
2016
+ 'class' => '',
2017
+ 'style' => '',
2018
+ 'attr' => array( 'id' => $el_id ),
2019
+ 'mobile_show_text' => true
2020
+ );
2021
+ wpbc_flex_button( $params );
2022
+ }
2023
+
2024
+ function wpbc_ajx__ui__action_button__empty_trash( $escaped_search_request_params ){
2025
+
2026
+ $booking_action = 'empty_trash';
2027
+
2028
+ $el_id = 'ui_btn_' . $booking_action;
2029
+
2030
+ if ( ! wpbc_is_user_can( $booking_action, get_current_user_id() ) ) {
2031
+ return false;
2032
+ }
2033
+
2034
+ $params = array(
2035
+ 'type' => 'button' ,
2036
+ 'title' => __( 'Empty Trash', 'booking' ) . '&nbsp;&nbsp;', // Title of the button
2037
+ 'hint' => array( 'title' => __( 'Empty Trash', 'booking' ), 'position' => 'top' ), // Hint
2038
+ 'link' => 'javascript:void(0)', // Direct link or skip it
2039
+ 'action' => "if ( wpbc_are_you_sure('" . esc_attr( __( 'Do you really want to do this ?', 'booking' ) ) . "') ) {
2040
+ wpbc_ajx_booking_ajax_action_request( {
2041
+ 'booking_action' : '{$booking_action}',
2042
+ 'ui_clicked_element_id': '{$el_id}'
2043
+ } );
2044
+ wpbc_button_enable_loading_icon( this );
2045
+ }" ,
2046
+ 'icon' => array(
2047
+ 'icon_font' => 'wpbc_icn_delete_forever',
2048
+ 'position' => 'right',
2049
+ 'icon_img' => ''
2050
+ ),
2051
+ 'class' => '', // '' | 'wpbc_ui_button_primary'
2052
+ 'style' => '', // Any CSS class here
2053
+ 'mobile_show_text' => true, // Show or hide text, when viewing on Mobile devices (small window size).
2054
+ 'attr' => array( 'id' => $el_id )
2055
+ );
2056
+
2057
+ wpbc_flex_button( $params );
2058
+ }
2059
+ // </editor-fold>
2060
+
2061
+
2062
+ // <editor-fold defaultstate="collapsed" desc=" T o o l b a r O p t i o n s B u t t o n s " >
2063
+
2064
+
2065
+ function wpbc_ajx__ui__options_checkbox__send_emails( $escaped_search_request_params, $defaults ){
2066
+
2067
+ $el_id = 'ui_usr__send_emails';
2068
+
2069
+ $el_value = isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ];
2070
+
2071
+ $params_checkbox = array(
2072
+ 'id' => $el_id // HTML ID of element
2073
+ , 'name' => $el_id
2074
+ , 'label' => array( 'title' => __( 'Emails sending', 'booking' ) , 'position' => 'left' )
2075
+ , 'style' => '' // CSS of select element
2076
+ , 'class' => '' // CSS Class of select element
2077
+ , 'disabled' => false
2078
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2079
+ , 'legend' => '' // aria-label parameter
2080
+ , 'value' => $el_value // Some Value from optins array that selected by default
2081
+ , 'selected' => ( ( 'send' == $el_value ) ? true : false ) // Selected or not
2082
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2083
+ , 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__send_emails': (jQuery( this ).is(':checked') ? 'send' : 'not_send') } );" // JavaScript code
2084
+ );
2085
+
2086
+ wpbc_flex_checkbox( $params_checkbox );
2087
+ }
2088
+
2089
+
2090
+ function wpbc_ajx__ui__options_checkbox__is_expand_remarks( $escaped_search_request_params, $defaults ){
2091
+
2092
+ $el_id = 'ui_usr__is_expand_remarks';
2093
+
2094
+ $el_value = isset( $escaped_search_request_params[ $el_id ] ) ? $escaped_search_request_params[ $el_id ] : $defaults[ $el_id ];
2095
+
2096
+ $params_checkbox = array(
2097
+ 'id' => $el_id // HTML ID of element
2098
+ , 'name' => $el_id
2099
+ , 'label' => array( 'title' => __( 'Show / hide notes', 'booking' ) , 'position' => 'left' )
2100
+ , 'legend' => __('Check this box if you want to open notes section by default in Booking Listing page.' ,'booking')
2101
+ , 'style' => '' // CSS of select element
2102
+ , 'class' => '' // CSS Class of select element
2103
+ , 'disabled' => false
2104
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2105
+ , 'legend' => '' // aria-label parameter
2106
+ , 'value' => $el_value // Some Value from optins array that selected by default
2107
+ , 'selected' => ( ( 'On' == $el_value ) ? true : false ) // Selected or not
2108
+ //, 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2109
+ , 'onchange' => "wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__is_expand_remarks': (jQuery( this ).is(':checked') ? 'On' : 'Off') } );" // JavaScript code
2110
+ );
2111
+
2112
+ wpbc_flex_checkbox( $params_checkbox );
2113
+ }
2114
+ // </editor-fold>
2115
+
2116
+ ////////////////////////////////////////////////////////////////////////////////
2117
+ // Complex elements
2118
+ ////////////////////////////////////////////////////////////////////////////////
2119
+
2120
+ /**
2121
+ * Show FLEX Dropdown
2122
+ *
2123
+ * Dropdown always have value as array. For example: [ '0' ], [ '4', '10' ] or [ '6', '', '2022-05-24' ]
2124
+ *
2125
+ * @param array $args
2126
+ *
2127
+ * = Simple Example: ==================================================================================================
2128
+
2129
+ $params = array(
2130
+ 'id' => 'wh_approved'
2131
+ , 'default' => isset( $escaped_search_request_params['wh_approved'] ) ? $escaped_search_request_params['wh_approved'] : $defaults['wh_approved']
2132
+ , 'label' => ''//__('Status', 'booking') . ':'
2133
+ , 'title' => __('Status', 'booking')
2134
+ , 'hint' => array( 'title' => __('Filter bookings by booking status' ,'booking') , 'position' => 'top' )
2135
+ , 'li_options' => array (
2136
+ '0' => __( 'Pending', 'booking' ),
2137
+ '1' => __( 'Approved', 'booking' ),
2138
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
2139
+ // 'header1' => array( 'type' => 'header', 'title' => __( 'Default', 'booking' ) ),
2140
+ 'any' => array(
2141
+ 'type' => 'simple',
2142
+ 'value' => '',
2143
+ // 'disabled' => true,
2144
+ 'title' => __( 'Any', 'booking' )
2145
+ ),
2146
+ )
2147
+ );
2148
+
2149
+ ?><div class="ui_element ui_nowrap"><?php
2150
+
2151
+ wpbc_flex_dropdown( $params );
2152
+
2153
+ ?></div><?php
2154
+ *
2155
+ *
2156
+ * = Complex Example: =================================================================================================
2157
+ *
2158
+
2159
+ $params_addon = array(
2160
+ 'type' => 'span'
2161
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
2162
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_event', 'position' => 'right', 'icon_img' => '' )
2163
+ , 'class' => 'wpbc_ui_button inactive'
2164
+ , 'style' => ''
2165
+ , 'attr' => array()
2166
+ );
2167
+
2168
+ $dates_interval = array(
2169
+ 1 => '1' . ' ' . __('day' ,'booking')
2170
+ , 2 => '2' . ' ' . __('days' ,'booking')
2171
+ , 3 => '3' . ' ' . __('days' ,'booking')
2172
+ , 4 => '4' . ' ' . __('days' ,'booking')
2173
+ , 5 => '5' . ' ' . __('days' ,'booking')
2174
+ , 6 => '6' . ' ' . __('days' ,'booking')
2175
+ , 7 => '1' . ' ' . __('week' ,'booking')
2176
+ , 14 => '2' . ' ' . __('weeks' ,'booking')
2177
+ , 30 => '1' . ' ' . __('month' ,'booking')
2178
+ , 60 => '2' . ' ' . __('months' ,'booking')
2179
+ , 90 => '3' . ' ' . __('months' ,'booking')
2180
+ , 183 => '6' . ' ' . __('months' ,'booking')
2181
+ , 365 => '1' . ' ' . __('Year' ,'booking')
2182
+ );
2183
+
2184
+ $request_input_el_default = array(
2185
+ 'wh_booking_date' => isset( $escaped_search_request_params['wh_booking_date'] ) ? $escaped_search_request_params['wh_booking_date'] : $defaults['wh_booking_date'],
2186
+ 'ui_wh_booking_date_radio' => isset( $escaped_search_request_params['ui_wh_booking_date_radio'] ) ? $escaped_search_request_params['ui_wh_booking_date_radio'] : $defaults['ui_wh_booking_date_radio'],
2187
+ 'ui_wh_booking_date_next' => isset( $escaped_search_request_params['ui_wh_booking_date_next'] ) ? $escaped_search_request_params['ui_wh_booking_date_next'] : $defaults['ui_wh_booking_date_next'],
2188
+ 'ui_wh_booking_date_prior' => isset( $escaped_search_request_params['ui_wh_booking_date_prior'] ) ? $escaped_search_request_params['ui_wh_booking_date_prior'] : $defaults['ui_wh_booking_date_prior'],
2189
+ 'ui_wh_booking_date_checkin' => isset( $escaped_search_request_params['ui_wh_booking_date_checkin'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkin'] : $defaults['ui_wh_booking_date_checkin'],
2190
+ 'ui_wh_booking_date_checkout' => isset( $escaped_search_request_params['ui_wh_booking_date_checkout'] ) ? $escaped_search_request_params['ui_wh_booking_date_checkout'] : $defaults['ui_wh_booking_date_checkout']
2191
+ );
2192
+
2193
+ $options = array (
2194
+ // 'header2' => array( 'type' => 'header', 'title' => __( 'Complex Days', 'booking' ) ),
2195
+ // 'disabled1' => array( 'type' => 'simple', 'value' => '19', 'title' => __( 'This is option was disabled', 'booking' ), 'disabled' => true ),
2196
+
2197
+ '0' => __( 'Current dates', 'booking' ),
2198
+ '1' => __( 'Today', 'booking' ),
2199
+ '2' => __( 'Previous dates', 'booking' ),
2200
+ '3' => __( 'All dates', 'booking' ),
2201
+
2202
+ 'divider1' => array( 'type' => 'html', 'html' => '<hr/>' ),
2203
+
2204
+ '9' => __( 'Today check in/out', 'booking' ),
2205
+ '7' => __( 'Check In - Tomorrow', 'booking' ),
2206
+ '8' => __( 'Check Out - Tomorrow', 'booking' ),
2207
+
2208
+ 'divider2' => array( 'type' => 'html', 'html' => '<hr/>' ),
2209
+
2210
+ // Next [ '4', '10' ] - radio button (if selected) value '4' and select-box with selected value '10'
2211
+ 'next' => array(
2212
+ 'type' => 'complex',
2213
+ 'class' => 'ui_complex_option_element',
2214
+ // recheck if LI selected: $options['next']['selected_options_value'] == $params['default], e.g. ~ [ '4', '10' ]
2215
+ 'selected_options_value' => array(
2216
+ 1 => array( 'value' ), // $options['next']['input_options'][ 1 ]['value'] '4'
2217
+ 4 => array( 'value' ) // $options['next']['input_options'][ 4 ]['value'] '10'
2218
+ ),
2219
+ // Get selected Title, for dropdown if $options['next'] selected
2220
+ 'selected_options_title' => array(
2221
+ 1 => array( 'label', 'title' ), // $options['next']['input_options'][ 1 ]['label'][ 'title' ] 'Next'
2222
+ 'text1' => ': ', // if key 'text1' not exist in ['input_options'], then it text ': '
2223
+ 4 => array( 'options', $request_input_el_default['ui_wh_booking_date_next'] ) // '10 days'
2224
+ ),
2225
+ 'input_options' => array(
2226
+ array( 'type' => 'html', 'html' => '<div class="ui_element">' )
2227
+ , array( // Default options from simple input element, like: wpbc_flex_radio()
2228
+ 'type' => 'radio'
2229
+ , 'id' => 'ui_wh_booking_date_radio_1' // HTML ID of element
2230
+ , 'name' => 'ui_wh_booking_date_radio'
2231
+ , 'label' => array( 'title' => __('Next' ,'booking') , 'position' => 'right' )
2232
+ , 'style' => '' // CSS of select element
2233
+ , 'class' => '' // CSS Class of select element
2234
+ , 'disabled' => false
2235
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2236
+ , 'legend' => '' // aria-label parameter
2237
+ , 'value' => '4'
2238
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '4' ) ? true : false // Selected or not
2239
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2240
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2241
+ )
2242
+ , array( 'type' => 'html', 'html' => '</div>' )
2243
+ , array( 'type' => 'html', 'html' => '<div class="ui_element">' )
2244
+ , array(
2245
+ 'type' => 'select'
2246
+ , 'attr' => array()
2247
+ , 'name' => 'ui_wh_booking_date_next'
2248
+ , 'id' => 'ui_wh_booking_date_next'
2249
+ , 'options' => $dates_interval
2250
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_next']
2251
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_1').prop('checked', true);" // JavaScript code
2252
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2253
+ )
2254
+ , array( 'type' => 'html', 'html' => '</div>' )
2255
+ )
2256
+ ),
2257
+
2258
+ // Prior [ '5', '10' ]
2259
+ 'prior' => array(
2260
+ 'type' => 'complex',
2261
+ 'class' => 'ui_complex_option_element',
2262
+ 'style' => 'min-width: 244px;',
2263
+ 'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
2264
+ 'selected_options_title' => array( 1 => array( 'label', 'title' )
2265
+ , 'text1' => ': '
2266
+ , 4 => array( 'options' , $request_input_el_default[ 'ui_wh_booking_date_prior'] )
2267
+ ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
2268
+ 'input_options' => array(
2269
+ array( 'type' => 'html', 'html' => '<div class="ui_element">' )
2270
+ , array(
2271
+ 'type' => 'radio'
2272
+
2273
+ , 'id' => 'ui_wh_booking_date_radio_2' // HTML ID of element
2274
+ , 'name' => 'ui_wh_booking_date_radio'
2275
+ , 'label' => array( 'title' => __('Prior' ,'booking') , 'position' => 'right' )
2276
+ , 'style' => '' // CSS of select element
2277
+ , 'class' => '' // CSS Class of select element
2278
+ , 'disabled' => false
2279
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2280
+ , 'legend' => '' // aria-label parameter
2281
+ , 'value' => '5' // Some Value from optins array that selected by default
2282
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '5' ) ? true : false // Selected or not
2283
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2284
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2285
+ )
2286
+ , array( 'type' => 'html', 'html' => '</div>' )
2287
+ , array( 'type' => 'html', 'html' => '<div class="ui_element">' )
2288
+ , array(
2289
+ 'type' => 'select'
2290
+ , 'attr' => array()
2291
+ , 'name' => 'ui_wh_booking_date_prior'
2292
+ , 'id' => 'ui_wh_booking_date_prior'
2293
+ , 'options' => $dates_interval
2294
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_prior']
2295
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_2').prop('checked', true);" // JavaScript code
2296
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2297
+ )
2298
+ , array( 'type' => 'html', 'html' => '</div>' )
2299
+ )
2300
+ ),
2301
+
2302
+ // Fixed [ '6', '', '2022-05-21']
2303
+ 'fixed' => array(
2304
+ 'type' => 'complex',
2305
+ 'class' => 'ui_complex_option_element',
2306
+ 'selected_options_value' => array( 1 => array( 'value' ), 4 => array( 'value' ), 7 => array( 'value' ) ), // 4 => array( 'value' ) --> $complex_option['input_options'][4]['value']
2307
+ 'selected_options_title' => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ), 'text2' => ' - ' ,7 => array( 'value' ) ), // 1 => array( 'label', 'title' ) --> $complex_option['input_options'][1]['label'][ 'title' ]
2308
+ 'input_options' => array(
2309
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex:1 1 100%;margin-top:5px;">' )
2310
+ , array(
2311
+ 'type' => 'radio'
2312
+
2313
+ , 'id' => 'ui_wh_booking_date_radio_3' // HTML ID of element
2314
+ , 'name' => 'ui_wh_booking_date_radio'
2315
+ , 'label' => array( 'title' => __('Dates' ,'booking') , 'position' => 'right' )
2316
+ , 'style' => '' // CSS of select element
2317
+ , 'class' => '' // CSS Class of select element
2318
+ , 'disabled' => false
2319
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2320
+ , 'legend' => '' // aria-label parameter
2321
+ , 'value' => '6' // Some Value from optins array that selected by default
2322
+ , 'selected' => ( $request_input_el_default[ 'ui_wh_booking_date_radio' ] == '6' ) ? true : false // Selected or not
2323
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2324
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2325
+ )
2326
+ , array( 'type' => 'html', 'html' => '</div>' )
2327
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 4px 4px 0;">' )
2328
+ , array(
2329
+ 'type' => 'text'
2330
+ , 'id' => 'ui_wh_booking_date_checkin' // HTML ID of element
2331
+ , 'name' => 'ui_wh_booking_date_checkin'
2332
+ , 'label' => ''//__('Check-in' ,'booking')
2333
+ , 'style' => 'width:100%;' // CSS of select element
2334
+ , 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
2335
+ , 'disabled' => false
2336
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2337
+ , 'placeholder' => __('Check-in' ,'booking')
2338
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkin'] // Some Value from optins array that selected by default
2339
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
2340
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2341
+ )
2342
+ , array( 'type' => 'html', 'html' => '</div>' )
2343
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex-flow: row wrap;padding: 4px 0 4px 4px;">' )
2344
+ , array(
2345
+ 'type' => 'text'
2346
+ , 'id' => 'ui_wh_booking_date_checkout' // HTML ID of element
2347
+ , 'name' => 'ui_wh_booking_date_checkout'
2348
+ , 'label' => ''//__('Check-out' ,'booking')
2349
+ , 'style' => 'width:100%;' // CSS of select element
2350
+ , 'class' => 'wpdevbk-filters-section-calendar' // CSS Class of select element
2351
+ , 'disabled' => false
2352
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2353
+ , 'placeholder' => __('Check-out' ,'booking')
2354
+ , 'value' => $request_input_el_default[ 'ui_wh_booking_date_checkout'] // Some Value from optins array that selected by default
2355
+ , 'onfocus' => "jQuery('#ui_wh_booking_date_radio_3').prop('checked', true);" // JavaScript code
2356
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2357
+ )
2358
+ , array( 'type' => 'html', 'html' => '</div>' )
2359
+ )
2360
+ ),
2361
+
2362
+ 'divider3' => array( 'type' => 'html', 'html' => '<hr/>' ),
2363
+
2364
+ // Buttons
2365
+ 'buttons1' => array(
2366
+ 'type' => 'complex',
2367
+ 'class' => 'ui_complex_option_element',
2368
+ 'style' => 'justify-content: flex-end;',
2369
+ 'input_options' => array(
2370
+ array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0;">' )
2371
+ , array(
2372
+ 'type' => 'button'
2373
+ , 'title' => __( 'Apply', 'booking' ) // Title of the button
2374
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
2375
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
2376
+ , 'action' => "wpbc_ui_dropdown_apply_click( {
2377
+ 'dropdown_id' : 'wh_booking_date',
2378
+ 'dropdown_radio_name': 'ui_wh_booking_date_radio'
2379
+ } );" // JavaScript code
2380
+ , 'class' => 'wpbc_ui_button_primary' // wpbc_ui_button | wpbc_ui_button_primary
2381
+ , 'icon' => ''
2382
+ , 'font_icon' => ''
2383
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
2384
+ , 'style' => '' // Any CSS class here
2385
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
2386
+ , 'attr' => array()
2387
+ )
2388
+ , array( 'type' => 'html', 'html' => '</div>' )
2389
+ , array( 'type' => 'html', 'html' => '<div class="ui_element" style="flex: 0 1 auto;margin: 0 0 0 1em;">' )
2390
+ , array(
2391
+ 'type' => 'button'
2392
+ , 'title' => __( 'Close', 'booking' ) // Title of the button
2393
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
2394
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
2395
+ , 'action' => "wpbc_ui_dropdown_close_click( 'wh_booking_date' );" // JavaScript code
2396
+ , 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
2397
+ , 'icon' => ''
2398
+ , 'font_icon' => ''
2399
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
2400
+ , 'style' => '' // Any CSS class here
2401
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
2402
+ , 'attr' => array()
2403
+ )
2404
+ , array( 'type' => 'html', 'html' => '</div>' )
2405
+ )
2406
+ ),
2407
+ );
2408
+
2409
+ $params = array(
2410
+ 'id' => 'wh_booking_date'
2411
+ , 'default' => $request_input_el_default[ 'wh_booking_date' ]
2412
+ , 'label' => ''//__('Approve 1', 'booking') . ':'
2413
+ , 'title' => ''//__('Approve 2', 'booking')
2414
+ , 'hint' => array( 'title' => __('Filter bookings by booking dates' ,'booking') , 'position' => 'top' )
2415
+ , 'align' => 'left'
2416
+ , 'li_options' => $options
2417
+ );
2418
+
2419
+ ?><div class="ui_element ui_nowrap"><?php
2420
+
2421
+ wpbc_flex_addon( $params_addon );
2422
+
2423
+ wpbc_flex_dropdown( $params );
2424
+
2425
+ ?></div><?php
2426
+
2427
+ *
2428
+ * =====================================================================================================================
2429
+ */
2430
+ function wpbc_flex_dropdown( $args = array() ) {
2431
+
2432
+ // $milliseconds = round( microtime( true ) * 1000 );
2433
+
2434
+ $defaults = array(
2435
+ 'id' => '' // HTML ID of element Example: 'wh_booking_date'
2436
+ , 'default' => array() // Selected by default value(s) Example: 'default' => array( $defaults['wh_booking_date'] , $defaults['wh_booking_date2'] )
2437
+ , 'hint' => '' // Mouse over tooltip Example: 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
2438
+ , 'style' => '' // CSS style of dropdown element (optional)
2439
+ , 'class' => '' // CSS class of dropdown element (optional)
2440
+ , 'label' => '' // Label of element "at Top of element"
2441
+ , 'title' => '' // Title of element "Inside of element"
2442
+ , 'align' => 'left' // Align: left | right
2443
+ , 'li_options' => array() // Options
2444
+ , 'disabled' => array() // If some options disabled, then option values list here
2445
+ , 'onfocus' => '' // JavaScript code
2446
+ , 'onchange' => '' // JavaScript code
2447
+
2448
+ );
2449
+ $params = wp_parse_args( $args, $defaults );
2450
+
2451
+ // If default value not array, then define it as single value in arr.
2452
+ if ( ! is_array( $params['default'] ) ) {
2453
+ $params['default'] = array( $params['default'] );
2454
+ }
2455
+
2456
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2457
+ /**
2458
+ * Recomposition of simple options configuration from
2459
+ * 'any' => __( 'Any', 'booking' )
2460
+ * to
2461
+ * 'any' => array( 'type' => 'simple', 'value' => 'any', 'title' => __( 'Any', 'booking' ) );
2462
+ */
2463
+ $is_this_simple_list = true;
2464
+ foreach ( $params['li_options'] as $key_value => $option_data ) {
2465
+
2466
+ if ( ! is_array( $option_data ) ) {
2467
+
2468
+ $params['li_options'][ $key_value ] = array( 'type' => 'simple', 'value' => (string) $key_value, 'title' => $option_data );
2469
+
2470
+ } else {
2471
+ if ( ( isset( $option_data['type'] ) ) && ( 'complex' == $option_data['type'] ) ) {
2472
+ $is_this_simple_list = false;
2473
+ }
2474
+ }
2475
+ }
2476
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2477
+
2478
+
2479
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2480
+ // Rechecking about selected LI option, based on $params['default'] like ['4','10'] and getting title of such option
2481
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2482
+ $default_selected_title = array();
2483
+ foreach ( $params['li_options'] as $li_option ) {
2484
+
2485
+ if ( 'simple' == $li_option['type'] ) {
2486
+ if ( $li_option['value'] === $params['default'][0] ) {
2487
+ $default_selected_title = $li_option['title'] ;
2488
+ }
2489
+ }
2490
+
2491
+ if ( 'complex' == $li_option['type'] ) {
2492
+
2493
+ // $option[ 'selected_options_value' ] => array( 1 => array( 'value' ), 4 => array( 'value' ) ),
2494
+ // $option[ 'selected_options_title' ] => array( 1 => array( 'label', 'title' ), 'text1' => ': ', 4 => array( 'value' ) ),
2495
+
2496
+ // Get value of this LI
2497
+ $li_this_value = array();
2498
+ if ( isset( $li_option['selected_options_value'] ) )
2499
+ foreach ( $li_option['selected_options_value'] as $li_key => $input_keys ) {
2500
+
2501
+ if ( isset( $li_option['input_options'][ $li_key ] ) ) { // ['input_options'][4]
2502
+
2503
+ $li_input_deep_value = $li_option['input_options'][ $li_key ];
2504
+
2505
+ foreach ( $input_keys as $input_key_value ) {
2506
+
2507
+ if ( isset( $li_input_deep_value[$input_key_value] ) ) { // ['input_options'][4]['value']
2508
+ $li_input_deep_value = $li_input_deep_value[ $input_key_value ];
2509
+ }
2510
+ }
2511
+ $li_this_value[] = $li_input_deep_value;
2512
+ }
2513
+ }
2514
+
2515
+ // Is this LI selected ?
2516
+ $is_same_value = array_diff( $params['default'], $li_this_value ) == array();
2517
+
2518
+ if ( $is_same_value ) {
2519
+
2520
+ // Get value of this LI
2521
+ $li_this_value = array();
2522
+ foreach ( $li_option['selected_options_title'] as $li_key => $input_keys ) {
2523
+
2524
+ if ( isset( $li_option['input_options'][ $li_key ] ) ) { // ['input_options'][4]
2525
+
2526
+ $li_input_deep_value = $li_option['input_options'][ $li_key ];
2527
+
2528
+ foreach ( $input_keys as $input_key_value ) {
2529
+
2530
+ if ( isset( $li_input_deep_value[$input_key_value] ) ) { // ['input_options'][4]['value']
2531
+ $li_input_deep_value = $li_input_deep_value[ $input_key_value ];
2532
+ }
2533
+ }
2534
+ $li_this_value[] = $li_input_deep_value;
2535
+ } else {
2536
+ $li_this_value[] = $input_keys; //some text
2537
+ }
2538
+ }
2539
+
2540
+ $default_selected_title = implode( '', $li_this_value );
2541
+ }
2542
+ }
2543
+
2544
+ if ( ! empty( $default_selected_title ) ) {
2545
+ break;
2546
+ }
2547
+ }
2548
+
2549
+ if ( is_array( $default_selected_title ) ) {
2550
+ $default_selected_title = implode( '', $default_selected_title ); // Error:: ? no values ?
2551
+ }
2552
+
2553
+
2554
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2555
+ // Show only, if $item_params['label'] ! EMPTY
2556
+ wpbc_flex_label(
2557
+ array(
2558
+ 'id' => $params['id']
2559
+ , 'label' => $params['label']
2560
+ , 'class' => 'wpbc_ui_dropdown__outside_label'
2561
+ )
2562
+ );
2563
+
2564
+ ?><div class="wpbc_ui_dropdown <?php echo esc_attr( $params['class'] ); ?>"
2565
+ style="<?php echo esc_attr( $params['style'] ); ?>"
2566
+ ><?php
2567
+
2568
+ ?><a href="javascript:void(0)"
2569
+ id="<?php echo esc_attr( $params['id'] ); ?>_selector"
2570
+ data-toggle="wpbc_dropdown"
2571
+ class="wpbc_ui_control wpbc_ui_button dropdown-toggle <?php
2572
+ echo ( ! empty( $params['hint'] ) ) ? 'tooltip_' . $params['hint']['position'] . ' ' : '' ;
2573
+ ?>"
2574
+ <?php if (! $is_this_simple_list ) { ?>
2575
+ onclick="javascript:jQuery('#<?php echo $params['id']; ?>_container').show();"
2576
+ <?php } ?>
2577
+ <?php if ( ! empty( $params['hint'] ) ) { ?>
2578
+ title="<?php echo esc_attr( $params['hint']['title'] ); ?>"
2579
+ <?php } ?>
2580
+ <?php echo wpbc_get_custom_attr( $params ); ?>
2581
+ ><?php
2582
+
2583
+ ?><label class="wpbc_ui_dropdown__inside_label" <?php if ( empty( $params['title'] ) ) { echo ' style="display:none;" '; } ?> ><?php
2584
+
2585
+ echo html_entity_decode(
2586
+ wp_kses_post( $params['title'] ) // Sanitizes content for allowed HTML tags for post content
2587
+ , ENT_QUOTES // Convert &quot; to " and '
2588
+ , get_bloginfo( 'charset' ) // 'UTF-8' or other
2589
+ ); // Convert &amp;dash; to &dash; etc...
2590
+ ?>: <?php
2591
+ ?></label> <?php
2592
+
2593
+ ?><span class="wpbc_selected_in_dropdown" ><?php
2594
+ echo html_entity_decode(
2595
+ wp_kses_post( $default_selected_title ) // Sanitizes content for allowed HTML tags for post content
2596
+ , ENT_QUOTES // Convert &quot; to " and '
2597
+ , get_bloginfo( 'charset' ) // 'UTF-8' or other
2598
+ ); // Convert &amp;dash; to &dash; etc...
2599
+ ?></span> &nbsp; <?php
2600
+
2601
+ ?><span class="wpbc_ui_dropdown__inside_caret"></span><?php
2602
+
2603
+ ?></a><?php
2604
+
2605
+ ?><ul id="<?php echo $params['id']; ?>_container" class="ui_dropdown_menu ui_dropdown_menu-<?php echo esc_attr( $params['align'] ); ?>" ><?php
2606
+
2607
+ wpbc_flex_dropdown__options( $params, array( 'is_this_simple_list' => $is_this_simple_list ) );
2608
+
2609
+ ?></ul><?php
2610
+
2611
+ ?><input type="hidden"
2612
+ autocomplete="off"
2613
+ value=""
2614
+ id="<?php echo esc_attr( $params['id'] ); ?>"
2615
+ name="<?php echo esc_attr( $params['id'] ); ?>"
2616
+ /><?php
2617
+ ?>
2618
+ <script type="text/javascript">
2619
+ <?php /* document.getElementById("<?php echo $params['id']; ?>").value = "<?php echo wp_slash( json_encode($params['default'] ) ); ?>"; */ ?>
2620
+ jQuery(document).ready(function(){
2621
+
2622
+ jQuery( '#<?php echo $params['id']; ?>').val( "<?php echo wp_slash( json_encode( $params['default'] ) ); ?>" );
2623
+
2624
+ <?php if (! empty( $params['onchange'] )) { ?>
2625
+
2626
+ jQuery( '#<?php echo $params['id']; ?>' ).on( 'change', function( event ){
2627
+
2628
+ <?php echo $params['onchange']; ?>
2629
+ });
2630
+
2631
+ <?php } ?>
2632
+
2633
+ <?php if (! empty( $params['onfocus'] )) { ?>
2634
+
2635
+ jQuery( '#<?php echo $params['id']; ?>_selector' ).on( 'focus', function( event ){
2636
+
2637
+ <?php echo $params['onfocus']; ?>
2638
+ });
2639
+
2640
+ <?php } ?>
2641
+ })
2642
+ </script>
2643
+ <?php
2644
+
2645
+ ?></div><?php
2646
+ }
2647
+
2648
+ /**
2649
+ * Options list for Dropdown
2650
+ *
2651
+ * @param $params
2652
+ * @param array $args
2653
+ */
2654
+ function wpbc_flex_dropdown__options( $params, $args = array() ) {
2655
+
2656
+ $defaults = array(
2657
+ // 'milliseconds' => round( microtime( true ) * 1000 ),
2658
+ 'is_this_simple_list' => true
2659
+ );
2660
+ $args = wp_parse_args( $args, $defaults );
2661
+
2662
+
2663
+ foreach ( $params['li_options'] as $option_name => $li_option ) {
2664
+
2665
+ $default_option = array(
2666
+ 'type' => ''
2667
+ , 'class' => ''
2668
+ , 'style' => ''
2669
+ , 'title' => ''
2670
+ , 'disabled' => false
2671
+ , 'attr' => array()
2672
+ , 'value' => ''
2673
+ , 'html' => ''
2674
+ );
2675
+ $li_option = wp_parse_args( $li_option, $default_option );
2676
+
2677
+
2678
+ // Is disabled ?
2679
+ if ( true === in_array( $li_option['value'], $params['disabled'] ) ) {
2680
+ $li_option['disabled'] = true;
2681
+ }
2682
+ if ( $li_option['disabled'] ) {
2683
+ $li_option['class'] .= ' disabled';
2684
+ }
2685
+ // Is header ?
2686
+ if ( 'header' == $li_option['type'] ) {
2687
+ $li_option['class'] .= ' dropdown-header';
2688
+ }
2689
+
2690
+
2691
+ ?><li role="presentation"
2692
+ class="<?php echo esc_attr( $li_option['class'] ); ?>"
2693
+ style="<?php echo esc_attr( $li_option['style'] ); ?>"
2694
+ <?php echo wpbc_get_custom_attr( $li_option ); ?>
2695
+ ><?php
2696
+
2697
+ switch ( $li_option['type'] ) {
2698
+
2699
+ case 'simple':
2700
+
2701
+ ?><a role="menuitem"
2702
+ tabindex="-1"
2703
+ <?php if ( ! $li_option['disabled'] ) {
2704
+
2705
+ if( false !== filter_var( $li_option['value'], FILTER_VALIDATE_URL ) ){ ?>
2706
+
2707
+ href="<?php echo $li_option['value']; ?>"
2708
+
2709
+ <?php } else { ?>
2710
+
2711
+ href="javascript:void(0)"
2712
+ onclick="javascript: wpbc_ui_dropdown_simple_click( {
2713
+ 'dropdown_id' : '<?php echo $params['id']; ?>'
2714
+ , 'is_this_simple_list': <?php echo ( $args['is_this_simple_list'] ) ? 'true' : 'false'; ?>
2715
+ , 'value' : '<?php echo $li_option['value']; ?>'
2716
+ , '_this' : this
2717
+ } );"
2718
+ <?php }
2719
+
2720
+ } ?>
2721
+ ><?php
2722
+ echo $li_option['title'];
2723
+ ?></a><?php
2724
+
2725
+ break;
2726
+
2727
+ case 'html':
2728
+ echo $li_option['html'];
2729
+ break;
2730
+
2731
+ case 'header':
2732
+ echo $li_option['title'];
2733
+ break;
2734
+
2735
+ case 'complex' :
2736
+
2737
+ foreach ( $li_option['input_options'] as $input_option ) {
2738
+
2739
+ switch ( $input_option['type'] ) {
2740
+
2741
+ case 'html':
2742
+ echo $input_option['html'];
2743
+ break;
2744
+
2745
+ case 'button':
2746
+ wpbc_flex_button( $input_option );
2747
+ break;
2748
+
2749
+ case 'label':
2750
+ wpbc_flex_label( $input_option );
2751
+ break;
2752
+
2753
+ case 'text':
2754
+ wpbc_flex_text( $input_option );
2755
+ break;
2756
+
2757
+ case 'select':
2758
+ wpbc_flex_select( $input_option );
2759
+ break;
2760
+
2761
+ case 'checkbox':
2762
+ wpbc_flex_checkbox( $input_option );
2763
+ break;
2764
+
2765
+ case 'radio':
2766
+ wpbc_flex_radio( $input_option );
2767
+ break;
2768
+
2769
+ case 'addon':
2770
+ wpbc_flex_addon( $input_option );
2771
+ break;
2772
+
2773
+ default: // Default
2774
+ }
2775
+ }
2776
+ break;
2777
+
2778
+ default: // Default
2779
+ }
2780
+
2781
+ ?></li><?php
2782
+ }
2783
+ }
2784
+
2785
+
2786
+ ////////////////////////////////////////////////////////////////////////////////
2787
+ // Simple elements
2788
+ ////////////////////////////////////////////////////////////////////////////////
2789
+
2790
+ /**
2791
+ * Show FLEX Button
2792
+ *
2793
+ * @param array $item
2794
+ array(
2795
+ 'type' => 'button'
2796
+ , 'title' => '' // Title of the button
2797
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
2798
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
2799
+ , 'action' => '' // Some JavaScript to execure, for example run the function
2800
+ , 'class' => '' // wpbc_ui_button | wpbc_ui_button_primary
2801
+ , 'icon' => ''
2802
+ , 'font_icon' => ''
2803
+ , 'icon_position' => 'left' // Position of icon relative to Text: left | right
2804
+ , 'style' => '' // Any CSS class here
2805
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
2806
+ , 'attr' => array()
2807
+ );
2808
+ */
2809
+ function wpbc_flex_button( $item ) {
2810
+
2811
+ $default_item_params = array(
2812
+ 'type' => 'button'
2813
+ , 'title' => '' // Title of the button
2814
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
2815
+ , 'link' => 'javascript:void(0)' // Direct link or skip it
2816
+ , 'action' => '' // Some JavaScript to execure, for example run the function
2817
+ , 'id' => '' // '' | 'wpbc_ui_button_primary'
2818
+ , 'class' => '' // '' | 'wpbc_ui_button_primary'
2819
+ , 'icon' => false // array( 'icon_font' => 'wpbc_icn_check_circle_outline', 'position' => 'right', 'icon_img' => '' )
2820
+ , 'style' => '' // Any CSS class here
2821
+ , 'mobile_show_text' => false // Show or hide text, when viewing on Mobile devices (small window size).
2822
+ , 'attr' => array()
2823
+ , 'options' => array( 'link' => 'esc_attr' ) // array( 'link' => 'decode' )
2824
+ );
2825
+ $item_params = wp_parse_args( $item, $default_item_params );
2826
+
2827
+ ?><a class="wpbc_ui_control wpbc_ui_button <?php echo esc_attr( $item_params['class'] );
2828
+ echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
2829
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
2830
+ href="<?php
2831
+ if ( 'esc_attr' == $item_params['options']['link'] ) {
2832
+ echo esc_attr( $item_params['link'] );
2833
+ }
2834
+ if ( 'decode' == $item_params['options']['link'] ) {
2835
+ echo str_replace( '"', '', htmlspecialchars_decode( esc_attr( $item_params['link'] ), ENT_QUOTES ) );
2836
+ }
2837
+ if ( 'no_decode' == $item_params['options']['link'] ) {
2838
+ echo str_replace( '"', '', $item_params['link'] );
2839
+ }
2840
+ ?>"
2841
+ <?php if ( ! empty( $item_params['id'] ) ) { ?>
2842
+ id="<?php echo $item_params['id']; ?>"
2843
+ <?php } ?>
2844
+ <?php if ( ! empty( $item_params['action'] ) ) { ?>
2845
+ onclick="javascript:<?php echo wpbc_esc_js( $item_params['action'] ); ?>"
2846
+ <?php } ?>
2847
+ <?php if ( ! empty( $item_params['hint'] ) ) { ?>
2848
+ title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
2849
+ <?php } ?>
2850
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
2851
+ ><?php
2852
+ $btn_icon = '';
2853
+
2854
+ // Icon
2855
+ if ( ( ! empty( $item_params['icon'] ) ) && ( is_array( $item_params['icon'] ) ) ) {
2856
+
2857
+ // Icon IMG
2858
+ if ( ! empty( $item_params['icon']['icon_img'] ) ) {
2859
+
2860
+ if ( substr( $item_params['icon']['icon_img'], 0, 4 ) != 'http' ) {
2861
+ $img_path = WPBC_PLUGIN_URL . '/assets/img/' . $item_params['icon']['icon_img'];
2862
+ } else {
2863
+ $img_path = $item_params['icon']['icon_img'];
2864
+ }
2865
+ $btn_icon = '<img class="menuicons" src="' . esc_url( $img_path ) . '" />'; // Img Icon
2866
+ }
2867
+
2868
+ // Icon Font
2869
+ if ( ! empty( $item_params['icon']['icon_font'] ) ) {
2870
+ $btn_icon = '<i class="menu_icon icon-1x ' . esc_attr( $item_params['icon']['icon_font'] ) . '"></i>'; // Font Icon
2871
+ }
2872
+ }
2873
+
2874
+ if ( ( ! empty( $btn_icon ) ) && ( $item_params['icon']['position'] == 'left' ) ) {
2875
+
2876
+ echo $btn_icon;
2877
+
2878
+ if ( ! empty( $item_params['title'] ) ) {
2879
+ echo '&nbsp;';
2880
+ }
2881
+ }
2882
+
2883
+ // Text
2884
+ echo '<span' . ( ( ( ! empty( $btn_icon ) ) && ( ! $item_params['mobile_show_text'] ) )? ' class="in-button-text"' : '' ) . '>';
2885
+
2886
+ echo html_entity_decode(
2887
+ wp_kses_post( $item_params['title'] ) // Sanitizes content for allowed HTML tags for post content
2888
+ , ENT_QUOTES // Convert &quot; to " and '
2889
+ , get_bloginfo( 'charset' ) // 'UTF-8' or other
2890
+ ); // Convert &amp;dash; to &dash; etc...
2891
+
2892
+ if ( ( ! empty( $btn_icon ) ) && ( $item_params['icon']['position'] == 'right' ) ) {
2893
+ echo '&nbsp;';
2894
+ }
2895
+
2896
+ echo '</span>';
2897
+
2898
+ if ( ( ! empty( $btn_icon ) ) && ( $item_params['icon']['position'] == 'right' ) ) {
2899
+ echo $btn_icon;
2900
+ }
2901
+ ?></a><?php
2902
+ }
2903
+
2904
+ /**
2905
+ * Show FLEX Label
2906
+ *
2907
+ * @param array $item
2908
+ array(
2909
+ 'id' => '' // HTML ID of INPUT element
2910
+ , 'label' => __('Text..','booking') // Label text here
2911
+ , 'style' => '' // CSS of select element
2912
+ , 'class' => '' // CSS Class of select element
2913
+ , 'disabled' => false
2914
+ , 'attr' => array() // Any additional attributes
2915
+ )
2916
+ */
2917
+ function wpbc_flex_label( $item ) {
2918
+
2919
+ $default_item_params = array(
2920
+ 'id' => '' // HTML ID of element
2921
+ , 'label' => '' // Label
2922
+ , 'style' => '' // CSS of select element
2923
+ , 'class' => '' // CSS Class of select element
2924
+ , 'disabled' => false
2925
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
2926
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2927
+ );
2928
+ $item_params = wp_parse_args( $item, $default_item_params );
2929
+
2930
+ if ( ( ! empty( $item_params['label'] ) ) || ( ! empty( $btn_icon ) ) ) {
2931
+
2932
+ ?><label for="<?php echo esc_attr( $item_params['id'] ); ?>"
2933
+ class="wpbc_ui_control_label <?php echo esc_attr( $item_params['class'] );
2934
+ echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
2935
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
2936
+ <?php if ( ! empty( $item_params['hint'] ) ) { ?>
2937
+ title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
2938
+ <?php } ?>
2939
+ <?php disabled( $item_params['disabled'], true ); ?>
2940
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
2941
+ ><?php
2942
+
2943
+ echo html_entity_decode(
2944
+ wp_kses_post( $item_params['label'] ) // Sanitizes content for allowed HTML tags for post content
2945
+ , ENT_QUOTES // Convert &quot; to " and '
2946
+ , get_bloginfo( 'charset' ) // 'UTF-8' or other
2947
+ ); // Convert &amp;dash; to &dash; etc...
2948
+ ?></label><?php
2949
+ }
2950
+
2951
+ }
2952
+
2953
+ /**
2954
+ * Show FLEX text
2955
+ *
2956
+ * @param array $item
2957
+ *
2958
+ * Example:
2959
+ $params_checkbox = array(
2960
+ 'id' => 'my_check_id' // HTML ID of element
2961
+ , 'name' => 'my_check_id'
2962
+ , 'label' => __('Approve' ,'booking')
2963
+ , 'style' => '' // CSS of select element
2964
+ , 'class' => '' // CSS Class of select element
2965
+ , 'disabled' => false
2966
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
2967
+ , 'placeholder' => ''
2968
+ , 'value' => 'CHECK_VAL_1' // Some Value from optins array that selected by default
2969
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2970
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
2971
+ );
2972
+ ?><div class="ui_element"><?php
2973
+
2974
+ wpbc_flex_text( $params_select );
2975
+
2976
+ ?></div><?php
2977
+ *
2978
+ */
2979
+ function wpbc_flex_text( $item ) {
2980
+
2981
+ $default_item_params = array(
2982
+ 'type' => 'text'
2983
+ , 'id' => ''
2984
+ , 'name' => ''
2985
+ , 'label' => ''
2986
+ , 'disabled' => false
2987
+ , 'class' => ''
2988
+ , 'style' => ''
2989
+ , 'placeholder' => ''
2990
+ , 'attr' => array()
2991
+ , 'value' => ''
2992
+ , 'is_escape_value' => true
2993
+ , 'onfocus' => '' // JavaScript code
2994
+ , 'onchange' => '' // JavaScript code
2995
+ , 'onkeydown' => '' // JavaScript code
2996
+
2997
+ );
2998
+ $item_params = wp_parse_args( $item, $default_item_params );
2999
+
3000
+ if ( ( empty( $item_params['name'] ) )
3001
+ && ( ! empty( $item_params['id'] ) )
3002
+ ) {
3003
+ $item_params['name'] = $item_params['id'];
3004
+ }
3005
+
3006
+ // Show only, if $item_params['label'] ! EMPTY
3007
+ wpbc_flex_label(
3008
+ array(
3009
+ 'id' => $item_params['id']
3010
+ , 'label' => $item_params['label']
3011
+ )
3012
+ );
3013
+
3014
+ if ( $item_params['is_escape_value'] ) {
3015
+ $escaped_value = esc_attr( $item_params['value'] );
3016
+ } else {
3017
+ $escaped_value = $item_params['value'];
3018
+ }
3019
+
3020
+ ?><input type="<?php echo esc_attr( $item_params['type'] ); ?>"
3021
+ id="<?php echo esc_attr( $item_params['id'] ); ?>"
3022
+ name="<?php echo esc_attr( $item_params['name'] ); ?>"
3023
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
3024
+ class="wpbc_ui_control wpbc_ui_text <?php echo esc_attr( $item_params['class'] ); ?>"
3025
+ placeholder="<?php echo esc_attr( $item_params['placeholder'] ); ?>"
3026
+ value="<?php echo $escaped_value; ?>"
3027
+ autocomplete="off"
3028
+ <?php disabled( $item_params['disabled'], true ); ?>
3029
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
3030
+ <?php
3031
+ if ( ! empty( $item_params['onfocus'] ) ) {
3032
+ ?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
3033
+ }
3034
+ if ( ! empty( $item_params['onchange'] ) ) {
3035
+ ?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
3036
+ }
3037
+ if ( ! empty( $item_params['onkeydown'] ) ) {
3038
+ ?> onkeydown="javascript:<?php echo wpbc_esc_js( $item_params['onkeydown'] ); ?>" <?php
3039
+ }
3040
+ ?>
3041
+ /><?php
3042
+ }
3043
+
3044
+ /**
3045
+ * Show FLEX textarea
3046
+ *
3047
+ * @param array $item
3048
+ *
3049
+ * Example:
3050
+ $params_textarea = array(
3051
+ 'id' => 'my_check_id' // HTML ID of element
3052
+ , 'name' => 'my_check_id'
3053
+ , 'label' => __('Approve' ,'booking')
3054
+ , 'style' => '' // CSS of select element
3055
+ , 'class' => '' // CSS Class of select element
3056
+ , 'disabled' => false
3057
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3058
+ , 'rows' => '3'
3059
+ , 'cols' => '50'
3060
+ , 'placeholder' => ''
3061
+ , 'value' => 'Test VAL 1' // Some Value from optins array that selected by default
3062
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
3063
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
3064
+ );
3065
+ ?><div class="ui_element"><?php
3066
+
3067
+ wpbc_flex_textarea( $params_textarea );
3068
+
3069
+ ?></div><?php
3070
+ *
3071
+ */
3072
+ function wpbc_flex_textarea( $item ) {
3073
+
3074
+ $default_item_params = array(
3075
+ 'id' => ''
3076
+ , 'name' => ''
3077
+ , 'label' => ''
3078
+ , 'disabled' => false
3079
+ , 'class' => ''
3080
+ , 'style' => ''
3081
+ , 'placeholder' => ''
3082
+ , 'attr' => array()
3083
+ , 'rows' => '3'
3084
+ , 'cols' => '50'
3085
+ , 'value' => ''
3086
+ , 'is_escape_value' => true
3087
+ , 'onfocus' => '' // JavaScript code
3088
+ , 'onchange' => '' // JavaScript code
3089
+ );
3090
+ $item_params = wp_parse_args( $item, $default_item_params );
3091
+
3092
+ if ( ( empty( $item_params['name'] ) )
3093
+ && ( ! empty( $item_params['id'] ) )
3094
+ ) {
3095
+ $item_params['name'] = $item_params['id'];
3096
+ }
3097
+
3098
+ // Show only, if $item_params['label'] ! EMPTY
3099
+ wpbc_flex_label(
3100
+ array(
3101
+ 'id' => $item_params['id']
3102
+ , 'label' => $item_params['label']
3103
+ )
3104
+ );
3105
+
3106
+ if ( $item_params['is_escape_value'] ) {
3107
+ $escaped_value = esc_textarea( $item_params['value'] );
3108
+ } else {
3109
+ $escaped_value = $item_params['value'];
3110
+ }
3111
+
3112
+ ?><textarea id="<?php echo esc_attr( $item_params['id'] ); ?>"
3113
+ name="<?php echo esc_attr( $item_params['name'] ); ?>"
3114
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
3115
+ class="wpbc_ui_control wpbc_ui_textarea <?php echo esc_attr( $item_params['class'] ); ?>"
3116
+ placeholder="<?php echo esc_attr( $item_params['placeholder'] ); ?>"
3117
+ autocomplete="off"
3118
+ rows="<?php echo esc_attr( $item_params['rows'] ); ?>"
3119
+ cols="<?php echo esc_attr( $item_params['cols'] ); ?>"
3120
+ <?php disabled( $item_params['disabled'], true ); ?>
3121
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
3122
+ <?php
3123
+ if ( ! empty( $item_params['onfocus'] ) ) {
3124
+ ?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
3125
+ }
3126
+ if ( ! empty( $item_params['onchange'] ) ) {
3127
+ ?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
3128
+ }
3129
+ ?>
3130
+ ><?php echo $escaped_value; ?></textarea><?php
3131
+ }
3132
+
3133
+ /**
3134
+ * Show FLEX selectbox
3135
+ *
3136
+ * @param array $item
3137
+ array(
3138
+ 'id' => '' // HTML ID of element
3139
+ , 'name' => ''
3140
+ , 'style' => '' // CSS of select element
3141
+ , 'class' => '' // CSS Class of select element
3142
+ , 'multiple' => false
3143
+ , 'disabled' => false
3144
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3145
+ , 'options' => array() // Associated array of titles and values
3146
+ , 'disabled_options' => array() // If some options disbaled, then its must list here
3147
+ , 'value' => '' // Some Value from optins array that selected by default
3148
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
3149
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
3150
+ )
3151
+ *
3152
+ *
3153
+ * Simple Example :
3154
+ *
3155
+ $params_select = array(
3156
+ 'id' => 'next_days' // HTML ID of element
3157
+ , 'name' => 'next_days'
3158
+ , 'label' => '' // __( 'Next Days', 'booking' ) // Label (optional)
3159
+ , 'style' => '' // CSS of select element
3160
+ , 'class' => '' // CSS Class of select element
3161
+ , 'multiple' => false
3162
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3163
+ , 'disabled' => false
3164
+ , 'disabled_options' => array( 2, 30 ) // If some options disabled, then it has to list here
3165
+ , 'options' => array( // Associated array of titles and values
3166
+ , 1 => '1' . ' ' . __('day' ,'booking')
3167
+ , 2 => '2' . ' ' . __('days' ,'booking')
3168
+ , 7 => '1' . ' ' . __('week' ,'booking')
3169
+ , 30 => '1' . ' ' . __('month' ,'booking')
3170
+ , 365 => '1' . ' ' . __('Year' ,'booking')
3171
+ )
3172
+
3173
+ , 'value' => ( isset( $escaped_search_request_params[ 'next_days' ] ) ) ? $escaped_search_request_params[ 'next_days' ] : '183' // Some Value from options array that selected by default
3174
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
3175
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
3176
+
3177
+ );
3178
+
3179
+ ?><div class="ui_element"><?php
3180
+
3181
+ wpbc_flex_select( $params_select );
3182
+
3183
+ ?></div><?php
3184
+ *
3185
+ *
3186
+ *
3187
+ * Example complex:
3188
+ *
3189
+ *
3190
+ *
3191
+
3192
+ $params_select = array(
3193
+ 'id' => 'next_days' // HTML ID of element
3194
+ , 'name' => 'next_days'
3195
+ , 'label' => '<span class="" style="font-weight:600;">' . __( 'Cost', 'booking' ) . ' <em style="color:#888;">(' . __( 'min-max', 'booking' ) . '):</em></span>'
3196
+ , 'style' => '' // CSS of select element
3197
+ , 'class' => '' // CSS Class of select element
3198
+ , 'multiple' => false
3199
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3200
+ , 'disabled' => false
3201
+ , 'disabled_options' => array( 2, 5 ) // If some options disabled, then it has to list here
3202
+ , 'options' => array( // Associated array of titles and values: array( $option_value => $option_data, ... )
3203
+ 'group_days' => array( 'optgroup' => true, 'close' => false, 'title' => __( 'days', 'booking' ) )
3204
+ , 1 => '1' . ' ' . __('day' ,'booking')
3205
+ , 2 => '2' . ' ' . __('days' ,'booking')
3206
+ , 3 => '3' . ' ' . __('days' ,'booking')
3207
+ , 4 => '4' . ' ' . __('days' ,'booking')
3208
+ , 5 => '5' . ' ' . __('days' ,'booking')
3209
+ , 6 => '6' . ' ' . __('days' ,'booking')
3210
+ , 'group_days_end' => array( 'optgroup' => true, 'close' => true )
3211
+
3212
+ , 'group_weeks' => array( 'optgroup' => true, 'close' => false, 'title' => __( 'weeks', 'booking' ) )
3213
+ , 7 => '1' . ' ' . __('week' ,'booking')
3214
+ , 14 => '2' . ' ' . __('weeks' ,'booking')
3215
+ , 'group_weeks_end' => array( 'optgroup' => true, 'close' => true )
3216
+
3217
+ , 'group_months' => array( 'optgroup' => true, 'close' => false, 'title' => __( 'months', 'booking' ) )
3218
+ , 30 => '1' . ' ' . __('month' ,'booking')
3219
+ , 60 => '2' . ' ' . __('months' ,'booking')
3220
+ , 90 => '3' . ' ' . __('months' ,'booking')
3221
+ , 183 => '6' . ' ' . __('months' ,'booking')
3222
+ , 365 => '1' . ' ' . __('Year' ,'booking')
3223
+ , 'group_months_end' => array( 'optgroup' => true, 'close' => true )
3224
+
3225
+ , 'complex_value' => array(
3226
+ 'title' => 'Complex Option Here' // Text in selectbox option
3227
+ , 'style' => '' // CSS of select element
3228
+ , 'class' => '' // CSS Class of select element
3229
+ , 'disabled' => false
3230
+ , 'selected' => true
3231
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3232
+ , 'optgroup' => false // Use only if you need to show OPTGROUP - Also need to use 'title' of start, end 'close' for END
3233
+ , 'close' => false
3234
+ )
3235
+ )
3236
+
3237
+ , 'value' => ( isset( $escaped_search_request_params[ 'next_days' ] ) ) ? $escaped_search_request_params[ 'next_days' ] : '183' // Some Value from options array that selected by default
3238
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
3239
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val(), 'in element:' , jQuery( this ) );" // JavaScript code
3240
+
3241
+ );
3242
+
3243
+ ?><div class="ui_element"><?php
3244
+
3245
+ wpbc_flex_select( $params_select );
3246
+
3247
+ ?></div><?php
3248
+
3249
+ *
3250
+ */
3251
+ function wpbc_flex_select( $item ) {
3252
+
3253
+ $default_item_params = array(
3254
+ 'id' => '' // HTML ID of element
3255
+ , 'name' => ''
3256
+ , 'label' => '' // Label
3257
+ , 'style' => '' // CSS of select element
3258
+ , 'class' => '' // CSS Class of select element
3259
+ , 'multiple' => false
3260
+ , 'disabled' => false
3261
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3262
+ , 'options' => array() // Associated array of titles and values: array( $option_value => $option_data, ... )
3263
+ , 'disabled_options' => array() // If some options disabled, then it has to list here
3264
+ , 'value' => '' // Some Value from options array that selected by default
3265
+ , 'onfocus' => '' // JavaScript code
3266
+ , 'onchange' => '' // JavaScript code
3267
+ );
3268
+ $item_params = wp_parse_args( $item, $default_item_params );
3269
+
3270
+ // Show only, if $item_params['label'] ! EMPTY
3271
+ wpbc_flex_label(
3272
+ array(
3273
+ 'id' => $item_params['id']
3274
+ , 'label' => $item_params['label']
3275
+ )
3276
+ );
3277
+
3278
+ ?><select
3279
+ id="<?php echo esc_attr( $item_params['id'] ); ?>"
3280
+ name="<?php echo esc_attr( $item_params['name'] ); echo ( $item_params['multiple'] ? '[]' : '' ); ?>"
3281
+ class="wpbc_ui_control wpbc_ui_select <?php echo esc_attr( $item_params['class'] ); ?>"
3282
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
3283
+ <?php disabled( $item_params['disabled'], true ); ?>
3284
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
3285
+ <?php echo ( $item_params['multiple'] ? ' multiple="MULTIPLE"' : '' ); ?>
3286
+ <?php
3287
+ if ( ! empty( $item_params['onfocus'] ) ) {
3288
+ ?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
3289
+ }
3290
+ if ( ! empty( $item_params['onchange'] ) ) {
3291
+ ?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
3292
+ }
3293
+ ?>
3294
+ autocomplete="off"
3295
+ ><?php
3296
+ foreach ( $item_params['options'] as $option_value => $option_data ) {
3297
+
3298
+ if ( ! is_array( $option_data ) ) {
3299
+ $option_data = array( 'title' => $option_data );
3300
+ $is_was_simple = true;
3301
+ } else {
3302
+ $is_was_simple = false;
3303
+ }
3304
+
3305
+ $default_option_params = array(
3306
+ 'title' => '' // Text in selectbox option
3307
+ , 'style' => '' // CSS of select element
3308
+ , 'class' => '' // CSS Class of select element
3309
+ , 'disabled' => false
3310
+ , 'selected' => false
3311
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3312
+
3313
+ , 'optgroup' => false // Use only if you need to show OPTGROUP - Also need to use 'title' of start, end 'close' for END
3314
+ , 'close' => false
3315
+
3316
+ );
3317
+ $option_data = wp_parse_args( $option_data, $default_option_params );
3318
+
3319
+ if ( $option_data['optgroup'] ) { // OPTGROUP
3320
+
3321
+ if ( ! $option_data['close'] ) {
3322
+ ?><optgroup label="<?php echo esc_attr( $option_data['title'] ); ?>"><?php
3323
+ } else {
3324
+ ?></optgroup><?php
3325
+ }
3326
+
3327
+ } else { // OPTION
3328
+
3329
+ ?><option
3330
+ value="<?php echo esc_attr( $option_value ); ?>"
3331
+ <?php
3332
+ if ( $is_was_simple ) {
3333
+ selected( $option_value, $item_params['value'] );
3334
+ disabled( in_array( $option_value, $item_params['disabled_options'] ), true );
3335
+ }
3336
+ ?>
3337
+ class="<?php echo esc_attr( $option_data['class'] ); ?>"
3338
+ style="<?php echo esc_attr( $option_data['style'] ); ?>"
3339
+ <?php echo wpbc_get_custom_attr( $option_data ); ?>
3340
+ <?php selected( $option_data['selected'], true ); ?>
3341
+ <?php disabled( $option_data['disabled'], true ); ?>
3342
+
3343
+ <?php
3344
+ if ( ! empty( $item_params['value'] ) ) {
3345
+
3346
+ if ( is_array( $item_params['value'] ) ) {
3347
+ selected( in_array( esc_attr( $option_value ), $item_params['value'] ), true ); // SELECT multiple, have several items
3348
+ } else {
3349
+ selected( $item_params['value'], esc_attr( $option_value ) ); //Recheck global selected parameter
3350
+ }
3351
+ }
3352
+ ?>
3353
+
3354
+ ><?php
3355
+ echo html_entity_decode(
3356
+ wp_kses_post( $option_data['title'] ) // Sanitizes content for allowed HTML tags for post content
3357
+ , ENT_QUOTES // Convert &quot; to " and '
3358
+ , get_bloginfo( 'charset' ) // 'UTF-8' or other
3359
+ ); // Convert &amp;dash; to &dash; etc...
3360
+
3361
+
3362
+ ?></option><?php
3363
+ }
3364
+ }
3365
+ ?></select><?php
3366
+ }
3367
+
3368
+ /**
3369
+ * Show FLEX checkbox
3370
+ *
3371
+ * @param array $item
3372
+ *
3373
+ * Example:
3374
+ $params_checkbox = array(
3375
+ 'id' => 'my_check_id' // HTML ID of element
3376
+ , 'name' => 'my_check_id'
3377
+ , 'label' => array( 'title' => __('Approve' ,'booking') , 'position' => 'right' )
3378
+ , 'style' => '' // CSS of select element
3379
+ , 'class' => '' // CSS Class of select element
3380
+ , 'disabled' => false
3381
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3382
+ , 'legend' => '' // aria-label parameter
3383
+ , 'value' => 'CHECK_VAL_1' // Some Value from optins array that selected by default
3384
+ , 'selected' => !false // Selected or not
3385
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
3386
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
3387
+ );
3388
+ ?><div class="ui_element"><?php
3389
+
3390
+ wpbc_flex_checkbox( $params_select );
3391
+
3392
+ ?></div><?php
3393
+ */
3394
+ function wpbc_flex_checkbox( $item ) {
3395
+
3396
+ $default_item_params = array(
3397
+ 'type' => 'checkbox'
3398
+ , 'id' => '' // HTML ID of element
3399
+ , 'name' => ''
3400
+ , 'label' => '' // Label Example: 'label' => array( 'title' => __('Select status' ,'booking') , 'position' => 'left' )
3401
+ , 'style' => '' // CSS of select element
3402
+ , 'class' => '' // CSS Class of select element
3403
+ , 'disabled' => false
3404
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3405
+ , 'legend' => '' // aria-label parameter
3406
+ , 'value' => '' // Some Value from optins array that selected by default
3407
+ , 'selected' => false // Selected or not
3408
+ , 'onfocus' => '' // JavaScript code
3409
+ , 'onchange' => '' // JavaScript code
3410
+
3411
+ );
3412
+ $item_params = wp_parse_args( $item, $default_item_params );
3413
+
3414
+ if ( ( ! empty( $item_params['label'] ) ) && ( 'left' == $item_params['label']['position'] ) ) {
3415
+ wpbc_flex_label( array( 'id' => $item_params['id'], 'label' => $item_params['label']['title'] ) );
3416
+ }
3417
+
3418
+ ?><input type="<?php echo esc_attr( $item_params['type'] ); ?>"
3419
+ id="<?php echo esc_attr( $item_params['id'] ); ?>"
3420
+ name="<?php echo esc_attr( $item_params['name'] ); ?>"
3421
+ value="<?php echo esc_attr( $item_params['value'] ); ?>"
3422
+ aria-label="<?php echo esc_attr( $item_params['legend'] ); ?>"
3423
+ class="wpbc_ui_<?php echo esc_attr( $item_params['type'] ); ?> <?php echo esc_attr( $item_params['class'] ); ?>"
3424
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
3425
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
3426
+ <?php checked( $item_params['selected'], true ); ?>
3427
+ <?php disabled( $item_params['disabled'], true ); ?>
3428
+ <?php
3429
+ if ( ! empty( $item_params['onfocus'] ) ) {
3430
+ ?> onfocus="javascript:<?php echo wpbc_esc_js( $item_params['onfocus'] ); ?>" <?php
3431
+ }
3432
+ if ( ! empty( $item_params['onchange'] ) ) {
3433
+ ?> onchange="javascript:<?php echo wpbc_esc_js( $item_params['onchange'] ); ?>" <?php
3434
+ }
3435
+ ?>
3436
+ autocomplete="off"
3437
+ /><?php
3438
+
3439
+ if ( ( ! empty( $item_params['label'] ) ) && ( 'right' == $item_params['label']['position'] ) ) {
3440
+ wpbc_flex_label( array( 'id' => $item_params['id'], 'label' => $item_params['label']['title'] ) );
3441
+ }
3442
+ }
3443
+
3444
+ /**
3445
+ * Show FLEX radio button
3446
+ *
3447
+ * @param array $item
3448
+ *
3449
+ * Example:
3450
+ $params_checkbox = array(
3451
+ 'id' => 'my_check_id' // HTML ID of element
3452
+ , 'name' => 'my_check_id'
3453
+ , 'label' => array( 'title' => __('Approve' ,'booking') , 'position' => 'right' )
3454
+ , 'style' => '' // CSS of select element
3455
+ , 'class' => '' // CSS Class of select element
3456
+ , 'disabled' => false
3457
+ , 'attr' => array() // Any additional attributes, if this radio | checkbox element
3458
+ , 'legend' => '' // aria-label parameter
3459
+ , 'value' => 'CHECK_VAL_1' // Some Value from optins array that selected by default
3460
+ , 'selected' => !false // Selected or not
3461
+ , 'onfocus' => "console.log( 'ON FOCUS:', jQuery( this ).is(':checked') , 'in element:' , jQuery( this ) );" // JavaScript code
3462
+ , 'onchange' => "console.log( 'ON CHANGE:', jQuery( this ).val() , 'in element:' , jQuery( this ) );" // JavaScript code
3463
+ );
3464
+ ?><div class="ui_element"><?php
3465
+
3466
+ wpbc_flex_radio( $params_select );
3467
+
3468
+ $params_checkbox['id'] = 'my_check_id2';
3469
+ $params_checkbox['value'] = 'CHECK_VAL_2';
3470
+
3471
+ wpbc_flex_radio( $params_select );
3472
+
3473
+ ?></div><?php
3474
+ */
3475
+ function wpbc_flex_radio( $item ) {
3476
+ $item['type'] = 'radio';
3477
+ wpbc_flex_checkbox( $item );
3478
+ }
3479
+
3480
+ /**
3481
+ * Show FLEX addon (image or text can be here)
3482
+ *
3483
+ * @param array $item
3484
+ array(
3485
+ 'type' => 'span' // HTML tag that will bound content
3486
+ , 'html' => '' // Any other HTML content
3487
+ , 'icon' => false // array( 'icon_font' => 'wpbc_icn_check_circle_outline', 'position' => 'right', 'icon_img' => '' )
3488
+ , 'style' => '' // CSS of select element
3489
+ , 'class' => '' // CSS Class of select element // default included class is .wpbc_ui_addon
3490
+ , 'attr' => array() // Any additional attributes
3491
+ );
3492
+ * Example 1:
3493
+ ` $params_span = array(
3494
+ 'type' => 'span'
3495
+ , 'html' => '<i class="menu_icon icon-1x wpbc_icn_event"></i> &nbsp; Approve '
3496
+ , 'icon' => false // array( 'icon_font' => 'wpbc_icn_check_circle_outline', 'position' => 'right', 'icon_img' => '' )
3497
+ , 'class' => 'wpbc_ui_button inactive ui_nowrap'
3498
+ , 'style' => ''
3499
+ , 'attr' => array()
3500
+ );
3501
+
3502
+ ?><div class="ui_element"><?php
3503
+
3504
+ wpbc_flex_addon( $params_span );
3505
+
3506
+ wpbc_flex_text( $params_text );
3507
+
3508
+ wpbc_flex_addon( $params_span );
3509
+
3510
+ ?></div><?php
3511
+ * Example 2:
3512
+ $params_addon = array(
3513
+ 'type' => 'span'
3514
+ , 'html' => ''// '<i class="menu_icon icon-1x wpbc_icn_event"></i>' //'<strong>' . __( 'Dates', 'booking ' ) . '</strong>'
3515
+ , 'icon' => array( 'icon_font' => 'wpbc_icn_event', 'position' => 'right', 'icon_img' => '' )
3516
+ , 'class' => 'wpbc_ui_button inactive'
3517
+ , 'style' => ''
3518
+ , 'attr' => array()
3519
+ );
3520
+ ?><div class="ui_element ui_nowrap"><?php
3521
+ wpbc_flex_addon( $params_addon );
3522
+ ?></div><?php
3523
+
3524
+ */
3525
+ function wpbc_flex_addon( $item ) {
3526
+
3527
+ $default_item_params = array(
3528
+ 'type' => 'span'
3529
+ , 'html' => ''
3530
+ , 'icon' => false
3531
+ , 'class' => ''
3532
+ , 'style' => ''
3533
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
3534
+ , 'attr' => array()
3535
+ );
3536
+ $item_params = wp_parse_args( $item, $default_item_params );
3537
+
3538
+ // Icon
3539
+ $btn_icon = '';
3540
+ if ( ( ! empty( $item_params['icon'] ) ) && ( is_array( $item_params['icon'] ) ) ) {
3541
+
3542
+ // Icon IMG
3543
+ if ( ! empty( $item_params['icon']['icon_img'] ) ) {
3544
+
3545
+ if ( substr( $item_params['icon']['icon_img'], 0, 4 ) != 'http' ) {
3546
+ $img_path = WPBC_PLUGIN_URL . '/assets/img/' . $item_params['icon']['icon_img'];
3547
+ } else {
3548
+ $img_path = $item_params['icon']['icon_img'];
3549
+ }
3550
+ $btn_icon = '<img class="menuicons" src="' . esc_url( $img_path ) . '" />'; // Img Icon
3551
+ }
3552
+
3553
+ // Icon Font
3554
+ if ( ! empty( $item_params['icon']['icon_font'] ) ) {
3555
+ $btn_icon = '<i class="menu_icon icon-1x ' . esc_attr( $item_params['icon']['icon_font'] ) . '"></i>'; // Font Icon
3556
+ }
3557
+ }
3558
+
3559
+ ?><<?php echo esc_attr( $item_params['type'] ); ?>
3560
+ class="wpbc_ui_control wpbc_ui_addon <?php echo esc_attr( $item_params['class'] );
3561
+ echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
3562
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
3563
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
3564
+ <?php if ( ! empty( $item_params['hint'] ) ) { ?>
3565
+ title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
3566
+ <?php } ?>
3567
+
3568
+ ><?php
3569
+
3570
+ if ( ( ! empty( $btn_icon ) ) && ( 'left' == $item_params['icon']['position'] ) ) {
3571
+ echo $btn_icon;
3572
+ }
3573
+
3574
+ echo html_entity_decode(
3575
+ wp_kses_post( $item_params['html'] ) // Sanitizes content for allowed HTML tags for post content
3576
+ , ENT_QUOTES // Convert &quot; to " and '
3577
+ , get_bloginfo( 'charset' ) // 'UTF-8' or other
3578
+ ); // Convert &amp;dash; to &dash; etc...
3579
+
3580
+
3581
+ if ( ( ! empty( $btn_icon ) ) && ( 'right' == $item_params['icon']['position'] ) ) {
3582
+ echo $btn_icon;
3583
+ }
3584
+
3585
+ ?></<?php echo esc_attr( $item_params['type'] ); ?>><?php
3586
+ }
3587
+
3588
+ function wpbc_flex_divider( $item = array() ){
3589
+
3590
+ $default_item_params = array(
3591
+ 'type' => 'span'
3592
+ , 'html' => ''
3593
+ , 'icon' => false
3594
+ , 'class' => ''
3595
+ , 'style' => ''
3596
+ , 'hint' => '' // , 'hint' => array( 'title' => __('Select status' ,'booking') , 'position' => 'bottom' )
3597
+ , 'attr' => array()
3598
+ );
3599
+ $item_params = wp_parse_args( $item, $default_item_params );
3600
+
3601
+ ?><div class="wpbc_ui_control ui_elements_divider <?php echo esc_attr( $item_params['class'] );
3602
+ echo ( ! empty( $item_params['hint'] ) ) ? ' tooltip_' . esc_attr( $item_params['hint']['position'] ) . ' ' : '' ; ?>"
3603
+ style="<?php echo esc_attr( $item_params['style'] ); ?>"
3604
+ <?php echo wpbc_get_custom_attr( $item_params ); ?>
3605
+ <?php if ( ! empty( $item_params['hint'] ) ) { ?>
3606
+ title="<?php echo esc_attr( $item_params['hint']['title'] ); ?>"
3607
+ <?php } ?>
3608
+ ></div><?php
3609
+ }
3610
+ ////////////////////////////////////////////////////////////////////////////////
3611
+ // JS & CSS Loading
3612
+ ////////////////////////////////////////////////////////////////////////////////
3613
+
3614
+ /**
3615
+ * CSS files loading
3616
+ *
3617
+ * @param string $where_to_load
3618
+ */
3619
+ function wpbc_ajx_toolbar_enqueue_css_files( $where_to_load ) {
3620
+
3621
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
3622
+
3623
+ wp_enqueue_style( 'wpbc-flex-toolbar', wpbc_plugin_url( '/includes/_toolbar_ui/_src/toolbar_ui.css' ), array(), WP_BK_VERSION_NUM );
3624
+ }
3625
+ }
3626
+ add_action( 'wpbc_enqueue_css_files', 'wpbc_ajx_toolbar_enqueue_css_files', 50 );
3627
+
3628
+
3629
+ /**
3630
+ * JS files loading
3631
+ *
3632
+ * @param string $where_to_load
3633
+ */
3634
+ function wpbc_ajx_toolbar_enqueue_js_files( $where_to_load ) {
3635
+
3636
+ $in_footer = true;
3637
+
3638
+ if ( ( is_admin() ) && ( in_array( $where_to_load, array( 'admin', 'both' ) ) ) ) {
3639
+
3640
+ wp_enqueue_script( 'wpbc-flex-toolbar-ui', wpbc_plugin_url( '/includes/_toolbar_ui/_out/toolbar_ui.js' ), array( 'wpbc-global-vars' ), '1.0', $in_footer );
3641
+
3642
+ /**
3643
+ * wp_localize_script( 'wpbc-global-vars', 'wpbc_live_request_obj'
3644
+ , array(
3645
+ 'contacts' => '',
3646
+ 'reminders' => ''
3647
+ )
3648
+ );
3649
+ */
3650
+ }
3651
+ }
3652
+ add_action( 'wpbc_enqueue_js_files', 'wpbc_ajx_toolbar_enqueue_js_files', 50 );
includes/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ // Silence is golden.
includes/page-bookings/_out/bookings__actions.js ADDED
@@ -0,0 +1,512 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /**
3
+ * Ajax ----------------------------------------------------------------------------------------------------- */
4
+ //var is_this_action = false;
5
+
6
+ /**
7
+ * Send Ajax action request, like approving or cancellation
8
+ *
9
+ * @param action_param
10
+ */
11
+
12
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
13
+
14
+ function wpbc_ajx_booking_ajax_action_request() {
15
+ var action_param = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
16
+ console.groupCollapsed('WPBC_AJX_BOOKING_ACTIONS');
17
+ console.log(' == Ajax Actions :: Params == ', action_param); //is_this_action = true;
18
+
19
+ wpbc_booking_listing_reload_button__spin_start(); // Get redefined Locale, if action on single booking !
20
+
21
+ if (undefined != action_param['booking_id'] && !Array.isArray(action_param['booking_id'])) {
22
+ // Not array
23
+ action_param['locale'] = wpbc_get_selected_locale(action_param['booking_id'], wpbc_ajx_booking_listing.get_secure_param('locale'));
24
+ }
25
+
26
+ var action_post_params = {
27
+ action: 'WPBC_AJX_BOOKING_ACTIONS',
28
+ nonce: wpbc_ajx_booking_listing.get_secure_param('nonce'),
29
+ wpbc_ajx_user_id: undefined == action_param['user_id'] ? wpbc_ajx_booking_listing.get_secure_param('user_id') : action_param['user_id'],
30
+ wpbc_ajx_locale: undefined == action_param['locale'] ? wpbc_ajx_booking_listing.get_secure_param('locale') : action_param['locale'],
31
+ action_params: action_param
32
+ }; // It's required for CSV export - getting the same list of bookings
33
+
34
+ if (typeof action_param.search_params !== 'undefined') {
35
+ action_post_params['search_params'] = action_param.search_params;
36
+ delete action_post_params.action_params.search_params;
37
+ } // Start Ajax
38
+
39
+
40
+ jQuery.post(wpbc_global1.wpbc_ajaxurl, action_post_params,
41
+ /**
42
+ * S u c c e s s
43
+ *
44
+ * @param response_data - its object returned from Ajax - class-live-searcg.php
45
+ * @param textStatus - 'success'
46
+ * @param jqXHR - Object
47
+ */
48
+ function (response_data, textStatus, jqXHR) {
49
+ console.log(' == Ajax Actions :: Response WPBC_AJX_BOOKING_ACTIONS == ', response_data);
50
+ console.groupEnd(); // Probably Error
51
+
52
+ if (_typeof(response_data) !== 'object' || response_data === null) {
53
+ jQuery('#wh_sort_selector').hide();
54
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">' + response_data + '</div>');
55
+ return;
56
+ }
57
+
58
+ wpbc_booking_listing_reload_button__spin_pause();
59
+ wpbc_admin_show_message(response_data['ajx_after_action_message'].replace(/\n/g, "<br />"), '1' == response_data['ajx_after_action_result'] ? 'success' : 'error', 10000); // Success response
60
+
61
+ if ('1' == response_data['ajx_after_action_result']) {
62
+ var is_reload_ajax_listing = true; // After Google Calendar import show imported bookings and reload the page for toolbar parameters update
63
+
64
+ if (false !== response_data['ajx_after_action_result_all_params_arr']['new_listing_params']) {
65
+ wpbc_ajx_booking_send_search_request_with_params(response_data['ajx_after_action_result_all_params_arr']['new_listing_params']);
66
+ var closed_timer = setTimeout(function () {
67
+ if (wpbc_booking_listing_reload_button__is_spin()) {
68
+ if (undefined != response_data['ajx_after_action_result_all_params_arr']['new_listing_params']['reload_url_params']) {
69
+ document.location.href = response_data['ajx_after_action_result_all_params_arr']['new_listing_params']['reload_url_params'];
70
+ } else {
71
+ document.location.reload();
72
+ }
73
+ }
74
+ }, 2000);
75
+ is_reload_ajax_listing = false;
76
+ } // Start download exported CSV file
77
+
78
+
79
+ if (undefined != response_data['ajx_after_action_result_all_params_arr']['export_csv_url']) {
80
+ wpbc_ajx_booking__export_csv_url__download(response_data['ajx_after_action_result_all_params_arr']['export_csv_url']);
81
+ is_reload_ajax_listing = false;
82
+ }
83
+
84
+ if (is_reload_ajax_listing) {
85
+ wpbc_ajx_booking__actual_listing__show(); // Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
86
+ }
87
+ } // Remove spin icon from button and Enable this button.
88
+
89
+
90
+ wpbc_button__remove_spin(response_data['ajx_cleaned_params']['ui_clicked_element_id']); // Hide modals
91
+
92
+ wpbc_popup_modals__hide();
93
+ jQuery('#ajax_respond').html(response_data); // For ability to show response, add such DIV element to page
94
+ }).fail(function (jqXHR, textStatus, errorThrown) {
95
+ if (window.console && window.console.log) {
96
+ console.log('Ajax_Error', jqXHR, textStatus, errorThrown);
97
+ }
98
+
99
+ jQuery('#wh_sort_selector').hide();
100
+ var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown;
101
+
102
+ if (jqXHR.responseText) {
103
+ error_message += jqXHR.responseText;
104
+ }
105
+
106
+ error_message = error_message.replace(/\n/g, "<br />");
107
+ wpbc_ajx_booking_show_message(error_message);
108
+ }) // .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
109
+ // .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
110
+ ; // End Ajax
111
+ }
112
+ /**
113
+ * Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
114
+
115
+ /**
116
+ * Remove spin icon from button and Enable this button.
117
+ *
118
+ * @param button_clicked_element_id - HTML ID attribute of this button
119
+ * @return string - CSS classes that was previously in button icon
120
+ */
121
+
122
+
123
+ function wpbc_button__remove_spin(button_clicked_element_id) {
124
+ var previos_classes = '';
125
+
126
+ if (undefined != button_clicked_element_id) {
127
+ var jElement = jQuery('#' + button_clicked_element_id);
128
+
129
+ if (jElement.length) {
130
+ previos_classes = wpbc_button_disable_loading_icon(jElement.get(0));
131
+ }
132
+ }
133
+
134
+ return previos_classes;
135
+ }
136
+ /**
137
+ * Show Loading (rotating arrow) icon for button that has been clicked
138
+ *
139
+ * @param this_button - this object of specific button
140
+ * @return string - CSS classes that was previously in button icon
141
+ */
142
+
143
+
144
+ function wpbc_button_enable_loading_icon(this_button) {
145
+ var jButton = jQuery(this_button);
146
+ var jIcon = jButton.find('i');
147
+ var previos_classes = jIcon.attr('class');
148
+ jIcon.removeClass().addClass('menu_icon icon-1x wpbc_icn_rotate_right wpbc_spin'); // Set Rotate icon
149
+ //jIcon.addClass( 'wpbc_animation_pause' ); // Pause animation
150
+ //jIcon.addClass( 'wpbc_ui_red' ); // Set icon color red
151
+
152
+ jIcon.attr('wpbc_previous_class', previos_classes);
153
+ jButton.addClass('disabled'); // Disable button
154
+ //jButton.prop( "disabled", true );
155
+ // We need to set here attr instead of prop, because for A elements, attribute 'disabled' do not added with jButton.prop( "disabled", true );
156
+
157
+ jButton.attr('wpbc_previous_onclick', jButton.attr('onclick')); //Save this value
158
+
159
+ jButton.attr('onclick', ''); // Disable actions "on click"
160
+
161
+ return previos_classes;
162
+ }
163
+ /**
164
+ * Hide Loading (rotating arrow) icon for button that was clicked and show previous icon and enable button
165
+ *
166
+ * @param this_button - this object of specific button
167
+ * @return string - CSS classes that was previously in button icon
168
+ */
169
+
170
+
171
+ function wpbc_button_disable_loading_icon(this_button) {
172
+ var jButton = jQuery(this_button);
173
+ var jIcon = jButton.find('i');
174
+ var previos_classes = jIcon.attr('wpbc_previous_class');
175
+
176
+ if ('' != previos_classes) {
177
+ jIcon.removeClass().addClass(previos_classes);
178
+ }
179
+
180
+ jButton.removeClass('disabled'); // Remove Disable button
181
+
182
+ var previous_onclick = jButton.attr('wpbc_previous_onclick');
183
+
184
+ if ('' != previous_onclick) {
185
+ jButton.attr('onclick', previous_onclick);
186
+ }
187
+
188
+ return previos_classes;
189
+ }
190
+ /**
191
+ * Hide all open modal popups windows
192
+ */
193
+
194
+
195
+ function wpbc_popup_modals__hide() {
196
+ // Hide modals
197
+ if ('function' === typeof jQuery('.wpbc_popup_modal').wpbc_my_modal) {
198
+ jQuery('.wpbc_popup_modal').wpbc_my_modal('hide');
199
+ }
200
+ }
201
+ /**
202
+ * Dates Short <-> Wide ----------------------------------------------------------------------------------- */
203
+
204
+
205
+ function wpbc_ajx_click_on_dates_short() {
206
+ jQuery('#booking_dates_small,.booking_dates_full').hide();
207
+ jQuery('#booking_dates_full,.booking_dates_small').show();
208
+ wpbc_ajx_booking_send_search_request_with_params({
209
+ 'ui_usr__dates_short_wide': 'short'
210
+ });
211
+ }
212
+
213
+ function wpbc_ajx_click_on_dates_wide() {
214
+ jQuery('#booking_dates_full,.booking_dates_small').hide();
215
+ jQuery('#booking_dates_small,.booking_dates_full').show();
216
+ wpbc_ajx_booking_send_search_request_with_params({
217
+ 'ui_usr__dates_short_wide': 'wide'
218
+ });
219
+ }
220
+
221
+ function wpbc_ajx_click_on_dates_toggle(this_date) {
222
+ jQuery(this_date).parents('.wpbc_col_dates').find('.booking_dates_small').toggle();
223
+ jQuery(this_date).parents('.wpbc_col_dates').find('.booking_dates_full').toggle();
224
+ /*
225
+ var visible_section = jQuery( this_date ).parents( '.booking_dates_expand_section' );
226
+ visible_section.hide();
227
+ if ( visible_section.hasClass( 'booking_dates_full' ) ){
228
+ visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_small' ).show();
229
+ } else {
230
+ visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_full' ).show();
231
+ }*/
232
+
233
+ console.log('wpbc_ajx_click_on_dates_toggle', this_date);
234
+ }
235
+ /**
236
+ * Locale --------------------------------------------------------------------------------------------------- */
237
+
238
+ /**
239
+ * Select options in select boxes based on attribute "value_of_selected_option" and RED color and hint for LOCALE button -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
240
+ */
241
+
242
+
243
+ function wpbc_ajx_booking__ui_define__locale() {
244
+ jQuery('.wpbc_listing_container select').each(function (index) {
245
+ var selection = jQuery(this).attr("value_of_selected_option"); // Define selected select boxes
246
+
247
+ if (undefined !== selection) {
248
+ jQuery(this).find('option[value="' + selection + '"]').prop('selected', true);
249
+
250
+ if ('' != selection && jQuery(this).hasClass('set_booking_locale_selectbox')) {
251
+ // Locale
252
+ var booking_locale_button = jQuery(this).parents('.ui_element_locale').find('.set_booking_locale_button'); //booking_locale_button.css( 'color', '#db4800' ); // Set button red
253
+
254
+ booking_locale_button.addClass('wpbc_ui_red'); // Set button red
255
+
256
+ if ('function' === typeof wpbc_tippy) {
257
+ booking_locale_button.get(0)._tippy.setContent(selection);
258
+ }
259
+ }
260
+ }
261
+ });
262
+ }
263
+ /**
264
+ * Remark --------------------------------------------------------------------------------------------------- */
265
+
266
+ /**
267
+ * Define content of remark "booking note" button and textarea. -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
268
+ */
269
+
270
+
271
+ function wpbc_ajx_booking__ui_define__remark() {
272
+ jQuery('.wpbc_listing_container .ui_remark_section textarea').each(function (index) {
273
+ var text_val = jQuery(this).val();
274
+
275
+ if (undefined !== text_val && '' != text_val) {
276
+ var remark_button = jQuery(this).parents('.ui_group').find('.set_booking_note_button');
277
+
278
+ if (remark_button.length > 0) {
279
+ remark_button.addClass('wpbc_ui_red'); // Set button red
280
+
281
+ if ('function' === typeof wpbc_tippy) {
282
+ //remark_button.get( 0 )._tippy.allowHTML = true;
283
+ //remark_button.get( 0 )._tippy.setContent( text_val.replace(/[\n\r]/g, '<br>') );
284
+ remark_button.get(0)._tippy.setProps({
285
+ allowHTML: true,
286
+ content: text_val.replace(/[\n\r]/g, '<br>')
287
+ });
288
+ }
289
+ }
290
+ }
291
+ });
292
+ }
293
+ /**
294
+ * Actions ,when we click on "Remark" button.
295
+ *
296
+ * @param jq_button - this jQuery button object
297
+ */
298
+
299
+
300
+ function wpbc_ajx_booking__ui_click__remark(jq_button) {
301
+ jq_button.parents('.ui_group').find('.ui_remark_section').toggle();
302
+ }
303
+ /**
304
+ * Change booking resource ---------------------------------------------------------------------------------- */
305
+
306
+
307
+ function wpbc_ajx_booking__ui_click_show__change_resource(booking_id, resource_id) {
308
+ // Define ID of booking to hidden input
309
+ jQuery('#change_booking_resource__booking_id').val(booking_id); // Select booking resource that belong to booking
310
+
311
+ jQuery('#change_booking_resource__resource_select').val(resource_id).trigger('change');
312
+ var cbr; // Get Resource section
313
+
314
+ cbr = jQuery("#change_booking_resource__section").detach(); // Append it to booking ROW
315
+
316
+ cbr.appendTo(jQuery("#ui__change_booking_resource__section_in_booking_" + booking_id));
317
+ cbr = null; // Hide sections of "Change booking resource" in all other bookings ROWs
318
+ //jQuery( ".ui__change_booking_resource__section_in_booking" ).hide();
319
+
320
+ if (!jQuery("#ui__change_booking_resource__section_in_booking_" + booking_id).is(':visible')) {
321
+ jQuery(".ui__under_actions_row__section_in_booking").hide();
322
+ } // Show only "change booking resource" section for current booking
323
+
324
+
325
+ jQuery("#ui__change_booking_resource__section_in_booking_" + booking_id).toggle();
326
+ }
327
+
328
+ function wpbc_ajx_booking__ui_click_save__change_resource(this_el, booking_action, el_id) {
329
+ wpbc_ajx_booking_ajax_action_request({
330
+ 'booking_action': booking_action,
331
+ 'booking_id': jQuery('#change_booking_resource__booking_id').val(),
332
+ 'selected_resource_id': jQuery('#change_booking_resource__resource_select').val(),
333
+ 'ui_clicked_element_id': el_id
334
+ });
335
+ wpbc_button_enable_loading_icon(this_el); // wpbc_ajx_booking__ui_click_close__change_resource();
336
+ }
337
+
338
+ function wpbc_ajx_booking__ui_click_close__change_resource() {
339
+ var cbrce; // Get Resource section
340
+
341
+ cbrce = jQuery("#change_booking_resource__section").detach(); // Append it to hidden HTML template section at the bottom of the page
342
+
343
+ cbrce.appendTo(jQuery("#wpbc_hidden_template__change_booking_resource"));
344
+ cbrce = null; // Hide all change booking resources sections
345
+
346
+ jQuery(".ui__change_booking_resource__section_in_booking").hide();
347
+ }
348
+ /**
349
+ * Duplicate booking in other resource ---------------------------------------------------------------------- */
350
+
351
+
352
+ function wpbc_ajx_booking__ui_click_show__duplicate_booking(booking_id, resource_id) {
353
+ // Define ID of booking to hidden input
354
+ jQuery('#duplicate_booking_to_other_resource__booking_id').val(booking_id); // Select booking resource that belong to booking
355
+
356
+ jQuery('#duplicate_booking_to_other_resource__resource_select').val(resource_id).trigger('change');
357
+ var cbr; // Get Resource section
358
+
359
+ cbr = jQuery("#duplicate_booking_to_other_resource__section").detach(); // Append it to booking ROW
360
+
361
+ cbr.appendTo(jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id));
362
+ cbr = null; // Hide sections of "Duplicate booking" in all other bookings ROWs
363
+
364
+ if (!jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id).is(':visible')) {
365
+ jQuery(".ui__under_actions_row__section_in_booking").hide();
366
+ } // Show only "Duplicate booking" section for current booking ROW
367
+
368
+
369
+ jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id).toggle();
370
+ }
371
+
372
+ function wpbc_ajx_booking__ui_click_save__duplicate_booking(this_el, booking_action, el_id) {
373
+ wpbc_ajx_booking_ajax_action_request({
374
+ 'booking_action': booking_action,
375
+ 'booking_id': jQuery('#duplicate_booking_to_other_resource__booking_id').val(),
376
+ 'selected_resource_id': jQuery('#duplicate_booking_to_other_resource__resource_select').val(),
377
+ 'ui_clicked_element_id': el_id
378
+ });
379
+ wpbc_button_enable_loading_icon(this_el); // wpbc_ajx_booking__ui_click_close__change_resource();
380
+ }
381
+
382
+ function wpbc_ajx_booking__ui_click_close__duplicate_booking() {
383
+ var cbrce; // Get Resource section
384
+
385
+ cbrce = jQuery("#duplicate_booking_to_other_resource__section").detach(); // Append it to hidden HTML template section at the bottom of the page
386
+
387
+ cbrce.appendTo(jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource"));
388
+ cbrce = null; // Hide all change booking resources sections
389
+
390
+ jQuery(".ui__duplicate_booking_to_other_resource__section_in_booking").hide();
391
+ }
392
+ /**
393
+ * Change payment status ------------------------------------------------------------------------------------ */
394
+
395
+
396
+ function wpbc_ajx_booking__ui_click_show__set_payment_status(booking_id) {
397
+ var jSelect = jQuery('#ui__set_payment_status__section_in_booking_' + booking_id).find('select');
398
+ var selected_pay_status = jSelect.attr("ajx-selected-value"); // Is it float - then it's unknown
399
+
400
+ if (!isNaN(parseFloat(selected_pay_status))) {
401
+ jSelect.find('option[value="1"]').prop('selected', true); // Unknown value is '1' in select box
402
+ } else {
403
+ jSelect.find('option[value="' + selected_pay_status + '"]').prop('selected', true); // Otherwise known payment status
404
+ } // Hide sections of "Change booking resource" in all other bookings ROWs
405
+
406
+
407
+ if (!jQuery("#ui__set_payment_status__section_in_booking_" + booking_id).is(':visible')) {
408
+ jQuery(".ui__under_actions_row__section_in_booking").hide();
409
+ } // Show only "change booking resource" section for current booking
410
+
411
+
412
+ jQuery("#ui__set_payment_status__section_in_booking_" + booking_id).toggle();
413
+ }
414
+
415
+ function wpbc_ajx_booking__ui_click_save__set_payment_status(booking_id, this_el, booking_action, el_id) {
416
+ wpbc_ajx_booking_ajax_action_request({
417
+ 'booking_action': booking_action,
418
+ 'booking_id': booking_id,
419
+ 'selected_payment_status': jQuery('#ui_btn_set_payment_status' + booking_id).val(),
420
+ 'ui_clicked_element_id': el_id + '_save'
421
+ });
422
+ wpbc_button_enable_loading_icon(this_el);
423
+ jQuery('#' + el_id + '_cancel').hide(); //wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
424
+ }
425
+
426
+ function wpbc_ajx_booking__ui_click_close__set_payment_status() {
427
+ // Hide all change payment status for booking
428
+ jQuery(".ui__set_payment_status__section_in_booking").hide();
429
+ }
430
+ /**
431
+ * Change booking cost -------------------------------------------------------------------------------------- */
432
+
433
+
434
+ function wpbc_ajx_booking__ui_click_save__set_booking_cost(booking_id, this_el, booking_action, el_id) {
435
+ wpbc_ajx_booking_ajax_action_request({
436
+ 'booking_action': booking_action,
437
+ 'booking_id': booking_id,
438
+ 'booking_cost': jQuery('#ui_btn_set_booking_cost' + booking_id + '_cost').val(),
439
+ 'ui_clicked_element_id': el_id + '_save'
440
+ });
441
+ wpbc_button_enable_loading_icon(this_el);
442
+ jQuery('#' + el_id + '_cancel').hide(); //wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
443
+ }
444
+
445
+ function wpbc_ajx_booking__ui_click_close__set_booking_cost() {
446
+ // Hide all change payment status for booking
447
+ jQuery(".ui__set_booking_cost__section_in_booking").hide();
448
+ }
449
+ /**
450
+ * Send Payment request -------------------------------------------------------------------------------------- */
451
+
452
+
453
+ function wpbc_ajx_booking__ui_click__send_payment_request() {
454
+ wpbc_ajx_booking_ajax_action_request({
455
+ 'booking_action': 'send_payment_request',
456
+ 'booking_id': jQuery('#wpbc_modal__payment_request__booking_id').val(),
457
+ 'reason_of_action': jQuery('#wpbc_modal__payment_request__reason_of_action').val(),
458
+ 'ui_clicked_element_id': 'wpbc_modal__payment_request__button_send'
459
+ });
460
+ wpbc_button_enable_loading_icon(jQuery('#wpbc_modal__payment_request__button_send').get(0));
461
+ }
462
+ /**
463
+ * Import Google Calendar ------------------------------------------------------------------------------------ */
464
+
465
+
466
+ function wpbc_ajx_booking__ui_click__import_google_calendar() {
467
+ wpbc_ajx_booking_ajax_action_request({
468
+ 'booking_action': 'import_google_calendar',
469
+ 'ui_clicked_element_id': 'wpbc_modal__import_google_calendar__button_send',
470
+ 'booking_gcal_events_from': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_from option:selected').val(),
471
+ 'booking_gcal_events_from_offset': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset').val(),
472
+ 'booking_gcal_events_from_offset_type': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset_type option:selected').val(),
473
+ 'booking_gcal_events_until': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_until option:selected').val(),
474
+ 'booking_gcal_events_until_offset': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset').val(),
475
+ 'booking_gcal_events_until_offset_type': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset_type option:selected').val(),
476
+ 'booking_gcal_events_max': jQuery('#wpbc_modal__import_google_calendar__section #booking_gcal_events_max').val(),
477
+ 'booking_gcal_resource': jQuery('#wpbc_modal__import_google_calendar__section #wpbc_booking_resource option:selected').val()
478
+ });
479
+ wpbc_button_enable_loading_icon(jQuery('#wpbc_modal__import_google_calendar__section #wpbc_modal__import_google_calendar__button_send').get(0));
480
+ }
481
+ /**
482
+ * Export bookings to CSV ------------------------------------------------------------------------------------ */
483
+
484
+
485
+ function wpbc_ajx_booking__ui_click__export_csv(params) {
486
+ var selected_booking_id_arr = wpbc_get_selected_row_id();
487
+ wpbc_ajx_booking_ajax_action_request({
488
+ 'booking_action': params['booking_action'],
489
+ 'ui_clicked_element_id': params['ui_clicked_element_id'],
490
+ 'export_type': params['export_type'],
491
+ 'csv_export_separator': params['csv_export_separator'],
492
+ 'csv_export_skip_fields': params['csv_export_skip_fields'],
493
+ 'booking_id': selected_booking_id_arr.join(','),
494
+ 'search_params': wpbc_ajx_booking_listing.search_get_all_params()
495
+ });
496
+ var this_el = jQuery('#' + params['ui_clicked_element_id']).get(0);
497
+ wpbc_button_enable_loading_icon(this_el);
498
+ }
499
+ /**
500
+ * Open URL in new tab - mainly it's used for open CSV link for downloaded exported bookings as CSV
501
+ *
502
+ * @param export_csv_url
503
+ */
504
+
505
+
506
+ function wpbc_ajx_booking__export_csv_url__download(export_csv_url) {
507
+ //var selected_booking_id_arr = wpbc_get_selected_row_id();
508
+ document.location.href = export_csv_url; // + '&selected_id=' + selected_booking_id_arr.join(',');
509
+ // It's open additional dialog for asking opening ulr in new tab
510
+ // window.open( export_csv_url, '_blank').focus();
511
+ }
512
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX3NyYy9ib29raW5nc19fYWN0aW9ucy5qcyJdLCJuYW1lcyI6WyJ3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QiLCJhY3Rpb25fcGFyYW0iLCJjb25zb2xlIiwiZ3JvdXBDb2xsYXBzZWQiLCJsb2ciLCJ3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0IiwidW5kZWZpbmVkIiwiQXJyYXkiLCJpc0FycmF5Iiwid3BiY19nZXRfc2VsZWN0ZWRfbG9jYWxlIiwid3BiY19hanhfYm9va2luZ19saXN0aW5nIiwiZ2V0X3NlY3VyZV9wYXJhbSIsImFjdGlvbl9wb3N0X3BhcmFtcyIsImFjdGlvbiIsIm5vbmNlIiwid3BiY19hanhfdXNlcl9pZCIsIndwYmNfYWp4X2xvY2FsZSIsImFjdGlvbl9wYXJhbXMiLCJzZWFyY2hfcGFyYW1zIiwialF1ZXJ5IiwicG9zdCIsIndwYmNfZ2xvYmFsMSIsIndwYmNfYWpheHVybCIsInJlc3BvbnNlX2RhdGEiLCJ0ZXh0U3RhdHVzIiwianFYSFIiLCJncm91cEVuZCIsImhpZGUiLCJnZXRfb3RoZXJfcGFyYW0iLCJodG1sIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSIsIndwYmNfYWRtaW5fc2hvd19tZXNzYWdlIiwicmVwbGFjZSIsImlzX3JlbG9hZF9hamF4X2xpc3RpbmciLCJ3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMiLCJjbG9zZWRfdGltZXIiLCJzZXRUaW1lb3V0Iiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9faXNfc3BpbiIsImRvY3VtZW50IiwibG9jYXRpb24iLCJocmVmIiwicmVsb2FkIiwid3BiY19hanhfYm9va2luZ19fZXhwb3J0X2Nzdl91cmxfX2Rvd25sb2FkIiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3ciLCJ3cGJjX2J1dHRvbl9fcmVtb3ZlX3NwaW4iLCJ3cGJjX3BvcHVwX21vZGFsc19faGlkZSIsImZhaWwiLCJlcnJvclRocm93biIsIndpbmRvdyIsImVycm9yX21lc3NhZ2UiLCJyZXNwb25zZVRleHQiLCJ3cGJjX2FqeF9ib29raW5nX3Nob3dfbWVzc2FnZSIsImJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWQiLCJwcmV2aW9zX2NsYXNzZXMiLCJqRWxlbWVudCIsImxlbmd0aCIsIndwYmNfYnV0dG9uX2Rpc2FibGVfbG9hZGluZ19pY29uIiwiZ2V0Iiwid3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiIsInRoaXNfYnV0dG9uIiwiakJ1dHRvbiIsImpJY29uIiwiZmluZCIsImF0dHIiLCJyZW1vdmVDbGFzcyIsImFkZENsYXNzIiwicHJldmlvdXNfb25jbGljayIsIndwYmNfbXlfbW9kYWwiLCJ3cGJjX2FqeF9jbGlja19vbl9kYXRlc19zaG9ydCIsInNob3ciLCJ3cGJjX2FqeF9jbGlja19vbl9kYXRlc193aWRlIiwid3BiY19hanhfY2xpY2tfb25fZGF0ZXNfdG9nZ2xlIiwidGhpc19kYXRlIiwicGFyZW50cyIsInRvZ2dsZSIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2RlZmluZV9fbG9jYWxlIiwiZWFjaCIsImluZGV4Iiwic2VsZWN0aW9uIiwicHJvcCIsImhhc0NsYXNzIiwiYm9va2luZ19sb2NhbGVfYnV0dG9uIiwid3BiY190aXBweSIsIl90aXBweSIsInNldENvbnRlbnQiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyayIsInRleHRfdmFsIiwidmFsIiwicmVtYXJrX2J1dHRvbiIsInNldFByb3BzIiwiYWxsb3dIVE1MIiwiY29udGVudCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19yZW1hcmsiLCJqcV9idXR0b24iLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19jaGFuZ2VfcmVzb3VyY2UiLCJib29raW5nX2lkIiwicmVzb3VyY2VfaWQiLCJ0cmlnZ2VyIiwiY2JyIiwiZGV0YWNoIiwiYXBwZW5kVG8iLCJpcyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX2NoYW5nZV9yZXNvdXJjZSIsInRoaXNfZWwiLCJib29raW5nX2FjdGlvbiIsImVsX2lkIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2NoYW5nZV9yZXNvdXJjZSIsImNicmNlIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2hvd19fZHVwbGljYXRlX2Jvb2tpbmciLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19kdXBsaWNhdGVfYm9va2luZyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19kdXBsaWNhdGVfYm9va2luZyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX3NldF9wYXltZW50X3N0YXR1cyIsImpTZWxlY3QiLCJzZWxlY3RlZF9wYXlfc3RhdHVzIiwiaXNOYU4iLCJwYXJzZUZsb2F0Iiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fc2V0X3BheW1lbnRfc3RhdHVzIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX3NldF9wYXltZW50X3N0YXR1cyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9ib29raW5nX2Nvc3QiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fc2V0X2Jvb2tpbmdfY29zdCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19zZW5kX3BheW1lbnRfcmVxdWVzdCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2V4cG9ydF9jc3YiLCJwYXJhbXMiLCJzZWxlY3RlZF9ib29raW5nX2lkX2FyciIsIndwYmNfZ2V0X3NlbGVjdGVkX3Jvd19pZCIsImpvaW4iLCJz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LEVBQUFBLG9DQUFvQyxDQUFFO0FBQzVCLHNCQUEwQjJILE1BQU0sQ0FBRSxnQkFBRixDQURKO0FBRTVCLDZCQUEwQkEsTUFBTSxDQUFFLHVCQUFGLENBRko7QUFJNUIsbUJBQTBCQSxNQUFNLENBQUUsYUFBRixDQUpKO0FBSzVCLDRCQUEwQkEsTUFBTSxDQUFFLHNCQUFGLENBTEo7QUFNNUIsOEJBQTBCQSxNQUFNLENBQUUsd0JBQUYsQ0FOSjtBQVE1QixrQkFBZUMsdUJBQXVCLENBQUNFLElBQXhCLENBQTZCLEdBQTdCLENBUmE7QUFTNUIscUJBQWtCcEgsd0JBQXdCLENBQUNxSCxxQkFBekI7QUFUVSxHQUFGLENBQXBDO0FBWUEsTUFBSXhCLE9BQU8sR0FBR3BGLE1BQU0sQ0FBRSxNQUFNd0csTUFBTSxDQUFFLHVCQUFGLENBQWQsQ0FBTixDQUFrRGxFLEdBQWxELENBQXVELENBQXZELENBQWQ7QUFFQUMsRUFBQUEsK0JBQStCLENBQUU2QyxPQUFGLENBQS9CO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOzs7QUFDQSxTQUFTN0QsMENBQVQsQ0FBcURzRixjQUFyRCxFQUFxRTtBQUVwRTtBQUVBMUYsRUFBQUEsUUFBUSxDQUFDQyxRQUFULENBQWtCQyxJQUFsQixHQUF5QndGLGNBQXpCLENBSm9FLENBSTVCO0FBRXhDO0FBQ0E7QUFDQSIsInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xyXG5cclxuLyoqXHJcbiAqICAgQWpheCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcbi8vdmFyIGlzX3RoaXNfYWN0aW9uID0gZmFsc2U7XHJcbi8qKlxyXG4gKiBTZW5kIEFqYXggYWN0aW9uIHJlcXVlc3QsICBsaWtlIGFwcHJvdmluZyBvciBjYW5jZWxsYXRpb25cclxuICpcclxuICogQHBhcmFtIGFjdGlvbl9wYXJhbVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCBhY3Rpb25fcGFyYW0gPSB7fSApe1xyXG5cclxuY29uc29sZS5ncm91cENvbGxhcHNlZCggJ1dQQkNfQUpYX0JPT0tJTkdfQUNUSU9OUycgKTsgY29uc29sZS5sb2coICcgPT0gQWpheCBBY3Rpb25zIDo6IFBhcmFtcyA9PSAnLCBhY3Rpb25fcGFyYW0gKTtcclxuLy9pc190aGlzX2FjdGlvbiA9IHRydWU7XHJcblxyXG5cdHdwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX3NwaW5fc3RhcnQoKTtcclxuXHJcblx0Ly8gR2V0IHJlZGVmaW5lZCBMb2NhbGUsICBpZiBhY3Rpb24gb24gc2luZ2xlIGJvb2tpbmcgIVxyXG5cdGlmICggICggdW5kZWZpbmVkICE9IGFjdGlvbl9wYXJhbVsgJ2Jvb2tpbmdfaWQnIF0gKSAmJiAoICEgQXJyYXkuaXNBcnJheSggYWN0aW9uX3BhcmFtWyAnYm9va2luZ19pZCcgXSApICkgKXtcdFx0XHRcdC8vIE5vdCBhcnJheVxyXG5cclxuXHRcdGFjdGlvbl9wYXJhbVsgJ2xvY2FsZScgXSA9IHdwYmNfZ2V0X3NlbGVjdGVkX2xvY2FsZSggYWN0aW9uX3BhcmFtWyAnYm9va2luZ19pZCcgXSwgd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oICdsb2NhbGUnICkgKTtcclxuXHR9XHJcblxyXG5cdHZhciBhY3Rpb25fcG9zdF9wYXJhbXMgPSB7XHJcblx0XHRcdFx0XHRcdFx0XHRhY3Rpb24gICAgICAgICAgOiAnV1BCQ19BSlhfQk9PS0lOR19BQ1RJT05TJyxcclxuXHRcdFx0XHRcdFx0XHRcdG5vbmNlICAgICAgICAgICA6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAnbm9uY2UnICksXHJcblx0XHRcdFx0XHRcdFx0XHR3cGJjX2FqeF91c2VyX2lkOiAoICggdW5kZWZpbmVkID09IGFjdGlvbl9wYXJhbVsgJ3VzZXJfaWQnIF0gKSA/IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAndXNlcl9pZCcgKSA6IGFjdGlvbl9wYXJhbVsgJ3VzZXJfaWQnIF0gKSxcclxuXHRcdFx0XHRcdFx0XHRcdHdwYmNfYWp4X2xvY2FsZTogICggKCB1bmRlZmluZWQgPT0gYWN0aW9uX3BhcmFtWyAnbG9jYWxlJyBdICkgID8gd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oICdsb2NhbGUnICkgIDogYWN0aW9uX3BhcmFtWyAnbG9jYWxlJyBdICksXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0YWN0aW9uX3BhcmFtc1x0OiBhY3Rpb25fcGFyYW1cclxuXHRcdFx0XHRcdFx0XHR9O1xyXG5cclxuXHQvLyBJdCdzIHJlcXVpcmVkIGZvciBDU1YgZXhwb3J0IC0gZ2V0dGluZyB0aGUgc2FtZSBsaXN0ICBvZiBib29raW5nc1xyXG5cdGlmICggdHlwZW9mIGFjdGlvbl9wYXJhbS5zZWFyY2hfcGFyYW1zICE9PSAndW5kZWZpbmVkJyApe1xyXG5cdFx0YWN0aW9uX3Bvc3RfcGFyYW1zWyAnc2VhcmNoX3BhcmFtcycgXSA9IGFjdGlvbl9wYXJhbS5zZWFyY2hfcGFyYW1zO1xyXG5cdFx0ZGVsZXRlIGFjdGlvbl9wb3N0X3BhcmFtcy5hY3Rpb25fcGFyYW1zLnNlYXJjaF9wYXJhbXM7XHJcblx0fVxyXG5cclxuXHQvLyBTdGFydCBBamF4XHJcblx0alF1ZXJ5LnBvc3QoIHdwYmNfZ2xvYmFsMS53cGJjX2FqYXh1cmwgLFxyXG5cclxuXHRcdFx0XHRhY3Rpb25fcG9zdF9wYXJhbXMgLFxyXG5cclxuXHRcdFx0XHQvKipcclxuXHRcdFx0XHQgKiBTIHUgYyBjIGUgcyBzXHJcblx0XHRcdFx0ICpcclxuXHRcdFx0XHQgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjZy5waHBcclxuXHRcdFx0XHQgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuXHRcdFx0XHQgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG5cdFx0XHRcdCAqL1xyXG5cdFx0XHRcdGZ1bmN0aW9uICggcmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIgKSB7XHJcblxyXG5jb25zb2xlLmxvZyggJyA9PSBBamF4IEFjdGlvbnMgOjogUmVzcG9uc2UgV1BCQ19BSlhfQk9PS0lOR19BQ1RJT05TID09ICcsIHJlc3BvbnNlX2RhdGEgKTsgY29uc29sZS5ncm91cEVuZCgpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFByb2JhYmx5IEVycm9yXHJcblx0XHRcdFx0XHRpZiAoICh0eXBlb2YgcmVzcG9uc2VfZGF0YSAhPT0gJ29iamVjdCcpIHx8IChyZXNwb25zZV9kYXRhID09PSBudWxsKSApe1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0XHRcdFx0XHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiYy1zZXR0aW5ncy1ub3RpY2Ugbm90aWNlLXdhcm5pbmdcIiBzdHlsZT1cInRleHQtYWxpZ246bGVmdFwiPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZV9kYXRhICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlKCk7XHJcblxyXG5cdFx0XHRcdFx0d3BiY19hZG1pbl9zaG93X21lc3NhZ2UoXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fbWVzc2FnZScgXS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICggJzEnID09IHJlc3BvbnNlX2RhdGFbICdhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdCcgXSApID8gJ3N1Y2Nlc3MnIDogJ2Vycm9yJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsIDEwMDAwXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cclxuXHRcdFx0XHRcdC8vIFN1Y2Nlc3MgcmVzcG9uc2VcclxuXHRcdFx0XHRcdGlmICggJzEnID09IHJlc3BvbnNlX2RhdGFbICdhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdCcgXSApe1xyXG5cclxuXHRcdFx0XHRcdFx0dmFyIGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgPSB0cnVlO1xyXG5cclxuXHRcdFx0XHRcdFx0Ly8gQWZ0ZXIgR29vZ2xlIENhbGVuZGFyIGltcG9ydCBzaG93IGltcG9ydGVkIGJvb2tpbmdzIGFuZCByZWxvYWQgdGhlIHBhZ2UgZm9yIHRvb2xiYXIgcGFyYW1ldGVycyB1cGRhdGVcclxuXHRcdFx0XHRcdFx0aWYgKCBmYWxzZSAhPT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnbmV3X2xpc3RpbmdfcGFyYW1zJyBdICl7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyggcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnbmV3X2xpc3RpbmdfcGFyYW1zJyBdICk7XHJcblxyXG5cdFx0XHRcdFx0XHRcdHZhciBjbG9zZWRfdGltZXIgPSBzZXRUaW1lb3V0KCBmdW5jdGlvbiAoKXtcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9faXNfc3BpbigpICl7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnbmV3X2xpc3RpbmdfcGFyYW1zJyBdWyAncmVsb2FkX3VybF9wYXJhbXMnIF0gKXtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSByZXNwb25zZV9kYXRhWyAnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInIF1bICduZXdfbGlzdGluZ19wYXJhbXMnIF1bICdyZWxvYWRfdXJsX3BhcmFtcycgXTtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCk7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgMjAwMCApO1xyXG5cdFx0XHRcdFx0XHRcdGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgPSBmYWxzZTtcclxuXHRcdFx0XHRcdFx0fVxyXG5cclxuXHRcdFx0XHRcdFx0Ly8gU3RhcnQgZG93bmxvYWQgZXhwb3J0ZWQgQ1NWIGZpbGVcclxuXHRcdFx0XHRcdFx0aWYgKCB1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJyBdWyAnZXhwb3J0X2Nzdl91cmwnIF0gKXtcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQoIHJlc3BvbnNlX2RhdGFbICdhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdF9hbGxfcGFyYW1zX2FycicgXVsgJ2V4cG9ydF9jc3ZfdXJsJyBdICk7XHJcblx0XHRcdFx0XHRcdFx0aXNfcmVsb2FkX2FqYXhfbGlzdGluZyA9IGZhbHNlO1xyXG5cdFx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0XHRpZiAoIGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgKXtcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19fc2hvdygpO1x0Ly9cdFNlbmRpbmcgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXHJcblx0XHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gUmVtb3ZlIHNwaW4gaWNvbiBmcm9tICBidXR0b24gYW5kIEVuYWJsZSB0aGlzIGJ1dHRvbi5cclxuXHRcdFx0XHRcdHdwYmNfYnV0dG9uX19yZW1vdmVfc3BpbiggcmVzcG9uc2VfZGF0YVsgJ2FqeF9jbGVhbmVkX3BhcmFtcycgXVsgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCcgXSApXHJcblxyXG5cdFx0XHRcdFx0Ly8gSGlkZSBtb2RhbHNcclxuXHRcdFx0XHRcdHdwYmNfcG9wdXBfbW9kYWxzX19oaWRlKCk7XHJcblxyXG5cdFx0XHRcdFx0alF1ZXJ5KCAnI2FqYXhfcmVzcG9uZCcgKS5odG1sKCByZXNwb25zZV9kYXRhICk7XHRcdC8vIEZvciBhYmlsaXR5IHRvIHNob3cgcmVzcG9uc2UsIGFkZCBzdWNoIERJViBlbGVtZW50IHRvIHBhZ2VcclxuXHRcdFx0XHR9XHJcblx0XHRcdCAgKS5mYWlsKCBmdW5jdGlvbiAoIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biApIHsgICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdBamF4X0Vycm9yJywganFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duICk7IH1cclxuXHRcdFx0XHRcdGpRdWVyeSggJyN3aF9zb3J0X3NlbGVjdG9yJyApLmhpZGUoKTtcclxuXHRcdFx0XHRcdHZhciBlcnJvcl9tZXNzYWdlID0gJzxzdHJvbmc+JyArICdFcnJvciEnICsgJzwvc3Ryb25nPiAnICsgZXJyb3JUaHJvd24gO1xyXG5cdFx0XHRcdFx0aWYgKCBqcVhIUi5yZXNwb25zZVRleHQgKXtcclxuXHRcdFx0XHRcdFx0ZXJyb3JfbWVzc2FnZSArPSBqcVhIUi5yZXNwb25zZVRleHQ7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRlcnJvcl9tZXNzYWdlID0gZXJyb3JfbWVzc2FnZS5yZXBsYWNlKCAvXFxuL2csIFwiPGJyIC8+XCIgKTtcclxuXHJcblx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX3Nob3dfbWVzc2FnZSggZXJyb3JfbWVzc2FnZSApO1xyXG5cdFx0XHQgIH0pXHJcblx0ICAgICAgICAgIC8vIC5kb25lKCAgIGZ1bmN0aW9uICggZGF0YSwgdGV4dFN0YXR1cywganFYSFIgKSB7ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdzZWNvbmQgc3VjY2VzcycsIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICk7IH0gICAgfSlcclxuXHRcdFx0ICAvLyAuYWx3YXlzKCBmdW5jdGlvbiAoIGRhdGFfanFYSFIsIHRleHRTdGF0dXMsIGpxWEhSX2Vycm9yVGhyb3duICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnYWx3YXlzIGZpbmlzaGVkJywgZGF0YV9qcVhIUiwgdGV4dFN0YXR1cywganFYSFJfZXJyb3JUaHJvd24gKTsgfSAgICAgfSlcclxuXHRcdFx0ICA7ICAvLyBFbmQgQWpheFxyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqICAgU3VwcG9ydCBGdW5jdGlvbnMgLSBTcGluIEljb24gaW4gQnV0dG9ucyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogUmVtb3ZlIHNwaW4gaWNvbiBmcm9tICBidXR0b24gYW5kIEVuYWJsZSB0aGlzIGJ1dHRvbi5cclxuICpcclxuICogQHBhcmFtIGJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWRcdFx0LSBIVE1MIElEIGF0dHJpYnV0ZSBvZiB0aGlzIGJ1dHRvblxyXG4gKiBAcmV0dXJuIHN0cmluZ1x0XHRcdFx0XHRcdC0gQ1NTIGNsYXNzZXMgdGhhdCB3YXMgcHJldmlvdXNseSBpbiBidXR0b24gaWNvblxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19idXR0b25fX3JlbW92ZV9zcGluKCBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkICl7XHJcblxyXG5cdHZhciBwcmV2aW9zX2NsYXNzZXMgPSAnJztcclxuXHRpZiAoIHVuZGVmaW5lZCAhPSBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkICl7XHJcblx0XHR2YXIgakVsZW1lbnQgPSBqUXVlcnkoICcjJyArIGJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWQgKTtcclxuXHRcdGlmICggakVsZW1lbnQubGVuZ3RoICl7XHJcblx0XHRcdHByZXZpb3NfY2xhc3NlcyA9IHdwYmNfYnV0dG9uX2Rpc2FibGVfbG9hZGluZ19pY29uKCBqRWxlbWVudC5nZXQoIDAgKSApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHByZXZpb3NfY2xhc3NlcztcclxufVxyXG5cclxuXHJcblx0LyoqXHJcblx0ICogU2hvdyBMb2FkaW5nIChyb3RhdGluZyBhcnJvdykgaWNvbiBmb3IgYnV0dG9uIHRoYXQgaGFzIGJlZW4gY2xpY2tlZFxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHRoaXNfYnV0dG9uXHRcdC0gdGhpcyBvYmplY3Qgb2Ygc3BlY2lmaWMgYnV0dG9uXHJcblx0ICogQHJldHVybiBzdHJpbmdcdFx0XHQtIENTUyBjbGFzc2VzIHRoYXQgd2FzIHByZXZpb3VzbHkgaW4gYnV0dG9uIGljb25cclxuXHQgKi9cclxuXHRmdW5jdGlvbiB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCB0aGlzX2J1dHRvbiApe1xyXG5cclxuXHRcdHZhciBqQnV0dG9uID0galF1ZXJ5KCB0aGlzX2J1dHRvbiApO1xyXG5cdFx0dmFyIGpJY29uID0gakJ1dHRvbi5maW5kKCAnaScgKTtcclxuXHRcdHZhciBwcmV2aW9zX2NsYXNzZXMgPSBqSWNvbi5hdHRyKCAnY2xhc3MnICk7XHJcblxyXG5cdFx0akljb24ucmVtb3ZlQ2xhc3MoKS5hZGRDbGFzcyggJ21lbnVfaWNvbiBpY29uLTF4IHdwYmNfaWNuX3JvdGF0ZV9yaWdodCB3cGJjX3NwaW4nICk7XHQvLyBTZXQgUm90YXRlIGljb25cclxuXHRcdC8vakljb24uYWRkQ2xhc3MoICd3cGJjX2FuaW1hdGlvbl9wYXVzZScgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQYXVzZSBhbmltYXRpb25cclxuXHRcdC8vakljb24uYWRkQ2xhc3MoICd3cGJjX3VpX3JlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2V0IGljb24gY29sb3IgcmVkXHJcblxyXG5cdFx0akljb24uYXR0ciggJ3dwYmNfcHJldmlvdXNfY2xhc3MnLCBwcmV2aW9zX2NsYXNzZXMgKVxyXG5cclxuXHRcdGpCdXR0b24uYWRkQ2xhc3MoICdkaXNhYmxlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEaXNhYmxlIGJ1dHRvblxyXG5cdFx0Ly9qQnV0dG9uLnByb3AoIFwiZGlzYWJsZWRcIiwgdHJ1ZSApO1xyXG5cdFx0Ly8gV2UgbmVlZCB0byAgc2V0ICBoZXJlIGF0dHIgaW5zdGVhZCBvZiBwcm9wLCBiZWNhdXNlIGZvciBBIGVsZW1lbnRzLCAgYXR0cmlidXRlICdkaXNhYmxlZCcgZG8gIG5vdCBhZGRlZCB3aXRoIGpCdXR0b24ucHJvcCggXCJkaXNhYmxlZFwiLCB0cnVlICk7XHJcblxyXG5cdFx0akJ1dHRvbi5hdHRyKCAnd3BiY19wcmV2aW91c19vbmNsaWNrJywgakJ1dHRvbi5hdHRyKCAnb25jbGljaycgKSApO1x0XHQvL1NhdmUgdGhpcyB2YWx1ZVxyXG5cdFx0akJ1dHRvbi5hdHRyKCAnb25jbGljaycsICcnICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERpc2FibGUgYWN0aW9ucyBcIm9uIGNsaWNrXCJcclxuXHJcblx0XHRyZXR1cm4gcHJldmlvc19jbGFzc2VzO1xyXG5cdH1cclxuXHJcblxyXG5cdC8qKlxyXG5cdCAqIEhpZGUgTG9hZGluZyAocm90YXRpbmcgYXJyb3cpIGljb24gZm9yIGJ1dHRvbiB0aGF0IHdhcyBjbGlja2VkIGFuZCBzaG93IHByZXZpb3VzIGljb24gYW5kIGVuYWJsZSBidXR0b25cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB0aGlzX2J1dHRvblx0XHQtIHRoaXMgb2JqZWN0IG9mIHNwZWNpZmljIGJ1dHRvblxyXG5cdCAqIEByZXR1cm4gc3RyaW5nXHRcdFx0LSBDU1MgY2xhc3NlcyB0aGF0IHdhcyBwcmV2aW91c2x5IGluIGJ1dHRvbiBpY29uXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19idXR0b25fZGlzYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfYnV0dG9uICl7XHJcblxyXG5cdFx0dmFyIGpCdXR0b24gPSBqUXVlcnkoIHRoaXNfYnV0dG9uICk7XHJcblx0XHR2YXIgakljb24gPSBqQnV0dG9uLmZpbmQoICdpJyApO1xyXG5cclxuXHRcdHZhciBwcmV2aW9zX2NsYXNzZXMgPSBqSWNvbi5hdHRyKCAnd3BiY19wcmV2aW91c19jbGFzcycgKTtcclxuXHRcdGlmICggJycgIT0gcHJldmlvc19jbGFzc2VzICl7XHJcblx0XHRcdGpJY29uLnJlbW92ZUNsYXNzKCkuYWRkQ2xhc3MoIHByZXZpb3NfY2xhc3NlcyApO1xyXG5cdFx0fVxyXG5cclxuXHRcdGpCdXR0b24ucmVtb3ZlQ2xhc3MoICdkaXNhYmxlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBSZW1vdmUgRGlzYWJsZSBidXR0b25cclxuXHJcblx0XHR2YXIgcHJldmlvdXNfb25jbGljayA9IGpCdXR0b24uYXR0ciggJ3dwYmNfcHJldmlvdXNfb25jbGljaycgKVxyXG5cdFx0aWYgKCAnJyAhPSBwcmV2aW91c19vbmNsaWNrICl7XHJcblx0XHRcdGpCdXR0b24uYXR0ciggJ29uY2xpY2snLCBwcmV2aW91c19vbmNsaWNrICk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHByZXZpb3NfY2xhc3NlcztcclxuXHR9XHJcblxyXG5cclxuLyoqXHJcbiAqIEhpZGUgYWxsIG9wZW4gbW9kYWwgcG9wdXBzIHdpbmRvd3NcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfcG9wdXBfbW9kYWxzX19oaWRlKCl7XHJcblxyXG5cdC8vIEhpZGUgbW9kYWxzXHJcblx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKGpRdWVyeSggJy53cGJjX3BvcHVwX21vZGFsJyApLndwYmNfbXlfbW9kYWwpICl7XHJcblx0XHRqUXVlcnkoICcud3BiY19wb3B1cF9tb2RhbCcgKS53cGJjX215X21vZGFsKCAnaGlkZScgKTtcclxuXHR9XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBEYXRlcyAgU2hvcnQgPC0+IFdpZGUgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3Nob3J0KCl7XHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfZGF0ZXNfc21hbGwsLmJvb2tpbmdfZGF0ZXNfZnVsbCcgKS5oaWRlKCk7XHJcblx0alF1ZXJ5KCAnI2Jvb2tpbmdfZGF0ZXNfZnVsbCwuYm9va2luZ19kYXRlc19zbWFsbCcgKS5zaG93KCk7XHJcblx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7J3VpX3Vzcl9fZGF0ZXNfc2hvcnRfd2lkZSc6ICdzaG9ydCd9ICk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3dpZGUoKXtcclxuXHRqUXVlcnkoICcjYm9va2luZ19kYXRlc19mdWxsLC5ib29raW5nX2RhdGVzX3NtYWxsJyApLmhpZGUoKTtcclxuXHRqUXVlcnkoICcjYm9va2luZ19kYXRlc19zbWFsbCwuYm9va2luZ19kYXRlc19mdWxsJyApLnNob3coKTtcclxuXHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHsndWlfdXNyX19kYXRlc19zaG9ydF93aWRlJzogJ3dpZGUnfSApO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9jbGlja19vbl9kYXRlc190b2dnbGUodGhpc19kYXRlKXtcclxuXHJcblx0alF1ZXJ5KCB0aGlzX2RhdGUgKS5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19zbWFsbCcgKS50b2dnbGUoKTtcclxuXHRqUXVlcnkoIHRoaXNfZGF0ZSApLnBhcmVudHMoICcud3BiY19jb2xfZGF0ZXMnICkuZmluZCggJy5ib29raW5nX2RhdGVzX2Z1bGwnICkudG9nZ2xlKCk7XHJcblxyXG5cdC8qXHJcblx0dmFyIHZpc2libGVfc2VjdGlvbiA9IGpRdWVyeSggdGhpc19kYXRlICkucGFyZW50cyggJy5ib29raW5nX2RhdGVzX2V4cGFuZF9zZWN0aW9uJyApO1xyXG5cdHZpc2libGVfc2VjdGlvbi5oaWRlKCk7XHJcblx0aWYgKCB2aXNpYmxlX3NlY3Rpb24uaGFzQ2xhc3MoICdib29raW5nX2RhdGVzX2Z1bGwnICkgKXtcclxuXHRcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19zbWFsbCcgKS5zaG93KCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19mdWxsJyApLnNob3coKTtcclxuXHR9Ki9cclxuXHRjb25zb2xlLmxvZyggJ3dwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3RvZ2dsZScsIHRoaXNfZGF0ZSApO1xyXG59XHJcblxyXG4vKipcclxuICogICBMb2NhbGUgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiBcdFNlbGVjdCBvcHRpb25zIGluIHNlbGVjdCBib3hlcyBiYXNlZCBvbiBhdHRyaWJ1dGUgXCJ2YWx1ZV9vZl9zZWxlY3RlZF9vcHRpb25cIiBhbmQgUkVEIGNvbG9yIGFuZCBoaW50IGZvciBMT0NBTEUgYnV0dG9uICAgLS0gIEl0J3MgY2FsbGVkIGZyb20gXHR3cGJjX2FqeF9ib29raW5nX2RlZmluZV91aV9ob29rcygpICBcdGVhY2ggIHRpbWUgYWZ0ZXIgTGlzdGluZyBsb2FkaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKXtcclxuXHJcblx0alF1ZXJ5KCAnLndwYmNfbGlzdGluZ19jb250YWluZXIgc2VsZWN0JyApLmVhY2goIGZ1bmN0aW9uICggaW5kZXggKXtcclxuXHJcblx0XHR2YXIgc2VsZWN0aW9uID0galF1ZXJ5KCB0aGlzICkuYXR0ciggXCJ2YWx1ZV9vZl9zZWxlY3RlZF9vcHRpb25cIiApO1x0XHRcdC8vIERlZmluZSBzZWxlY3RlZCBzZWxlY3QgYm94ZXNcclxuXHJcblx0XHRpZiAoIHVuZGVmaW5lZCAhPT0gc2VsZWN0aW9uICl7XHJcblx0XHRcdGpRdWVyeSggdGhpcyApLmZpbmQoICdvcHRpb25bdmFsdWU9XCInICsgc2VsZWN0aW9uICsgJ1wiXScgKS5wcm9wKCAnc2VsZWN0ZWQnLCB0cnVlICk7XHJcblxyXG5cdFx0XHRpZiAoICgnJyAhPSBzZWxlY3Rpb24pICYmIChqUXVlcnkoIHRoaXMgKS5oYXNDbGFzcyggJ3NldF9ib29raW5nX2xvY2FsZV9zZWxlY3Rib3gnICkpICl7XHRcdFx0XHRcdFx0XHRcdC8vIExvY2FsZVxyXG5cclxuXHRcdFx0XHR2YXIgYm9va2luZ19sb2NhbGVfYnV0dG9uID0galF1ZXJ5KCB0aGlzICkucGFyZW50cyggJy51aV9lbGVtZW50X2xvY2FsZScgKS5maW5kKCAnLnNldF9ib29raW5nX2xvY2FsZV9idXR0b24nIClcclxuXHJcblx0XHRcdFx0Ly9ib29raW5nX2xvY2FsZV9idXR0b24uY3NzKCAnY29sb3InLCAnI2RiNDgwMCcgKTtcdFx0Ly8gU2V0IGJ1dHRvbiAgcmVkXHJcblx0XHRcdFx0Ym9va2luZ19sb2NhbGVfYnV0dG9uLmFkZENsYXNzKCAnd3BiY191aV9yZWQnICk7XHRcdC8vIFNldCBidXR0b24gIHJlZFxyXG5cdFx0XHRcdCBpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiggd3BiY190aXBweSApICl7XHJcblx0XHRcdFx0XHRib29raW5nX2xvY2FsZV9idXR0b24uZ2V0KDApLl90aXBweS5zZXRDb250ZW50KCBzZWxlY3Rpb24gKTtcclxuXHRcdFx0XHQgfVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSApO1xyXG59XHJcblxyXG4vKipcclxuICogICBSZW1hcmsgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiBEZWZpbmUgY29udGVudCBvZiByZW1hcmsgXCJib29raW5nIG5vdGVcIiBidXR0b24gYW5kIHRleHRhcmVhLiAgLS0gSXQncyBjYWxsZWQgZnJvbSBcdHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCkgIFx0ZWFjaCAgdGltZSBhZnRlciBMaXN0aW5nIGxvYWRpbmcuXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyaygpe1xyXG5cclxuXHRqUXVlcnkoICcud3BiY19saXN0aW5nX2NvbnRhaW5lciAudWlfcmVtYXJrX3NlY3Rpb24gdGV4dGFyZWEnICkuZWFjaCggZnVuY3Rpb24gKCBpbmRleCApe1xyXG5cdFx0dmFyIHRleHRfdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XHJcblx0XHRpZiAoICh1bmRlZmluZWQgIT09IHRleHRfdmFsKSAmJiAoJycgIT0gdGV4dF92YWwpICl7XHJcblxyXG5cdFx0XHR2YXIgcmVtYXJrX2J1dHRvbiA9IGpRdWVyeSggdGhpcyApLnBhcmVudHMoICcudWlfZ3JvdXAnICkuZmluZCggJy5zZXRfYm9va2luZ19ub3RlX2J1dHRvbicgKTtcclxuXHJcblx0XHRcdGlmICggcmVtYXJrX2J1dHRvbi5sZW5ndGggPiAwICl7XHJcblxyXG5cdFx0XHRcdHJlbWFya19idXR0b24uYWRkQ2xhc3MoICd3cGJjX3VpX3JlZCcgKTtcdFx0Ly8gU2V0IGJ1dHRvbiAgcmVkXHJcblx0XHRcdFx0aWYgKCAnZnVuY3Rpb24nID09PSB0eXBlb2YgKHdwYmNfdGlwcHkpICl7XHJcblx0XHRcdFx0XHQvL3JlbWFya19idXR0b24uZ2V0KCAwICkuX3RpcHB5LmFsbG93SFRNTCA9IHRydWU7XHJcblx0XHRcdFx0XHQvL3JlbWFya19idXR0b24uZ2V0KCAwICkuX3RpcHB5LnNldENvbnRlbnQoIHRleHRfdmFsLnJlcGxhY2UoL1tcXG5cXHJdL2csICc8YnI+JykgKTtcclxuXHJcblx0XHRcdFx0XHRyZW1hcmtfYnV0dG9uLmdldCggMCApLl90aXBweS5zZXRQcm9wcygge1xyXG5cdFx0XHRcdFx0XHRhbGxvd0hUTUw6IHRydWUsXHJcblx0XHRcdFx0XHRcdGNvbnRlbnQgIDogdGV4dF92YWwucmVwbGFjZSggL1tcXG5cXHJdL2csICc8YnI+JyApXHJcblx0XHRcdFx0XHR9ICk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fSApO1xyXG59XHJcblxyXG4vKipcclxuICogQWN0aW9ucyAsd2hlbiB3ZSBjbGljayBvbiBcIlJlbWFya1wiIGJ1dHRvbi5cclxuICpcclxuICogQHBhcmFtIGpxX2J1dHRvbiAgLVx0dGhpcyBqUXVlcnkgYnV0dG9uICBvYmplY3RcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19yZW1hcmsoIGpxX2J1dHRvbiApe1xyXG5cclxuXHRqcV9idXR0b24ucGFyZW50cygnLnVpX2dyb3VwJykuZmluZCgnLnVpX3JlbWFya19zZWN0aW9uJykudG9nZ2xlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBDaGFuZ2UgYm9va2luZyByZXNvdXJjZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX2NoYW5nZV9yZXNvdXJjZSggYm9va2luZ19pZCwgcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0Ly8gRGVmaW5lIElEIG9mIGJvb2tpbmcgdG8gaGlkZGVuIGlucHV0XHJcblx0alF1ZXJ5KCAnI2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19ib29raW5nX2lkJyApLnZhbCggYm9va2luZ19pZCApO1xyXG5cclxuXHQvLyBTZWxlY3QgYm9va2luZyByZXNvdXJjZSAgdGhhdCBiZWxvbmcgdG8gIGJvb2tpbmdcclxuXHRqUXVlcnkoICcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3Jlc291cmNlX3NlbGVjdCcgKS52YWwoIHJlc291cmNlX2lkICkudHJpZ2dlciggJ2NoYW5nZScgKTtcclxuXHR2YXIgY2JyO1xyXG5cclxuXHQvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxyXG5cdGNiciA9IGpRdWVyeSggXCIjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25cIiApLmRldGFjaCgpO1xyXG5cclxuXHQvLyBBcHBlbmQgaXQgdG8gYm9va2luZyBST1dcclxuXHRjYnIuYXBwZW5kVG8oIGpRdWVyeSggXCIjdWlfX2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkICkgKTtcclxuXHRjYnIgPSBudWxsO1xyXG5cclxuXHQvLyBIaWRlIHNlY3Rpb25zIG9mIFwiQ2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBpbiBhbGwgb3RoZXIgYm9va2luZ3MgUk9Xc1xyXG5cdC8valF1ZXJ5KCBcIi51aV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ1wiICkuaGlkZSgpO1xyXG5cdGlmICggISBqUXVlcnkoIFwiI3VpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCApLmlzKCc6dmlzaWJsZScpICl7XHJcblx0XHRqUXVlcnkoIFwiLnVpX191bmRlcl9hY3Rpb25zX3Jvd19fc2VjdGlvbl9pbl9ib29raW5nXCIgKS5oaWRlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBTaG93IG9ubHkgXCJjaGFuZ2UgYm9va2luZyByZXNvdXJjZVwiIHNlY3Rpb24gIGZvciBjdXJyZW50IGJvb2tpbmdcclxuXHRqUXVlcnkoIFwiI3VpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCApLnRvZ2dsZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19jaGFuZ2VfcmVzb3VyY2UoIHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCApe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgOiBib29raW5nX2FjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBqUXVlcnkoICcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0ZWRfcmVzb3VyY2VfaWQnIDogalF1ZXJ5KCAnI2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWRcclxuXHR9ICk7XHJcblxyXG5cdHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfZWwgKTtcclxuXHJcblx0Ly8gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2NoYW5nZV9yZXNvdXJjZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fY2hhbmdlX3Jlc291cmNlKCl7XHJcblxyXG5cdHZhciBjYnJjZTtcclxuXHJcblx0Ly8gR2V0IFJlc291cmNlIHNlY3Rpb25cclxuXHRjYnJjZSA9IGpRdWVyeShcIiNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTtcclxuXHJcblx0Ly8gQXBwZW5kIGl0IHRvIGhpZGRlbiBIVE1MIHRlbXBsYXRlIHNlY3Rpb24gIGF0ICB0aGUgYm90dG9tICBvZiB0aGUgcGFnZVxyXG5cdGNicmNlLmFwcGVuZFRvKGpRdWVyeShcIiN3cGJjX2hpZGRlbl90ZW1wbGF0ZV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VcIikpO1xyXG5cdGNicmNlID0gbnVsbDtcclxuXHJcblx0Ly8gSGlkZSBhbGwgY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VzIHNlY3Rpb25zXHJcblx0alF1ZXJ5KFwiLnVpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqICAgRHVwbGljYXRlIGJvb2tpbmcgaW4gb3RoZXIgcmVzb3VyY2UgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19kdXBsaWNhdGVfYm9va2luZyggYm9va2luZ19pZCwgcmVzb3VyY2VfaWQgKXtcclxuXHJcblx0Ly8gRGVmaW5lIElEIG9mIGJvb2tpbmcgdG8gaGlkZGVuIGlucHV0XHJcblx0alF1ZXJ5KCAnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19ib29raW5nX2lkJyApLnZhbCggYm9va2luZ19pZCApO1xyXG5cclxuXHQvLyBTZWxlY3QgYm9va2luZyByZXNvdXJjZSAgdGhhdCBiZWxvbmcgdG8gIGJvb2tpbmdcclxuXHRqUXVlcnkoICcjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3Jlc291cmNlX3NlbGVjdCcgKS52YWwoIHJlc291cmNlX2lkICkudHJpZ2dlciggJ2NoYW5nZScgKTtcclxuXHR2YXIgY2JyO1xyXG5cclxuXHQvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxyXG5cdGNiciA9IGpRdWVyeSggXCIjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25cIiApLmRldGFjaCgpO1xyXG5cclxuXHQvLyBBcHBlbmQgaXQgdG8gYm9va2luZyBST1dcclxuXHRjYnIuYXBwZW5kVG8oIGpRdWVyeSggXCIjdWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkICkgKTtcclxuXHRjYnIgPSBudWxsO1xyXG5cclxuXHQvLyBIaWRlIHNlY3Rpb25zIG9mIFwiRHVwbGljYXRlIGJvb2tpbmdcIiBpbiBhbGwgb3RoZXIgYm9va2luZ3MgUk9Xc1xyXG5cdGlmICggISBqUXVlcnkoIFwiI3VpX19kdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCApLmlzKCc6dmlzaWJsZScpICl7XHJcblx0XHRqUXVlcnkoIFwiLnVpX191bmRlcl9hY3Rpb25zX3Jvd19fc2VjdGlvbl9pbl9ib29raW5nXCIgKS5oaWRlKCk7XHJcblx0fVxyXG5cclxuXHQvLyBTaG93IG9ubHkgXCJEdXBsaWNhdGUgYm9va2luZ1wiIHNlY3Rpb24gIGZvciBjdXJyZW50IGJvb2tpbmcgUk9XXHJcblx0alF1ZXJ5KCBcIiN1aV9fZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQgKS50b2dnbGUoKTtcclxufVxyXG5cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fZHVwbGljYXRlX2Jvb2tpbmcoIHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCApe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgOiBib29raW5nX2FjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBqUXVlcnkoICcjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0ZWRfcmVzb3VyY2VfaWQnIDogalF1ZXJ5KCAnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWRcclxuXHR9ICk7XHJcblxyXG5cdHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfZWwgKTtcclxuXHJcblx0Ly8gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2NoYW5nZV9yZXNvdXJjZSgpO1xyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fZHVwbGljYXRlX2Jvb2tpbmcoKXtcclxuXHJcblx0dmFyIGNicmNlO1xyXG5cclxuXHQvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxyXG5cdGNicmNlID0galF1ZXJ5KFwiI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uXCIpLmRldGFjaCgpO1xyXG5cclxuXHQvLyBBcHBlbmQgaXQgdG8gaGlkZGVuIEhUTUwgdGVtcGxhdGUgc2VjdGlvbiAgYXQgIHRoZSBib3R0b20gIG9mIHRoZSBwYWdlXHJcblx0Y2JyY2UuYXBwZW5kVG8oalF1ZXJ5KFwiI3dwYmNfaGlkZGVuX3RlbXBsYXRlX19kdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZVwiKSk7XHJcblx0Y2JyY2UgPSBudWxsO1xyXG5cclxuXHQvLyBIaWRlIGFsbCBjaGFuZ2UgYm9va2luZyByZXNvdXJjZXMgc2VjdGlvbnNcclxuXHRqUXVlcnkoXCIudWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdcIikuaGlkZSgpO1xyXG59XHJcblxyXG4vKipcclxuICogICBDaGFuZ2UgcGF5bWVudCBzdGF0dXMgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX3NldF9wYXltZW50X3N0YXR1cyggYm9va2luZ19pZCApe1xyXG5cclxuXHR2YXIgalNlbGVjdCA9IGpRdWVyeSggJyN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfJyArIGJvb2tpbmdfaWQgKS5maW5kKCAnc2VsZWN0JyApXHJcblxyXG5cdHZhciBzZWxlY3RlZF9wYXlfc3RhdHVzID0galNlbGVjdC5hdHRyKCBcImFqeC1zZWxlY3RlZC12YWx1ZVwiICk7XHJcblxyXG5cdC8vIElzIGl0IGZsb2F0IC0gdGhlbiAgaXQncyB1bmtub3duXHJcblx0aWYgKCAhaXNOYU4oIHBhcnNlRmxvYXQoIHNlbGVjdGVkX3BheV9zdGF0dXMgKSApICl7XHJcblx0XHRqU2VsZWN0LmZpbmQoICdvcHRpb25bdmFsdWU9XCIxXCJdJyApLnByb3AoICdzZWxlY3RlZCcsIHRydWUgKTtcdFx0XHRcdFx0XHRcdFx0Ly8gVW5rbm93biAgdmFsdWUgaXMgJzEnIGluIHNlbGVjdCBib3hcclxuXHR9IGVsc2Uge1xyXG5cdFx0alNlbGVjdC5maW5kKCAnb3B0aW9uW3ZhbHVlPVwiJyArIHNlbGVjdGVkX3BheV9zdGF0dXMgKyAnXCJdJyApLnByb3AoICdzZWxlY3RlZCcsIHRydWUgKTtcdFx0Ly8gT3RoZXJ3aXNlIGtub3duIHBheW1lbnQgc3RhdHVzXHJcblx0fVxyXG5cclxuXHQvLyBIaWRlIHNlY3Rpb25zIG9mIFwiQ2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBpbiBhbGwgb3RoZXIgYm9va2luZ3MgUk9Xc1xyXG5cdGlmICggISBqUXVlcnkoIFwiI3VpX19zZXRfcGF5bWVudF9zdGF0dXNfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQgKS5pcygnOnZpc2libGUnKSApe1xyXG5cdFx0alF1ZXJ5KCBcIi51aV9fdW5kZXJfYWN0aW9uc19yb3dfX3NlY3Rpb25faW5fYm9va2luZ1wiICkuaGlkZSgpO1xyXG5cdH1cclxuXHJcblx0Ly8gU2hvdyBvbmx5IFwiY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBzZWN0aW9uICBmb3IgY3VycmVudCBib29raW5nXHJcblx0alF1ZXJ5KCBcIiN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkICkudG9nZ2xlKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9wYXltZW50X3N0YXR1cyggYm9va2luZ19pZCwgdGhpc19lbCwgYm9va2luZ19hY3Rpb24sIGVsX2lkICl7XHJcblxyXG5cdHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCgge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Jvb2tpbmdfYWN0aW9uJyAgICAgICA6IGJvb2tpbmdfYWN0aW9uLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Jvb2tpbmdfaWQnICAgICAgICAgICA6IGJvb2tpbmdfaWQsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnc2VsZWN0ZWRfcGF5bWVudF9zdGF0dXMnIDogalF1ZXJ5KCAnI3VpX2J0bl9zZXRfcGF5bWVudF9zdGF0dXMnICsgYm9va2luZ19pZCApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6IGVsX2lkICsgJ19zYXZlJ1xyXG5cdH0gKTtcclxuXHJcblx0d3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggdGhpc19lbCApO1xyXG5cclxuXHRqUXVlcnkoICcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5oaWRlKCk7XHJcblx0Ly93cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCBqUXVlcnkoICcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5nZXQoMCkgKTtcclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19zZXRfcGF5bWVudF9zdGF0dXMoKXtcclxuXHQvLyBIaWRlIGFsbCBjaGFuZ2UgIHBheW1lbnQgc3RhdHVzIGZvciBib29raW5nXHJcblx0alF1ZXJ5KFwiLnVpX19zZXRfcGF5bWVudF9zdGF0dXNfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBDaGFuZ2UgYm9va2luZyBjb3N0ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9ib29raW5nX2Nvc3QoIGJvb2tpbmdfaWQsIHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCApe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgOiBib29raW5nX2FjdGlvbixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBib29raW5nX2lkLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Jvb2tpbmdfY29zdCcgXHRcdCAgIDogalF1ZXJ5KCAnI3VpX2J0bl9zZXRfYm9va2luZ19jb3N0JyArIGJvb2tpbmdfaWQgKyAnX2Nvc3QnKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV9jbGlja2VkX2VsZW1lbnRfaWQnOiBlbF9pZCArICdfc2F2ZSdcclxuXHR9ICk7XHJcblxyXG5cdHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24oIHRoaXNfZWwgKTtcclxuXHJcblx0alF1ZXJ5KCAnIycgKyBlbF9pZCArICdfY2FuY2VsJykuaGlkZSgpO1xyXG5cdC8vd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggalF1ZXJ5KCAnIycgKyBlbF9pZCArICdfY2FuY2VsJykuZ2V0KDApICk7XHJcblxyXG59XHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fc2V0X2Jvb2tpbmdfY29zdCgpe1xyXG5cdC8vIEhpZGUgYWxsIGNoYW5nZSAgcGF5bWVudCBzdGF0dXMgZm9yIGJvb2tpbmdcclxuXHRqUXVlcnkoXCIudWlfX3NldF9ib29raW5nX2Nvc3RfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBTZW5kIFBheW1lbnQgcmVxdWVzdCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fc2VuZF9wYXltZW50X3JlcXVlc3QoKXtcclxuXHJcblx0d3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYm9va2luZ19hY3Rpb24nICAgICAgIDogJ3NlbmRfcGF5bWVudF9yZXF1ZXN0JyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2lkJyAgICAgICAgICAgOiBqUXVlcnkoICcjd3BiY19tb2RhbF9fcGF5bWVudF9yZXF1ZXN0X19ib29raW5nX2lkJykudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncmVhc29uX29mX2FjdGlvbicgXHQgICA6IGpRdWVyeSggJyN3cGJjX21vZGFsX19wYXltZW50X3JlcXVlc3RfX3JlYXNvbl9vZl9hY3Rpb24nKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV9jbGlja2VkX2VsZW1lbnRfaWQnOiAnd3BiY19tb2RhbF9fcGF5bWVudF9yZXF1ZXN0X19idXR0b25fc2VuZCdcclxuXHR9ICk7XHJcblx0d3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggalF1ZXJ5KCAnI3dwYmNfbW9kYWxfX3BheW1lbnRfcmVxdWVzdF9fYnV0dG9uX3NlbmQnICkuZ2V0KCAwICkgKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIEltcG9ydCBHb29nbGUgQ2FsZW5kYXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXIoKXtcclxuXHJcblx0d3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYm9va2luZ19hY3Rpb24nICAgICAgIDogJ2ltcG9ydF9nb29nbGVfY2FsZW5kYXInLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6ICd3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19idXR0b25fc2VuZCdcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICdib29raW5nX2djYWxfZXZlbnRzX2Zyb20nIDogXHRcdFx0XHRqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICdib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0JyA6IFx0XHRqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldCcgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LCAnYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldF90eXBlJyA6IFx0alF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfZnJvbV9vZmZzZXRfdHlwZSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKVxyXG5cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWwnIDogXHRcdFx0alF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWwgb3B0aW9uOnNlbGVjdGVkJykudmFsKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0JyA6IFx0XHRqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c191bnRpbF9vZmZzZXQnICkudmFsKClcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCwgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0X3R5cGUnIDogalF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0X3R5cGUgb3B0aW9uOnNlbGVjdGVkJykudmFsKClcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQsICdib29raW5nX2djYWxfZXZlbnRzX21heCcgOiBcdGpRdWVyeSggJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX21heCcgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0LCAnYm9va2luZ19nY2FsX3Jlc291cmNlJyA6IFx0alF1ZXJ5KCAnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI3dwYmNfYm9va2luZ19yZXNvdXJjZSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKVxyXG5cdH0gKTtcclxuXHR3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCBqUXVlcnkoICcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fYnV0dG9uX3NlbmQnICkuZ2V0KCAwICkgKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIEV4cG9ydCBib29raW5ncyB0byBDU1YgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fZXhwb3J0X2NzdiggcGFyYW1zICl7XHJcblxyXG5cdHZhciBzZWxlY3RlZF9ib29raW5nX2lkX2FyciA9IHdwYmNfZ2V0X3NlbGVjdGVkX3Jvd19pZCgpO1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3QoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdib29raW5nX2FjdGlvbicgICAgICAgIDogcGFyYW1zWyAnYm9va2luZ19hY3Rpb24nIF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfY2xpY2tlZF9lbGVtZW50X2lkJyA6IHBhcmFtc1sgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCcgXSxcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnZXhwb3J0X3R5cGUnICAgICAgICAgICA6IHBhcmFtc1sgJ2V4cG9ydF90eXBlJyBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2Nzdl9leHBvcnRfc2VwYXJhdG9yJyAgOiBwYXJhbXNbICdjc3ZfZXhwb3J0X3NlcGFyYXRvcicgXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdjc3ZfZXhwb3J0X3NraXBfZmllbGRzJzogcGFyYW1zWyAnY3N2X2V4cG9ydF9za2lwX2ZpZWxkcycgXSxcclxuXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYm9va2luZ19pZCdcdDogc2VsZWN0ZWRfYm9va2luZ19pZF9hcnIuam9pbignLCcpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3NlYXJjaF9wYXJhbXMnIDogd3BiY19hanhfYm9va2luZ19saXN0aW5nLnNlYXJjaF9nZXRfYWxsX3BhcmFtcygpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cclxuXHR2YXIgdGhpc19lbCA9IGpRdWVyeSggJyMnICsgcGFyYW1zWyAndWlfY2xpY2tlZF9lbGVtZW50X2lkJyBdICkuZ2V0KCAwIClcclxuXHJcblx0d3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggdGhpc19lbCApO1xyXG59XHJcblxyXG4vKipcclxuICogT3BlbiBVUkwgaW4gbmV3IHRhYiAtIG1haW5seSAgaXQncyB1c2VkIGZvciBvcGVuIENTViBsaW5rICBmb3IgZG93bmxvYWRlZCBleHBvcnRlZCBib29raW5ncyBhcyBDU1ZcclxuICpcclxuICogQHBhcmFtIGV4cG9ydF9jc3ZfdXJsXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQoIGV4cG9ydF9jc3ZfdXJsICl7XHJcblxyXG5cdC8vdmFyIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyID0gd3BiY19nZXRfc2VsZWN0ZWRfcm93X2lkKCk7XHJcblxyXG5cdGRvY3VtZW50LmxvY2F0aW9uLmhyZWYgPSBleHBvcnRfY3N2X3VybDsvLyArICcmc2VsZWN0ZWRfaWQ9JyArIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyLmpvaW4oJywnKTtcclxuXHJcblx0Ly8gSXQncyBvcGVuIGFkZGl0aW9uYWwgZGlhbG9nIGZvciBhc2tpbmcgb3BlbmluZyB1bHIgaW4gbmV3IHRhYlxyXG5cdC8vIHdpbmRvdy5vcGVuKCBleHBvcnRfY3N2X3VybCwgJ19ibGFuaycpLmZvY3VzKCk7XHJcbn0iXSwiZmlsZSI6ImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX291dC9ib29raW5nc19fYWN0aW9ucy5qcyJ9
includes/page-bookings/_out/bookings__actions.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ "use strict";function _typeof(_){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(_){return typeof _}:function(_){return _&&"function"==typeof Symbol&&_.constructor===Symbol&&_!==Symbol.prototype?"symbol":typeof _})(_)}function wpbc_ajx_booking_ajax_action_request(){var _=0<arguments.length&&void 0!==arguments[0]?arguments[0]:{};console.groupCollapsed("WPBC_AJX_BOOKING_ACTIONS"),console.log(" == Ajax Actions :: Params == ",_),wpbc_booking_listing_reload_button__spin_start(),null==_.booking_id||Array.isArray(_.booking_id)||(_.locale=wpbc_get_selected_locale(_.booking_id,wpbc_ajx_booking_listing.get_secure_param("locale")));var o={action:"WPBC_AJX_BOOKING_ACTIONS",nonce:wpbc_ajx_booking_listing.get_secure_param("nonce"),wpbc_ajx_user_id:null==_.user_id?wpbc_ajx_booking_listing.get_secure_param("user_id"):_.user_id,wpbc_ajx_locale:null==_.locale?wpbc_ajx_booking_listing.get_secure_param("locale"):_.locale,action_params:_};void 0!==_.search_params&&(o.search_params=_.search_params,delete o.action_params.search_params),jQuery.post(wpbc_global1.wpbc_ajaxurl,o,function(_,o,e){return console.log(" == Ajax Actions :: Response WPBC_AJX_BOOKING_ACTIONS == ",_),console.groupEnd(),"object"!==_typeof(_)||null===_?(jQuery("#wh_sort_selector").hide(),void jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">'+_+"</div>")):(wpbc_booking_listing_reload_button__spin_pause(),wpbc_admin_show_message(_.ajx_after_action_message.replace(/\n/g,"<br />"),"1"==_.ajx_after_action_result?"success":"error",1e4),"1"==_.ajx_after_action_result&&(!(i=!0)!==_.ajx_after_action_result_all_params_arr.new_listing_params&&(wpbc_ajx_booking_send_search_request_with_params(_.ajx_after_action_result_all_params_arr.new_listing_params),setTimeout(function(){wpbc_booking_listing_reload_button__is_spin()&&(null!=_.ajx_after_action_result_all_params_arr.new_listing_params.reload_url_params?document.location.href=_.ajx_after_action_result_all_params_arr.new_listing_params.reload_url_params:document.location.reload())},2e3),i=!1),null!=_.ajx_after_action_result_all_params_arr.export_csv_url&&(wpbc_ajx_booking__export_csv_url__download(_.ajx_after_action_result_all_params_arr.export_csv_url),i=!1),i&&wpbc_ajx_booking__actual_listing__show()),wpbc_button__remove_spin(_.ajx_cleaned_params.ui_clicked_element_id),wpbc_popup_modals__hide(),void jQuery("#ajax_respond").html(_));var i}).fail(function(_,o,e){window.console&&window.console.log&&console.log("Ajax_Error",_,o,e),jQuery("#wh_sort_selector").hide();e="<strong>Error!</strong> "+e;_.responseText&&(e+=_.responseText),e=e.replace(/\n/g,"<br />"),wpbc_ajx_booking_show_message(e)})}function wpbc_button__remove_spin(_){var o="";return null==_||(_=jQuery("#"+_)).length&&(o=wpbc_button_disable_loading_icon(_.get(0))),o}function wpbc_button_enable_loading_icon(_){var o=jQuery(_),e=o.find("i"),_=e.attr("class");return e.removeClass().addClass("menu_icon icon-1x wpbc_icn_rotate_right wpbc_spin"),e.attr("wpbc_previous_class",_),o.addClass("disabled"),o.attr("wpbc_previous_onclick",o.attr("onclick")),o.attr("onclick",""),_}function wpbc_button_disable_loading_icon(_){var o=jQuery(_),e=o.find("i"),_=e.attr("wpbc_previous_class");""!=_&&e.removeClass().addClass(_),o.removeClass("disabled");e=o.attr("wpbc_previous_onclick");return""!=e&&o.attr("onclick",e),_}function wpbc_popup_modals__hide(){"function"==typeof jQuery(".wpbc_popup_modal").wpbc_my_modal&&jQuery(".wpbc_popup_modal").wpbc_my_modal("hide")}function wpbc_ajx_click_on_dates_short(){jQuery("#booking_dates_small,.booking_dates_full").hide(),jQuery("#booking_dates_full,.booking_dates_small").show(),wpbc_ajx_booking_send_search_request_with_params({ui_usr__dates_short_wide:"short"})}function wpbc_ajx_click_on_dates_wide(){jQuery("#booking_dates_full,.booking_dates_small").hide(),jQuery("#booking_dates_small,.booking_dates_full").show(),wpbc_ajx_booking_send_search_request_with_params({ui_usr__dates_short_wide:"wide"})}function wpbc_ajx_click_on_dates_toggle(_){jQuery(_).parents(".wpbc_col_dates").find(".booking_dates_small").toggle(),jQuery(_).parents(".wpbc_col_dates").find(".booking_dates_full").toggle(),console.log("wpbc_ajx_click_on_dates_toggle",_)}function wpbc_ajx_booking__ui_define__locale(){jQuery(".wpbc_listing_container select").each(function(_){var o,e=jQuery(this).attr("value_of_selected_option");void 0!==e&&(jQuery(this).find('option[value="'+e+'"]').prop("selected",!0),""!=e&&jQuery(this).hasClass("set_booking_locale_selectbox")&&((o=jQuery(this).parents(".ui_element_locale").find(".set_booking_locale_button")).addClass("wpbc_ui_red"),"function"==typeof wpbc_tippy&&o.get(0)._tippy.setContent(e)))})}function wpbc_ajx_booking__ui_define__remark(){jQuery(".wpbc_listing_container .ui_remark_section textarea").each(function(_){var o,e=jQuery(this).val();void 0===e||""==e||0<(o=jQuery(this).parents(".ui_group").find(".set_booking_note_button")).length&&(o.addClass("wpbc_ui_red"),"function"==typeof wpbc_tippy&&o.get(0)._tippy.setProps({allowHTML:!0,content:e.replace(/[\n\r]/g,"<br>")}))})}function wpbc_ajx_booking__ui_click__remark(_){_.parents(".ui_group").find(".ui_remark_section").toggle()}function wpbc_ajx_booking__ui_click_show__change_resource(_,o){jQuery("#change_booking_resource__booking_id").val(_),jQuery("#change_booking_resource__resource_select").val(o).trigger("change"),jQuery("#change_booking_resource__section").detach().appendTo(jQuery("#ui__change_booking_resource__section_in_booking_"+_)),jQuery("#ui__change_booking_resource__section_in_booking_"+_).is(":visible")||jQuery(".ui__under_actions_row__section_in_booking").hide(),jQuery("#ui__change_booking_resource__section_in_booking_"+_).toggle()}function wpbc_ajx_booking__ui_click_save__change_resource(_,o,e){wpbc_ajx_booking_ajax_action_request({booking_action:o,booking_id:jQuery("#change_booking_resource__booking_id").val(),selected_resource_id:jQuery("#change_booking_resource__resource_select").val(),ui_clicked_element_id:e}),wpbc_button_enable_loading_icon(_)}function wpbc_ajx_booking__ui_click_close__change_resource(){jQuery("#change_booking_resource__section").detach().appendTo(jQuery("#wpbc_hidden_template__change_booking_resource")),jQuery(".ui__change_booking_resource__section_in_booking").hide()}function wpbc_ajx_booking__ui_click_show__duplicate_booking(_,o){jQuery("#duplicate_booking_to_other_resource__booking_id").val(_),jQuery("#duplicate_booking_to_other_resource__resource_select").val(o).trigger("change"),jQuery("#duplicate_booking_to_other_resource__section").detach().appendTo(jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_"+_)),jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_"+_).is(":visible")||jQuery(".ui__under_actions_row__section_in_booking").hide(),jQuery("#ui__duplicate_booking_to_other_resource__section_in_booking_"+_).toggle()}function wpbc_ajx_booking__ui_click_save__duplicate_booking(_,o,e){wpbc_ajx_booking_ajax_action_request({booking_action:o,booking_id:jQuery("#duplicate_booking_to_other_resource__booking_id").val(),selected_resource_id:jQuery("#duplicate_booking_to_other_resource__resource_select").val(),ui_clicked_element_id:e}),wpbc_button_enable_loading_icon(_)}function wpbc_ajx_booking__ui_click_close__duplicate_booking(){jQuery("#duplicate_booking_to_other_resource__section").detach().appendTo(jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource")),jQuery(".ui__duplicate_booking_to_other_resource__section_in_booking").hide()}function wpbc_ajx_booking__ui_click_show__set_payment_status(_){var o=jQuery("#ui__set_payment_status__section_in_booking_"+_).find("select"),e=o.attr("ajx-selected-value");(isNaN(parseFloat(e))?o.find('option[value="'+e+'"]'):o.find('option[value="1"]')).prop("selected",!0),jQuery("#ui__set_payment_status__section_in_booking_"+_).is(":visible")||jQuery(".ui__under_actions_row__section_in_booking").hide(),jQuery("#ui__set_payment_status__section_in_booking_"+_).toggle()}function wpbc_ajx_booking__ui_click_save__set_payment_status(_,o,e,i){wpbc_ajx_booking_ajax_action_request({booking_action:e,booking_id:_,selected_payment_status:jQuery("#ui_btn_set_payment_status"+_).val(),ui_clicked_element_id:i+"_save"}),wpbc_button_enable_loading_icon(o),jQuery("#"+i+"_cancel").hide()}function wpbc_ajx_booking__ui_click_close__set_payment_status(){jQuery(".ui__set_payment_status__section_in_booking").hide()}function wpbc_ajx_booking__ui_click_save__set_booking_cost(_,o,e,i){wpbc_ajx_booking_ajax_action_request({booking_action:e,booking_id:_,booking_cost:jQuery("#ui_btn_set_booking_cost"+_+"_cost").val(),ui_clicked_element_id:i+"_save"}),wpbc_button_enable_loading_icon(o),jQuery("#"+i+"_cancel").hide()}function wpbc_ajx_booking__ui_click_close__set_booking_cost(){jQuery(".ui__set_booking_cost__section_in_booking").hide()}function wpbc_ajx_booking__ui_click__send_payment_request(){wpbc_ajx_booking_ajax_action_request({booking_action:"send_payment_request",booking_id:jQuery("#wpbc_modal__payment_request__booking_id").val(),reason_of_action:jQuery("#wpbc_modal__payment_request__reason_of_action").val(),ui_clicked_element_id:"wpbc_modal__payment_request__button_send"}),wpbc_button_enable_loading_icon(jQuery("#wpbc_modal__payment_request__button_send").get(0))}function wpbc_ajx_booking__ui_click__import_google_calendar(){wpbc_ajx_booking_ajax_action_request({booking_action:"import_google_calendar",ui_clicked_element_id:"wpbc_modal__import_google_calendar__button_send",booking_gcal_events_from:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_from option:selected").val(),booking_gcal_events_from_offset:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset").val(),booking_gcal_events_from_offset_type:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset_type option:selected").val(),booking_gcal_events_until:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_until option:selected").val(),booking_gcal_events_until_offset:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset").val(),booking_gcal_events_until_offset_type:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset_type option:selected").val(),booking_gcal_events_max:jQuery("#wpbc_modal__import_google_calendar__section #booking_gcal_events_max").val(),booking_gcal_resource:jQuery("#wpbc_modal__import_google_calendar__section #wpbc_booking_resource option:selected").val()}),wpbc_button_enable_loading_icon(jQuery("#wpbc_modal__import_google_calendar__section #wpbc_modal__import_google_calendar__button_send").get(0))}function wpbc_ajx_booking__ui_click__export_csv(_){var o=wpbc_get_selected_row_id();wpbc_ajx_booking_ajax_action_request({booking_action:_.booking_action,ui_clicked_element_id:_.ui_clicked_element_id,export_type:_.export_type,csv_export_separator:_.csv_export_separator,csv_export_skip_fields:_.csv_export_skip_fields,booking_id:o.join(","),search_params:wpbc_ajx_booking_listing.search_get_all_params()}),wpbc_button_enable_loading_icon(jQuery("#"+_.ui_clicked_element_id).get(0))}function wpbc_ajx_booking__export_csv_url__download(_){document.location.href=_}
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19hY3Rpb25zLm1pbi5qcyIsInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19hY3Rpb25zLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuLyoqXHJcbiAqICAgQWpheCAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG4vL3ZhciBpc190aGlzX2FjdGlvbiA9IGZhbHNlO1xuXG4vKipcclxuICogU2VuZCBBamF4IGFjdGlvbiByZXF1ZXN0LCAgbGlrZSBhcHByb3Zpbmcgb3IgY2FuY2VsbGF0aW9uXHJcbiAqXHJcbiAqIEBwYXJhbSBhY3Rpb25fcGFyYW1cclxuICovXG5cbmZ1bmN0aW9uIF90eXBlb2Yob2JqKSB7IFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjsgcmV0dXJuIF90eXBlb2YgPSBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBcInN5bWJvbFwiID09IHR5cGVvZiBTeW1ib2wuaXRlcmF0b3IgPyBmdW5jdGlvbiAob2JqKSB7IHJldHVybiB0eXBlb2Ygb2JqOyB9IDogZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gb2JqICYmIFwiZnVuY3Rpb25cIiA9PSB0eXBlb2YgU3ltYm9sICYmIG9iai5jb25zdHJ1Y3RvciA9PT0gU3ltYm9sICYmIG9iaiAhPT0gU3ltYm9sLnByb3RvdHlwZSA/IFwic3ltYm9sXCIgOiB0eXBlb2Ygb2JqOyB9LCBfdHlwZW9mKG9iaik7IH1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KCkge1xuICB2YXIgYWN0aW9uX3BhcmFtID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiB7fTtcbiAgY29uc29sZS5ncm91cENvbGxhcHNlZCgnV1BCQ19BSlhfQk9PS0lOR19BQ1RJT05TJyk7XG4gIGNvbnNvbGUubG9nKCcgPT0gQWpheCBBY3Rpb25zIDo6IFBhcmFtcyA9PSAnLCBhY3Rpb25fcGFyYW0pOyAvL2lzX3RoaXNfYWN0aW9uID0gdHJ1ZTtcblxuICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0KCk7IC8vIEdldCByZWRlZmluZWQgTG9jYWxlLCAgaWYgYWN0aW9uIG9uIHNpbmdsZSBib29raW5nICFcblxuICBpZiAodW5kZWZpbmVkICE9IGFjdGlvbl9wYXJhbVsnYm9va2luZ19pZCddICYmICFBcnJheS5pc0FycmF5KGFjdGlvbl9wYXJhbVsnYm9va2luZ19pZCddKSkge1xuICAgIC8vIE5vdCBhcnJheVxuICAgIGFjdGlvbl9wYXJhbVsnbG9jYWxlJ10gPSB3cGJjX2dldF9zZWxlY3RlZF9sb2NhbGUoYWN0aW9uX3BhcmFtWydib29raW5nX2lkJ10sIHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCdsb2NhbGUnKSk7XG4gIH1cblxuICB2YXIgYWN0aW9uX3Bvc3RfcGFyYW1zID0ge1xuICAgIGFjdGlvbjogJ1dQQkNfQUpYX0JPT0tJTkdfQUNUSU9OUycsXG4gICAgbm9uY2U6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCdub25jZScpLFxuICAgIHdwYmNfYWp4X3VzZXJfaWQ6IHVuZGVmaW5lZCA9PSBhY3Rpb25fcGFyYW1bJ3VzZXJfaWQnXSA/IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCd1c2VyX2lkJykgOiBhY3Rpb25fcGFyYW1bJ3VzZXJfaWQnXSxcbiAgICB3cGJjX2FqeF9sb2NhbGU6IHVuZGVmaW5lZCA9PSBhY3Rpb25fcGFyYW1bJ2xvY2FsZSddID8gd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oJ2xvY2FsZScpIDogYWN0aW9uX3BhcmFtWydsb2NhbGUnXSxcbiAgICBhY3Rpb25fcGFyYW1zOiBhY3Rpb25fcGFyYW1cbiAgfTsgLy8gSXQncyByZXF1aXJlZCBmb3IgQ1NWIGV4cG9ydCAtIGdldHRpbmcgdGhlIHNhbWUgbGlzdCAgb2YgYm9va2luZ3NcblxuICBpZiAodHlwZW9mIGFjdGlvbl9wYXJhbS5zZWFyY2hfcGFyYW1zICE9PSAndW5kZWZpbmVkJykge1xuICAgIGFjdGlvbl9wb3N0X3BhcmFtc1snc2VhcmNoX3BhcmFtcyddID0gYWN0aW9uX3BhcmFtLnNlYXJjaF9wYXJhbXM7XG4gICAgZGVsZXRlIGFjdGlvbl9wb3N0X3BhcmFtcy5hY3Rpb25fcGFyYW1zLnNlYXJjaF9wYXJhbXM7XG4gIH0gLy8gU3RhcnQgQWpheFxuXG5cbiAgalF1ZXJ5LnBvc3Qod3BiY19nbG9iYWwxLndwYmNfYWpheHVybCwgYWN0aW9uX3Bvc3RfcGFyYW1zLFxuICAvKipcclxuICAgKiBTIHUgYyBjIGUgcyBzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjZy5waHBcclxuICAgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuICAgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG4gICAqL1xuICBmdW5jdGlvbiAocmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICBjb25zb2xlLmxvZygnID09IEFqYXggQWN0aW9ucyA6OiBSZXNwb25zZSBXUEJDX0FKWF9CT09LSU5HX0FDVElPTlMgPT0gJywgcmVzcG9uc2VfZGF0YSk7XG4gICAgY29uc29sZS5ncm91cEVuZCgpOyAvLyBQcm9iYWJseSBFcnJvclxuXG4gICAgaWYgKF90eXBlb2YocmVzcG9uc2VfZGF0YSkgIT09ICdvYmplY3QnIHx8IHJlc3BvbnNlX2RhdGEgPT09IG51bGwpIHtcbiAgICAgIGpRdWVyeSgnI3doX3NvcnRfc2VsZWN0b3InKS5oaWRlKCk7XG4gICAgICBqUXVlcnkod3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgnbGlzdGluZ19jb250YWluZXInKSkuaHRtbCgnPGRpdiBjbGFzcz1cIndwYmMtc2V0dGluZ3Mtbm90aWNlIG5vdGljZS13YXJuaW5nXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmxlZnRcIj4nICsgcmVzcG9uc2VfZGF0YSArICc8L2Rpdj4nKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlKCk7XG4gICAgd3BiY19hZG1pbl9zaG93X21lc3NhZ2UocmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9tZXNzYWdlJ10ucmVwbGFjZSgvXFxuL2csIFwiPGJyIC8+XCIpLCAnMScgPT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHQnXSA/ICdzdWNjZXNzJyA6ICdlcnJvcicsIDEwMDAwKTsgLy8gU3VjY2VzcyByZXNwb25zZVxuXG4gICAgaWYgKCcxJyA9PSByZXNwb25zZV9kYXRhWydhanhfYWZ0ZXJfYWN0aW9uX3Jlc3VsdCddKSB7XG4gICAgICB2YXIgaXNfcmVsb2FkX2FqYXhfbGlzdGluZyA9IHRydWU7IC8vIEFmdGVyIEdvb2dsZSBDYWxlbmRhciBpbXBvcnQgc2hvdyBpbXBvcnRlZCBib29raW5ncyBhbmQgcmVsb2FkIHRoZSBwYWdlIGZvciB0b29sYmFyIHBhcmFtZXRlcnMgdXBkYXRlXG5cbiAgICAgIGlmIChmYWxzZSAhPT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnbmV3X2xpc3RpbmdfcGFyYW1zJ10pIHtcbiAgICAgICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHJlc3BvbnNlX2RhdGFbJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJ11bJ25ld19saXN0aW5nX3BhcmFtcyddKTtcbiAgICAgICAgdmFyIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGlmICh3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19pc19zcGluKCkpIHtcbiAgICAgICAgICAgIGlmICh1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnbmV3X2xpc3RpbmdfcGFyYW1zJ11bJ3JlbG9hZF91cmxfcGFyYW1zJ10pIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IHJlc3BvbnNlX2RhdGFbJ2FqeF9hZnRlcl9hY3Rpb25fcmVzdWx0X2FsbF9wYXJhbXNfYXJyJ11bJ25ld19saXN0aW5nX3BhcmFtcyddWydyZWxvYWRfdXJsX3BhcmFtcyddO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgZG9jdW1lbnQubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LCAyMDAwKTtcbiAgICAgICAgaXNfcmVsb2FkX2FqYXhfbGlzdGluZyA9IGZhbHNlO1xuICAgICAgfSAvLyBTdGFydCBkb3dubG9hZCBleHBvcnRlZCBDU1YgZmlsZVxuXG5cbiAgICAgIGlmICh1bmRlZmluZWQgIT0gcmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnZXhwb3J0X2Nzdl91cmwnXSkge1xuICAgICAgICB3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQocmVzcG9uc2VfZGF0YVsnYWp4X2FmdGVyX2FjdGlvbl9yZXN1bHRfYWxsX3BhcmFtc19hcnInXVsnZXhwb3J0X2Nzdl91cmwnXSk7XG4gICAgICAgIGlzX3JlbG9hZF9hamF4X2xpc3RpbmcgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzX3JlbG9hZF9hamF4X2xpc3RpbmcpIHtcbiAgICAgICAgd3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3coKTsgLy9cdFNlbmRpbmcgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXG4gICAgICB9XG4gICAgfSAvLyBSZW1vdmUgc3BpbiBpY29uIGZyb20gIGJ1dHRvbiBhbmQgRW5hYmxlIHRoaXMgYnV0dG9uLlxuXG5cbiAgICB3cGJjX2J1dHRvbl9fcmVtb3ZlX3NwaW4ocmVzcG9uc2VfZGF0YVsnYWp4X2NsZWFuZWRfcGFyYW1zJ11bJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCddKTsgLy8gSGlkZSBtb2RhbHNcblxuICAgIHdwYmNfcG9wdXBfbW9kYWxzX19oaWRlKCk7XG4gICAgalF1ZXJ5KCcjYWpheF9yZXNwb25kJykuaHRtbChyZXNwb25zZV9kYXRhKTsgLy8gRm9yIGFiaWxpdHkgdG8gc2hvdyByZXNwb25zZSwgYWRkIHN1Y2ggRElWIGVsZW1lbnQgdG8gcGFnZVxuICB9KS5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICBpZiAod2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nKSB7XG4gICAgICBjb25zb2xlLmxvZygnQWpheF9FcnJvcicsIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgfVxuXG4gICAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmhpZGUoKTtcbiAgICB2YXIgZXJyb3JfbWVzc2FnZSA9ICc8c3Ryb25nPicgKyAnRXJyb3IhJyArICc8L3N0cm9uZz4gJyArIGVycm9yVGhyb3duO1xuXG4gICAgaWYgKGpxWEhSLnJlc3BvbnNlVGV4dCkge1xuICAgICAgZXJyb3JfbWVzc2FnZSArPSBqcVhIUi5yZXNwb25zZVRleHQ7XG4gICAgfVxuXG4gICAgZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UucmVwbGFjZSgvXFxuL2csIFwiPGJyIC8+XCIpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19tZXNzYWdlKGVycm9yX21lc3NhZ2UpO1xuICB9KSAvLyAuZG9uZSggICBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnc2Vjb25kIHN1Y2Nlc3MnLCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApOyB9ICAgIH0pXG4gIC8vIC5hbHdheXMoIGZ1bmN0aW9uICggZGF0YV9qcVhIUiwgdGV4dFN0YXR1cywganFYSFJfZXJyb3JUaHJvd24gKSB7ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdhbHdheXMgZmluaXNoZWQnLCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApOyB9ICAgICB9KVxuICA7IC8vIEVuZCBBamF4XG59XG4vKipcclxuICogICBTdXBwb3J0IEZ1bmN0aW9ucyAtIFNwaW4gSWNvbiBpbiBCdXR0b25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIFJlbW92ZSBzcGluIGljb24gZnJvbSAgYnV0dG9uIGFuZCBFbmFibGUgdGhpcyBidXR0b24uXHJcbiAqXHJcbiAqIEBwYXJhbSBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkXHRcdC0gSFRNTCBJRCBhdHRyaWJ1dGUgb2YgdGhpcyBidXR0b25cclxuICogQHJldHVybiBzdHJpbmdcdFx0XHRcdFx0XHQtIENTUyBjbGFzc2VzIHRoYXQgd2FzIHByZXZpb3VzbHkgaW4gYnV0dG9uIGljb25cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19idXR0b25fX3JlbW92ZV9zcGluKGJ1dHRvbl9jbGlja2VkX2VsZW1lbnRfaWQpIHtcbiAgdmFyIHByZXZpb3NfY2xhc3NlcyA9ICcnO1xuXG4gIGlmICh1bmRlZmluZWQgIT0gYnV0dG9uX2NsaWNrZWRfZWxlbWVudF9pZCkge1xuICAgIHZhciBqRWxlbWVudCA9IGpRdWVyeSgnIycgKyBidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkKTtcblxuICAgIGlmIChqRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgIHByZXZpb3NfY2xhc3NlcyA9IHdwYmNfYnV0dG9uX2Rpc2FibGVfbG9hZGluZ19pY29uKGpFbGVtZW50LmdldCgwKSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHByZXZpb3NfY2xhc3Nlcztcbn1cbi8qKlxyXG4gKiBTaG93IExvYWRpbmcgKHJvdGF0aW5nIGFycm93KSBpY29uIGZvciBidXR0b24gdGhhdCBoYXMgYmVlbiBjbGlja2VkXHJcbiAqXHJcbiAqIEBwYXJhbSB0aGlzX2J1dHRvblx0XHQtIHRoaXMgb2JqZWN0IG9mIHNwZWNpZmljIGJ1dHRvblxyXG4gKiBAcmV0dXJuIHN0cmluZ1x0XHRcdC0gQ1NTIGNsYXNzZXMgdGhhdCB3YXMgcHJldmlvdXNseSBpbiBidXR0b24gaWNvblxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfYnV0dG9uKSB7XG4gIHZhciBqQnV0dG9uID0galF1ZXJ5KHRoaXNfYnV0dG9uKTtcbiAgdmFyIGpJY29uID0gakJ1dHRvbi5maW5kKCdpJyk7XG4gIHZhciBwcmV2aW9zX2NsYXNzZXMgPSBqSWNvbi5hdHRyKCdjbGFzcycpO1xuICBqSWNvbi5yZW1vdmVDbGFzcygpLmFkZENsYXNzKCdtZW51X2ljb24gaWNvbi0xeCB3cGJjX2ljbl9yb3RhdGVfcmlnaHQgd3BiY19zcGluJyk7IC8vIFNldCBSb3RhdGUgaWNvblxuICAvL2pJY29uLmFkZENsYXNzKCAnd3BiY19hbmltYXRpb25fcGF1c2UnICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUGF1c2UgYW5pbWF0aW9uXG4gIC8vakljb24uYWRkQ2xhc3MoICd3cGJjX3VpX3JlZCcgKTtcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2V0IGljb24gY29sb3IgcmVkXG5cbiAgakljb24uYXR0cignd3BiY19wcmV2aW91c19jbGFzcycsIHByZXZpb3NfY2xhc3Nlcyk7XG4gIGpCdXR0b24uYWRkQ2xhc3MoJ2Rpc2FibGVkJyk7IC8vIERpc2FibGUgYnV0dG9uXG4gIC8vakJ1dHRvbi5wcm9wKCBcImRpc2FibGVkXCIsIHRydWUgKTtcbiAgLy8gV2UgbmVlZCB0byAgc2V0ICBoZXJlIGF0dHIgaW5zdGVhZCBvZiBwcm9wLCBiZWNhdXNlIGZvciBBIGVsZW1lbnRzLCAgYXR0cmlidXRlICdkaXNhYmxlZCcgZG8gIG5vdCBhZGRlZCB3aXRoIGpCdXR0b24ucHJvcCggXCJkaXNhYmxlZFwiLCB0cnVlICk7XG5cbiAgakJ1dHRvbi5hdHRyKCd3cGJjX3ByZXZpb3VzX29uY2xpY2snLCBqQnV0dG9uLmF0dHIoJ29uY2xpY2snKSk7IC8vU2F2ZSB0aGlzIHZhbHVlXG5cbiAgakJ1dHRvbi5hdHRyKCdvbmNsaWNrJywgJycpOyAvLyBEaXNhYmxlIGFjdGlvbnMgXCJvbiBjbGlja1wiXG5cbiAgcmV0dXJuIHByZXZpb3NfY2xhc3Nlcztcbn1cbi8qKlxyXG4gKiBIaWRlIExvYWRpbmcgKHJvdGF0aW5nIGFycm93KSBpY29uIGZvciBidXR0b24gdGhhdCB3YXMgY2xpY2tlZCBhbmQgc2hvdyBwcmV2aW91cyBpY29uIGFuZCBlbmFibGUgYnV0dG9uXHJcbiAqXHJcbiAqIEBwYXJhbSB0aGlzX2J1dHRvblx0XHQtIHRoaXMgb2JqZWN0IG9mIHNwZWNpZmljIGJ1dHRvblxyXG4gKiBAcmV0dXJuIHN0cmluZ1x0XHRcdC0gQ1NTIGNsYXNzZXMgdGhhdCB3YXMgcHJldmlvdXNseSBpbiBidXR0b24gaWNvblxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2J1dHRvbl9kaXNhYmxlX2xvYWRpbmdfaWNvbih0aGlzX2J1dHRvbikge1xuICB2YXIgakJ1dHRvbiA9IGpRdWVyeSh0aGlzX2J1dHRvbik7XG4gIHZhciBqSWNvbiA9IGpCdXR0b24uZmluZCgnaScpO1xuICB2YXIgcHJldmlvc19jbGFzc2VzID0gakljb24uYXR0cignd3BiY19wcmV2aW91c19jbGFzcycpO1xuXG4gIGlmICgnJyAhPSBwcmV2aW9zX2NsYXNzZXMpIHtcbiAgICBqSWNvbi5yZW1vdmVDbGFzcygpLmFkZENsYXNzKHByZXZpb3NfY2xhc3Nlcyk7XG4gIH1cblxuICBqQnV0dG9uLnJlbW92ZUNsYXNzKCdkaXNhYmxlZCcpOyAvLyBSZW1vdmUgRGlzYWJsZSBidXR0b25cblxuICB2YXIgcHJldmlvdXNfb25jbGljayA9IGpCdXR0b24uYXR0cignd3BiY19wcmV2aW91c19vbmNsaWNrJyk7XG5cbiAgaWYgKCcnICE9IHByZXZpb3VzX29uY2xpY2spIHtcbiAgICBqQnV0dG9uLmF0dHIoJ29uY2xpY2snLCBwcmV2aW91c19vbmNsaWNrKTtcbiAgfVxuXG4gIHJldHVybiBwcmV2aW9zX2NsYXNzZXM7XG59XG4vKipcclxuICogSGlkZSBhbGwgb3BlbiBtb2RhbCBwb3B1cHMgd2luZG93c1xyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX3BvcHVwX21vZGFsc19faGlkZSgpIHtcbiAgLy8gSGlkZSBtb2RhbHNcbiAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiBqUXVlcnkoJy53cGJjX3BvcHVwX21vZGFsJykud3BiY19teV9tb2RhbCkge1xuICAgIGpRdWVyeSgnLndwYmNfcG9wdXBfbW9kYWwnKS53cGJjX215X21vZGFsKCdoaWRlJyk7XG4gIH1cbn1cbi8qKlxyXG4gKiAgIERhdGVzICBTaG9ydCA8LT4gV2lkZSAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3Nob3J0KCkge1xuICBqUXVlcnkoJyNib29raW5nX2RhdGVzX3NtYWxsLC5ib29raW5nX2RhdGVzX2Z1bGwnKS5oaWRlKCk7XG4gIGpRdWVyeSgnI2Jvb2tpbmdfZGF0ZXNfZnVsbCwuYm9va2luZ19kYXRlc19zbWFsbCcpLnNob3coKTtcbiAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAndWlfdXNyX19kYXRlc19zaG9ydF93aWRlJzogJ3Nob3J0J1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfY2xpY2tfb25fZGF0ZXNfd2lkZSgpIHtcbiAgalF1ZXJ5KCcjYm9va2luZ19kYXRlc19mdWxsLC5ib29raW5nX2RhdGVzX3NtYWxsJykuaGlkZSgpO1xuICBqUXVlcnkoJyNib29raW5nX2RhdGVzX3NtYWxsLC5ib29raW5nX2RhdGVzX2Z1bGwnKS5zaG93KCk7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgJ3VpX3Vzcl9fZGF0ZXNfc2hvcnRfd2lkZSc6ICd3aWRlJ1xuICB9KTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfY2xpY2tfb25fZGF0ZXNfdG9nZ2xlKHRoaXNfZGF0ZSkge1xuICBqUXVlcnkodGhpc19kYXRlKS5wYXJlbnRzKCcud3BiY19jb2xfZGF0ZXMnKS5maW5kKCcuYm9va2luZ19kYXRlc19zbWFsbCcpLnRvZ2dsZSgpO1xuICBqUXVlcnkodGhpc19kYXRlKS5wYXJlbnRzKCcud3BiY19jb2xfZGF0ZXMnKS5maW5kKCcuYm9va2luZ19kYXRlc19mdWxsJykudG9nZ2xlKCk7XG4gIC8qXHJcbiAgdmFyIHZpc2libGVfc2VjdGlvbiA9IGpRdWVyeSggdGhpc19kYXRlICkucGFyZW50cyggJy5ib29raW5nX2RhdGVzX2V4cGFuZF9zZWN0aW9uJyApO1xyXG4gIHZpc2libGVfc2VjdGlvbi5oaWRlKCk7XHJcbiAgaWYgKCB2aXNpYmxlX3NlY3Rpb24uaGFzQ2xhc3MoICdib29raW5nX2RhdGVzX2Z1bGwnICkgKXtcclxuICBcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19zbWFsbCcgKS5zaG93KCk7XHJcbiAgfSBlbHNlIHtcclxuICBcdHZpc2libGVfc2VjdGlvbi5wYXJlbnRzKCAnLndwYmNfY29sX2RhdGVzJyApLmZpbmQoICcuYm9va2luZ19kYXRlc19mdWxsJyApLnNob3coKTtcclxuICB9Ki9cblxuICBjb25zb2xlLmxvZygnd3BiY19hanhfY2xpY2tfb25fZGF0ZXNfdG9nZ2xlJywgdGhpc19kYXRlKTtcbn1cbi8qKlxyXG4gKiAgIExvY2FsZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogXHRTZWxlY3Qgb3B0aW9ucyBpbiBzZWxlY3QgYm94ZXMgYmFzZWQgb24gYXR0cmlidXRlIFwidmFsdWVfb2Zfc2VsZWN0ZWRfb3B0aW9uXCIgYW5kIFJFRCBjb2xvciBhbmQgaGludCBmb3IgTE9DQUxFIGJ1dHRvbiAgIC0tICBJdCdzIGNhbGxlZCBmcm9tIFx0d3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3MoKSAgXHRlYWNoICB0aW1lIGFmdGVyIExpc3RpbmcgbG9hZGluZy5cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKSB7XG4gIGpRdWVyeSgnLndwYmNfbGlzdGluZ19jb250YWluZXIgc2VsZWN0JykuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICB2YXIgc2VsZWN0aW9uID0galF1ZXJ5KHRoaXMpLmF0dHIoXCJ2YWx1ZV9vZl9zZWxlY3RlZF9vcHRpb25cIik7IC8vIERlZmluZSBzZWxlY3RlZCBzZWxlY3QgYm94ZXNcblxuICAgIGlmICh1bmRlZmluZWQgIT09IHNlbGVjdGlvbikge1xuICAgICAgalF1ZXJ5KHRoaXMpLmZpbmQoJ29wdGlvblt2YWx1ZT1cIicgKyBzZWxlY3Rpb24gKyAnXCJdJykucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTtcblxuICAgICAgaWYgKCcnICE9IHNlbGVjdGlvbiAmJiBqUXVlcnkodGhpcykuaGFzQ2xhc3MoJ3NldF9ib29raW5nX2xvY2FsZV9zZWxlY3Rib3gnKSkge1xuICAgICAgICAvLyBMb2NhbGVcbiAgICAgICAgdmFyIGJvb2tpbmdfbG9jYWxlX2J1dHRvbiA9IGpRdWVyeSh0aGlzKS5wYXJlbnRzKCcudWlfZWxlbWVudF9sb2NhbGUnKS5maW5kKCcuc2V0X2Jvb2tpbmdfbG9jYWxlX2J1dHRvbicpOyAvL2Jvb2tpbmdfbG9jYWxlX2J1dHRvbi5jc3MoICdjb2xvcicsICcjZGI0ODAwJyApO1x0XHQvLyBTZXQgYnV0dG9uICByZWRcblxuICAgICAgICBib29raW5nX2xvY2FsZV9idXR0b24uYWRkQ2xhc3MoJ3dwYmNfdWlfcmVkJyk7IC8vIFNldCBidXR0b24gIHJlZFxuXG4gICAgICAgIGlmICgnZnVuY3Rpb24nID09PSB0eXBlb2Ygd3BiY190aXBweSkge1xuICAgICAgICAgIGJvb2tpbmdfbG9jYWxlX2J1dHRvbi5nZXQoMCkuX3RpcHB5LnNldENvbnRlbnQoc2VsZWN0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4vKipcclxuICogICBSZW1hcmsgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIERlZmluZSBjb250ZW50IG9mIHJlbWFyayBcImJvb2tpbmcgbm90ZVwiIGJ1dHRvbiBhbmQgdGV4dGFyZWEuICAtLSBJdCdzIGNhbGxlZCBmcm9tIFx0d3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3MoKSAgXHRlYWNoICB0aW1lIGFmdGVyIExpc3RpbmcgbG9hZGluZy5cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19yZW1hcmsoKSB7XG4gIGpRdWVyeSgnLndwYmNfbGlzdGluZ19jb250YWluZXIgLnVpX3JlbWFya19zZWN0aW9uIHRleHRhcmVhJykuZWFjaChmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICB2YXIgdGV4dF92YWwgPSBqUXVlcnkodGhpcykudmFsKCk7XG5cbiAgICBpZiAodW5kZWZpbmVkICE9PSB0ZXh0X3ZhbCAmJiAnJyAhPSB0ZXh0X3ZhbCkge1xuICAgICAgdmFyIHJlbWFya19idXR0b24gPSBqUXVlcnkodGhpcykucGFyZW50cygnLnVpX2dyb3VwJykuZmluZCgnLnNldF9ib29raW5nX25vdGVfYnV0dG9uJyk7XG5cbiAgICAgIGlmIChyZW1hcmtfYnV0dG9uLmxlbmd0aCA+IDApIHtcbiAgICAgICAgcmVtYXJrX2J1dHRvbi5hZGRDbGFzcygnd3BiY191aV9yZWQnKTsgLy8gU2V0IGJ1dHRvbiAgcmVkXG5cbiAgICAgICAgaWYgKCdmdW5jdGlvbicgPT09IHR5cGVvZiB3cGJjX3RpcHB5KSB7XG4gICAgICAgICAgLy9yZW1hcmtfYnV0dG9uLmdldCggMCApLl90aXBweS5hbGxvd0hUTUwgPSB0cnVlO1xuICAgICAgICAgIC8vcmVtYXJrX2J1dHRvbi5nZXQoIDAgKS5fdGlwcHkuc2V0Q29udGVudCggdGV4dF92YWwucmVwbGFjZSgvW1xcblxccl0vZywgJzxicj4nKSApO1xuICAgICAgICAgIHJlbWFya19idXR0b24uZ2V0KDApLl90aXBweS5zZXRQcm9wcyh7XG4gICAgICAgICAgICBhbGxvd0hUTUw6IHRydWUsXG4gICAgICAgICAgICBjb250ZW50OiB0ZXh0X3ZhbC5yZXBsYWNlKC9bXFxuXFxyXS9nLCAnPGJyPicpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuLyoqXHJcbiAqIEFjdGlvbnMgLHdoZW4gd2UgY2xpY2sgb24gXCJSZW1hcmtcIiBidXR0b24uXHJcbiAqXHJcbiAqIEBwYXJhbSBqcV9idXR0b24gIC1cdHRoaXMgalF1ZXJ5IGJ1dHRvbiAgb2JqZWN0XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19yZW1hcmsoanFfYnV0dG9uKSB7XG4gIGpxX2J1dHRvbi5wYXJlbnRzKCcudWlfZ3JvdXAnKS5maW5kKCcudWlfcmVtYXJrX3NlY3Rpb24nKS50b2dnbGUoKTtcbn1cbi8qKlxyXG4gKiAgIENoYW5nZSBib29raW5nIHJlc291cmNlICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX2NoYW5nZV9yZXNvdXJjZShib29raW5nX2lkLCByZXNvdXJjZV9pZCkge1xuICAvLyBEZWZpbmUgSUQgb2YgYm9va2luZyB0byBoaWRkZW4gaW5wdXRcbiAgalF1ZXJ5KCcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnKS52YWwoYm9va2luZ19pZCk7IC8vIFNlbGVjdCBib29raW5nIHJlc291cmNlICB0aGF0IGJlbG9uZyB0byAgYm9va2luZ1xuXG4gIGpRdWVyeSgnI2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnKS52YWwocmVzb3VyY2VfaWQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICB2YXIgY2JyOyAvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxuXG4gIGNiciA9IGpRdWVyeShcIiNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTsgLy8gQXBwZW5kIGl0IHRvIGJvb2tpbmcgUk9XXG5cbiAgY2JyLmFwcGVuZFRvKGpRdWVyeShcIiN1aV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQpKTtcbiAgY2JyID0gbnVsbDsgLy8gSGlkZSBzZWN0aW9ucyBvZiBcIkNoYW5nZSBib29raW5nIHJlc291cmNlXCIgaW4gYWxsIG90aGVyIGJvb2tpbmdzIFJPV3NcbiAgLy9qUXVlcnkoIFwiLnVpX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvbl9pbl9ib29raW5nXCIgKS5oaWRlKCk7XG5cbiAgaWYgKCFqUXVlcnkoXCIjdWlfX2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS5pcygnOnZpc2libGUnKSkge1xuICAgIGpRdWVyeShcIi51aV9fdW5kZXJfYWN0aW9uc19yb3dfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XG4gIH0gLy8gU2hvdyBvbmx5IFwiY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBzZWN0aW9uICBmb3IgY3VycmVudCBib29raW5nXG5cblxuICBqUXVlcnkoXCIjdWlfX2NoYW5nZV9ib29raW5nX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS50b2dnbGUoKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fY2hhbmdlX3Jlc291cmNlKHRoaXNfZWwsIGJvb2tpbmdfYWN0aW9uLCBlbF9pZCkge1xuICB3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3Qoe1xuICAgICdib29raW5nX2FjdGlvbic6IGJvb2tpbmdfYWN0aW9uLFxuICAgICdib29raW5nX2lkJzogalF1ZXJ5KCcjY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnKS52YWwoKSxcbiAgICAnc2VsZWN0ZWRfcmVzb3VyY2VfaWQnOiBqUXVlcnkoJyNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fcmVzb3VyY2Vfc2VsZWN0JykudmFsKCksXG4gICAgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6IGVsX2lkXG4gIH0pO1xuICB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfZWwpOyAvLyB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19jbG9zZV9fY2hhbmdlX3Jlc291cmNlKCk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19jaGFuZ2VfcmVzb3VyY2UoKSB7XG4gIHZhciBjYnJjZTsgLy8gR2V0IFJlc291cmNlIHNlY3Rpb25cblxuICBjYnJjZSA9IGpRdWVyeShcIiNjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTsgLy8gQXBwZW5kIGl0IHRvIGhpZGRlbiBIVE1MIHRlbXBsYXRlIHNlY3Rpb24gIGF0ICB0aGUgYm90dG9tICBvZiB0aGUgcGFnZVxuXG4gIGNicmNlLmFwcGVuZFRvKGpRdWVyeShcIiN3cGJjX2hpZGRlbl90ZW1wbGF0ZV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VcIikpO1xuICBjYnJjZSA9IG51bGw7IC8vIEhpZGUgYWxsIGNoYW5nZSBib29raW5nIHJlc291cmNlcyBzZWN0aW9uc1xuXG4gIGpRdWVyeShcIi51aV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XG59XG4vKipcclxuICogICBEdXBsaWNhdGUgYm9va2luZyBpbiBvdGhlciByZXNvdXJjZSAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19kdXBsaWNhdGVfYm9va2luZyhib29raW5nX2lkLCByZXNvdXJjZV9pZCkge1xuICAvLyBEZWZpbmUgSUQgb2YgYm9va2luZyB0byBoaWRkZW4gaW5wdXRcbiAgalF1ZXJ5KCcjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX2Jvb2tpbmdfaWQnKS52YWwoYm9va2luZ19pZCk7IC8vIFNlbGVjdCBib29raW5nIHJlc291cmNlICB0aGF0IGJlbG9uZyB0byAgYm9va2luZ1xuXG4gIGpRdWVyeSgnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnKS52YWwocmVzb3VyY2VfaWQpLnRyaWdnZXIoJ2NoYW5nZScpO1xuICB2YXIgY2JyOyAvLyBHZXQgUmVzb3VyY2Ugc2VjdGlvblxuXG4gIGNiciA9IGpRdWVyeShcIiNkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV9fc2VjdGlvblwiKS5kZXRhY2goKTsgLy8gQXBwZW5kIGl0IHRvIGJvb2tpbmcgUk9XXG5cbiAgY2JyLmFwcGVuZFRvKGpRdWVyeShcIiN1aV9fZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQpKTtcbiAgY2JyID0gbnVsbDsgLy8gSGlkZSBzZWN0aW9ucyBvZiBcIkR1cGxpY2F0ZSBib29raW5nXCIgaW4gYWxsIG90aGVyIGJvb2tpbmdzIFJPV3NcblxuICBpZiAoIWpRdWVyeShcIiN1aV9fZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25faW5fYm9va2luZ19cIiArIGJvb2tpbmdfaWQpLmlzKCc6dmlzaWJsZScpKSB7XG4gICAgalF1ZXJ5KFwiLnVpX191bmRlcl9hY3Rpb25zX3Jvd19fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcbiAgfSAvLyBTaG93IG9ubHkgXCJEdXBsaWNhdGUgYm9va2luZ1wiIHNlY3Rpb24gIGZvciBjdXJyZW50IGJvb2tpbmcgUk9XXG5cblxuICBqUXVlcnkoXCIjdWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS50b2dnbGUoKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fZHVwbGljYXRlX2Jvb2tpbmcodGhpc19lbCwgYm9va2luZ19hY3Rpb24sIGVsX2lkKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogYm9va2luZ19hY3Rpb24sXG4gICAgJ2Jvb2tpbmdfaWQnOiBqUXVlcnkoJyNkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV9fYm9va2luZ19pZCcpLnZhbCgpLFxuICAgICdzZWxlY3RlZF9yZXNvdXJjZV9pZCc6IGpRdWVyeSgnI2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19yZXNvdXJjZV9zZWxlY3QnKS52YWwoKSxcbiAgICAndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWRcbiAgfSk7XG4gIHdwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24odGhpc19lbCk7IC8vIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19jaGFuZ2VfcmVzb3VyY2UoKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2R1cGxpY2F0ZV9ib29raW5nKCkge1xuICB2YXIgY2JyY2U7IC8vIEdldCBSZXNvdXJjZSBzZWN0aW9uXG5cbiAgY2JyY2UgPSBqUXVlcnkoXCIjZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfX3NlY3Rpb25cIikuZGV0YWNoKCk7IC8vIEFwcGVuZCBpdCB0byBoaWRkZW4gSFRNTCB0ZW1wbGF0ZSBzZWN0aW9uICBhdCAgdGhlIGJvdHRvbSAgb2YgdGhlIHBhZ2VcblxuICBjYnJjZS5hcHBlbmRUbyhqUXVlcnkoXCIjd3BiY19oaWRkZW5fdGVtcGxhdGVfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlXCIpKTtcbiAgY2JyY2UgPSBudWxsOyAvLyBIaWRlIGFsbCBjaGFuZ2UgYm9va2luZyByZXNvdXJjZXMgc2VjdGlvbnNcblxuICBqUXVlcnkoXCIudWlfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX19zZWN0aW9uX2luX2Jvb2tpbmdcIikuaGlkZSgpO1xufVxuLyoqXHJcbiAqICAgQ2hhbmdlIHBheW1lbnQgc3RhdHVzICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2hvd19fc2V0X3BheW1lbnRfc3RhdHVzKGJvb2tpbmdfaWQpIHtcbiAgdmFyIGpTZWxlY3QgPSBqUXVlcnkoJyN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfJyArIGJvb2tpbmdfaWQpLmZpbmQoJ3NlbGVjdCcpO1xuICB2YXIgc2VsZWN0ZWRfcGF5X3N0YXR1cyA9IGpTZWxlY3QuYXR0cihcImFqeC1zZWxlY3RlZC12YWx1ZVwiKTsgLy8gSXMgaXQgZmxvYXQgLSB0aGVuICBpdCdzIHVua25vd25cblxuICBpZiAoIWlzTmFOKHBhcnNlRmxvYXQoc2VsZWN0ZWRfcGF5X3N0YXR1cykpKSB7XG4gICAgalNlbGVjdC5maW5kKCdvcHRpb25bdmFsdWU9XCIxXCJdJykucHJvcCgnc2VsZWN0ZWQnLCB0cnVlKTsgLy8gVW5rbm93biAgdmFsdWUgaXMgJzEnIGluIHNlbGVjdCBib3hcbiAgfSBlbHNlIHtcbiAgICBqU2VsZWN0LmZpbmQoJ29wdGlvblt2YWx1ZT1cIicgKyBzZWxlY3RlZF9wYXlfc3RhdHVzICsgJ1wiXScpLnByb3AoJ3NlbGVjdGVkJywgdHJ1ZSk7IC8vIE90aGVyd2lzZSBrbm93biBwYXltZW50IHN0YXR1c1xuICB9IC8vIEhpZGUgc2VjdGlvbnMgb2YgXCJDaGFuZ2UgYm9va2luZyByZXNvdXJjZVwiIGluIGFsbCBvdGhlciBib29raW5ncyBST1dzXG5cblxuICBpZiAoIWpRdWVyeShcIiN1aV9fc2V0X3BheW1lbnRfc3RhdHVzX19zZWN0aW9uX2luX2Jvb2tpbmdfXCIgKyBib29raW5nX2lkKS5pcygnOnZpc2libGUnKSkge1xuICAgIGpRdWVyeShcIi51aV9fdW5kZXJfYWN0aW9uc19yb3dfX3NlY3Rpb25faW5fYm9va2luZ1wiKS5oaWRlKCk7XG4gIH0gLy8gU2hvdyBvbmx5IFwiY2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcIiBzZWN0aW9uICBmb3IgY3VycmVudCBib29raW5nXG5cblxuICBqUXVlcnkoXCIjdWlfX3NldF9wYXltZW50X3N0YXR1c19fc2VjdGlvbl9pbl9ib29raW5nX1wiICsgYm9va2luZ19pZCkudG9nZ2xlKCk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9wYXltZW50X3N0YXR1cyhib29raW5nX2lkLCB0aGlzX2VsLCBib29raW5nX2FjdGlvbiwgZWxfaWQpIHtcbiAgd3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0KHtcbiAgICAnYm9va2luZ19hY3Rpb24nOiBib29raW5nX2FjdGlvbixcbiAgICAnYm9va2luZ19pZCc6IGJvb2tpbmdfaWQsXG4gICAgJ3NlbGVjdGVkX3BheW1lbnRfc3RhdHVzJzogalF1ZXJ5KCcjdWlfYnRuX3NldF9wYXltZW50X3N0YXR1cycgKyBib29raW5nX2lkKS52YWwoKSxcbiAgICAndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogZWxfaWQgKyAnX3NhdmUnXG4gIH0pO1xuICB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfZWwpO1xuICBqUXVlcnkoJyMnICsgZWxfaWQgKyAnX2NhbmNlbCcpLmhpZGUoKTsgLy93cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKCBqUXVlcnkoICcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5nZXQoMCkgKTtcbn1cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX3NldF9wYXltZW50X3N0YXR1cygpIHtcbiAgLy8gSGlkZSBhbGwgY2hhbmdlICBwYXltZW50IHN0YXR1cyBmb3IgYm9va2luZ1xuICBqUXVlcnkoXCIudWlfX3NldF9wYXltZW50X3N0YXR1c19fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcbn1cbi8qKlxyXG4gKiAgIENoYW5nZSBib29raW5nIGNvc3QgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX3NldF9ib29raW5nX2Nvc3QoYm9va2luZ19pZCwgdGhpc19lbCwgYm9va2luZ19hY3Rpb24sIGVsX2lkKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogYm9va2luZ19hY3Rpb24sXG4gICAgJ2Jvb2tpbmdfaWQnOiBib29raW5nX2lkLFxuICAgICdib29raW5nX2Nvc3QnOiBqUXVlcnkoJyN1aV9idG5fc2V0X2Jvb2tpbmdfY29zdCcgKyBib29raW5nX2lkICsgJ19jb3N0JykudmFsKCksXG4gICAgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6IGVsX2lkICsgJ19zYXZlJ1xuICB9KTtcbiAgd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbih0aGlzX2VsKTtcbiAgalF1ZXJ5KCcjJyArIGVsX2lkICsgJ19jYW5jZWwnKS5oaWRlKCk7IC8vd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbiggalF1ZXJ5KCAnIycgKyBlbF9pZCArICdfY2FuY2VsJykuZ2V0KDApICk7XG59XG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19zZXRfYm9va2luZ19jb3N0KCkge1xuICAvLyBIaWRlIGFsbCBjaGFuZ2UgIHBheW1lbnQgc3RhdHVzIGZvciBib29raW5nXG4gIGpRdWVyeShcIi51aV9fc2V0X2Jvb2tpbmdfY29zdF9fc2VjdGlvbl9pbl9ib29raW5nXCIpLmhpZGUoKTtcbn1cbi8qKlxyXG4gKiAgIFNlbmQgUGF5bWVudCByZXF1ZXN0ICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fc2VuZF9wYXltZW50X3JlcXVlc3QoKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogJ3NlbmRfcGF5bWVudF9yZXF1ZXN0JyxcbiAgICAnYm9va2luZ19pZCc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX3BheW1lbnRfcmVxdWVzdF9fYm9va2luZ19pZCcpLnZhbCgpLFxuICAgICdyZWFzb25fb2ZfYWN0aW9uJzogalF1ZXJ5KCcjd3BiY19tb2RhbF9fcGF5bWVudF9yZXF1ZXN0X19yZWFzb25fb2ZfYWN0aW9uJykudmFsKCksXG4gICAgJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCc6ICd3cGJjX21vZGFsX19wYXltZW50X3JlcXVlc3RfX2J1dHRvbl9zZW5kJ1xuICB9KTtcbiAgd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbihqUXVlcnkoJyN3cGJjX21vZGFsX19wYXltZW50X3JlcXVlc3RfX2J1dHRvbl9zZW5kJykuZ2V0KDApKTtcbn1cbi8qKlxyXG4gKiAgIEltcG9ydCBHb29nbGUgQ2FsZW5kYXIgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyKCkge1xuICB3cGJjX2FqeF9ib29raW5nX2FqYXhfYWN0aW9uX3JlcXVlc3Qoe1xuICAgICdib29raW5nX2FjdGlvbic6ICdpbXBvcnRfZ29vZ2xlX2NhbGVuZGFyJyxcbiAgICAndWlfY2xpY2tlZF9lbGVtZW50X2lkJzogJ3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX2J1dHRvbl9zZW5kJyxcbiAgICAnYm9va2luZ19nY2FsX2V2ZW50c19mcm9tJzogalF1ZXJ5KCcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0JzogalF1ZXJ5KCcjd3BiY19tb2RhbF9faW1wb3J0X2dvb2dsZV9jYWxlbmRhcl9fc2VjdGlvbiAjYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0X3R5cGUnOiBqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0X3R5cGUgb3B0aW9uOnNlbGVjdGVkJykudmFsKCksXG4gICAgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWwnOiBqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX3VudGlsIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX3VudGlsX29mZnNldCc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0JykudmFsKCksXG4gICAgJ2Jvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0X3R5cGUnOiBqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICNib29raW5nX2djYWxfZXZlbnRzX3VudGlsX29mZnNldF90eXBlIG9wdGlvbjpzZWxlY3RlZCcpLnZhbCgpLFxuICAgICdib29raW5nX2djYWxfZXZlbnRzX21heCc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI2Jvb2tpbmdfZ2NhbF9ldmVudHNfbWF4JykudmFsKCksXG4gICAgJ2Jvb2tpbmdfZ2NhbF9yZXNvdXJjZSc6IGpRdWVyeSgnI3dwYmNfbW9kYWxfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXJfX3NlY3Rpb24gI3dwYmNfYm9va2luZ19yZXNvdXJjZSBvcHRpb246c2VsZWN0ZWQnKS52YWwoKVxuICB9KTtcbiAgd3BiY19idXR0b25fZW5hYmxlX2xvYWRpbmdfaWNvbihqUXVlcnkoJyN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19zZWN0aW9uICN3cGJjX21vZGFsX19pbXBvcnRfZ29vZ2xlX2NhbGVuZGFyX19idXR0b25fc2VuZCcpLmdldCgwKSk7XG59XG4vKipcclxuICogICBFeHBvcnQgYm9va2luZ3MgdG8gQ1NWICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fZXhwb3J0X2NzdihwYXJhbXMpIHtcbiAgdmFyIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyID0gd3BiY19nZXRfc2VsZWN0ZWRfcm93X2lkKCk7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9hY3Rpb25fcmVxdWVzdCh7XG4gICAgJ2Jvb2tpbmdfYWN0aW9uJzogcGFyYW1zWydib29raW5nX2FjdGlvbiddLFxuICAgICd1aV9jbGlja2VkX2VsZW1lbnRfaWQnOiBwYXJhbXNbJ3VpX2NsaWNrZWRfZWxlbWVudF9pZCddLFxuICAgICdleHBvcnRfdHlwZSc6IHBhcmFtc1snZXhwb3J0X3R5cGUnXSxcbiAgICAnY3N2X2V4cG9ydF9zZXBhcmF0b3InOiBwYXJhbXNbJ2Nzdl9leHBvcnRfc2VwYXJhdG9yJ10sXG4gICAgJ2Nzdl9leHBvcnRfc2tpcF9maWVsZHMnOiBwYXJhbXNbJ2Nzdl9leHBvcnRfc2tpcF9maWVsZHMnXSxcbiAgICAnYm9va2luZ19pZCc6IHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyLmpvaW4oJywnKSxcbiAgICAnc2VhcmNoX3BhcmFtcyc6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKVxuICB9KTtcbiAgdmFyIHRoaXNfZWwgPSBqUXVlcnkoJyMnICsgcGFyYW1zWyd1aV9jbGlja2VkX2VsZW1lbnRfaWQnXSkuZ2V0KDApO1xuICB3cGJjX2J1dHRvbl9lbmFibGVfbG9hZGluZ19pY29uKHRoaXNfZWwpO1xufVxuLyoqXHJcbiAqIE9wZW4gVVJMIGluIG5ldyB0YWIgLSBtYWlubHkgIGl0J3MgdXNlZCBmb3Igb3BlbiBDU1YgbGluayAgZm9yIGRvd25sb2FkZWQgZXhwb3J0ZWQgYm9va2luZ3MgYXMgQ1NWXHJcbiAqXHJcbiAqIEBwYXJhbSBleHBvcnRfY3N2X3VybFxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19leHBvcnRfY3N2X3VybF9fZG93bmxvYWQoZXhwb3J0X2Nzdl91cmwpIHtcbiAgLy92YXIgc2VsZWN0ZWRfYm9va2luZ19pZF9hcnIgPSB3cGJjX2dldF9zZWxlY3RlZF9yb3dfaWQoKTtcbiAgZG9jdW1lbnQubG9jYXRpb24uaHJlZiA9IGV4cG9ydF9jc3ZfdXJsOyAvLyArICcmc2VsZWN0ZWRfaWQ9JyArIHNlbGVjdGVkX2Jvb2tpbmdfaWRfYXJyLmpvaW4oJywnKTtcbiAgLy8gSXQncyBvcGVuIGFkZGl0aW9uYWwgZGlhbG9nIGZvciBhc2tpbmcgb3BlbmluZyB1bHIgaW4gbmV3IHRhYlxuICAvLyB3aW5kb3cub3BlbiggZXhwb3J0X2Nzdl91cmwsICdfYmxhbmsnKS5mb2N1cygpO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgzTnlZeTlpYjI5cmFXNW5jMTlmWVdOMGFXOXVjeTVxY3lKZExDSnVZVzFsY3lJNld5SjNjR0pqWDJGcWVGOWliMjlyYVc1blgyRnFZWGhmWVdOMGFXOXVYM0psY1hWbGMzUWlMQ0poWTNScGIyNWZjR0Z5WVcwaUxDSmpiMjV6YjJ4bElpd2laM0p2ZFhCRGIyeHNZWEJ6WldRaUxDSnNiMmNpTENKM2NHSmpYMkp2YjJ0cGJtZGZiR2x6ZEdsdVoxOXlaV3h2WVdSZlluVjBkRzl1WDE5emNHbHVYM04wWVhKMElpd2lkVzVrWldacGJtVmtJaXdpUVhKeVlYa2lMQ0pwYzBGeWNtRjVJaXdpZDNCaVkxOW5aWFJmYzJWc1pXTjBaV1JmYkc5allXeGxJaXdpZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5JaXdpWjJWMFgzTmxZM1Z5WlY5d1lYSmhiU0lzSW1GamRHbHZibDl3YjNOMFgzQmhjbUZ0Y3lJc0ltRmpkR2x2YmlJc0ltNXZibU5sSWl3aWQzQmlZMTloYW5oZmRYTmxjbDlwWkNJc0luZHdZbU5mWVdwNFgyeHZZMkZzWlNJc0ltRmpkR2x2Ymw5d1lYSmhiWE1pTENKelpXRnlZMmhmY0dGeVlXMXpJaXdpYWxGMVpYSjVJaXdpY0c5emRDSXNJbmR3WW1OZloyeHZZbUZzTVNJc0luZHdZbU5mWVdwaGVIVnliQ0lzSW5KbGMzQnZibk5sWDJSaGRHRWlMQ0owWlhoMFUzUmhkSFZ6SWl3aWFuRllTRklpTENKbmNtOTFjRVZ1WkNJc0ltaHBaR1VpTENKblpYUmZiM1JvWlhKZmNHRnlZVzBpTENKb2RHMXNJaXdpZDNCaVkxOWliMjlyYVc1blgyeHBjM1JwYm1kZmNtVnNiMkZrWDJKMWRIUnZibDlmYzNCcGJsOXdZWFZ6WlNJc0luZHdZbU5mWVdSdGFXNWZjMmh2ZDE5dFpYTnpZV2RsSWl3aWNtVndiR0ZqWlNJc0ltbHpYM0psYkc5aFpGOWhhbUY0WDJ4cGMzUnBibWNpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNObGJtUmZjMlZoY21Ob1gzSmxjWFZsYzNSZmQybDBhRjl3WVhKaGJYTWlMQ0pqYkc5elpXUmZkR2x0WlhJaUxDSnpaWFJVYVcxbGIzVjBJaXdpZDNCaVkxOWliMjlyYVc1blgyeHBjM1JwYm1kZmNtVnNiMkZrWDJKMWRIUnZibDlmYVhOZmMzQnBiaUlzSW1SdlkzVnRaVzUwSWl3aWJHOWpZWFJwYjI0aUxDSm9jbVZtSWl3aWNtVnNiMkZrSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZlpYaHdiM0owWDJOemRsOTFjbXhmWDJSdmQyNXNiMkZrSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZllXTjBkV0ZzWDJ4cGMzUnBibWRmWDNOb2IzY2lMQ0ozY0dKalgySjFkSFJ2Ymw5ZmNtVnRiM1psWDNOd2FXNGlMQ0ozY0dKalgzQnZjSFZ3WDIxdlpHRnNjMTlmYUdsa1pTSXNJbVpoYVd3aUxDSmxjbkp2Y2xSb2NtOTNiaUlzSW5kcGJtUnZkeUlzSW1WeWNtOXlYMjFsYzNOaFoyVWlMQ0p5WlhOd2IyNXpaVlJsZUhRaUxDSjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTm9iM2RmYldWemMyRm5aU0lzSW1KMWRIUnZibDlqYkdsamEyVmtYMlZzWlcxbGJuUmZhV1FpTENKd2NtVjJhVzl6WDJOc1lYTnpaWE1pTENKcVJXeGxiV1Z1ZENJc0lteGxibWQwYUNJc0luZHdZbU5mWW5WMGRHOXVYMlJwYzJGaWJHVmZiRzloWkdsdVoxOXBZMjl1SWl3aVoyVjBJaXdpZDNCaVkxOWlkWFIwYjI1ZlpXNWhZbXhsWDJ4dllXUnBibWRmYVdOdmJpSXNJblJvYVhOZlluVjBkRzl1SWl3aWFrSjFkSFJ2YmlJc0ltcEpZMjl1SWl3aVptbHVaQ0lzSW1GMGRISWlMQ0p5WlcxdmRtVkRiR0Z6Y3lJc0ltRmtaRU5zWVhOeklpd2ljSEpsZG1sdmRYTmZiMjVqYkdsamF5SXNJbmR3WW1OZmJYbGZiVzlrWVd3aUxDSjNjR0pqWDJGcWVGOWpiR2xqYTE5dmJsOWtZWFJsYzE5emFHOXlkQ0lzSW5Ob2IzY2lMQ0ozY0dKalgyRnFlRjlqYkdsamExOXZibDlrWVhSbGMxOTNhV1JsSWl3aWQzQmlZMTloYW5oZlkyeHBZMnRmYjI1ZlpHRjBaWE5mZEc5bloyeGxJaXdpZEdocGMxOWtZWFJsSWl3aWNHRnlaVzUwY3lJc0luUnZaMmRzWlNJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMlJsWm1sdVpWOWZiRzlqWVd4bElpd2laV0ZqYUNJc0ltbHVaR1Y0SWl3aWMyVnNaV04wYVc5dUlpd2ljSEp2Y0NJc0ltaGhjME5zWVhOeklpd2lZbTl2YTJsdVoxOXNiMk5oYkdWZlluVjBkRzl1SWl3aWQzQmlZMTkwYVhCd2VTSXNJbDkwYVhCd2VTSXNJbk5sZEVOdmJuUmxiblFpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWtaV1pwYm1WZlgzSmxiV0Z5YXlJc0luUmxlSFJmZG1Gc0lpd2lkbUZzSWl3aWNtVnRZWEpyWDJKMWRIUnZiaUlzSW5ObGRGQnliM0J6SWl3aVlXeHNiM2RJVkUxTUlpd2lZMjl1ZEdWdWRDSXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZYM1ZwWDJOc2FXTnJYMTl5WlcxaGNtc2lMQ0pxY1Y5aWRYUjBiMjRpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5emFHOTNYMTlqYUdGdVoyVmZjbVZ6YjNWeVkyVWlMQ0ppYjI5cmFXNW5YMmxrSWl3aWNtVnpiM1Z5WTJWZmFXUWlMQ0owY21sbloyVnlJaXdpWTJKeUlpd2laR1YwWVdOb0lpd2lZWEJ3Wlc1a1ZHOGlMQ0pwY3lJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTmhkbVZmWDJOb1lXNW5aVjl5WlhOdmRYSmpaU0lzSW5Sb2FYTmZaV3dpTENKaWIyOXJhVzVuWDJGamRHbHZiaUlzSW1Wc1gybGtJaXdpZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmZFdsZlkyeHBZMnRmWTJ4dmMyVmZYMk5vWVc1blpWOXlaWE52ZFhKalpTSXNJbU5pY21ObElpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZjMmh2ZDE5ZlpIVndiR2xqWVhSbFgySnZiMnRwYm1jaUxDSjNjR0pqWDJGcWVGOWliMjlyYVc1blgxOTFhVjlqYkdsamExOXpZWFpsWDE5a2RYQnNhV05oZEdWZlltOXZhMmx1WnlJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgyTnNiM05sWDE5a2RYQnNhV05oZEdWZlltOXZhMmx1WnlJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTm9iM2RmWDNObGRGOXdZWGx0Wlc1MFgzTjBZWFIxY3lJc0ltcFRaV3hsWTNRaUxDSnpaV3hsWTNSbFpGOXdZWGxmYzNSaGRIVnpJaXdpYVhOT1lVNGlMQ0p3WVhKelpVWnNiMkYwSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZZMnhwWTJ0ZmMyRjJaVjlmYzJWMFgzQmhlVzFsYm5SZmMzUmhkSFZ6SWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZZMnhwWTJ0ZlkyeHZjMlZmWDNObGRGOXdZWGx0Wlc1MFgzTjBZWFIxY3lJc0luZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTmhkbVZmWDNObGRGOWliMjlyYVc1blgyTnZjM1FpTENKM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5amJHOXpaVjlmYzJWMFgySnZiMnRwYm1kZlkyOXpkQ0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDE5elpXNWtYM0JoZVcxbGJuUmZjbVZ4ZFdWemRDSXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZYM1ZwWDJOc2FXTnJYMTlwYlhCdmNuUmZaMjl2WjJ4bFgyTmhiR1Z1WkdGeUlpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZYMlY0Y0c5eWRGOWpjM1lpTENKd1lYSmhiWE1pTENKelpXeGxZM1JsWkY5aWIyOXJhVzVuWDJsa1gyRnljaUlzSW5kd1ltTmZaMlYwWDNObGJHVmpkR1ZrWDNKdmQxOXBaQ0lzSW1wdmFXNGlMQ0p6WldGeVkyaGZaMlYwWDJGc2JGOXdZWEpoYlhNaUxDSmxlSEJ2Y25SZlkzTjJYM1Z5YkNKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN1FVRkZRVHRCUVVOQk8wRkJRMEU3TzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3T3p0QlFVTkJMRk5CUVZOQkxHOURRVUZVTEVkQlFXdEZPMEZCUVVFc1RVRkJia0pETEZsQlFXMUNMSFZGUVVGS0xFVkJRVWs3UVVGRmJFVkRMRVZCUVVGQkxFOUJRVThzUTBGQlEwTXNZMEZCVWl4RFFVRjNRaXd3UWtGQmVFSTdRVUZCYzBSRUxFVkJRVUZCTEU5QlFVOHNRMEZCUTBVc1IwRkJVaXhEUVVGaExHZERRVUZpTEVWQlFTdERTQ3haUVVFdlF5eEZRVVpaTEVOQlIyeEZPenRCUVVWRFNTeEZRVUZCUVN3NFEwRkJPRU1zUjBGTWJVSXNRMEZQYWtVN08wRkJRMEVzVFVGQlVVTXNVMEZCVXl4SlFVRkpUQ3haUVVGWkxFTkJRVVVzV1VGQlJpeERRVUV6UWl4SlFVRnRSQ3hEUVVGRlRTeExRVUZMTEVOQlFVTkRMRTlCUVU0c1EwRkJaVkFzV1VGQldTeERRVUZGTEZsQlFVWXNRMEZCTTBJc1EwRkJNMFFzUlVGQk5FYzdRVUZCU3p0QlFVVm9TRUVzU1VGQlFVRXNXVUZCV1N4RFFVRkZMRkZCUVVZc1EwRkJXaXhIUVVFeVFsRXNkMEpCUVhkQ0xFTkJRVVZTTEZsQlFWa3NRMEZCUlN4WlFVRkdMRU5CUVdRc1JVRkJaME5UTEhkQ1FVRjNRaXhEUVVGRFF5eG5Ra0ZCZWtJc1EwRkJNa01zVVVGQk0wTXNRMEZCYUVNc1EwRkJia1E3UVVGRFFUczdRVUZGUkN4TlFVRkpReXhyUWtGQmEwSXNSMEZCUnp0QlFVTnNRa01zU1VGQlFVRXNUVUZCVFN4RlFVRlpMREJDUVVSQk8wRkJSV3hDUXl4SlFVRkJRU3hMUVVGTExFVkJRV0ZLTEhkQ1FVRjNRaXhEUVVGRFF5eG5Ra0ZCZWtJc1EwRkJNa01zVDBGQk0wTXNRMEZHUVR0QlFVZHNRa2tzU1VGQlFVRXNaMEpCUVdkQ0xFVkJRVTFVTEZOQlFWTXNTVUZCU1V3c1dVRkJXU3hEUVVGRkxGTkJRVVlzUTBGQk0wSXNSMEZCTmtOVExIZENRVUYzUWl4RFFVRkRReXhuUWtGQmVrSXNRMEZCTWtNc1UwRkJNME1zUTBGQk4wTXNSMEZCYzBkV0xGbEJRVmtzUTBGQlJTeFRRVUZHTEVOQlNIQklPMEZCU1d4Q1pTeEpRVUZCUVN4bFFVRmxMRVZCUVU5V0xGTkJRVk1zU1VGQlNVd3NXVUZCV1N4RFFVRkZMRkZCUVVZc1EwRkJNMElzUjBGQk5rTlRMSGRDUVVGM1FpeERRVUZEUXl4blFrRkJla0lzUTBGQk1rTXNVVUZCTTBNc1EwRkJOME1zUjBGQmMwZFdMRmxCUVZrc1EwRkJSU3hSUVVGR0xFTkJTbkJJTzBGQlRXeENaMElzU1VGQlFVRXNZVUZCWVN4RlFVRkhhRUk3UVVGT1JTeEhRVUY2UWl4RFFXSnBSU3hEUVhOQ2FrVTdPMEZCUTBFc1RVRkJTeXhQUVVGUFFTeFpRVUZaTEVOQlFVTnBRaXhoUVVGd1FpeExRVUZ6UXl4WFFVRXpReXhGUVVGM1JEdEJRVU4yUkU0c1NVRkJRVUVzYTBKQlFXdENMRU5CUVVVc1pVRkJSaXhEUVVGc1FpeEhRVUYzUTFnc1dVRkJXU3hEUVVGRGFVSXNZVUZCY2tRN1FVRkRRU3hYUVVGUFRpeHJRa0ZCYTBJc1EwRkJRMHNzWVVGQmJrSXNRMEZCYVVORExHRkJRWGhETzBGQlEwRXNSMEV4UW1kRkxFTkJORUpxUlRzN08wRkJRMEZETEVWQlFVRkJMRTFCUVUwc1EwRkJRME1zU1VGQlVDeERRVUZoUXl4WlFVRlpMRU5CUVVORExGbEJRVEZDTEVWQlJVZFdMR3RDUVVaSU8wRkJTVWM3UVVGRFNqdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRTU3haUVVGWFZ5eGhRVUZZTEVWQlFUQkNReXhWUVVFeFFpeEZRVUZ6UTBNc1MwRkJkRU1zUlVGQk9FTTdRVUZGYkVSMlFpeEpRVUZCUVN4UFFVRlBMRU5CUVVORkxFZEJRVklzUTBGQllTd3lSRUZCWWl4RlFVRXdSVzFDTEdGQlFURkZPMEZCUVRKR2NrSXNTVUZCUVVFc1QwRkJUeXhEUVVGRGQwSXNVVUZCVWl4SFFVWjZReXhEUVVrM1F6czdRVUZEUVN4UlFVRk5MRkZCUVU5SUxHRkJRVkFzVFVGQmVVSXNVVUZCTVVJc1NVRkJkME5CTEdGQlFXRXNTMEZCU3l4SlFVRXZSQ3hGUVVGelJUdEJRVU55UlVvc1RVRkJRVUVzVFVGQlRTeERRVUZGTEcxQ1FVRkdMRU5CUVU0c1EwRkJPRUpSTEVsQlFUbENPMEZCUTBGU0xFMUJRVUZCTEUxQlFVMHNRMEZCUlZRc2QwSkJRWGRDTEVOQlFVTnJRaXhsUVVGNlFpeERRVUV3UXl4dFFrRkJNVU1zUTBGQlJpeERRVUZPTEVOQlFUQkZReXhKUVVFeFJTeERRVU5YTERoRlFVTkRUaXhoUVVSRUxFZEJSVUVzVVVGSVdEdEJRVXRCTzBGQlEwRTdPMEZCUlVSUExFbEJRVUZCTERoRFFVRTRRenRCUVVVNVEwTXNTVUZCUVVFc2RVSkJRWFZDTEVOQlEyUlNMR0ZCUVdFc1EwRkJSU3d3UWtGQlJpeERRVUZpTEVOQlFUUkRVeXhQUVVFMVF5eERRVUZ4UkN4TFFVRnlSQ3hGUVVFMFJDeFJRVUUxUkN4RFFVUmpMRVZCUlZvc1QwRkJUMVFzWVVGQllTeERRVUZGTEhsQ1FVRkdMRU5CUVhSQ0xFZEJRWGRFTEZOQlFYaEVMRWRCUVc5RkxFOUJSblJFTEVWQlIyUXNTMEZJWXl4RFFVRjJRaXhEUVdwQ05rTXNRMEYxUWpkRE96dEJRVU5CTEZGQlFVc3NUMEZCVDBFc1lVRkJZU3hEUVVGRkxIbENRVUZHTEVOQlFYcENMRVZCUVhkRU8wRkJSWFpFTEZWQlFVbFZMSE5DUVVGelFpeEhRVUZITEVsQlFUZENMRU5CUm5WRUxFTkJTWFpFT3p0QlFVTkJMRlZCUVVzc1ZVRkJWVllzWVVGQllTeERRVUZGTEhkRFFVRkdMRU5CUVdJc1EwRkJNa1FzYjBKQlFUTkVMRU5CUVdZc1JVRkJhMGM3UVVGRmFrZFhMRkZCUVVGQkxHZEVRVUZuUkN4RFFVRkZXQ3hoUVVGaExFTkJRVVVzZDBOQlFVWXNRMEZCWWl4RFFVRXlSQ3h2UWtGQk0wUXNRMEZCUml4RFFVRm9SRHRCUVVWQkxGbEJRVWxaTEZsQlFWa3NSMEZCUjBNc1ZVRkJWU3hEUVVGRkxGbEJRVmM3UVVGRmVFTXNZMEZCUzBNc01rTkJRVEpETEVWQlFXaEVMRVZCUVc5RU8wRkJRMjVFTEdkQ1FVRkxMMElzVTBGQlV5eEpRVUZKYVVJc1lVRkJZU3hEUVVGRkxIZERRVUZHTEVOQlFXSXNRMEZCTWtRc2IwSkJRVE5FTEVWQlFXMUdMRzFDUVVGdVJpeERRVUZzUWl4RlFVRTBTRHRCUVVNelNHVXNZMEZCUVVFc1VVRkJVU3hEUVVGRFF5eFJRVUZVTEVOQlFXdENReXhKUVVGc1FpeEhRVUY1UW1wQ0xHRkJRV0VzUTBGQlJTeDNRMEZCUml4RFFVRmlMRU5CUVRKRUxHOUNRVUV6UkN4RlFVRnRSaXh0UWtGQmJrWXNRMEZCZWtJN1FVRkRRU3hoUVVaRUxFMUJSVTg3UVVGRFRtVXNZMEZCUVVFc1VVRkJVU3hEUVVGRFF5eFJRVUZVTEVOQlFXdENSU3hOUVVGc1FqdEJRVU5CTzBGQlEwUTdRVUZEVHl4VFFWUnRRaXhGUVZWeVFpeEpRVlp4UWl4RFFVRTNRanRCUVZkQlVpeFJRVUZCUVN4elFrRkJjMElzUjBGQlJ5eExRVUY2UWp0QlFVTkJMRTlCY2tKelJDeERRWFZDZGtRN096dEJRVU5CTEZWQlFVc3pRaXhUUVVGVExFbEJRVWxwUWl4aFFVRmhMRU5CUVVVc2QwTkJRVVlzUTBGQllpeERRVUV5UkN4blFrRkJNMFFzUTBGQmJFSXNSVUZCYVVjN1FVRkRhRWR0UWl4UlFVRkJRU3d3UTBGQk1FTXNRMEZCUlc1Q0xHRkJRV0VzUTBGQlJTeDNRMEZCUml4RFFVRmlMRU5CUVRKRUxHZENRVUV6UkN4RFFVRkdMRU5CUVRGRE8wRkJRMEZWTEZGQlFVRkJMSE5DUVVGelFpeEhRVUZITEV0QlFYcENPMEZCUTBFN08wRkJSVVFzVlVGQlMwRXNjMEpCUVV3c1JVRkJOa0k3UVVGRE5VSlZMRkZCUVVGQkxITkRRVUZ6UXl4SFFVUldMRU5CUTJNN1FVRkRNVU03UVVGRlJDeExRWHBFTkVNc1EwRXlSRGRET3pzN1FVRkRRVU1zU1VGQlFVRXNkMEpCUVhkQ0xFTkJRVVZ5UWl4aFFVRmhMRU5CUVVVc2IwSkJRVVlzUTBGQllpeERRVUYxUXl4MVFrRkJka01zUTBGQlJpeERRVUY0UWl4RFFUVkVOa01zUTBFNFJEZERPenRCUVVOQmMwSXNTVUZCUVVFc2RVSkJRWFZDTzBGQlJYWkNNVUlzU1VGQlFVRXNUVUZCVFN4RFFVRkZMR1ZCUVVZc1EwRkJUaXhEUVVFd1FsVXNTVUZCTVVJc1EwRkJaME5PTEdGQlFXaERMRVZCYWtVMlF5eERRV2xGU3p0QlFVTnNSQ3hIUVRkRlNpeEZRVGhGVFhWQ0xFbEJPVVZPTEVOQk9FVlpMRlZCUVZkeVFpeExRVUZZTEVWQlFXdENSQ3hWUVVGc1FpeEZRVUU0UW5WQ0xGZEJRVGxDTEVWQlFUUkRPMEZCUVVzc1VVRkJTME1zVFVGQlRTeERRVUZET1VNc1QwRkJVQ3hKUVVGclFqaERMRTFCUVUwc1EwRkJRemxETEU5QlFWQXNRMEZCWlVVc1IwRkJkRU1zUlVGQk1rTTdRVUZCUlVZc1RVRkJRVUVzVDBGQlR5eERRVUZEUlN4SFFVRlNMRU5CUVdFc1dVRkJZaXhGUVVFeVFuRkNMRXRCUVROQ0xFVkJRV3REUkN4VlFVRnNReXhGUVVFNFEzVkNMRmRCUVRsRE8wRkJRVGhFT3p0QlFVTndTelZDTEVsQlFVRkJMRTFCUVUwc1EwRkJSU3h0UWtGQlJpeERRVUZPTEVOQlFUaENVU3hKUVVFNVFqdEJRVU5CTEZGQlFVbHpRaXhoUVVGaExFZEJRVWNzWVVGQllTeFJRVUZpTEVkQlFYZENMRmxCUVhoQ0xFZEJRWFZEUml4WFFVRXpSRHM3UVVGRFFTeFJRVUZMZEVJc1MwRkJTeXhEUVVGRGVVSXNXVUZCV0N4RlFVRjVRanRCUVVONFFrUXNUVUZCUVVFc1lVRkJZU3hKUVVGSmVFSXNTMEZCU3l4RFFVRkRlVUlzV1VGQmRrSTdRVUZEUVRzN1FVRkRSRVFzU1VGQlFVRXNZVUZCWVN4SFFVRkhRU3hoUVVGaExFTkJRVU5xUWl4UFFVRmtMRU5CUVhWQ0xFdEJRWFpDTEVWQlFUaENMRkZCUVRsQ0xFTkJRV2hDTzBGQlJVRnRRaXhKUVVGQlFTdzJRa0ZCTmtJc1EwRkJSVVlzWVVGQlJpeERRVUUzUWp0QlFVTkRMRWRCZGtaTUxFVkJkMFpWTzBGQlEwNDdRVUY2Umtvc1IwRTNRbWxGTEVOQmRVZ3hSRHRCUVVOUU8wRkJSMFE3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3T3p0QlFVTkJMRk5CUVZOTUxIZENRVUZVTEVOQlFXMURVU3g1UWtGQmJrTXNSVUZCT0VRN1FVRkZOMFFzVFVGQlNVTXNaVUZCWlN4SFFVRkhMRVZCUVhSQ096dEJRVU5CTEUxQlFVc3ZReXhUUVVGVExFbEJRVWs0UXl4NVFrRkJiRUlzUlVGQk5rTTdRVUZETlVNc1VVRkJTVVVzVVVGQlVTeEhRVUZIYmtNc1RVRkJUU3hEUVVGRkxFMUJRVTFwUXl4NVFrRkJVaXhEUVVGeVFqczdRVUZEUVN4UlFVRkxSU3hSUVVGUkxFTkJRVU5ETEUxQlFXUXNSVUZCYzBJN1FVRkRja0pHTEUxQlFVRkJMR1ZCUVdVc1IwRkJSMGNzWjBOQlFXZERMRU5CUVVWR0xGRkJRVkVzUTBGQlEwY3NSMEZCVkN4RFFVRmpMRU5CUVdRc1EwRkJSaXhEUVVGc1JEdEJRVU5CTzBGQlEwUTdPMEZCUlVRc1UwRkJUMG9zWlVGQlVEdEJRVU5CTzBGQlIwRTdRVUZEUkR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96czdRVUZEUXl4VFFVRlRTeXdyUWtGQlZDeERRVUV3UTBNc1YwRkJNVU1zUlVGQmRVUTdRVUZGZEVRc1RVRkJTVU1zVDBGQlR5eEhRVUZIZWtNc1RVRkJUU3hEUVVGRmQwTXNWMEZCUml4RFFVRndRanRCUVVOQkxFMUJRVWxGTEV0QlFVc3NSMEZCUjBRc1QwRkJUeXhEUVVGRFJTeEpRVUZTTEVOQlFXTXNSMEZCWkN4RFFVRmFPMEZCUTBFc1RVRkJTVlFzWlVGQlpTeEhRVUZIVVN4TFFVRkxMRU5CUVVORkxFbEJRVTRzUTBGQldTeFBRVUZhTEVOQlFYUkNPMEZCUlVGR0xFVkJRVUZCTEV0QlFVc3NRMEZCUTBjc1YwRkJUaXhIUVVGdlFrTXNVVUZCY0VJc1EwRkJPRUlzYlVSQlFUbENMRVZCVG5ORUxFTkJUU3RDTzBGQlEzSkdPMEZCUTBFN08wRkJSVUZLTEVWQlFVRkJMRXRCUVVzc1EwRkJRMFVzU1VGQlRpeERRVUZaTEhGQ1FVRmFMRVZCUVcxRFZpeGxRVUZ1UXp0QlFVVkJUeXhGUVVGQlFTeFBRVUZQTEVOQlFVTkxMRkZCUVZJc1EwRkJhMElzVlVGQmJFSXNSVUZhYzBRc1EwRlpVanRCUVVNNVF6dEJRVU5CT3p0QlFVVkJUQ3hGUVVGQlFTeFBRVUZQTEVOQlFVTkhMRWxCUVZJc1EwRkJZeXgxUWtGQlpDeEZRVUYxUTBnc1QwRkJUeXhEUVVGRFJ5eEpRVUZTTEVOQlFXTXNVMEZCWkN4RFFVRjJReXhGUVdoQ2MwUXNRMEZuUW1VN08wRkJRM0pGU0N4RlFVRkJRU3hQUVVGUExFTkJRVU5ITEVsQlFWSXNRMEZCWXl4VFFVRmtMRVZCUVhsQ0xFVkJRWHBDTEVWQmFrSnpSQ3hEUVdsQ1lqczdRVUZGZWtNc1UwRkJUMVlzWlVGQlVEdEJRVU5CTzBGQlIwUTdRVUZEUkR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk96czdRVUZEUXl4VFFVRlRSeXhuUTBGQlZDeERRVUV5UTBjc1YwRkJNME1zUlVGQmQwUTdRVUZGZGtRc1RVRkJTVU1zVDBGQlR5eEhRVUZIZWtNc1RVRkJUU3hEUVVGRmQwTXNWMEZCUml4RFFVRndRanRCUVVOQkxFMUJRVWxGTEV0QlFVc3NSMEZCUjBRc1QwRkJUeXhEUVVGRFJTeEpRVUZTTEVOQlFXTXNSMEZCWkN4RFFVRmFPMEZCUlVFc1RVRkJTVlFzWlVGQlpTeEhRVUZIVVN4TFFVRkxMRU5CUVVORkxFbEJRVTRzUTBGQldTeHhRa0ZCV2l4RFFVRjBRanM3UVVGRFFTeE5RVUZMTEUxQlFVMVdMR1ZCUVZnc1JVRkJORUk3UVVGRE0wSlJMRWxCUVVGQkxFdEJRVXNzUTBGQlEwY3NWMEZCVGl4SFFVRnZRa01zVVVGQmNFSXNRMEZCT0VKYUxHVkJRVGxDTzBGQlEwRTdPMEZCUlVSUExFVkJRVUZCTEU5QlFVOHNRMEZCUTBrc1YwRkJVaXhEUVVGeFFpeFZRVUZ5UWl4RlFWWjFSQ3hEUVZWT096dEJRVVZxUkN4TlFVRkpSU3huUWtGQlowSXNSMEZCUjA0c1QwRkJUeXhEUVVGRFJ5eEpRVUZTTEVOQlFXTXNkVUpCUVdRc1EwRkJka0k3TzBGQlEwRXNUVUZCU3l4TlFVRk5SeXhuUWtGQldDeEZRVUUyUWp0QlFVTTFRazRzU1VGQlFVRXNUMEZCVHl4RFFVRkRSeXhKUVVGU0xFTkJRV01zVTBGQlpDeEZRVUY1UWtjc1owSkJRWHBDTzBGQlEwRTdPMEZCUlVRc1UwRkJUMklzWlVGQlVEdEJRVU5CTzBGQlIwWTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUVWl4MVFrRkJWQ3hIUVVGclF6dEJRVVZxUXp0QlFVTkJMRTFCUVVzc1pVRkJaU3hQUVVGUk1VSXNUVUZCVFN4RFFVRkZMRzFDUVVGR0xFTkJRVTRzUTBGQk9FSm5SQ3hoUVVFeFJDeEZRVUV3UlR0QlFVTjZSV2hFTEVsQlFVRkJMRTFCUVUwc1EwRkJSU3h0UWtGQlJpeERRVUZPTEVOQlFUaENaMFFzWVVGQk9VSXNRMEZCTmtNc1RVRkJOME03UVVGRFFUdEJRVU5FTzBGQlIwUTdRVUZEUVRzN08wRkJSVUVzVTBGQlUwTXNOa0pCUVZRc1IwRkJkME03UVVGRGRrTnFSQ3hGUVVGQlFTeE5RVUZOTEVOQlFVVXNNRU5CUVVZc1EwRkJUaXhEUVVGeFJGRXNTVUZCY2tRN1FVRkRRVklzUlVGQlFVRXNUVUZCVFN4RFFVRkZMREJEUVVGR0xFTkJRVTRzUTBGQmNVUnJSQ3hKUVVGeVJEdEJRVU5CYmtNc1JVRkJRVUVzWjBSQlFXZEVMRU5CUVVVN1FVRkJReXhuUTBGQk5FSTdRVUZCTjBJc1IwRkJSaXhEUVVGb1JEdEJRVU5CT3p0QlFVVkVMRk5CUVZOdlF5dzBRa0ZCVkN4SFFVRjFRenRCUVVOMFEyNUVMRVZCUVVGQkxFMUJRVTBzUTBGQlJTd3dRMEZCUml4RFFVRk9MRU5CUVhGRVVTeEpRVUZ5UkR0QlFVTkJVaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNNRU5CUVVZc1EwRkJUaXhEUVVGeFJHdEVMRWxCUVhKRU8wRkJRMEZ1UXl4RlFVRkJRU3huUkVGQlowUXNRMEZCUlR0QlFVRkRMR2REUVVFMFFqdEJRVUUzUWl4SFFVRkdMRU5CUVdoRU8wRkJRMEU3TzBGQlJVUXNVMEZCVTNGRExEaENRVUZVTEVOQlFYZERReXhUUVVGNFF5eEZRVUZyUkR0QlFVVnFSSEpFTEVWQlFVRkJMRTFCUVUwc1EwRkJSWEZFTEZOQlFVWXNRMEZCVGl4RFFVRnZRa01zVDBGQmNFSXNRMEZCTmtJc2FVSkJRVGRDTEVWQlFXbEVXQ3hKUVVGcVJDeERRVUYxUkN4elFrRkJka1FzUlVGQlowWlpMRTFCUVdoR08wRkJRMEYyUkN4RlFVRkJRU3hOUVVGTkxFTkJRVVZ4UkN4VFFVRkdMRU5CUVU0c1EwRkJiMEpETEU5QlFYQkNMRU5CUVRaQ0xHbENRVUUzUWl4RlFVRnBSRmdzU1VGQmFrUXNRMEZCZFVRc2NVSkJRWFpFTEVWQlFTdEZXU3hOUVVFdlJUdEJRVVZCTzBGQlEwUTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3TzBGQlEwTjRSU3hGUVVGQlFTeFBRVUZQTEVOQlFVTkZMRWRCUVZJc1EwRkJZU3huUTBGQllpeEZRVUVyUTI5RkxGTkJRUzlETzBGQlEwRTdRVUZGUkR0QlFVTkJPenRCUVVWQk8wRkJRMEU3UVVGRFFUczdPMEZCUTBFc1UwRkJVMGNzYlVOQlFWUXNSMEZCT0VNN1FVRkZOME40UkN4RlFVRkJRU3hOUVVGTkxFTkJRVVVzWjBOQlFVWXNRMEZCVGl4RFFVRXlRM2xFTEVsQlFUTkRMRU5CUVdsRUxGVkJRVmRETEV0QlFWZ3NSVUZCYTBJN1FVRkZiRVVzVVVGQlNVTXNVMEZCVXl4SFFVRkhNMFFzVFVGQlRTeERRVUZGTEVsQlFVWXNRMEZCVGl4RFFVRmxORU1zU1VGQlppeERRVUZ4UWl3d1FrRkJja0lzUTBGQmFFSXNRMEZHYTBVc1EwRkZSenM3UVVGRmNrVXNVVUZCUzNwRUxGTkJRVk1zUzBGQlMzZEZMRk5CUVc1Q0xFVkJRVGhDTzBGQlF6ZENNMFFzVFVGQlFVRXNUVUZCVFN4RFFVRkZMRWxCUVVZc1EwRkJUaXhEUVVGbE1rTXNTVUZCWml4RFFVRnhRaXh0UWtGQmJVSm5RaXhUUVVGdVFpeEhRVUVyUWl4SlFVRndSQ3hGUVVFeVJFTXNTVUZCTTBRc1EwRkJhVVVzVlVGQmFrVXNSVUZCTmtVc1NVRkJOMFU3TzBGQlJVRXNWVUZCVFN4TlFVRk5SQ3hUUVVGUUxFbEJRWE5DTTBRc1RVRkJUU3hEUVVGRkxFbEJRVVlzUTBGQlRpeERRVUZsTmtRc1VVRkJaaXhEUVVGNVFpdzRRa0ZCZWtJc1EwRkJNMElzUlVGQmRVWTdRVUZCVXp0QlFVVXZSaXhaUVVGSlF5eHhRa0ZCY1VJc1IwRkJSemxFTEUxQlFVMHNRMEZCUlN4SlFVRkdMRU5CUVU0c1EwRkJaWE5FTEU5QlFXWXNRMEZCZDBJc2IwSkJRWGhDTEVWQlFTdERXQ3hKUVVFdlF5eERRVUZ4UkN3MFFrRkJja1FzUTBGQk5VSXNRMEZHYzBZc1EwRkpkRVk3TzBGQlEwRnRRaXhSUVVGQlFTeHhRa0ZCY1VJc1EwRkJRMmhDTEZGQlFYUkNMRU5CUVdkRExHRkJRV2hETEVWQlRITkdMRU5CUzNCRE96dEJRVU5xUkN4WlFVRkxMR1ZCUVdVc1QwRkJVV2xDTEZWQlFUVkNMRVZCUVRCRE8wRkJRekZEUkN4VlFVRkJRU3h4UWtGQmNVSXNRMEZCUTNoQ0xFZEJRWFJDTEVOQlFUQkNMRU5CUVRGQ0xFVkJRVFpDTUVJc1RVRkJOMElzUTBGQmIwTkRMRlZCUVhCRExFTkJRV2RFVGl4VFFVRm9SRHRCUVVORE8wRkJRMFk3UVVGRFJEdEJRVU5FTEVkQmJFSkVPMEZCYlVKQk8wRkJSVVE3UVVGRFFUczdRVUZGUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTlBMRzFEUVVGVUxFZEJRVGhETzBGQlJUZERiRVVzUlVGQlFVRXNUVUZCVFN4RFFVRkZMSEZFUVVGR0xFTkJRVTRzUTBGQlowVjVSQ3hKUVVGb1JTeERRVUZ6UlN4VlFVRlhReXhMUVVGWUxFVkJRV3RDTzBGQlEzWkdMRkZCUVVsVExGRkJRVkVzUjBGQlIyNUZMRTFCUVUwc1EwRkJSU3hKUVVGR0xFTkJRVTRzUTBGQlpXOUZMRWRCUVdZc1JVRkJaanM3UVVGRFFTeFJRVUZOYWtZc1UwRkJVeXhMUVVGTFowWXNVVUZCWml4SlFVRTJRaXhOUVVGTlFTeFJRVUY0UXl4RlFVRnRSRHRCUVVWc1JDeFZRVUZKUlN4aFFVRmhMRWRCUVVkeVJTeE5RVUZOTEVOQlFVVXNTVUZCUml4RFFVRk9MRU5CUVdWelJDeFBRVUZtTEVOQlFYZENMRmRCUVhoQ0xFVkJRWE5EV0N4SlFVRjBReXhEUVVFMFF5d3dRa0ZCTlVNc1EwRkJjRUk3TzBGQlJVRXNWVUZCU3pCQ0xHRkJRV0VzUTBGQlEycERMRTFCUVdRc1IwRkJkVUlzUTBGQk5VSXNSVUZCSzBJN1FVRkZPVUpwUXl4UlFVRkJRU3hoUVVGaExFTkJRVU4yUWl4UlFVRmtMRU5CUVhkQ0xHRkJRWGhDTEVWQlJqaENMRU5CUlZrN08wRkJRekZETEZsQlFVc3NaVUZCWlN4UFFVRlJhVUlzVlVGQk5VSXNSVUZCZVVNN1FVRkRlRU03UVVGRFFUdEJRVVZCVFN4VlFVRkJRU3hoUVVGaExFTkJRVU12UWl4SFFVRmtMRU5CUVcxQ0xFTkJRVzVDTEVWQlFYVkNNRUlzVFVGQmRrSXNRMEZCT0VKTkxGRkJRVGxDTEVOQlFYZERPMEZCUTNaRFF5eFpRVUZCUVN4VFFVRlRMRVZCUVVVc1NVRkVORUk3UVVGRmRrTkRMRmxCUVVGQkxFOUJRVThzUlVGQlNVd3NVVUZCVVN4RFFVRkRkRVFzVDBGQlZDeERRVUZyUWl4VFFVRnNRaXhGUVVFMlFpeE5RVUUzUWp0QlFVWTBRaXhYUVVGNFF6dEJRVWxCTzBGQlEwUTdRVUZEUkR0QlFVTkVMRWRCY0VKRU8wRkJjVUpCTzBGQlJVUTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHM3TzBGQlEwRXNVMEZCVXpSRUxHdERRVUZVTEVOQlFUWkRReXhUUVVFM1F5eEZRVUYzUkR0QlFVVjJSRUVzUlVGQlFVRXNVMEZCVXl4RFFVRkRjRUlzVDBGQlZpeERRVUZyUWl4WFFVRnNRaXhGUVVFclFsZ3NTVUZCTDBJc1EwRkJiME1zYjBKQlFYQkRMRVZCUVRCRVdTeE5RVUV4UkR0QlFVTkJPMEZCUjBRN1FVRkRRVHM3TzBGQlJVRXNVMEZCVTI5Q0xHZEVRVUZVTEVOQlFUSkVReXhWUVVFelJDeEZRVUYxUlVNc1YwRkJka1VzUlVGQmIwWTdRVUZGYmtZN1FVRkRRVGRGTEVWQlFVRkJMRTFCUVUwc1EwRkJSU3h6UTBGQlJpeERRVUZPTEVOQlFXbEViMFVzUjBGQmFrUXNRMEZCYzBSUkxGVkJRWFJFTEVWQlNHMUdMRU5CUzI1R096dEJRVU5CTlVVc1JVRkJRVUVzVFVGQlRTeERRVUZGTERKRFFVRkdMRU5CUVU0c1EwRkJjMFJ2UlN4SFFVRjBSQ3hEUVVFeVJGTXNWMEZCTTBRc1JVRkJlVVZETEU5QlFYcEZMRU5CUVd0R0xGRkJRV3hHTzBGQlEwRXNUVUZCU1VNc1IwRkJTaXhEUVZCdFJpeERRVk51UmpzN1FVRkRRVUVzUlVGQlFVRXNSMEZCUnl4SFFVRkhMMFVzVFVGQlRTeERRVUZGTEcxRFFVRkdMRU5CUVU0c1EwRkJPRU5uUml4TlFVRTVReXhGUVVGT0xFTkJWbTFHTEVOQldXNUdPenRCUVVOQlJDeEZRVUZCUVN4SFFVRkhMRU5CUVVORkxGRkJRVW9zUTBGQlkycEdMRTFCUVUwc1EwRkJSU3h6UkVGQmMwUTBSU3hWUVVGNFJDeERRVUZ3UWp0QlFVTkJSeXhGUVVGQlFTeEhRVUZITEVkQlFVY3NTVUZCVGl4RFFXUnRSaXhEUVdkQ2JrWTdRVUZEUVRzN1FVRkRRU3hOUVVGTExFTkJRVVV2UlN4TlFVRk5MRU5CUVVVc2MwUkJRWE5FTkVVc1ZVRkJlRVFzUTBGQlRpeERRVUV5UlUwc1JVRkJNMFVzUTBGQk9FVXNWVUZCT1VVc1EwRkJVQ3hGUVVGclJ6dEJRVU5xUjJ4R0xFbEJRVUZCTEUxQlFVMHNRMEZCUlN3MFEwRkJSaXhEUVVGT0xFTkJRWFZFVVN4SlFVRjJSRHRCUVVOQkxFZEJjRUpyUml4RFFYTkNia1k3T3p0QlFVTkJVaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNjMFJCUVhORU5FVXNWVUZCZUVRc1EwRkJUaXhEUVVFeVJYSkNMRTFCUVRORk8wRkJRMEU3TzBGQlJVUXNVMEZCVXpSQ0xHZEVRVUZVTEVOQlFUSkVReXhQUVVFelJDeEZRVUZ2UlVNc1kwRkJjRVVzUlVGQmIwWkRMRXRCUVhCR0xFVkJRVEpHTzBGQlJURkdla2NzUlVGQlFVRXNiME5CUVc5RExFTkJRVVU3UVVGRE5VSXNjMEpCUVhsQ2QwY3NZMEZFUnp0QlFVVTFRaXhyUWtGQmVVSnlSaXhOUVVGTkxFTkJRVVVzYzBOQlFVWXNRMEZCVGl4RFFVRnBSRzlGTEVkQlFXcEVMRVZCUmtjN1FVRkhOVUlzTkVKQlFYbENjRVVzVFVGQlRTeERRVUZGTERKRFFVRkdMRU5CUVU0c1EwRkJjMFJ2UlN4SFFVRjBSQ3hGUVVoSE8wRkJTVFZDTERaQ1FVRjVRbXRDTzBGQlNrY3NSMEZCUml4RFFVRndRenRCUVU5QkwwTXNSVUZCUVVFc0swSkJRU3RDTEVOQlFVVTJReXhQUVVGR0xFTkJRUzlDTEVOQlZEQkdMRU5CVnpGR08wRkJRMEU3TzBGQlJVUXNVMEZCVTBjc2FVUkJRVlFzUjBGQk5FUTdRVUZGTTBRc1RVRkJTVU1zUzBGQlNpeERRVVl5UkN4RFFVa3pSRHM3UVVGRFFVRXNSVUZCUVVFc1MwRkJTeXhIUVVGSGVFWXNUVUZCVFN4RFFVRkRMRzFEUVVGRUxFTkJRVTRzUTBGQk5FTm5SaXhOUVVFMVF5eEZRVUZTTEVOQlRESkVMRU5CVHpORU96dEJRVU5CVVN4RlFVRkJRU3hMUVVGTExFTkJRVU5RTEZGQlFVNHNRMEZCWldwR0xFMUJRVTBzUTBGQlF5eG5SRUZCUkN4RFFVRnlRanRCUVVOQmQwWXNSVUZCUVVFc1MwRkJTeXhIUVVGSExFbEJRVklzUTBGVU1rUXNRMEZYTTBRN08wRkJRMEY0Uml4RlFVRkJRU3hOUVVGTkxFTkJRVU1zYTBSQlFVUXNRMEZCVGl4RFFVRXlSRkVzU1VGQk0wUTdRVUZEUVR0QlFVVkVPMEZCUTBFN096dEJRVVZCTEZOQlFWTnBSaXhyUkVGQlZDeERRVUUyUkdJc1ZVRkJOMFFzUlVGQmVVVkRMRmRCUVhwRkxFVkJRWE5HTzBGQlJYSkdPMEZCUTBFM1JTeEZRVUZCUVN4TlFVRk5MRU5CUVVVc2EwUkJRVVlzUTBGQlRpeERRVUUyUkc5RkxFZEJRVGRFTEVOQlFXdEZVU3hWUVVGc1JTeEZRVWh4Uml4RFFVdHlSanM3UVVGRFFUVkZMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeDFSRUZCUml4RFFVRk9MRU5CUVd0RmIwVXNSMEZCYkVVc1EwRkJkVVZUTEZkQlFYWkZMRVZCUVhGR1F5eFBRVUZ5Uml4RFFVRTRSaXhSUVVFNVJqdEJRVU5CTEUxQlFVbERMRWRCUVVvc1EwRlFjVVlzUTBGVGNrWTdPMEZCUTBGQkxFVkJRVUZCTEVkQlFVY3NSMEZCUnk5RkxFMUJRVTBzUTBGQlJTd3JRMEZCUml4RFFVRk9MRU5CUVRCRVowWXNUVUZCTVVRc1JVRkJUaXhEUVZaeFJpeERRVmx5UmpzN1FVRkRRVVFzUlVGQlFVRXNSMEZCUnl4RFFVRkRSU3hSUVVGS0xFTkJRV05xUml4TlFVRk5MRU5CUVVVc2EwVkJRV3RGTkVVc1ZVRkJjRVVzUTBGQmNFSTdRVUZEUVVjc1JVRkJRVUVzUjBGQlJ5eEhRVUZITEVsQlFVNHNRMEZrY1VZc1EwRm5RbkpHT3p0QlFVTkJMRTFCUVVzc1EwRkJSUzlGTEUxQlFVMHNRMEZCUlN4clJVRkJhMFUwUlN4VlFVRndSU3hEUVVGT0xFTkJRWFZHVFN4RlFVRjJSaXhEUVVFd1JpeFZRVUV4Uml4RFFVRlFMRVZCUVRoSE8wRkJRemRIYkVZc1NVRkJRVUVzVFVGQlRTeERRVUZGTERSRFFVRkdMRU5CUVU0c1EwRkJkVVJSTEVsQlFYWkVPMEZCUTBFc1IwRnVRbTlHTEVOQmNVSnlSanM3TzBGQlEwRlNMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeHJSVUZCYTBVMFJTeFZRVUZ3UlN4RFFVRk9MRU5CUVhWR2NrSXNUVUZCZGtZN1FVRkRRVHM3UVVGRlJDeFRRVUZUYlVNc2EwUkJRVlFzUTBGQk5rUk9MRTlCUVRkRUxFVkJRWE5GUXl4alFVRjBSU3hGUVVGelJrTXNTMEZCZEVZc1JVRkJOa1k3UVVGRk5VWjZSeXhGUVVGQlFTeHZRMEZCYjBNc1EwRkJSVHRCUVVNMVFpeHpRa0ZCZVVKM1J5eGpRVVJITzBGQlJUVkNMR3RDUVVGNVFuSkdMRTFCUVUwc1EwRkJSU3hyUkVGQlJpeERRVUZPTEVOQlFUWkViMFVzUjBGQk4wUXNSVUZHUnp0QlFVYzFRaXcwUWtGQmVVSndSU3hOUVVGTkxFTkJRVVVzZFVSQlFVWXNRMEZCVGl4RFFVRnJSVzlGTEVkQlFXeEZMRVZCU0VjN1FVRkpOVUlzTmtKQlFYbENhMEk3UVVGS1J5eEhRVUZHTEVOQlFYQkRPMEZCVDBFdlF5eEZRVUZCUVN3clFrRkJLMElzUTBGQlJUWkRMRTlCUVVZc1EwRkJMMElzUTBGVU5FWXNRMEZYTlVZN1FVRkRRVHM3UVVGRlJDeFRRVUZUVHl4dFJFRkJWQ3hIUVVFNFJEdEJRVVUzUkN4TlFVRkpTQ3hMUVVGS0xFTkJSalpFTEVOQlNUZEVPenRCUVVOQlFTeEZRVUZCUVN4TFFVRkxMRWRCUVVkNFJpeE5RVUZOTEVOQlFVTXNLME5CUVVRc1EwRkJUaXhEUVVGM1JHZEdMRTFCUVhoRUxFVkJRVklzUTBGTU5rUXNRMEZQTjBRN08wRkJRMEZSTEVWQlFVRkJMRXRCUVVzc1EwRkJRMUFzVVVGQlRpeERRVUZsYWtZc1RVRkJUU3hEUVVGRExEUkVRVUZFTEVOQlFYSkNPMEZCUTBGM1JpeEZRVUZCUVN4TFFVRkxMRWRCUVVjc1NVRkJVaXhEUVZRMlJDeERRVmMzUkRzN1FVRkRRWGhHTEVWQlFVRkJMRTFCUVUwc1EwRkJReXc0UkVGQlJDeERRVUZPTEVOQlFYVkZVU3hKUVVGMlJUdEJRVU5CTzBGQlJVUTdRVUZEUVRzN08wRkJSVUVzVTBGQlUyOUdMRzFFUVVGVUxFTkJRVGhFYUVJc1ZVRkJPVVFzUlVGQk1FVTdRVUZGZWtVc1RVRkJTV2xDTEU5QlFVOHNSMEZCUnpkR0xFMUJRVTBzUTBGQlJTeHBSRUZCYVVRMFJTeFZRVUZ1UkN4RFFVRk9MRU5CUVhORmFrTXNTVUZCZEVVc1EwRkJORVVzVVVGQk5VVXNRMEZCWkR0QlFVVkJMRTFCUVVsdFJDeHRRa0ZCYlVJc1IwRkJSMFFzVDBGQlR5eERRVUZEYWtRc1NVRkJVaXhEUVVGakxHOUNRVUZrTEVOQlFURkNMRU5CU25sRkxFTkJUWHBGT3p0QlFVTkJMRTFCUVVzc1EwRkJRMjFFTEV0QlFVc3NRMEZCUlVNc1ZVRkJWU3hEUVVGRlJpeHRRa0ZCUml4RFFVRmFMRU5CUVZnc1JVRkJhMFE3UVVGRGFrUkVMRWxCUVVGQkxFOUJRVThzUTBGQlEyeEVMRWxCUVZJc1EwRkJZeXh0UWtGQlpDeEZRVUZ2UTJsQ0xFbEJRWEJETEVOQlFUQkRMRlZCUVRGRExFVkJRWE5FTEVsQlFYUkVMRVZCUkdsRUxFTkJRMjlDTzBGQlEzSkZMRWRCUmtRc1RVRkZUenRCUVVOT2FVTXNTVUZCUVVFc1QwRkJUeXhEUVVGRGJFUXNTVUZCVWl4RFFVRmpMRzFDUVVGdFFtMUVMRzFDUVVGdVFpeEhRVUY1UXl4SlFVRjJSQ3hGUVVFNFJHeERMRWxCUVRsRUxFTkJRVzlGTEZWQlFYQkZMRVZCUVdkR0xFbEJRV2hHTEVWQlJFMHNRMEZEYlVZN1FVRkRla1lzUjBGWWQwVXNRMEZoZWtVN096dEJRVU5CTEUxQlFVc3NRMEZCUlRWRUxFMUJRVTBzUTBGQlJTeHBSRUZCYVVRMFJTeFZRVUZ1UkN4RFFVRk9MRU5CUVhORlRTeEZRVUYwUlN4RFFVRjVSU3hWUVVGNlJTeERRVUZRTEVWQlFUWkdPMEZCUXpWR2JFWXNTVUZCUVVFc1RVRkJUU3hEUVVGRkxEUkRRVUZHTEVOQlFVNHNRMEZCZFVSUkxFbEJRWFpFTzBGQlEwRXNSMEZvUW5kRkxFTkJhMEo2UlRzN08wRkJRMEZTTEVWQlFVRkJMRTFCUVUwc1EwRkJSU3hwUkVGQmFVUTBSU3hWUVVGdVJDeERRVUZPTEVOQlFYTkZja0lzVFVGQmRFVTdRVUZEUVRzN1FVRkZSQ3hUUVVGVE1FTXNiVVJCUVZRc1EwRkJPRVJ5UWl4VlFVRTVSQ3hGUVVFd1JWRXNUMEZCTVVVc1JVRkJiVVpETEdOQlFXNUdMRVZCUVcxSFF5eExRVUZ1Unl4RlFVRXdSenRCUVVWNlIzcEhMRVZCUVVGQkxHOURRVUZ2UXl4RFFVRkZPMEZCUXpWQ0xITkNRVUY1UW5kSExHTkJSRWM3UVVGRk5VSXNhMEpCUVhsQ1ZDeFZRVVpITzBGQlJ6VkNMQ3RDUVVFMFFqVkZMRTFCUVUwc1EwRkJSU3dyUWtGQkswSTBSU3hWUVVGcVF5eERRVUZPTEVOQlFXOUVVaXhIUVVGd1JDeEZRVWhCTzBGQlNUVkNMRFpDUVVGNVFtdENMRXRCUVVzc1IwRkJSenRCUVVwTUxFZEJRVVlzUTBGQmNFTTdRVUZQUVM5RExFVkJRVUZCTEN0Q1FVRXJRaXhEUVVGRk5rTXNUMEZCUml4RFFVRXZRanRCUVVWQmNFWXNSVUZCUVVFc1RVRkJUU3hEUVVGRkxFMUJRVTF6Uml4TFFVRk9MRWRCUVdNc1UwRkJhRUlzUTBGQlRpeERRVUZwUXpsRkxFbEJRV3BETEVkQldIbEhMRU5CV1hwSE8wRkJSVUU3TzBGQlJVUXNVMEZCVXpCR0xHOUVRVUZVTEVkQlFTdEVPMEZCUXpsRU8wRkJRMEZzUnl4RlFVRkJRU3hOUVVGTkxFTkJRVU1zTmtOQlFVUXNRMEZCVGl4RFFVRnpSRkVzU1VGQmRFUTdRVUZEUVR0QlFVZEVPMEZCUTBFN096dEJRVVZCTEZOQlFWTXlSaXhwUkVGQlZDeERRVUUwUkhaQ0xGVkJRVFZFTEVWQlFYZEZVU3hQUVVGNFJTeEZRVUZwUmtNc1kwRkJha1lzUlVGQmFVZERMRXRCUVdwSExFVkJRWGRITzBGQlJYWkhla2NzUlVGQlFVRXNiME5CUVc5RExFTkJRVVU3UVVGRE5VSXNjMEpCUVhsQ2QwY3NZMEZFUnp0QlFVVTFRaXhyUWtGQmVVSlVMRlZCUmtjN1FVRkhOVUlzYjBKQlFYTkNOVVVzVFVGQlRTeERRVUZGTERaQ1FVRTJRalJGTEZWQlFUZENMRWRCUVRCRExFOUJRVFZETEVOQlFVNHNRMEZCTWtSU0xFZEJRVE5FTEVWQlNFMDdRVUZKTlVJc05rSkJRWGxDYTBJc1MwRkJTeXhIUVVGSE8wRkJTa3dzUjBGQlJpeERRVUZ3UXp0QlFVOUJMME1zUlVGQlFVRXNLMEpCUVN0Q0xFTkJRVVUyUXl4UFFVRkdMRU5CUVM5Q08wRkJSVUZ3Uml4RlFVRkJRU3hOUVVGTkxFTkJRVVVzVFVGQlRYTkdMRXRCUVU0c1IwRkJZeXhUUVVGb1FpeERRVUZPTEVOQlFXbERPVVVzU1VGQmFrTXNSMEZZZFVjc1EwRlpka2M3UVVGRlFUczdRVUZGUkN4VFFVRlRORVlzYTBSQlFWUXNSMEZCTmtRN1FVRkROVVE3UVVGRFFYQkhMRVZCUVVGQkxFMUJRVTBzUTBGQlF5d3lRMEZCUkN4RFFVRk9MRU5CUVc5RVVTeEpRVUZ3UkR0QlFVTkJPMEZCUjBRN1FVRkRRVHM3TzBGQlJVRXNVMEZCVXpaR0xHZEVRVUZVTEVkQlFUSkVPMEZCUlRGRWVFZ3NSVUZCUVVFc2IwTkJRVzlETEVOQlFVVTdRVUZETlVJc2MwSkJRWGxDTEhOQ1FVUkhPMEZCUlRWQ0xHdENRVUY1UW0xQ0xFMUJRVTBzUTBGQlJTd3dRMEZCUml4RFFVRk9MRU5CUVc5RWIwVXNSMEZCY0VRc1JVRkdSenRCUVVjMVFpeDNRa0ZCZVVKd1JTeE5RVUZOTEVOQlFVVXNaMFJCUVVZc1EwRkJUaXhEUVVFd1JHOUZMRWRCUVRGRUxFVkJTRWM3UVVGSk5VSXNOa0pCUVhsQ08wRkJTa2NzUjBGQlJpeERRVUZ3UXp0QlFVMUJOMElzUlVGQlFVRXNLMEpCUVN0Q0xFTkJRVVYyUXl4TlFVRk5MRU5CUVVVc01rTkJRVVlzUTBGQlRpeERRVUZ6UkhORExFZEJRWFJFTEVOQlFUSkVMRU5CUVRORUxFTkJRVVlzUTBGQkwwSTdRVUZEUVR0QlFVZEVPMEZCUTBFN096dEJRVVZCTEZOQlFWTm5SU3hyUkVGQlZDeEhRVUUyUkR0QlFVVTFSSHBJTEVWQlFVRkJMRzlEUVVGdlF5eERRVUZGTzBGQlF6VkNMSE5DUVVGNVFpeDNRa0ZFUnp0QlFVVTFRaXcyUWtGQmVVSXNhVVJCUmtjN1FVRkpNVUlzWjBOQlFXbERiVUlzVFVGQlRTeERRVUZGTEhkR1FVRkdMRU5CUVU0c1EwRkJhMGR2UlN4SFFVRnNSeXhGUVVwUU8wRkJTekZDTEhWRFFVRnpRM0JGTEUxQlFVMHNRMEZCUlN3clJVRkJSaXhEUVVGT0xFTkJRVEJHYjBVc1IwRkJNVVlzUlVGTVdqdEJRVTB4UWl3MFEwRkJNRU53UlN4TlFVRk5MRU5CUVVVc2IwZEJRVVlzUTBGQlRpeERRVUU0UjI5RkxFZEJRVGxITEVWQlRtaENPMEZCVVRGQ0xHbERRVUZwUTNCRkxFMUJRVTBzUTBGQlJTeDVSa0ZCUml4RFFVRk9MRU5CUVcxSGIwVXNSMEZCYmtjc1JVRlNVRHRCUVZNeFFpeDNRMEZCZFVOd1JTeE5RVUZOTEVOQlFVVXNaMFpCUVVZc1EwRkJUaXhEUVVFeVJtOUZMRWRCUVROR0xFVkJWR0k3UVVGVk1VSXNOa05CUVRCRGNFVXNUVUZCVFN4RFFVRkZMSEZIUVVGR0xFTkJRVTRzUTBGQkswZHZSU3hIUVVFdlJ5eEZRVlpvUWp0QlFWa3hRaXdyUWtGQk5rSndSU3hOUVVGTkxFTkJRVVVzZFVWQlFVWXNRMEZCVGl4RFFVRnJSbTlGTEVkQlFXeEdMRVZCV2tnN1FVRmhNVUlzTmtKQlFUSkNjRVVzVFVGQlRTeERRVUZGTEhGR1FVRkdMRU5CUVU0c1EwRkJLMFp2UlN4SFFVRXZSanRCUVdKRUxFZEJRVVlzUTBGQmNFTTdRVUZsUVRkQ0xFVkJRVUZCTEN0Q1FVRXJRaXhEUVVGRmRrTXNUVUZCVFN4RFFVRkZMQ3RHUVVGR0xFTkJRVTRzUTBGQk1FZHpReXhIUVVFeFJ5eERRVUVyUnl4RFFVRXZSeXhEUVVGR0xFTkJRUzlDTzBGQlEwRTdRVUZIUkR0QlFVTkJPenM3UVVGRFFTeFRRVUZUYVVVc2MwTkJRVlFzUTBGQmFVUkRMRTFCUVdwRUxFVkJRWGxFTzBGQlJYaEVMRTFCUVVsRExIVkNRVUYxUWl4SFFVRkhReXgzUWtGQmQwSXNSVUZCZEVRN1FVRkZRVGRJTEVWQlFVRkJMRzlEUVVGdlF5eERRVUZGTzBGQlF6VkNMSE5DUVVFd1FqSklMRTFCUVUwc1EwRkJSU3huUWtGQlJpeERRVVJLTzBGQlJUVkNMRFpDUVVFd1FrRXNUVUZCVFN4RFFVRkZMSFZDUVVGR0xFTkJSa283UVVGSk5VSXNiVUpCUVRCQ1FTeE5RVUZOTEVOQlFVVXNZVUZCUml4RFFVcEtPMEZCU3pWQ0xEUkNRVUV3UWtFc1RVRkJUU3hEUVVGRkxITkNRVUZHTEVOQlRFbzdRVUZOTlVJc09FSkJRVEJDUVN4TlFVRk5MRU5CUVVVc2QwSkJRVVlzUTBGT1NqdEJRVkUxUWl4clFrRkJaVU1zZFVKQlFYVkNMRU5CUVVORkxFbEJRWGhDTEVOQlFUWkNMRWRCUVRkQ0xFTkJVbUU3UVVGVE5VSXNjVUpCUVd0Q2NFZ3NkMEpCUVhkQ0xFTkJRVU54U0N4eFFrRkJla0k3UVVGVVZTeEhRVUZHTEVOQlFYQkRPMEZCV1VFc1RVRkJTWGhDTEU5QlFVOHNSMEZCUjNCR0xFMUJRVTBzUTBGQlJTeE5RVUZOZDBjc1RVRkJUU3hEUVVGRkxIVkNRVUZHTEVOQlFXUXNRMEZCVGl4RFFVRnJSR3hGTEVkQlFXeEVMRU5CUVhWRUxFTkJRWFpFTEVOQlFXUTdRVUZGUVVNc1JVRkJRVUVzSzBKQlFTdENMRU5CUVVVMlF5eFBRVUZHTEVOQlFTOUNPMEZCUTBFN1FVRkZSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CT3pzN1FVRkRRU3hUUVVGVE4wUXNNRU5CUVZRc1EwRkJjVVJ6Uml4alFVRnlSQ3hGUVVGeFJUdEJRVVZ3UlR0QlFVVkJNVVlzUlVGQlFVRXNVVUZCVVN4RFFVRkRReXhSUVVGVUxFTkJRV3RDUXl4SlFVRnNRaXhIUVVGNVFuZEdMR05CUVhwQ0xFTkJTbTlGTEVOQlNUVkNPMEZCUlhoRE8wRkJRMEU3UVVGRFFTSXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbHdpZFhObElITjBjbWxqZEZ3aU8xeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdRV3BoZUNBZ0lDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JpOHZkbUZ5SUdselgzUm9hWE5mWVdOMGFXOXVJRDBnWm1Gc2MyVTdYSEpjYmk4cUtseHlYRzRnS2lCVFpXNWtJRUZxWVhnZ1lXTjBhVzl1SUhKbGNYVmxjM1FzSUNCc2FXdGxJR0Z3Y0hKdmRtbHVaeUJ2Y2lCallXNWpaV3hzWVhScGIyNWNjbHh1SUNwY2NseHVJQ29nUUhCaGNtRnRJR0ZqZEdsdmJsOXdZWEpoYlZ4eVhHNGdLaTljY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTloYW5oZlltOXZhMmx1WjE5aGFtRjRYMkZqZEdsdmJsOXlaWEYxWlhOMEtDQmhZM1JwYjI1ZmNHRnlZVzBnUFNCN2ZTQXBlMXh5WEc1Y2NseHVZMjl1YzI5c1pTNW5jbTkxY0VOdmJHeGhjSE5sWkNnZ0oxZFFRa05mUVVwWVgwSlBUMHRKVGtkZlFVTlVTVTlPVXljZ0tUc2dZMjl1YzI5c1pTNXNiMmNvSUNjZ1BUMGdRV3BoZUNCQlkzUnBiMjV6SURvNklGQmhjbUZ0Y3lBOVBTQW5MQ0JoWTNScGIyNWZjR0Z5WVcwZ0tUdGNjbHh1THk5cGMxOTBhR2x6WDJGamRHbHZiaUE5SUhSeWRXVTdYSEpjYmx4eVhHNWNkSGR3WW1OZlltOXZhMmx1WjE5c2FYTjBhVzVuWDNKbGJHOWhaRjlpZFhSMGIyNWZYM053YVc1ZmMzUmhjblFvS1R0Y2NseHVYSEpjYmx4MEx5OGdSMlYwSUhKbFpHVm1hVzVsWkNCTWIyTmhiR1VzSUNCcFppQmhZM1JwYjI0Z2IyNGdjMmx1WjJ4bElHSnZiMnRwYm1jZ0lWeHlYRzVjZEdsbUlDZ2dJQ2dnZFc1a1pXWnBibVZrSUNFOUlHRmpkR2x2Ymw5d1lYSmhiVnNnSjJKdmIydHBibWRmYVdRbklGMGdLU0FtSmlBb0lDRWdRWEp5WVhrdWFYTkJjbkpoZVNnZ1lXTjBhVzl1WDNCaGNtRnRXeUFuWW05dmEybHVaMTlwWkNjZ1hTQXBJQ2tnS1h0Y2RGeDBYSFJjZEM4dklFNXZkQ0JoY25KaGVWeHlYRzVjY2x4dVhIUmNkR0ZqZEdsdmJsOXdZWEpoYlZzZ0oyeHZZMkZzWlNjZ1hTQTlJSGR3WW1OZloyVjBYM05sYkdWamRHVmtYMnh2WTJGc1pTZ2dZV04wYVc5dVgzQmhjbUZ0V3lBblltOXZhMmx1WjE5cFpDY2dYU3dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5MbWRsZEY5elpXTjFjbVZmY0dGeVlXMG9JQ2RzYjJOaGJHVW5JQ2tnS1R0Y2NseHVYSFI5WEhKY2JseHlYRzVjZEhaaGNpQmhZM1JwYjI1ZmNHOXpkRjl3WVhKaGJYTWdQU0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSaFkzUnBiMjRnSUNBZ0lDQWdJQ0FnT2lBblYxQkNRMTlCU2xoZlFrOVBTMGxPUjE5QlExUkpUMDVUSnl4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RHNXZibU5sSUNBZ0lDQWdJQ0FnSUNBNklIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmJHbHpkR2x1Wnk1blpYUmZjMlZqZFhKbFgzQmhjbUZ0S0NBbmJtOXVZMlVuSUNrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUjNjR0pqWDJGcWVGOTFjMlZ5WDJsa09pQW9JQ2dnZFc1a1pXWnBibVZrSUQwOUlHRmpkR2x2Ymw5d1lYSmhiVnNnSjNWelpYSmZhV1FuSUYwZ0tTQS9JSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NW5aWFJmYzJWamRYSmxYM0JoY21GdEtDQW5kWE5sY2w5cFpDY2dLU0E2SUdGamRHbHZibDl3WVhKaGJWc2dKM1Z6WlhKZmFXUW5JRjBnS1N4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RIZHdZbU5mWVdwNFgyeHZZMkZzWlRvZ0lDZ2dLQ0IxYm1SbFptbHVaV1FnUFQwZ1lXTjBhVzl1WDNCaGNtRnRXeUFuYkc5allXeGxKeUJkSUNrZ0lEOGdkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl6WldOMWNtVmZjR0Z5WVcwb0lDZHNiMk5oYkdVbklDa2dJRG9nWVdOMGFXOXVYM0JoY21GdFd5QW5iRzlqWVd4bEp5QmRJQ2tzWEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBZV04wYVc5dVgzQmhjbUZ0YzF4ME9pQmhZM1JwYjI1ZmNHRnlZVzFjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFI5TzF4eVhHNWNjbHh1WEhRdkx5QkpkQ2R6SUhKbGNYVnBjbVZrSUdadmNpQkRVMVlnWlhod2IzSjBJQzBnWjJWMGRHbHVaeUIwYUdVZ2MyRnRaU0JzYVhOMElDQnZaaUJpYjI5cmFXNW5jMXh5WEc1Y2RHbG1JQ2dnZEhsd1pXOW1JR0ZqZEdsdmJsOXdZWEpoYlM1elpXRnlZMmhmY0dGeVlXMXpJQ0U5UFNBbmRXNWtaV1pwYm1Wa0p5QXBlMXh5WEc1Y2RGeDBZV04wYVc5dVgzQnZjM1JmY0dGeVlXMXpXeUFuYzJWaGNtTm9YM0JoY21GdGN5Y2dYU0E5SUdGamRHbHZibDl3WVhKaGJTNXpaV0Z5WTJoZmNHRnlZVzF6TzF4eVhHNWNkRngwWkdWc1pYUmxJR0ZqZEdsdmJsOXdiM04wWDNCaGNtRnRjeTVoWTNScGIyNWZjR0Z5WVcxekxuTmxZWEpqYUY5d1lYSmhiWE03WEhKY2JseDBmVnh5WEc1Y2NseHVYSFF2THlCVGRHRnlkQ0JCYW1GNFhISmNibHgwYWxGMVpYSjVMbkJ2YzNRb0lIZHdZbU5mWjJ4dlltRnNNUzUzY0dKalgyRnFZWGgxY213Z0xGeHlYRzVjY2x4dVhIUmNkRngwWEhSaFkzUnBiMjVmY0c5emRGOXdZWEpoYlhNZ0xGeHlYRzVjY2x4dVhIUmNkRngwWEhRdktpcGNjbHh1WEhSY2RGeDBYSFFnS2lCVElIVWdZeUJqSUdVZ2N5QnpYSEpjYmx4MFhIUmNkRngwSUNwY2NseHVYSFJjZEZ4MFhIUWdLaUJBY0dGeVlXMGdjbVZ6Y0c5dWMyVmZaR0YwWVZ4MFhIUXRYSFJwZEhNZ2IySnFaV04wSUhKbGRIVnlibVZrSUdaeWIyMGdJRUZxWVhnZ0xTQmpiR0Z6Y3kxc2FYWmxMWE5sWVhKalp5NXdhSEJjY2x4dVhIUmNkRngwWEhRZ0tpQkFjR0Z5WVcwZ2RHVjRkRk4wWVhSMWMxeDBYSFF0WEhRbmMzVmpZMlZ6Y3lkY2NseHVYSFJjZEZ4MFhIUWdLaUJBY0dGeVlXMGdhbkZZU0ZKY2RGeDBYSFJjZEMxY2RFOWlhbVZqZEZ4eVhHNWNkRngwWEhSY2RDQXFMMXh5WEc1Y2RGeDBYSFJjZEdaMWJtTjBhVzl1SUNnZ2NtVnpjRzl1YzJWZlpHRjBZU3dnZEdWNGRGTjBZWFIxY3l3Z2FuRllTRklnS1NCN1hISmNibHh5WEc1amIyNXpiMnhsTG14dlp5Z2dKeUE5UFNCQmFtRjRJRUZqZEdsdmJuTWdPam9nVW1WemNHOXVjMlVnVjFCQ1ExOUJTbGhmUWs5UFMwbE9SMTlCUTFSSlQwNVRJRDA5SUNjc0lISmxjM0J2Ym5ObFgyUmhkR0VnS1RzZ1kyOXVjMjlzWlM1bmNtOTFjRVZ1WkNncE8xeHlYRzVjY2x4dVhIUmNkRngwWEhSY2RDOHZJRkJ5YjJKaFlteDVJRVZ5Y205eVhISmNibHgwWEhSY2RGeDBYSFJwWmlBb0lDaDBlWEJsYjJZZ2NtVnpjRzl1YzJWZlpHRjBZU0FoUFQwZ0oyOWlhbVZqZENjcElIeDhJQ2h5WlhOd2IyNXpaVjlrWVhSaElEMDlQU0J1ZFd4c0tTQXBlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUnFVWFZsY25rb0lDY2pkMmhmYzI5eWRGOXpaV3hsWTNSdmNpY2dLUzVvYVdSbEtDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjJ4cGMzUnBibWRmWTI5dWRHRnBibVZ5SnlBcElDa3VhSFJ0YkNoY2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhaR2wySUdOc1lYTnpQVndpZDNCaVl5MXpaWFIwYVc1bmN5MXViM1JwWTJVZ2JtOTBhV05sTFhkaGNtNXBibWRjSWlCemRIbHNaVDFjSW5SbGVIUXRZV3hwWjI0NmJHVm1kRndpUGljZ0sxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJ5WlhOd2IyNXpaVjlrWVhSaElDdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2M4TDJScGRqNG5YSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RISmxkSFZ5Ymp0Y2NseHVYSFJjZEZ4MFhIUmNkSDFjY2x4dVhISmNibHgwWEhSY2RGeDBYSFIzY0dKalgySnZiMnRwYm1kZmJHbHpkR2x1WjE5eVpXeHZZV1JmWW5WMGRHOXVYMTl6Y0dsdVgzQmhkWE5sS0NrN1hISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGQzQmlZMTloWkcxcGJsOXphRzkzWDIxbGMzTmhaMlVvWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENBZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOWhablJsY2w5aFkzUnBiMjVmYldWemMyRm5aU2NnWFM1eVpYQnNZV05sS0NBdlhGeHVMMmNzSUZ3aVBHSnlJQzgrWENJZ0tWeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXNJQ2dnSnpFbklEMDlJSEpsYzNCdmJuTmxYMlJoZEdGYklDZGhhbmhmWVdaMFpYSmZZV04wYVc5dVgzSmxjM1ZzZENjZ1hTQXBJRDhnSjNOMVkyTmxjM01uSURvZ0oyVnljbTl5SjF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRc0lERXdNREF3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFwTzF4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEM4dklGTjFZMk5sYzNNZ2NtVnpjRzl1YzJWY2NseHVYSFJjZEZ4MFhIUmNkR2xtSUNnZ0p6RW5JRDA5SUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZllXWjBaWEpmWVdOMGFXOXVYM0psYzNWc2RDY2dYU0FwZTF4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEZ4MGRtRnlJR2x6WDNKbGJHOWhaRjloYW1GNFgyeHBjM1JwYm1jZ1BTQjBjblZsTzF4eVhHNWNjbHh1WEhSY2RGeDBYSFJjZEZ4MEx5OGdRV1owWlhJZ1IyOXZaMnhsSUVOaGJHVnVaR0Z5SUdsdGNHOXlkQ0J6YUc5M0lHbHRjRzl5ZEdWa0lHSnZiMnRwYm1keklHRnVaQ0J5Wld4dllXUWdkR2hsSUhCaFoyVWdabTl5SUhSdmIyeGlZWElnY0dGeVlXMWxkR1Z5Y3lCMWNHUmhkR1ZjY2x4dVhIUmNkRngwWEhSY2RGeDBhV1lnS0NCbVlXeHpaU0FoUFQwZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOWhablJsY2w5aFkzUnBiMjVmY21WemRXeDBYMkZzYkY5d1lYSmhiWE5mWVhKeUp5QmRXeUFuYm1WM1gyeHBjM1JwYm1kZmNHRnlZVzF6SnlCZElDbDdYSEpjYmx4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5Z2djbVZ6Y0c5dWMyVmZaR0YwWVZzZ0oyRnFlRjloWm5SbGNsOWhZM1JwYjI1ZmNtVnpkV3gwWDJGc2JGOXdZWEpoYlhOZllYSnlKeUJkV3lBbmJtVjNYMnhwYzNScGJtZGZjR0Z5WVcxekp5QmRJQ2s3WEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RIWmhjaUJqYkc5elpXUmZkR2x0WlhJZ1BTQnpaWFJVYVcxbGIzVjBLQ0JtZFc1amRHbHZiaUFvS1h0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEdsbUlDZ2dkM0JpWTE5aWIyOXJhVzVuWDJ4cGMzUnBibWRmY21Wc2IyRmtYMkoxZEhSdmJsOWZhWE5mYzNCcGJpZ3BJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBhV1lnS0NCMWJtUmxabWx1WldRZ0lUMGdjbVZ6Y0c5dWMyVmZaR0YwWVZzZ0oyRnFlRjloWm5SbGNsOWhZM1JwYjI1ZmNtVnpkV3gwWDJGc2JGOXdZWEpoYlhOZllYSnlKeUJkV3lBbmJtVjNYMnhwYzNScGJtZGZjR0Z5WVcxekp5QmRXeUFuY21Wc2IyRmtYM1Z5YkY5d1lYSmhiWE1uSUYwZ0tYdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RHUnZZM1Z0Wlc1MExteHZZMkYwYVc5dUxtaHlaV1lnUFNCeVpYTndiMjV6WlY5a1lYUmhXeUFuWVdwNFgyRm1kR1Z5WDJGamRHbHZibDl5WlhOMWJIUmZZV3hzWDNCaGNtRnRjMTloY25JbklGMWJJQ2R1WlhkZmJHbHpkR2x1WjE5d1lYSmhiWE1uSUYxYklDZHlaV3h2WVdSZmRYSnNYM0JoY21GdGN5Y2dYVHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlJR1ZzYzJVZ2UxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFpHOWpkVzFsYm5RdWJHOWpZWFJwYjI0dWNtVnNiMkZrS0NrN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBmVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEN3Z01qQXdNQ0FwTzF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEdselgzSmxiRzloWkY5aGFtRjRYMnhwYzNScGJtY2dQU0JtWVd4elpUdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MGZWeHlYRzVjY2x4dVhIUmNkRngwWEhSY2RGeDBMeThnVTNSaGNuUWdaRzkzYm14dllXUWdaWGh3YjNKMFpXUWdRMU5XSUdacGJHVmNjbHh1WEhSY2RGeDBYSFJjZEZ4MGFXWWdLQ0IxYm1SbFptbHVaV1FnSVQwZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOWhablJsY2w5aFkzUnBiMjVmY21WemRXeDBYMkZzYkY5d1lYSmhiWE5mWVhKeUp5QmRXeUFuWlhod2IzSjBYMk56ZGw5MWNtd25JRjBnS1h0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5bGVIQnZjblJmWTNOMlgzVnliRjlmWkc5M2JteHZZV1FvSUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZllXWjBaWEpmWVdOMGFXOXVYM0psYzNWc2RGOWhiR3hmY0dGeVlXMXpYMkZ5Y2ljZ1hWc2dKMlY0Y0c5eWRGOWpjM1pmZFhKc0p5QmRJQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwYVhOZmNtVnNiMkZrWDJGcVlYaGZiR2x6ZEdsdVp5QTlJR1poYkhObE8xeHlYRzVjZEZ4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MFhIUnBaaUFvSUdselgzSmxiRzloWkY5aGFtRjRYMnhwYzNScGJtY2dLWHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTloWTNSMVlXeGZiR2x6ZEdsdVoxOWZjMmh2ZHlncE8xeDBMeTljZEZObGJtUnBibWNnUVdwaGVDQlNaWEYxWlhOMFhIUXRYSFIzYVhSb0lIQmhjbUZ0WlhSbGNuTWdkR2hoZENBZ2QyVWdaV0Z5YkhrZ0lHUmxabWx1WldRZ2FXNGdYQ0ozY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtZGNJaUJQWW1vdVhISmNibHgwWEhSY2RGeDBYSFJjZEgxY2NseHVYSEpjYmx4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MEx5OGdVbVZ0YjNabElITndhVzRnYVdOdmJpQm1jbTl0SUNCaWRYUjBiMjRnWVc1a0lFVnVZV0pzWlNCMGFHbHpJR0oxZEhSdmJpNWNjbHh1WEhSY2RGeDBYSFJjZEhkd1ltTmZZblYwZEc5dVgxOXlaVzF2ZG1WZmMzQnBiaWdnY21WemNHOXVjMlZmWkdGMFlWc2dKMkZxZUY5amJHVmhibVZrWDNCaGNtRnRjeWNnWFZzZ0ozVnBYMk5zYVdOclpXUmZaV3hsYldWdWRGOXBaQ2NnWFNBcFhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MEx5OGdTR2xrWlNCdGIyUmhiSE5jY2x4dVhIUmNkRngwWEhSY2RIZHdZbU5mY0c5d2RYQmZiVzlrWVd4elgxOW9hV1JsS0NrN1hISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGFsRjFaWEo1S0NBbkkyRnFZWGhmY21WemNHOXVaQ2NnS1M1b2RHMXNLQ0J5WlhOd2IyNXpaVjlrWVhSaElDazdYSFJjZEM4dklFWnZjaUJoWW1sc2FYUjVJSFJ2SUhOb2IzY2djbVZ6Y0c5dWMyVXNJR0ZrWkNCemRXTm9JRVJKVmlCbGJHVnRaVzUwSUhSdklIQmhaMlZjY2x4dVhIUmNkRngwWEhSOVhISmNibHgwWEhSY2RDQWdLUzVtWVdsc0tDQm1kVzVqZEdsdmJpQW9JR3B4V0VoU0xDQjBaWGgwVTNSaGRIVnpMQ0JsY25KdmNsUm9jbTkzYmlBcElIc2dJQ0FnYVdZZ0tDQjNhVzVrYjNjdVkyOXVjMjlzWlNBbUppQjNhVzVrYjNjdVkyOXVjMjlzWlM1c2IyY2dLWHNnWTI5dWMyOXNaUzVzYjJjb0lDZEJhbUY0WDBWeWNtOXlKeXdnYW5GWVNGSXNJSFJsZUhSVGRHRjBkWE1zSUdWeWNtOXlWR2h5YjNkdUlDazdJSDFjY2x4dVhIUmNkRngwWEhSY2RHcFJkV1Z5ZVNnZ0p5TjNhRjl6YjNKMFgzTmxiR1ZqZEc5eUp5QXBMbWhwWkdVb0tUdGNjbHh1WEhSY2RGeDBYSFJjZEhaaGNpQmxjbkp2Y2w5dFpYTnpZV2RsSUQwZ0p6eHpkSEp2Ym1jK0p5QXJJQ2RGY25KdmNpRW5JQ3NnSnp3dmMzUnliMjVuUGlBbklDc2daWEp5YjNKVWFISnZkMjRnTzF4eVhHNWNkRngwWEhSY2RGeDBhV1lnS0NCcWNWaElVaTV5WlhOd2IyNXpaVlJsZUhRZ0tYdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFpYSnliM0pmYldWemMyRm5aU0FyUFNCcWNWaElVaTV5WlhOd2IyNXpaVlJsZUhRN1hISmNibHgwWEhSY2RGeDBYSFI5WEhKY2JseDBYSFJjZEZ4MFhIUmxjbkp2Y2w5dFpYTnpZV2RsSUQwZ1pYSnliM0pmYldWemMyRm5aUzV5WlhCc1lXTmxLQ0F2WEZ4dUwyY3NJRndpUEdKeUlDOCtYQ0lnS1R0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNOb2IzZGZiV1Z6YzJGblpTZ2daWEp5YjNKZmJXVnpjMkZuWlNBcE8xeHlYRzVjZEZ4MFhIUWdJSDBwWEhKY2JseDBJQ0FnSUNBZ0lDQWdJQzh2SUM1a2IyNWxLQ0FnSUdaMWJtTjBhVzl1SUNnZ1pHRjBZU3dnZEdWNGRGTjBZWFIxY3l3Z2FuRllTRklnS1NCN0lDQWdhV1lnS0NCM2FXNWtiM2N1WTI5dWMyOXNaU0FtSmlCM2FXNWtiM2N1WTI5dWMyOXNaUzVzYjJjZ0tYc2dZMjl1YzI5c1pTNXNiMmNvSUNkelpXTnZibVFnYzNWalkyVnpjeWNzSUdSaGRHRXNJSFJsZUhSVGRHRjBkWE1zSUdweFdFaFNJQ2s3SUgwZ0lDQWdmU2xjY2x4dVhIUmNkRngwSUNBdkx5QXVZV3gzWVhsektDQm1kVzVqZEdsdmJpQW9JR1JoZEdGZmFuRllTRklzSUhSbGVIUlRkR0YwZFhNc0lHcHhXRWhTWDJWeWNtOXlWR2h5YjNkdUlDa2dleUFnSUdsbUlDZ2dkMmx1Wkc5M0xtTnZibk52YkdVZ0ppWWdkMmx1Wkc5M0xtTnZibk52YkdVdWJHOW5JQ2w3SUdOdmJuTnZiR1V1Ykc5bktDQW5ZV3gzWVhseklHWnBibWx6YUdWa0p5d2daR0YwWVY5cWNWaElVaXdnZEdWNGRGTjBZWFIxY3l3Z2FuRllTRkpmWlhKeWIzSlVhSEp2ZDI0Z0tUc2dmU0FnSUNBZ2ZTbGNjbHh1WEhSY2RGeDBJQ0E3SUNBdkx5QkZibVFnUVdwaGVGeHlYRzU5WEhKY2JseHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdVM1Z3Y0c5eWRDQkdkVzVqZEdsdmJuTWdMU0JUY0dsdUlFbGpiMjRnYVc0Z1FuVjBkRzl1Y3lBZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVW1WdGIzWmxJSE53YVc0Z2FXTnZiaUJtY205dElDQmlkWFIwYjI0Z1lXNWtJRVZ1WVdKc1pTQjBhR2x6SUdKMWRIUnZiaTVjY2x4dUlDcGNjbHh1SUNvZ1FIQmhjbUZ0SUdKMWRIUnZibDlqYkdsamEyVmtYMlZzWlcxbGJuUmZhV1JjZEZ4MExTQklWRTFNSUVsRUlHRjBkSEpwWW5WMFpTQnZaaUIwYUdseklHSjFkSFJ2Ymx4eVhHNGdLaUJBY21WMGRYSnVJSE4wY21sdVoxeDBYSFJjZEZ4MFhIUmNkQzBnUTFOVElHTnNZWE56WlhNZ2RHaGhkQ0IzWVhNZ2NISmxkbWx2ZFhOc2VTQnBiaUJpZFhSMGIyNGdhV052Ymx4eVhHNGdLaTljY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTlpZFhSMGIyNWZYM0psYlc5MlpWOXpjR2x1S0NCaWRYUjBiMjVmWTJ4cFkydGxaRjlsYkdWdFpXNTBYMmxrSUNsN1hISmNibHh5WEc1Y2RIWmhjaUJ3Y21WMmFXOXpYMk5zWVhOelpYTWdQU0FuSnp0Y2NseHVYSFJwWmlBb0lIVnVaR1ZtYVc1bFpDQWhQU0JpZFhSMGIyNWZZMnhwWTJ0bFpGOWxiR1Z0Wlc1MFgybGtJQ2w3WEhKY2JseDBYSFIyWVhJZ2FrVnNaVzFsYm5RZ1BTQnFVWFZsY25rb0lDY2pKeUFySUdKMWRIUnZibDlqYkdsamEyVmtYMlZzWlcxbGJuUmZhV1FnS1R0Y2NseHVYSFJjZEdsbUlDZ2dha1ZzWlcxbGJuUXViR1Z1WjNSb0lDbDdYSEpjYmx4MFhIUmNkSEJ5WlhacGIzTmZZMnhoYzNObGN5QTlJSGR3WW1OZlluVjBkRzl1WDJScGMyRmliR1ZmYkc5aFpHbHVaMTlwWTI5dUtDQnFSV3hsYldWdWRDNW5aWFFvSURBZ0tTQXBPMXh5WEc1Y2RGeDBmVnh5WEc1Y2RIMWNjbHh1WEhKY2JseDBjbVYwZFhKdUlIQnlaWFpwYjNOZlkyeGhjM05sY3p0Y2NseHVmVnh5WEc1Y2NseHVYSEpjYmx4MEx5b3FYSEpjYmx4MElDb2dVMmh2ZHlCTWIyRmthVzVuSUNoeWIzUmhkR2x1WnlCaGNuSnZkeWtnYVdOdmJpQm1iM0lnWW5WMGRHOXVJSFJvWVhRZ2FHRnpJR0psWlc0Z1kyeHBZMnRsWkZ4eVhHNWNkQ0FxWEhKY2JseDBJQ29nUUhCaGNtRnRJSFJvYVhOZlluVjBkRzl1WEhSY2RDMGdkR2hwY3lCdlltcGxZM1FnYjJZZ2MzQmxZMmxtYVdNZ1luVjBkRzl1WEhKY2JseDBJQ29nUUhKbGRIVnliaUJ6ZEhKcGJtZGNkRngwWEhRdElFTlRVeUJqYkdGemMyVnpJSFJvWVhRZ2QyRnpJSEJ5WlhacGIzVnpiSGtnYVc0Z1luVjBkRzl1SUdsamIyNWNjbHh1WEhRZ0tpOWNjbHh1WEhSbWRXNWpkR2x2YmlCM2NHSmpYMkoxZEhSdmJsOWxibUZpYkdWZmJHOWhaR2x1WjE5cFkyOXVLQ0IwYUdselgySjFkSFJ2YmlBcGUxeHlYRzVjY2x4dVhIUmNkSFpoY2lCcVFuVjBkRzl1SUQwZ2FsRjFaWEo1S0NCMGFHbHpYMkoxZEhSdmJpQXBPMXh5WEc1Y2RGeDBkbUZ5SUdwSlkyOXVJRDBnYWtKMWRIUnZiaTVtYVc1a0tDQW5hU2NnS1R0Y2NseHVYSFJjZEhaaGNpQndjbVYyYVc5elgyTnNZWE56WlhNZ1BTQnFTV052Ymk1aGRIUnlLQ0FuWTJ4aGMzTW5JQ2s3WEhKY2JseHlYRzVjZEZ4MGFrbGpiMjR1Y21WdGIzWmxRMnhoYzNNb0tTNWhaR1JEYkdGemN5Z2dKMjFsYm5WZmFXTnZiaUJwWTI5dUxURjRJSGR3WW1OZmFXTnVYM0p2ZEdGMFpWOXlhV2RvZENCM2NHSmpYM053YVc0bklDazdYSFF2THlCVFpYUWdVbTkwWVhSbElHbGpiMjVjY2x4dVhIUmNkQzh2YWtsamIyNHVZV1JrUTJ4aGMzTW9JQ2QzY0dKalgyRnVhVzFoZEdsdmJsOXdZWFZ6WlNjZ0tUdGNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRdkx5QlFZWFZ6WlNCaGJtbHRZWFJwYjI1Y2NseHVYSFJjZEM4dmFrbGpiMjR1WVdSa1EyeGhjM01vSUNkM2NHSmpYM1ZwWDNKbFpDY2dLVHRjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwTHk4Z1UyVjBJR2xqYjI0Z1kyOXNiM0lnY21Wa1hISmNibHh5WEc1Y2RGeDBha2xqYjI0dVlYUjBjaWdnSjNkd1ltTmZjSEpsZG1sdmRYTmZZMnhoYzNNbkxDQndjbVYyYVc5elgyTnNZWE56WlhNZ0tWeHlYRzVjY2x4dVhIUmNkR3BDZFhSMGIyNHVZV1JrUTJ4aGMzTW9JQ2RrYVhOaFlteGxaQ2NnS1R0Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXZMeUJFYVhOaFlteGxJR0oxZEhSdmJseHlYRzVjZEZ4MEx5OXFRblYwZEc5dUxuQnliM0FvSUZ3aVpHbHpZV0pzWldSY0lpd2dkSEoxWlNBcE8xeHlYRzVjZEZ4MEx5OGdWMlVnYm1WbFpDQjBieUFnYzJWMElDQm9aWEpsSUdGMGRISWdhVzV6ZEdWaFpDQnZaaUJ3Y205d0xDQmlaV05oZFhObElHWnZjaUJCSUdWc1pXMWxiblJ6TENBZ1lYUjBjbWxpZFhSbElDZGthWE5oWW14bFpDY2daRzhnSUc1dmRDQmhaR1JsWkNCM2FYUm9JR3BDZFhSMGIyNHVjSEp2Y0NnZ1hDSmthWE5oWW14bFpGd2lMQ0IwY25WbElDazdYSEpjYmx4eVhHNWNkRngwYWtKMWRIUnZiaTVoZEhSeUtDQW5kM0JpWTE5d2NtVjJhVzkxYzE5dmJtTnNhV05ySnl3Z2FrSjFkSFJ2Ymk1aGRIUnlLQ0FuYjI1amJHbGpheWNnS1NBcE8xeDBYSFF2TDFOaGRtVWdkR2hwY3lCMllXeDFaVnh5WEc1Y2RGeDBha0oxZEhSdmJpNWhkSFJ5S0NBbmIyNWpiR2xqYXljc0lDY25JQ2s3WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDOHZJRVJwYzJGaWJHVWdZV04wYVc5dWN5QmNJbTl1SUdOc2FXTnJYQ0pjY2x4dVhISmNibHgwWEhSeVpYUjFjbTRnY0hKbGRtbHZjMTlqYkdGemMyVnpPMXh5WEc1Y2RIMWNjbHh1WEhKY2JseHlYRzVjZEM4cUtseHlYRzVjZENBcUlFaHBaR1VnVEc5aFpHbHVaeUFvY205MFlYUnBibWNnWVhKeWIzY3BJR2xqYjI0Z1ptOXlJR0oxZEhSdmJpQjBhR0YwSUhkaGN5QmpiR2xqYTJWa0lHRnVaQ0J6YUc5M0lIQnlaWFpwYjNWeklHbGpiMjRnWVc1a0lHVnVZV0pzWlNCaWRYUjBiMjVjY2x4dVhIUWdLbHh5WEc1Y2RDQXFJRUJ3WVhKaGJTQjBhR2x6WDJKMWRIUnZibHgwWEhRdElIUm9hWE1nYjJKcVpXTjBJRzltSUhOd1pXTnBabWxqSUdKMWRIUnZibHh5WEc1Y2RDQXFJRUJ5WlhSMWNtNGdjM1J5YVc1blhIUmNkRngwTFNCRFUxTWdZMnhoYzNObGN5QjBhR0YwSUhkaGN5QndjbVYyYVc5MWMyeDVJR2x1SUdKMWRIUnZiaUJwWTI5dVhISmNibHgwSUNvdlhISmNibHgwWm5WdVkzUnBiMjRnZDNCaVkxOWlkWFIwYjI1ZlpHbHpZV0pzWlY5c2IyRmthVzVuWDJsamIyNG9JSFJvYVhOZlluVjBkRzl1SUNsN1hISmNibHh5WEc1Y2RGeDBkbUZ5SUdwQ2RYUjBiMjRnUFNCcVVYVmxjbmtvSUhSb2FYTmZZblYwZEc5dUlDazdYSEpjYmx4MFhIUjJZWElnYWtsamIyNGdQU0JxUW5WMGRHOXVMbVpwYm1Rb0lDZHBKeUFwTzF4eVhHNWNjbHh1WEhSY2RIWmhjaUJ3Y21WMmFXOXpYMk5zWVhOelpYTWdQU0JxU1dOdmJpNWhkSFJ5S0NBbmQzQmlZMTl3Y21WMmFXOTFjMTlqYkdGemN5Y2dLVHRjY2x4dVhIUmNkR2xtSUNnZ0p5Y2dJVDBnY0hKbGRtbHZjMTlqYkdGemMyVnpJQ2w3WEhKY2JseDBYSFJjZEdwSlkyOXVMbkpsYlc5MlpVTnNZWE56S0NrdVlXUmtRMnhoYzNNb0lIQnlaWFpwYjNOZlkyeGhjM05sY3lBcE8xeHlYRzVjZEZ4MGZWeHlYRzVjY2x4dVhIUmNkR3BDZFhSMGIyNHVjbVZ0YjNabFEyeGhjM01vSUNka2FYTmhZbXhsWkNjZ0tUdGNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFF2THlCU1pXMXZkbVVnUkdsellXSnNaU0JpZFhSMGIyNWNjbHh1WEhKY2JseDBYSFIyWVhJZ2NISmxkbWx2ZFhOZmIyNWpiR2xqYXlBOUlHcENkWFIwYjI0dVlYUjBjaWdnSjNkd1ltTmZjSEpsZG1sdmRYTmZiMjVqYkdsamF5Y2dLVnh5WEc1Y2RGeDBhV1lnS0NBbkp5QWhQU0J3Y21WMmFXOTFjMTl2Ym1Oc2FXTnJJQ2w3WEhKY2JseDBYSFJjZEdwQ2RYUjBiMjR1WVhSMGNpZ2dKMjl1WTJ4cFkyc25MQ0J3Y21WMmFXOTFjMTl2Ym1Oc2FXTnJJQ2s3WEhKY2JseDBYSFI5WEhKY2JseHlYRzVjZEZ4MGNtVjBkWEp1SUhCeVpYWnBiM05mWTJ4aGMzTmxjenRjY2x4dVhIUjlYSEpjYmx4eVhHNWNjbHh1THlvcVhISmNiaUFxSUVocFpHVWdZV3hzSUc5d1pXNGdiVzlrWVd3Z2NHOXdkWEJ6SUhkcGJtUnZkM05jY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZjRzl3ZFhCZmJXOWtZV3h6WDE5b2FXUmxLQ2w3WEhKY2JseHlYRzVjZEM4dklFaHBaR1VnYlc5a1lXeHpYSEpjYmx4MGFXWWdLQ0FuWm5WdVkzUnBiMjRuSUQwOVBTQjBlWEJsYjJZZ0tHcFJkV1Z5ZVNnZ0p5NTNjR0pqWDNCdmNIVndYMjF2WkdGc0p5QXBMbmR3WW1OZmJYbGZiVzlrWVd3cElDbDdYSEpjYmx4MFhIUnFVWFZsY25rb0lDY3VkM0JpWTE5d2IzQjFjRjl0YjJSaGJDY2dLUzUzY0dKalgyMTVYMjF2WkdGc0tDQW5hR2xrWlNjZ0tUdGNjbHh1WEhSOVhISmNibjFjY2x4dVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQkVZWFJsY3lBZ1UyaHZjblFnUEMwK0lGZHBaR1VnSUNBZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMGdLaTljY2x4dVhISmNibVoxYm1OMGFXOXVJSGR3WW1OZllXcDRYMk5zYVdOclgyOXVYMlJoZEdWelgzTm9iM0owS0NsN1hISmNibHgwYWxGMVpYSjVLQ0FuSTJKdmIydHBibWRmWkdGMFpYTmZjMjFoYkd3c0xtSnZiMnRwYm1kZlpHRjBaWE5mWm5Wc2JDY2dLUzVvYVdSbEtDazdYSEpjYmx4MGFsRjFaWEo1S0NBbkkySnZiMnRwYm1kZlpHRjBaWE5mWm5Wc2JDd3VZbTl2YTJsdVoxOWtZWFJsYzE5emJXRnNiQ2NnS1M1emFHOTNLQ2s3WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXpaVzVrWDNObFlYSmphRjl5WlhGMVpYTjBYM2RwZEdoZmNHRnlZVzF6S0NCN0ozVnBYM1Z6Y2w5ZlpHRjBaWE5mYzJodmNuUmZkMmxrWlNjNklDZHphRzl5ZENkOUlDazdYSEpjYm4xY2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJOc2FXTnJYMjl1WDJSaGRHVnpYM2RwWkdVb0tYdGNjbHh1WEhScVVYVmxjbmtvSUNjalltOXZhMmx1WjE5a1lYUmxjMTltZFd4c0xDNWliMjlyYVc1blgyUmhkR1Z6WDNOdFlXeHNKeUFwTG1ocFpHVW9LVHRjY2x4dVhIUnFVWFZsY25rb0lDY2pZbTl2YTJsdVoxOWtZWFJsYzE5emJXRnNiQ3d1WW05dmEybHVaMTlrWVhSbGMxOW1kV3hzSnlBcExuTm9iM2NvS1R0Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmZDJsMGFGOXdZWEpoYlhNb0lIc25kV2xmZFhOeVgxOWtZWFJsYzE5emFHOXlkRjkzYVdSbEp6b2dKM2RwWkdVbmZTQXBPMXh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5amJHbGphMTl2Ymw5a1lYUmxjMTkwYjJkbmJHVW9kR2hwYzE5a1lYUmxLWHRjY2x4dVhISmNibHgwYWxGMVpYSjVLQ0IwYUdselgyUmhkR1VnS1M1d1lYSmxiblJ6S0NBbkxuZHdZbU5mWTI5c1gyUmhkR1Z6SnlBcExtWnBibVFvSUNjdVltOXZhMmx1WjE5a1lYUmxjMTl6YldGc2JDY2dLUzUwYjJkbmJHVW9LVHRjY2x4dVhIUnFVWFZsY25rb0lIUm9hWE5mWkdGMFpTQXBMbkJoY21WdWRITW9JQ2N1ZDNCaVkxOWpiMnhmWkdGMFpYTW5JQ2t1Wm1sdVpDZ2dKeTVpYjI5cmFXNW5YMlJoZEdWelgyWjFiR3duSUNrdWRHOW5aMnhsS0NrN1hISmNibHh5WEc1Y2RDOHFYSEpjYmx4MGRtRnlJSFpwYzJsaWJHVmZjMlZqZEdsdmJpQTlJR3BSZFdWeWVTZ2dkR2hwYzE5a1lYUmxJQ2t1Y0dGeVpXNTBjeWdnSnk1aWIyOXJhVzVuWDJSaGRHVnpYMlY0Y0dGdVpGOXpaV04wYVc5dUp5QXBPMXh5WEc1Y2RIWnBjMmxpYkdWZmMyVmpkR2x2Ymk1b2FXUmxLQ2s3WEhKY2JseDBhV1lnS0NCMmFYTnBZbXhsWDNObFkzUnBiMjR1YUdGelEyeGhjM01vSUNkaWIyOXJhVzVuWDJSaGRHVnpYMloxYkd3bklDa2dLWHRjY2x4dVhIUmNkSFpwYzJsaWJHVmZjMlZqZEdsdmJpNXdZWEpsYm5SektDQW5MbmR3WW1OZlkyOXNYMlJoZEdWekp5QXBMbVpwYm1Rb0lDY3VZbTl2YTJsdVoxOWtZWFJsYzE5emJXRnNiQ2NnS1M1emFHOTNLQ2s3WEhKY2JseDBmU0JsYkhObElIdGNjbHh1WEhSY2RIWnBjMmxpYkdWZmMyVmpkR2x2Ymk1d1lYSmxiblJ6S0NBbkxuZHdZbU5mWTI5c1gyUmhkR1Z6SnlBcExtWnBibVFvSUNjdVltOXZhMmx1WjE5a1lYUmxjMTltZFd4c0p5QXBMbk5vYjNjb0tUdGNjbHh1WEhSOUtpOWNjbHh1WEhSamIyNXpiMnhsTG14dlp5Z2dKM2R3WW1OZllXcDRYMk5zYVdOclgyOXVYMlJoZEdWelgzUnZaMmRzWlNjc0lIUm9hWE5mWkdGMFpTQXBPMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQk1iMk5oYkdVZ0lDQXRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMGdLaTljY2x4dVhISmNiaThxS2x4eVhHNGdLaUJjZEZObGJHVmpkQ0J2Y0hScGIyNXpJR2x1SUhObGJHVmpkQ0JpYjNobGN5QmlZWE5sWkNCdmJpQmhkSFJ5YVdKMWRHVWdYQ0oyWVd4MVpWOXZabDl6Wld4bFkzUmxaRjl2Y0hScGIyNWNJaUJoYm1RZ1VrVkVJR052Ykc5eUlHRnVaQ0JvYVc1MElHWnZjaUJNVDBOQlRFVWdZblYwZEc5dUlDQWdMUzBnSUVsMEozTWdZMkZzYkdWa0lHWnliMjBnWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJSbFptbHVaVjkxYVY5b2IyOXJjeWdwSUNCY2RHVmhZMmdnSUhScGJXVWdZV1owWlhJZ1RHbHpkR2x1WnlCc2IyRmthVzVuTGx4eVhHNGdLaTljY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZaR1ZtYVc1bFgxOXNiMk5oYkdVb0tYdGNjbHh1WEhKY2JseDBhbEYxWlhKNUtDQW5MbmR3WW1OZmJHbHpkR2x1WjE5amIyNTBZV2x1WlhJZ2MyVnNaV04wSnlBcExtVmhZMmdvSUdaMWJtTjBhVzl1SUNnZ2FXNWtaWGdnS1h0Y2NseHVYSEpjYmx4MFhIUjJZWElnYzJWc1pXTjBhVzl1SUQwZ2FsRjFaWEo1S0NCMGFHbHpJQ2t1WVhSMGNpZ2dYQ0oyWVd4MVpWOXZabDl6Wld4bFkzUmxaRjl2Y0hScGIyNWNJaUFwTzF4MFhIUmNkQzh2SUVSbFptbHVaU0J6Wld4bFkzUmxaQ0J6Wld4bFkzUWdZbTk0WlhOY2NseHVYSEpjYmx4MFhIUnBaaUFvSUhWdVpHVm1hVzVsWkNBaFBUMGdjMlZzWldOMGFXOXVJQ2w3WEhKY2JseDBYSFJjZEdwUmRXVnllU2dnZEdocGN5QXBMbVpwYm1Rb0lDZHZjSFJwYjI1YmRtRnNkV1U5WENJbklDc2djMlZzWldOMGFXOXVJQ3NnSjF3aVhTY2dLUzV3Y205d0tDQW5jMlZzWldOMFpXUW5MQ0IwY25WbElDazdYSEpjYmx4eVhHNWNkRngwWEhScFppQW9JQ2duSnlBaFBTQnpaV3hsWTNScGIyNHBJQ1ltSUNocVVYVmxjbmtvSUhSb2FYTWdLUzVvWVhORGJHRnpjeWdnSjNObGRGOWliMjlyYVc1blgyeHZZMkZzWlY5elpXeGxZM1JpYjNnbklDa3BJQ2w3WEhSY2RGeDBYSFJjZEZ4MFhIUmNkQzh2SUV4dlkyRnNaVnh5WEc1Y2NseHVYSFJjZEZ4MFhIUjJZWElnWW05dmEybHVaMTlzYjJOaGJHVmZZblYwZEc5dUlEMGdhbEYxWlhKNUtDQjBhR2x6SUNrdWNHRnlaVzUwY3lnZ0p5NTFhVjlsYkdWdFpXNTBYMnh2WTJGc1pTY2dLUzVtYVc1a0tDQW5Mbk5sZEY5aWIyOXJhVzVuWDJ4dlkyRnNaVjlpZFhSMGIyNG5JQ2xjY2x4dVhISmNibHgwWEhSY2RGeDBMeTlpYjI5cmFXNW5YMnh2WTJGc1pWOWlkWFIwYjI0dVkzTnpLQ0FuWTI5c2IzSW5MQ0FuSTJSaU5EZ3dNQ2NnS1R0Y2RGeDBMeThnVTJWMElHSjFkSFJ2YmlBZ2NtVmtYSEpjYmx4MFhIUmNkRngwWW05dmEybHVaMTlzYjJOaGJHVmZZblYwZEc5dUxtRmtaRU5zWVhOektDQW5kM0JpWTE5MWFWOXlaV1FuSUNrN1hIUmNkQzh2SUZObGRDQmlkWFIwYjI0Z0lISmxaRnh5WEc1Y2RGeDBYSFJjZENCcFppQW9JQ2RtZFc1amRHbHZiaWNnUFQwOUlIUjVjR1Z2WmlnZ2QzQmlZMTkwYVhCd2VTQXBJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmliMjlyYVc1blgyeHZZMkZzWlY5aWRYUjBiMjR1WjJWMEtEQXBMbDkwYVhCd2VTNXpaWFJEYjI1MFpXNTBLQ0J6Wld4bFkzUnBiMjRnS1R0Y2NseHVYSFJjZEZ4MFhIUWdmVnh5WEc1Y2RGeDBYSFI5WEhKY2JseDBYSFI5WEhKY2JseDBmU0FwTzF4eVhHNTlYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dJQ0JTWlcxaGNtc2dJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBnS2k5Y2NseHVYSEpjYmk4cUtseHlYRzRnS2lCRVpXWnBibVVnWTI5dWRHVnVkQ0J2WmlCeVpXMWhjbXNnWENKaWIyOXJhVzVuSUc1dmRHVmNJaUJpZFhSMGIyNGdZVzVrSUhSbGVIUmhjbVZoTGlBZ0xTMGdTWFFuY3lCallXeHNaV1FnWm5KdmJTQmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZaR1ZtYVc1bFgzVnBYMmh2YjJ0ektDa2dJRngwWldGamFDQWdkR2x0WlNCaFpuUmxjaUJNYVhOMGFXNW5JR3h2WVdScGJtY3VYSEpjYmlBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5a1pXWnBibVZmWDNKbGJXRnlheWdwZTF4eVhHNWNjbHh1WEhScVVYVmxjbmtvSUNjdWQzQmlZMTlzYVhOMGFXNW5YMk52Ym5SaGFXNWxjaUF1ZFdsZmNtVnRZWEpyWDNObFkzUnBiMjRnZEdWNGRHRnlaV0VuSUNrdVpXRmphQ2dnWm5WdVkzUnBiMjRnS0NCcGJtUmxlQ0FwZTF4eVhHNWNkRngwZG1GeUlIUmxlSFJmZG1Gc0lEMGdhbEYxWlhKNUtDQjBhR2x6SUNrdWRtRnNLQ2s3WEhKY2JseDBYSFJwWmlBb0lDaDFibVJsWm1sdVpXUWdJVDA5SUhSbGVIUmZkbUZzS1NBbUppQW9KeWNnSVQwZ2RHVjRkRjkyWVd3cElDbDdYSEpjYmx4eVhHNWNkRngwWEhSMllYSWdjbVZ0WVhKclgySjFkSFJ2YmlBOUlHcFJkV1Z5ZVNnZ2RHaHBjeUFwTG5CaGNtVnVkSE1vSUNjdWRXbGZaM0p2ZFhBbklDa3VabWx1WkNnZ0p5NXpaWFJmWW05dmEybHVaMTl1YjNSbFgySjFkSFJ2YmljZ0tUdGNjbHh1WEhKY2JseDBYSFJjZEdsbUlDZ2djbVZ0WVhKclgySjFkSFJ2Ymk1c1pXNW5kR2dnUGlBd0lDbDdYSEpjYmx4eVhHNWNkRngwWEhSY2RISmxiV0Z5YTE5aWRYUjBiMjR1WVdSa1EyeGhjM01vSUNkM2NHSmpYM1ZwWDNKbFpDY2dLVHRjZEZ4MEx5OGdVMlYwSUdKMWRIUnZiaUFnY21Wa1hISmNibHgwWEhSY2RGeDBhV1lnS0NBblpuVnVZM1JwYjI0bklEMDlQU0IwZVhCbGIyWWdLSGR3WW1OZmRHbHdjSGtwSUNsN1hISmNibHgwWEhSY2RGeDBYSFF2TDNKbGJXRnlhMTlpZFhSMGIyNHVaMlYwS0NBd0lDa3VYM1JwY0hCNUxtRnNiRzkzU0ZSTlRDQTlJSFJ5ZFdVN1hISmNibHgwWEhSY2RGeDBYSFF2TDNKbGJXRnlhMTlpZFhSMGIyNHVaMlYwS0NBd0lDa3VYM1JwY0hCNUxuTmxkRU52Ym5SbGJuUW9JSFJsZUhSZmRtRnNMbkpsY0d4aFkyVW9MMXRjWEc1Y1hISmRMMmNzSUNjOFluSStKeWtnS1R0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSeVpXMWhjbXRmWW5WMGRHOXVMbWRsZENnZ01DQXBMbDkwYVhCd2VTNXpaWFJRY205d2N5Z2dlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmhiR3h2ZDBoVVRVdzZJSFJ5ZFdVc1hISmNibHgwWEhSY2RGeDBYSFJjZEdOdmJuUmxiblFnSURvZ2RHVjRkRjkyWVd3dWNtVndiR0ZqWlNnZ0wxdGNYRzVjWEhKZEwyY3NJQ2M4WW5JK0p5QXBYSEpjYmx4MFhIUmNkRngwWEhSOUlDazdYSEpjYmx4MFhIUmNkRngwZlZ4eVhHNWNkRngwWEhSOVhISmNibHgwWEhSOVhISmNibHgwZlNBcE8xeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nUVdOMGFXOXVjeUFzZDJobGJpQjNaU0JqYkdsamF5QnZiaUJjSWxKbGJXRnlhMXdpSUdKMWRIUnZiaTVjY2x4dUlDcGNjbHh1SUNvZ1FIQmhjbUZ0SUdweFgySjFkSFJ2YmlBZ0xWeDBkR2hwY3lCcVVYVmxjbmtnWW5WMGRHOXVJQ0J2WW1wbFkzUmNjbHh1SUNvdlhISmNibVoxYm1OMGFXOXVJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZYM1ZwWDJOc2FXTnJYMTl5WlcxaGNtc29JR3B4WDJKMWRIUnZiaUFwZTF4eVhHNWNjbHh1WEhScWNWOWlkWFIwYjI0dWNHRnlaVzUwY3lnbkxuVnBYMmR5YjNWd0p5a3VabWx1WkNnbkxuVnBYM0psYldGeWExOXpaV04wYVc5dUp5a3VkRzluWjJ4bEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dJQ0JEYUdGdVoyVWdZbTl2YTJsdVp5QnlaWE52ZFhKalpTQWdJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBnS2k5Y2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDNOb2IzZGZYMk5vWVc1blpWOXlaWE52ZFhKalpTZ2dZbTl2YTJsdVoxOXBaQ3dnY21WemIzVnlZMlZmYVdRZ0tYdGNjbHh1WEhKY2JseDBMeThnUkdWbWFXNWxJRWxFSUc5bUlHSnZiMnRwYm1jZ2RHOGdhR2xrWkdWdUlHbHVjSFYwWEhKY2JseDBhbEYxWlhKNUtDQW5JMk5vWVc1blpWOWliMjlyYVc1blgzSmxjMjkxY21ObFgxOWliMjlyYVc1blgybGtKeUFwTG5aaGJDZ2dZbTl2YTJsdVoxOXBaQ0FwTzF4eVhHNWNjbHh1WEhRdkx5QlRaV3hsWTNRZ1ltOXZhMmx1WnlCeVpYTnZkWEpqWlNBZ2RHaGhkQ0JpWld4dmJtY2dkRzhnSUdKdmIydHBibWRjY2x4dVhIUnFVWFZsY25rb0lDY2pZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgzSmxjMjkxY21ObFgzTmxiR1ZqZENjZ0tTNTJZV3dvSUhKbGMyOTFjbU5sWDJsa0lDa3VkSEpwWjJkbGNpZ2dKMk5vWVc1blpTY2dLVHRjY2x4dVhIUjJZWElnWTJKeU8xeHlYRzVjY2x4dVhIUXZMeUJIWlhRZ1VtVnpiM1Z5WTJVZ2MyVmpkR2x2Ymx4eVhHNWNkR05pY2lBOUlHcFJkV1Z5ZVNnZ1hDSWpZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgzTmxZM1JwYjI1Y0lpQXBMbVJsZEdGamFDZ3BPMXh5WEc1Y2NseHVYSFF2THlCQmNIQmxibVFnYVhRZ2RHOGdZbTl2YTJsdVp5QlNUMWRjY2x4dVhIUmpZbkl1WVhCd1pXNWtWRzhvSUdwUmRXVnllU2dnWENJamRXbGZYMk5vWVc1blpWOWliMjlyYVc1blgzSmxjMjkxY21ObFgxOXpaV04wYVc5dVgybHVYMkp2YjJ0cGJtZGZYQ0lnS3lCaWIyOXJhVzVuWDJsa0lDa2dLVHRjY2x4dVhIUmpZbklnUFNCdWRXeHNPMXh5WEc1Y2NseHVYSFF2THlCSWFXUmxJSE5sWTNScGIyNXpJRzltSUZ3aVEyaGhibWRsSUdKdmIydHBibWNnY21WemIzVnlZMlZjSWlCcGJpQmhiR3dnYjNSb1pYSWdZbTl2YTJsdVozTWdVazlYYzF4eVhHNWNkQzh2YWxGMVpYSjVLQ0JjSWk1MWFWOWZZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgzTmxZM1JwYjI1ZmFXNWZZbTl2YTJsdVoxd2lJQ2t1YUdsa1pTZ3BPMXh5WEc1Y2RHbG1JQ2dnSVNCcVVYVmxjbmtvSUZ3aUkzVnBYMTlqYUdGdVoyVmZZbTl2YTJsdVoxOXlaWE52ZFhKalpWOWZjMlZqZEdsdmJsOXBibDlpYjI5cmFXNW5YMXdpSUNzZ1ltOXZhMmx1WjE5cFpDQXBMbWx6S0NjNmRtbHphV0pzWlNjcElDbDdYSEpjYmx4MFhIUnFVWFZsY25rb0lGd2lMblZwWDE5MWJtUmxjbDloWTNScGIyNXpYM0p2ZDE5ZmMyVmpkR2x2Ymw5cGJsOWliMjlyYVc1blhDSWdLUzVvYVdSbEtDazdYSEpjYmx4MGZWeHlYRzVjY2x4dVhIUXZMeUJUYUc5M0lHOXViSGtnWENKamFHRnVaMlVnWW05dmEybHVaeUJ5WlhOdmRYSmpaVndpSUhObFkzUnBiMjRnSUdadmNpQmpkWEp5Wlc1MElHSnZiMnRwYm1kY2NseHVYSFJxVVhWbGNua29JRndpSTNWcFgxOWphR0Z1WjJWZlltOXZhMmx1WjE5eVpYTnZkWEpqWlY5ZmMyVmpkR2x2Ymw5cGJsOWliMjlyYVc1blgxd2lJQ3NnWW05dmEybHVaMTlwWkNBcExuUnZaMmRzWlNncE8xeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTl6WVhabFgxOWphR0Z1WjJWZmNtVnpiM1Z5WTJVb0lIUm9hWE5mWld3c0lHSnZiMnRwYm1kZllXTjBhVzl1TENCbGJGOXBaQ0FwZTF4eVhHNWNjbHh1WEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJGcVlYaGZZV04wYVc5dVgzSmxjWFZsYzNRb0lIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGliMjlyYVc1blgyRmpkR2x2YmljZ0lDQWdJQ0FnT2lCaWIyOXJhVzVuWDJGamRHbHZiaXhjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2RpYjI5cmFXNW5YMmxrSnlBZ0lDQWdJQ0FnSUNBZ09pQnFVWFZsY25rb0lDY2pZMmhoYm1kbFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWZlgySnZiMnRwYm1kZmFXUW5JQ2t1ZG1Gc0tDa3NYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jMlZzWldOMFpXUmZjbVZ6YjNWeVkyVmZhV1FuSURvZ2FsRjFaWEo1S0NBbkkyTm9ZVzVuWlY5aWIyOXJhVzVuWDNKbGMyOTFjbU5sWDE5eVpYTnZkWEpqWlY5elpXeGxZM1FuSUNrdWRtRnNLQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZlkyeHBZMnRsWkY5bGJHVnRaVzUwWDJsa0p6b2daV3hmYVdSY2NseHVYSFI5SUNrN1hISmNibHh5WEc1Y2RIZHdZbU5mWW5WMGRHOXVYMlZ1WVdKc1pWOXNiMkZrYVc1blgybGpiMjRvSUhSb2FYTmZaV3dnS1R0Y2NseHVYSEpjYmx4MEx5OGdkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZZMnh2YzJWZlgyTm9ZVzVuWlY5eVpYTnZkWEpqWlNncE8xeHlYRzU5WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTlqYkc5elpWOWZZMmhoYm1kbFgzSmxjMjkxY21ObEtDbDdYSEpjYmx4eVhHNWNkSFpoY2lCalluSmpaVHRjY2x4dVhISmNibHgwTHk4Z1IyVjBJRkpsYzI5MWNtTmxJSE5sWTNScGIyNWNjbHh1WEhSalluSmpaU0E5SUdwUmRXVnllU2hjSWlOamFHRnVaMlZmWW05dmEybHVaMTl5WlhOdmRYSmpaVjlmYzJWamRHbHZibHdpS1M1a1pYUmhZMmdvS1R0Y2NseHVYSEpjYmx4MEx5OGdRWEJ3Wlc1a0lHbDBJSFJ2SUdocFpHUmxiaUJJVkUxTUlIUmxiWEJzWVhSbElITmxZM1JwYjI0Z0lHRjBJQ0IwYUdVZ1ltOTBkRzl0SUNCdlppQjBhR1VnY0dGblpWeHlYRzVjZEdOaWNtTmxMbUZ3Y0dWdVpGUnZLR3BSZFdWeWVTaGNJaU4zY0dKalgyaHBaR1JsYmw5MFpXMXdiR0YwWlY5ZlkyaGhibWRsWDJKdmIydHBibWRmY21WemIzVnlZMlZjSWlrcE8xeHlYRzVjZEdOaWNtTmxJRDBnYm5Wc2JEdGNjbHh1WEhKY2JseDBMeThnU0dsa1pTQmhiR3dnWTJoaGJtZGxJR0p2YjJ0cGJtY2djbVZ6YjNWeVkyVnpJSE5sWTNScGIyNXpYSEpjYmx4MGFsRjFaWEo1S0Z3aUxuVnBYMTlqYUdGdVoyVmZZbTl2YTJsdVoxOXlaWE52ZFhKalpWOWZjMlZqZEdsdmJsOXBibDlpYjI5cmFXNW5YQ0lwTG1ocFpHVW9LVHRjY2x4dWZWeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdSSFZ3YkdsallYUmxJR0p2YjJ0cGJtY2dhVzRnYjNSb1pYSWdjbVZ6YjNWeVkyVWdJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTl6YUc5M1gxOWtkWEJzYVdOaGRHVmZZbTl2YTJsdVp5Z2dZbTl2YTJsdVoxOXBaQ3dnY21WemIzVnlZMlZmYVdRZ0tYdGNjbHh1WEhKY2JseDBMeThnUkdWbWFXNWxJRWxFSUc5bUlHSnZiMnRwYm1jZ2RHOGdhR2xrWkdWdUlHbHVjSFYwWEhKY2JseDBhbEYxWlhKNUtDQW5JMlIxY0d4cFkyRjBaVjlpYjI5cmFXNW5YM1J2WDI5MGFHVnlYM0psYzI5MWNtTmxYMTlpYjI5cmFXNW5YMmxrSnlBcExuWmhiQ2dnWW05dmEybHVaMTlwWkNBcE8xeHlYRzVjY2x4dVhIUXZMeUJUWld4bFkzUWdZbTl2YTJsdVp5QnlaWE52ZFhKalpTQWdkR2hoZENCaVpXeHZibWNnZEc4Z0lHSnZiMnRwYm1kY2NseHVYSFJxVVhWbGNua29JQ2NqWkhWd2JHbGpZWFJsWDJKdmIydHBibWRmZEc5ZmIzUm9aWEpmY21WemIzVnlZMlZmWDNKbGMyOTFjbU5sWDNObGJHVmpkQ2NnS1M1MllXd29JSEpsYzI5MWNtTmxYMmxrSUNrdWRISnBaMmRsY2lnZ0oyTm9ZVzVuWlNjZ0tUdGNjbHh1WEhSMllYSWdZMkp5TzF4eVhHNWNjbHh1WEhRdkx5QkhaWFFnVW1WemIzVnlZMlVnYzJWamRHbHZibHh5WEc1Y2RHTmljaUE5SUdwUmRXVnllU2dnWENJalpIVndiR2xqWVhSbFgySnZiMnRwYm1kZmRHOWZiM1JvWlhKZmNtVnpiM1Z5WTJWZlgzTmxZM1JwYjI1Y0lpQXBMbVJsZEdGamFDZ3BPMXh5WEc1Y2NseHVYSFF2THlCQmNIQmxibVFnYVhRZ2RHOGdZbTl2YTJsdVp5QlNUMWRjY2x4dVhIUmpZbkl1WVhCd1pXNWtWRzhvSUdwUmRXVnllU2dnWENJamRXbGZYMlIxY0d4cFkyRjBaVjlpYjI5cmFXNW5YM1J2WDI5MGFHVnlYM0psYzI5MWNtTmxYMTl6WldOMGFXOXVYMmx1WDJKdmIydHBibWRmWENJZ0t5QmliMjlyYVc1blgybGtJQ2tnS1R0Y2NseHVYSFJqWW5JZ1BTQnVkV3hzTzF4eVhHNWNjbHh1WEhRdkx5QklhV1JsSUhObFkzUnBiMjV6SUc5bUlGd2lSSFZ3YkdsallYUmxJR0p2YjJ0cGJtZGNJaUJwYmlCaGJHd2diM1JvWlhJZ1ltOXZhMmx1WjNNZ1VrOVhjMXh5WEc1Y2RHbG1JQ2dnSVNCcVVYVmxjbmtvSUZ3aUkzVnBYMTlrZFhCc2FXTmhkR1ZmWW05dmEybHVaMTkwYjE5dmRHaGxjbDl5WlhOdmRYSmpaVjlmYzJWamRHbHZibDlwYmw5aWIyOXJhVzVuWDF3aUlDc2dZbTl2YTJsdVoxOXBaQ0FwTG1sektDYzZkbWx6YVdKc1pTY3BJQ2w3WEhKY2JseDBYSFJxVVhWbGNua29JRndpTG5WcFgxOTFibVJsY2w5aFkzUnBiMjV6WDNKdmQxOWZjMlZqZEdsdmJsOXBibDlpYjI5cmFXNW5YQ0lnS1M1b2FXUmxLQ2s3WEhKY2JseDBmVnh5WEc1Y2NseHVYSFF2THlCVGFHOTNJRzl1YkhrZ1hDSkVkWEJzYVdOaGRHVWdZbTl2YTJsdVoxd2lJSE5sWTNScGIyNGdJR1p2Y2lCamRYSnlaVzUwSUdKdmIydHBibWNnVWs5WFhISmNibHgwYWxGMVpYSjVLQ0JjSWlOMWFWOWZaSFZ3YkdsallYUmxYMkp2YjJ0cGJtZGZkRzlmYjNSb1pYSmZjbVZ6YjNWeVkyVmZYM05sWTNScGIyNWZhVzVmWW05dmEybHVaMTljSWlBcklHSnZiMnRwYm1kZmFXUWdLUzUwYjJkbmJHVW9LVHRjY2x4dWZWeHlYRzVjY2x4dVpuVnVZM1JwYjI0Z2QzQmlZMTloYW5oZlltOXZhMmx1WjE5ZmRXbGZZMnhwWTJ0ZmMyRjJaVjlmWkhWd2JHbGpZWFJsWDJKdmIydHBibWNvSUhSb2FYTmZaV3dzSUdKdmIydHBibWRmWVdOMGFXOXVMQ0JsYkY5cFpDQXBlMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZllXTjBhVzl1WDNKbGNYVmxjM1FvSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJGamRHbHZiaWNnSUNBZ0lDQWdPaUJpYjI5cmFXNW5YMkZqZEdsdmJpeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGliMjlyYVc1blgybGtKeUFnSUNBZ0lDQWdJQ0FnT2lCcVVYVmxjbmtvSUNjalpIVndiR2xqWVhSbFgySnZiMnRwYm1kZmRHOWZiM1JvWlhKZmNtVnpiM1Z5WTJWZlgySnZiMnRwYm1kZmFXUW5JQ2t1ZG1Gc0tDa3NYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jMlZzWldOMFpXUmZjbVZ6YjNWeVkyVmZhV1FuSURvZ2FsRjFaWEo1S0NBbkkyUjFjR3hwWTJGMFpWOWliMjlyYVc1blgzUnZYMjkwYUdWeVgzSmxjMjkxY21ObFgxOXlaWE52ZFhKalpWOXpaV3hsWTNRbklDa3VkbUZzS0Nrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmRXbGZZMnhwWTJ0bFpGOWxiR1Z0Wlc1MFgybGtKem9nWld4ZmFXUmNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNWNkSGR3WW1OZlluVjBkRzl1WDJWdVlXSnNaVjlzYjJGa2FXNW5YMmxqYjI0b0lIUm9hWE5mWld3Z0tUdGNjbHh1WEhKY2JseDBMeThnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmZFdsZlkyeHBZMnRmWTJ4dmMyVmZYMk5vWVc1blpWOXlaWE52ZFhKalpTZ3BPMXh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5amJHOXpaVjlmWkhWd2JHbGpZWFJsWDJKdmIydHBibWNvS1h0Y2NseHVYSEpjYmx4MGRtRnlJR05pY21ObE8xeHlYRzVjY2x4dVhIUXZMeUJIWlhRZ1VtVnpiM1Z5WTJVZ2MyVmpkR2x2Ymx4eVhHNWNkR05pY21ObElEMGdhbEYxWlhKNUtGd2lJMlIxY0d4cFkyRjBaVjlpYjI5cmFXNW5YM1J2WDI5MGFHVnlYM0psYzI5MWNtTmxYMTl6WldOMGFXOXVYQ0lwTG1SbGRHRmphQ2dwTzF4eVhHNWNjbHh1WEhRdkx5QkJjSEJsYm1RZ2FYUWdkRzhnYUdsa1pHVnVJRWhVVFV3Z2RHVnRjR3hoZEdVZ2MyVmpkR2x2YmlBZ1lYUWdJSFJvWlNCaWIzUjBiMjBnSUc5bUlIUm9aU0J3WVdkbFhISmNibHgwWTJKeVkyVXVZWEJ3Wlc1a1ZHOG9hbEYxWlhKNUtGd2lJM2R3WW1OZmFHbGtaR1Z1WDNSbGJYQnNZWFJsWDE5a2RYQnNhV05oZEdWZlltOXZhMmx1WjE5MGIxOXZkR2hsY2w5eVpYTnZkWEpqWlZ3aUtTazdYSEpjYmx4MFkySnlZMlVnUFNCdWRXeHNPMXh5WEc1Y2NseHVYSFF2THlCSWFXUmxJR0ZzYkNCamFHRnVaMlVnWW05dmEybHVaeUJ5WlhOdmRYSmpaWE1nYzJWamRHbHZibk5jY2x4dVhIUnFVWFZsY25rb1hDSXVkV2xmWDJSMWNHeHBZMkYwWlY5aWIyOXJhVzVuWDNSdlgyOTBhR1Z5WDNKbGMyOTFjbU5sWDE5elpXTjBhVzl1WDJsdVgySnZiMnRwYm1kY0lpa3VhR2xrWlNncE8xeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nSUNCRGFHRnVaMlVnY0dGNWJXVnVkQ0J6ZEdGMGRYTWdJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwZ0tpOWNjbHh1WEhKY2JtWjFibU4wYVc5dUlIZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgzVnBYMk5zYVdOclgzTm9iM2RmWDNObGRGOXdZWGx0Wlc1MFgzTjBZWFIxY3lnZ1ltOXZhMmx1WjE5cFpDQXBlMXh5WEc1Y2NseHVYSFIyWVhJZ2FsTmxiR1ZqZENBOUlHcFJkV1Z5ZVNnZ0p5TjFhVjlmYzJWMFgzQmhlVzFsYm5SZmMzUmhkSFZ6WDE5elpXTjBhVzl1WDJsdVgySnZiMnRwYm1kZkp5QXJJR0p2YjJ0cGJtZGZhV1FnS1M1bWFXNWtLQ0FuYzJWc1pXTjBKeUFwWEhKY2JseHlYRzVjZEhaaGNpQnpaV3hsWTNSbFpGOXdZWGxmYzNSaGRIVnpJRDBnYWxObGJHVmpkQzVoZEhSeUtDQmNJbUZxZUMxelpXeGxZM1JsWkMxMllXeDFaVndpSUNrN1hISmNibHh5WEc1Y2RDOHZJRWx6SUdsMElHWnNiMkYwSUMwZ2RHaGxiaUFnYVhRbmN5QjFibXR1YjNkdVhISmNibHgwYVdZZ0tDQWhhWE5PWVU0b0lIQmhjbk5sUm14dllYUW9JSE5sYkdWamRHVmtYM0JoZVY5emRHRjBkWE1nS1NBcElDbDdYSEpjYmx4MFhIUnFVMlZzWldOMExtWnBibVFvSUNkdmNIUnBiMjViZG1Gc2RXVTlYQ0l4WENKZEp5QXBMbkJ5YjNBb0lDZHpaV3hsWTNSbFpDY3NJSFJ5ZFdVZ0tUdGNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdWVzVyYm05M2JpQWdkbUZzZFdVZ2FYTWdKekVuSUdsdUlITmxiR1ZqZENCaWIzaGNjbHh1WEhSOUlHVnNjMlVnZTF4eVhHNWNkRngwYWxObGJHVmpkQzVtYVc1a0tDQW5iM0IwYVc5dVczWmhiSFZsUFZ3aUp5QXJJSE5sYkdWamRHVmtYM0JoZVY5emRHRjBkWE1nS3lBblhDSmRKeUFwTG5CeWIzQW9JQ2R6Wld4bFkzUmxaQ2NzSUhSeWRXVWdLVHRjZEZ4MEx5OGdUM1JvWlhKM2FYTmxJR3R1YjNkdUlIQmhlVzFsYm5RZ2MzUmhkSFZ6WEhKY2JseDBmVnh5WEc1Y2NseHVYSFF2THlCSWFXUmxJSE5sWTNScGIyNXpJRzltSUZ3aVEyaGhibWRsSUdKdmIydHBibWNnY21WemIzVnlZMlZjSWlCcGJpQmhiR3dnYjNSb1pYSWdZbTl2YTJsdVozTWdVazlYYzF4eVhHNWNkR2xtSUNnZ0lTQnFVWFZsY25rb0lGd2lJM1ZwWDE5elpYUmZjR0Y1YldWdWRGOXpkR0YwZFhOZlgzTmxZM1JwYjI1ZmFXNWZZbTl2YTJsdVoxOWNJaUFySUdKdmIydHBibWRmYVdRZ0tTNXBjeWduT25acGMybGliR1VuS1NBcGUxeHlYRzVjZEZ4MGFsRjFaWEo1S0NCY0lpNTFhVjlmZFc1a1pYSmZZV04wYVc5dWMxOXliM2RmWDNObFkzUnBiMjVmYVc1ZlltOXZhMmx1WjF3aUlDa3VhR2xrWlNncE8xeHlYRzVjZEgxY2NseHVYSEpjYmx4MEx5OGdVMmh2ZHlCdmJteDVJRndpWTJoaGJtZGxJR0p2YjJ0cGJtY2djbVZ6YjNWeVkyVmNJaUJ6WldOMGFXOXVJQ0JtYjNJZ1kzVnljbVZ1ZENCaWIyOXJhVzVuWEhKY2JseDBhbEYxWlhKNUtDQmNJaU4xYVY5ZmMyVjBYM0JoZVcxbGJuUmZjM1JoZEhWelgxOXpaV04wYVc5dVgybHVYMkp2YjJ0cGJtZGZYQ0lnS3lCaWIyOXJhVzVuWDJsa0lDa3VkRzluWjJ4bEtDazdYSEpjYm4xY2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDNOaGRtVmZYM05sZEY5d1lYbHRaVzUwWDNOMFlYUjFjeWdnWW05dmEybHVaMTlwWkN3Z2RHaHBjMTlsYkN3Z1ltOXZhMmx1WjE5aFkzUnBiMjRzSUdWc1gybGtJQ2w3WEhKY2JseHlYRzVjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmWVdwaGVGOWhZM1JwYjI1ZmNtVnhkV1Z6ZENnZ2UxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEoySnZiMnRwYm1kZllXTjBhVzl1SnlBZ0lDQWdJQ0E2SUdKdmIydHBibWRmWVdOMGFXOXVMRnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKMkp2YjJ0cGJtZGZhV1FuSUNBZ0lDQWdJQ0FnSUNBNklHSnZiMnRwYm1kZmFXUXNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jMlZzWldOMFpXUmZjR0Y1YldWdWRGOXpkR0YwZFhNbklEb2dhbEYxWlhKNUtDQW5JM1ZwWDJKMGJsOXpaWFJmY0dGNWJXVnVkRjl6ZEdGMGRYTW5JQ3NnWW05dmEybHVaMTlwWkNBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNWcFgyTnNhV05yWldSZlpXeGxiV1Z1ZEY5cFpDYzZJR1ZzWDJsa0lDc2dKMTl6WVhabEoxeHlYRzVjZEgwZ0tUdGNjbHh1WEhKY2JseDBkM0JpWTE5aWRYUjBiMjVmWlc1aFlteGxYMnh2WVdScGJtZGZhV052YmlnZ2RHaHBjMTlsYkNBcE8xeHlYRzVjY2x4dVhIUnFVWFZsY25rb0lDY2pKeUFySUdWc1gybGtJQ3NnSjE5allXNWpaV3duS1M1b2FXUmxLQ2s3WEhKY2JseDBMeTkzY0dKalgySjFkSFJ2Ymw5bGJtRmliR1ZmYkc5aFpHbHVaMTlwWTI5dUtDQnFVWFZsY25rb0lDY2pKeUFySUdWc1gybGtJQ3NnSjE5allXNWpaV3duS1M1blpYUW9NQ2tnS1R0Y2NseHVYSEpjYm4xY2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDJOc2IzTmxYMTl6WlhSZmNHRjViV1Z1ZEY5emRHRjBkWE1vS1h0Y2NseHVYSFF2THlCSWFXUmxJR0ZzYkNCamFHRnVaMlVnSUhCaGVXMWxiblFnYzNSaGRIVnpJR1p2Y2lCaWIyOXJhVzVuWEhKY2JseDBhbEYxWlhKNUtGd2lMblZwWDE5elpYUmZjR0Y1YldWdWRGOXpkR0YwZFhOZlgzTmxZM1JwYjI1ZmFXNWZZbTl2YTJsdVoxd2lLUzVvYVdSbEtDazdYSEpjYm4xY2NseHVYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dJQ0JEYUdGdVoyVWdZbTl2YTJsdVp5QmpiM04wSUNBZ0xTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzBnS2k5Y2NseHVYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDNWcFgyTnNhV05yWDNOaGRtVmZYM05sZEY5aWIyOXJhVzVuWDJOdmMzUW9JR0p2YjJ0cGJtZGZhV1FzSUhSb2FYTmZaV3dzSUdKdmIydHBibWRmWVdOMGFXOXVMQ0JsYkY5cFpDQXBlMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZllXTjBhVzl1WDNKbGNYVmxjM1FvSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJGamRHbHZiaWNnSUNBZ0lDQWdPaUJpYjI5cmFXNW5YMkZqZEdsdmJpeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGliMjlyYVc1blgybGtKeUFnSUNBZ0lDQWdJQ0FnT2lCaWIyOXJhVzVuWDJsa0xGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEoySnZiMnRwYm1kZlkyOXpkQ2NnWEhSY2RDQWdJRG9nYWxGMVpYSjVLQ0FuSTNWcFgySjBibDl6WlhSZlltOXZhMmx1WjE5amIzTjBKeUFySUdKdmIydHBibWRmYVdRZ0t5QW5YMk52YzNRbktTNTJZV3dvS1N4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOWpiR2xqYTJWa1gyVnNaVzFsYm5SZmFXUW5PaUJsYkY5cFpDQXJJQ2RmYzJGMlpTZGNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNWNkSGR3WW1OZlluVjBkRzl1WDJWdVlXSnNaVjlzYjJGa2FXNW5YMmxqYjI0b0lIUm9hWE5mWld3Z0tUdGNjbHh1WEhKY2JseDBhbEYxWlhKNUtDQW5JeWNnS3lCbGJGOXBaQ0FySUNkZlkyRnVZMlZzSnlrdWFHbGtaU2dwTzF4eVhHNWNkQzh2ZDNCaVkxOWlkWFIwYjI1ZlpXNWhZbXhsWDJ4dllXUnBibWRmYVdOdmJpZ2dhbEYxWlhKNUtDQW5JeWNnS3lCbGJGOXBaQ0FySUNkZlkyRnVZMlZzSnlrdVoyVjBLREFwSUNrN1hISmNibHh5WEc1OVhISmNibHh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5MWFWOWpiR2xqYTE5amJHOXpaVjlmYzJWMFgySnZiMnRwYm1kZlkyOXpkQ2dwZTF4eVhHNWNkQzh2SUVocFpHVWdZV3hzSUdOb1lXNW5aU0FnY0dGNWJXVnVkQ0J6ZEdGMGRYTWdabTl5SUdKdmIydHBibWRjY2x4dVhIUnFVWFZsY25rb1hDSXVkV2xmWDNObGRGOWliMjlyYVc1blgyTnZjM1JmWDNObFkzUnBiMjVmYVc1ZlltOXZhMmx1WjF3aUtTNW9hV1JsS0NrN1hISmNibjFjY2x4dVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQlRaVzVrSUZCaGVXMWxiblFnY21WeGRXVnpkQ0FnSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTlmYzJWdVpGOXdZWGx0Wlc1MFgzSmxjWFZsYzNRb0tYdGNjbHh1WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWhhbUY0WDJGamRHbHZibDl5WlhGMVpYTjBLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWW05dmEybHVaMTloWTNScGIyNG5JQ0FnSUNBZ0lEb2dKM05sYm1SZmNHRjViV1Z1ZEY5eVpYRjFaWE4wSnl4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJsa0p5QWdJQ0FnSUNBZ0lDQWdPaUJxVVhWbGNua29JQ2NqZDNCaVkxOXRiMlJoYkY5ZmNHRjViV1Z1ZEY5eVpYRjFaWE4wWDE5aWIyOXJhVzVuWDJsa0p5a3VkbUZzS0Nrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNtVmhjMjl1WDI5bVgyRmpkR2x2YmljZ1hIUWdJQ0E2SUdwUmRXVnllU2dnSnlOM2NHSmpYMjF2WkdGc1gxOXdZWGx0Wlc1MFgzSmxjWFZsYzNSZlgzSmxZWE52Ymw5dlpsOWhZM1JwYjI0bktTNTJZV3dvS1N4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOWpiR2xqYTJWa1gyVnNaVzFsYm5SZmFXUW5PaUFuZDNCaVkxOXRiMlJoYkY5ZmNHRjViV1Z1ZEY5eVpYRjFaWE4wWDE5aWRYUjBiMjVmYzJWdVpDZGNjbHh1WEhSOUlDazdYSEpjYmx4MGQzQmlZMTlpZFhSMGIyNWZaVzVoWW14bFgyeHZZV1JwYm1kZmFXTnZiaWdnYWxGMVpYSjVLQ0FuSTNkd1ltTmZiVzlrWVd4ZlgzQmhlVzFsYm5SZmNtVnhkV1Z6ZEY5ZlluVjBkRzl1WDNObGJtUW5JQ2t1WjJWMEtDQXdJQ2tnS1R0Y2NseHVmVnh5WEc1Y2NseHVYSEpjYmk4cUtseHlYRzRnS2lBZ0lFbHRjRzl5ZENCSGIyOW5iR1VnUTJGc1pXNWtZWElnSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTQXFMMXh5WEc1Y2NseHVablZ1WTNScGIyNGdkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWTJ4cFkydGZYMmx0Y0c5eWRGOW5iMjluYkdWZlkyRnNaVzVrWVhJb0tYdGNjbHh1WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWhhbUY0WDJGamRHbHZibDl5WlhGMVpYTjBLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWW05dmEybHVaMTloWTNScGIyNG5JQ0FnSUNBZ0lEb2dKMmx0Y0c5eWRGOW5iMjluYkdWZlkyRnNaVzVrWVhJbkxGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozVnBYMk5zYVdOclpXUmZaV3hsYldWdWRGOXBaQ2M2SUNkM2NHSmpYMjF2WkdGc1gxOXBiWEJ2Y25SZloyOXZaMnhsWDJOaGJHVnVaR0Z5WDE5aWRYUjBiMjVmYzJWdVpDZGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFzSUNkaWIyOXJhVzVuWDJkallXeGZaWFpsYm5SelgyWnliMjBuSURvZ1hIUmNkRngwWEhScVVYVmxjbmtvSUNjamQzQmlZMTl0YjJSaGJGOWZhVzF3YjNKMFgyZHZiMmRzWlY5allXeGxibVJoY2w5ZmMyVmpkR2x2YmlBalltOXZhMmx1WjE5blkyRnNYMlYyWlc1MGMxOW1jbTl0SUc5d2RHbHZianB6Wld4bFkzUmxaQ2NwTG5aaGJDZ3BYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXNJQ2RpYjI5cmFXNW5YMmRqWVd4ZlpYWmxiblJ6WDJaeWIyMWZiMlptYzJWMEp5QTZJRngwWEhScVVYVmxjbmtvSUNjamQzQmlZMTl0YjJSaGJGOWZhVzF3YjNKMFgyZHZiMmRzWlY5allXeGxibVJoY2w5ZmMyVmpkR2x2YmlBalltOXZhMmx1WjE5blkyRnNYMlYyWlc1MGMxOW1jbTl0WDI5bVpuTmxkQ2NnS1M1MllXd29LVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBMQ0FuWW05dmEybHVaMTluWTJGc1gyVjJaVzUwYzE5bWNtOXRYMjltWm5ObGRGOTBlWEJsSnlBNklGeDBhbEYxWlhKNUtDQW5JM2R3WW1OZmJXOWtZV3hmWDJsdGNHOXlkRjluYjI5bmJHVmZZMkZzWlc1a1lYSmZYM05sWTNScGIyNGdJMkp2YjJ0cGJtZGZaMk5oYkY5bGRtVnVkSE5mWm5KdmJWOXZabVp6WlhSZmRIbHdaU0J2Y0hScGIyNDZjMlZzWldOMFpXUW5LUzUyWVd3b0tWeHlYRzVjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ3dnSjJKdmIydHBibWRmWjJOaGJGOWxkbVZ1ZEhOZmRXNTBhV3duSURvZ1hIUmNkRngwYWxGMVpYSjVLQ0FuSTNkd1ltTmZiVzlrWVd4ZlgybHRjRzl5ZEY5bmIyOW5iR1ZmWTJGc1pXNWtZWEpmWDNObFkzUnBiMjRnSTJKdmIydHBibWRmWjJOaGJGOWxkbVZ1ZEhOZmRXNTBhV3dnYjNCMGFXOXVPbk5sYkdWamRHVmtKeWt1ZG1Gc0tDbGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDd2dKMkp2YjJ0cGJtZGZaMk5oYkY5bGRtVnVkSE5mZFc1MGFXeGZiMlptYzJWMEp5QTZJRngwWEhScVVYVmxjbmtvSUNjamQzQmlZMTl0YjJSaGJGOWZhVzF3YjNKMFgyZHZiMmRzWlY5allXeGxibVJoY2w5ZmMyVmpkR2x2YmlBalltOXZhMmx1WjE5blkyRnNYMlYyWlc1MGMxOTFiblJwYkY5dlptWnpaWFFuSUNrdWRtRnNLQ2xjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ3dnSjJKdmIydHBibWRmWjJOaGJGOWxkbVZ1ZEhOZmRXNTBhV3hmYjJabWMyVjBYM1I1Y0dVbklEb2dhbEYxWlhKNUtDQW5JM2R3WW1OZmJXOWtZV3hmWDJsdGNHOXlkRjluYjI5bmJHVmZZMkZzWlc1a1lYSmZYM05sWTNScGIyNGdJMkp2YjJ0cGJtZGZaMk5oYkY5bGRtVnVkSE5mZFc1MGFXeGZiMlptYzJWMFgzUjVjR1VnYjNCMGFXOXVPbk5sYkdWamRHVmtKeWt1ZG1Gc0tDbGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFzSUNkaWIyOXJhVzVuWDJkallXeGZaWFpsYm5SelgyMWhlQ2NnT2lCY2RHcFJkV1Z5ZVNnZ0p5TjNjR0pqWDIxdlpHRnNYMTlwYlhCdmNuUmZaMjl2WjJ4bFgyTmhiR1Z1WkdGeVgxOXpaV04wYVc5dUlDTmliMjlyYVc1blgyZGpZV3hmWlhabGJuUnpYMjFoZUNjZ0tTNTJZV3dvS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwTENBblltOXZhMmx1WjE5blkyRnNYM0psYzI5MWNtTmxKeUE2SUZ4MGFsRjFaWEo1S0NBbkkzZHdZbU5mYlc5a1lXeGZYMmx0Y0c5eWRGOW5iMjluYkdWZlkyRnNaVzVrWVhKZlgzTmxZM1JwYjI0Z0kzZHdZbU5mWW05dmEybHVaMTl5WlhOdmRYSmpaU0J2Y0hScGIyNDZjMlZzWldOMFpXUW5LUzUyWVd3b0tWeHlYRzVjZEgwZ0tUdGNjbHh1WEhSM2NHSmpYMkoxZEhSdmJsOWxibUZpYkdWZmJHOWhaR2x1WjE5cFkyOXVLQ0JxVVhWbGNua29JQ2NqZDNCaVkxOXRiMlJoYkY5ZmFXMXdiM0owWDJkdmIyZHNaVjlqWVd4bGJtUmhjbDlmYzJWamRHbHZiaUFqZDNCaVkxOXRiMlJoYkY5ZmFXMXdiM0owWDJkdmIyZHNaVjlqWVd4bGJtUmhjbDlmWW5WMGRHOXVYM05sYm1RbklDa3VaMlYwS0NBd0lDa2dLVHRjY2x4dWZWeHlYRzVjY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnSUVWNGNHOXlkQ0JpYjI5cmFXNW5jeUIwYnlCRFUxWWdJQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5amJHbGphMTlmWlhod2IzSjBYMk56ZGlnZ2NHRnlZVzF6SUNsN1hISmNibHh5WEc1Y2RIWmhjaUJ6Wld4bFkzUmxaRjlpYjI5cmFXNW5YMmxrWDJGeWNpQTlJSGR3WW1OZloyVjBYM05sYkdWamRHVmtYM0p2ZDE5cFpDZ3BPMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZllXTjBhVzl1WDNKbGNYVmxjM1FvSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaWIyOXJhVzVuWDJGamRHbHZiaWNnSUNBZ0lDQWdJRG9nY0dGeVlXMXpXeUFuWW05dmEybHVaMTloWTNScGIyNG5JRjBzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZlkyeHBZMnRsWkY5bGJHVnRaVzUwWDJsa0p5QTZJSEJoY21GdGMxc2dKM1ZwWDJOc2FXTnJaV1JmWld4bGJXVnVkRjlwWkNjZ1hTeGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWlhod2IzSjBYM1I1Y0dVbklDQWdJQ0FnSUNBZ0lDQTZJSEJoY21GdGMxc2dKMlY0Y0c5eWRGOTBlWEJsSnlCZExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEoyTnpkbDlsZUhCdmNuUmZjMlZ3WVhKaGRHOXlKeUFnT2lCd1lYSmhiWE5iSUNkamMzWmZaWGh3YjNKMFgzTmxjR0Z5WVhSdmNpY2dYU3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2RqYzNaZlpYaHdiM0owWDNOcmFYQmZabWxsYkdSekp6b2djR0Z5WVcxeld5QW5ZM04yWDJWNGNHOXlkRjl6YTJsd1gyWnBaV3hrY3ljZ1hTeGNjbHh1WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWW05dmEybHVaMTlwWkNkY2REb2djMlZzWldOMFpXUmZZbTl2YTJsdVoxOXBaRjloY25JdWFtOXBiaWduTENjcExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozTmxZWEpqYUY5d1lYSmhiWE1uSURvZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG5ObFlYSmphRjluWlhSZllXeHNYM0JoY21GdGN5Z3BYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2NseHVYSFIyWVhJZ2RHaHBjMTlsYkNBOUlHcFJkV1Z5ZVNnZ0p5TW5JQ3NnY0dGeVlXMXpXeUFuZFdsZlkyeHBZMnRsWkY5bGJHVnRaVzUwWDJsa0p5QmRJQ2t1WjJWMEtDQXdJQ2xjY2x4dVhISmNibHgwZDNCaVkxOWlkWFIwYjI1ZlpXNWhZbXhsWDJ4dllXUnBibWRmYVdOdmJpZ2dkR2hwYzE5bGJDQXBPMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1QzQmxiaUJWVWt3Z2FXNGdibVYzSUhSaFlpQXRJRzFoYVc1c2VTQWdhWFFuY3lCMWMyVmtJR1p2Y2lCdmNHVnVJRU5UVmlCc2FXNXJJQ0JtYjNJZ1pHOTNibXh2WVdSbFpDQmxlSEJ2Y25SbFpDQmliMjlyYVc1bmN5QmhjeUJEVTFaY2NseHVJQ3BjY2x4dUlDb2dRSEJoY21GdElHVjRjRzl5ZEY5amMzWmZkWEpzWEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5bGVIQnZjblJmWTNOMlgzVnliRjlmWkc5M2JteHZZV1FvSUdWNGNHOXlkRjlqYzNaZmRYSnNJQ2w3WEhKY2JseHlYRzVjZEM4dmRtRnlJSE5sYkdWamRHVmtYMkp2YjJ0cGJtZGZhV1JmWVhKeUlEMGdkM0JpWTE5blpYUmZjMlZzWldOMFpXUmZjbTkzWDJsa0tDazdYSEpjYmx4eVhHNWNkR1J2WTNWdFpXNTBMbXh2WTJGMGFXOXVMbWh5WldZZ1BTQmxlSEJ2Y25SZlkzTjJYM1Z5YkRzdkx5QXJJQ2NtYzJWc1pXTjBaV1JmYVdROUp5QXJJSE5sYkdWamRHVmtYMkp2YjJ0cGJtZGZhV1JmWVhKeUxtcHZhVzRvSnl3bktUdGNjbHh1WEhKY2JseDBMeThnU1hRbmN5QnZjR1Z1SUdGa1pHbDBhVzl1WVd3Z1pHbGhiRzluSUdadmNpQmhjMnRwYm1jZ2IzQmxibWx1WnlCMWJISWdhVzRnYm1WM0lIUmhZbHh5WEc1Y2RDOHZJSGRwYm1SdmR5NXZjR1Z1S0NCbGVIQnZjblJmWTNOMlgzVnliQ3dnSjE5aWJHRnVheWNwTG1adlkzVnpLQ2s3WEhKY2JuMGlYU3dpWm1sc1pTSTZJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgyOTFkQzlpYjI5cmFXNW5jMTlmWVdOMGFXOXVjeTVxY3lKOVxuIl0sIm5hbWVzIjpbIl90eXBlb2YiLCJvYmoiLCJTeW1ib2wiLCJpdGVyYXRvciIsImNvbnN0cnVjdG9yIiwicHJvdG90eXBlIiwid3BiY19hanhfYm9va2luZ19hamF4X2FjdGlvbl9yZXF1ZXN0IiwiYWN0aW9uX3BhcmFtIiwiYXJndW1lbnRzIiwibGVuZ3RoIiwidW5kZWZpbmVkIiwiY29uc29sZSIsImdyb3VwQ29sbGFwc2VkIiwibG9nIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCIsIkFycmF5IiwiaXNBcnJheSIsIndwYmNfZ2V0X3NlbGVjdGVkX2xvY2FsZSIsIndwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZyIsImdldF9zZWN1cmVfcGFyYW0iLCJhY3Rpb25fcG9zdF9wYXJhbXMiLCJhY3Rpb24iLCJub25jZSIsIndwYmNfYWp4X3VzZXJfaWQiLCJ3cGJjX2FqeF9sb2NhbGUiLCJhY3Rpb25fcGFyYW1zIiwic2VhcmNoX3BhcmFtcyIsImpRdWVyeSIsInBvc3QiLCJ3cGJjX2dsb2JhbDEiLCJ3cGJjX2FqYXh1cmwiLCJyZXNwb25zZV9kYXRhIiwidGV4dFN0YXR1cyIsImpxWEhSIiwiZ3JvdXBFbmQiLCJoaWRlIiwiZ2V0X290aGVyX3BhcmFtIiwiaHRtbCIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX3NwaW5fcGF1c2UiLCJ3cGJjX2FkbWluX3Nob3dfbWVzc2FnZSIsInJlcGxhY2UiLCJpc19yZWxvYWRfYWpheF9saXN0aW5nIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zIiwic2V0VGltZW91dCIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4iLCJkb2N1bWVudCIsImxvY2F0aW9uIiwiaHJlZiIsInJlbG9hZCIsIndwYmNfYWp4X2Jvb2tpbmdfX2V4cG9ydF9jc3ZfdXJsX19kb3dubG9hZCIsIndwYmNfYWp4X2Jvb2tpbmdfX2FjdHVhbF9saXN0aW5nX19zaG93Iiwid3BiY19idXR0b25fX3JlbW92ZV9zcGluIiwid3BiY19wb3B1cF9tb2RhbHNfX2hpZGUiLCJmYWlsIiwiZXJyb3JUaHJvd24iLCJ3aW5kb3ciLCJlcnJvcl9tZXNzYWdlIiwicmVzcG9uc2VUZXh0Iiwid3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UiLCJidXR0b25fY2xpY2tlZF9lbGVtZW50X2lkIiwicHJldmlvc19jbGFzc2VzIiwiakVsZW1lbnQiLCJ3cGJjX2J1dHRvbl9kaXNhYmxlX2xvYWRpbmdfaWNvbiIsImdldCIsIndwYmNfYnV0dG9uX2VuYWJsZV9sb2FkaW5nX2ljb24iLCJ0aGlzX2J1dHRvbiIsImpCdXR0b24iLCJqSWNvbiIsImZpbmQiLCJhdHRyIiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsInByZXZpb3VzX29uY2xpY2siLCJ3cGJjX215X21vZGFsIiwid3BiY19hanhfY2xpY2tfb25fZGF0ZXNfc2hvcnQiLCJzaG93IiwidWlfdXNyX19kYXRlc19zaG9ydF93aWRlIiwid3BiY19hanhfY2xpY2tfb25fZGF0ZXNfd2lkZSIsIndwYmNfYWp4X2NsaWNrX29uX2RhdGVzX3RvZ2dsZSIsInRoaXNfZGF0ZSIsInBhcmVudHMiLCJ0b2dnbGUiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX2xvY2FsZSIsImVhY2giLCJpbmRleCIsImJvb2tpbmdfbG9jYWxlX2J1dHRvbiIsInNlbGVjdGlvbiIsInRoaXMiLCJwcm9wIiwiaGFzQ2xhc3MiLCJ3cGJjX3RpcHB5IiwiX3RpcHB5Iiwic2V0Q29udGVudCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2RlZmluZV9fcmVtYXJrIiwicmVtYXJrX2J1dHRvbiIsInRleHRfdmFsIiwidmFsIiwic2V0UHJvcHMiLCJhbGxvd0hUTUwiLCJjb250ZW50Iiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX3JlbWFyayIsImpxX2J1dHRvbiIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3Nob3dfX2NoYW5nZV9yZXNvdXJjZSIsImJvb2tpbmdfaWQiLCJyZXNvdXJjZV9pZCIsInRyaWdnZXIiLCJkZXRhY2giLCJhcHBlbmRUbyIsImlzIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2F2ZV9fY2hhbmdlX3Jlc291cmNlIiwidGhpc19lbCIsImJvb2tpbmdfYWN0aW9uIiwiZWxfaWQiLCJzZWxlY3RlZF9yZXNvdXJjZV9pZCIsInVpX2NsaWNrZWRfZWxlbWVudF9pZCIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19jaGFuZ2VfcmVzb3VyY2UiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zaG93X19kdXBsaWNhdGVfYm9va2luZyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX3NhdmVfX2R1cGxpY2F0ZV9ib29raW5nIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX2R1cGxpY2F0ZV9ib29raW5nIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfc2hvd19fc2V0X3BheW1lbnRfc3RhdHVzIiwialNlbGVjdCIsInNlbGVjdGVkX3BheV9zdGF0dXMiLCJpc05hTiIsInBhcnNlRmxvYXQiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19zZXRfcGF5bWVudF9zdGF0dXMiLCJzZWxlY3RlZF9wYXltZW50X3N0YXR1cyIsIndwYmNfYWp4X2Jvb2tpbmdfX3VpX2NsaWNrX2Nsb3NlX19zZXRfcGF5bWVudF9zdGF0dXMiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19zYXZlX19zZXRfYm9va2luZ19jb3N0IiwiYm9va2luZ19jb3N0Iiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfY2xvc2VfX3NldF9ib29raW5nX2Nvc3QiLCJ3cGJjX2FqeF9ib29raW5nX191aV9jbGlja19fc2VuZF9wYXltZW50X3JlcXVlc3QiLCJyZWFzb25fb2ZfYWN0aW9uIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2ltcG9ydF9nb29nbGVfY2FsZW5kYXIiLCJib29raW5nX2djYWxfZXZlbnRzX2Zyb20iLCJib29raW5nX2djYWxfZXZlbnRzX2Zyb21fb2Zmc2V0IiwiYm9va2luZ19nY2FsX2V2ZW50c19mcm9tX29mZnNldF90eXBlIiwiYm9va2luZ19nY2FsX2V2ZW50c191bnRpbCIsImJvb2tpbmdfZ2NhbF9ldmVudHNfdW50aWxfb2Zmc2V0IiwiYm9va2luZ19nY2FsX2V2ZW50c191bnRpbF9vZmZzZXRfdHlwZSIsImJvb2tpbmdfZ2NhbF9ldmVudHNfbWF4IiwiYm9va2luZ19nY2FsX3Jlc291cmNlIiwid3BiY19hanhfYm9va2luZ19fdWlfY2xpY2tfX2V4cG9ydF9jc3YiLCJwYXJhbXMiLCJzZWxlY3RlZF9ib29raW5nX2lkX2FyciIsIndwYmNfZ2V0X3NlbGVjdGVkX3Jvd19pZCIsImV4cG9ydF90eXBlIiwiY3N2X2V4cG9ydF9zZXBhcmF0b3IiLCJjc3ZfZXhwb3J0X3NraXBfZmllbGRzIiwiam9pbiIsInNlYXJjaF9nZXRfYWxsX3BhcmFtcyIsImV4cG9ydF9jc3ZfdXJsIl0sIm1hcHBpbmdzIjoiYUFXQSxTQUFTQSxRQUFRQyxHQUFrQyxPQUFPRCxRQUFVLG1CQUFxQkUsUUFBVSxpQkFBbUJBLE9BQU9DLFNBQVcsU0FBVUYsR0FBTyxjQUFjQSxHQUFTLFNBQVVBLEdBQU8sT0FBT0EsR0FBTyxtQkFBcUJDLFFBQVVELEVBQUlHLGNBQWdCRixRQUFVRCxJQUFRQyxPQUFPRyxVQUFZLGdCQUFrQkosSUFBZ0JBLEdBRXpVLFNBQVNLLHVDQUNQLElBQUlDLEVBQWtDLEVBQW5CQyxVQUFVQyxhQUErQkMsSUFBakJGLFVBQVUsR0FBbUJBLFVBQVUsR0FBSyxHQUN2RkcsUUFBUUMsZUFBZSw0QkFDdkJELFFBQVFFLElBQUksaUNBQWtDTixHQUU5Q08saURBRUlKLE1BQWFILEVBQXlCLFlBQU1RLE1BQU1DLFFBQVFULEVBQXlCLGNBRXJGQSxFQUFxQixPQUFJVSx5QkFBeUJWLEVBQXlCLFdBQUdXLHlCQUF5QkMsaUJBQWlCLFlBRzFILElBQUlDLEVBQXFCLENBQ3ZCQyxPQUFRLDJCQUNSQyxNQUFPSix5QkFBeUJDLGlCQUFpQixTQUNqREksaUJBQWtCYixNQUFhSCxFQUFzQixRQUFJVyx5QkFBeUJDLGlCQUFpQixXQUFhWixFQUFzQixRQUN0SWlCLGdCQUFpQmQsTUFBYUgsRUFBcUIsT0FBSVcseUJBQXlCQyxpQkFBaUIsVUFBWVosRUFBcUIsT0FDbElrQixjQUFlbEIsUUFHeUIsSUFBL0JBLEVBQWFtQixnQkFDdEJOLEVBQWtDLGNBQUliLEVBQWFtQixxQkFDNUNOLEVBQW1CSyxjQUFjQyxlQUkxQ0MsT0FBT0MsS0FBS0MsYUFBYUMsYUFBY1YsRUFRdkMsU0FBVVcsRUFBZUMsRUFBWUMsR0FJbkMsT0FIQXRCLFFBQVFFLElBQUksNERBQTZEa0IsR0FDekVwQixRQUFRdUIsV0FFdUIsV0FBM0JsQyxRQUFRK0IsSUFBaUQsT0FBbEJBLEdBQ3pDSixPQUFPLHFCQUFxQlEsWUFDNUJSLE9BQU9ULHlCQUF5QmtCLGdCQUFnQixzQkFBc0JDLEtBQUssNEVBQThFTixFQUFnQixZQUkzS08saURBQ0FDLHdCQUF3QlIsRUFBd0MseUJBQUVTLFFBQVEsTUFBTyxVQUFXLEtBQU9ULEVBQXVDLHdCQUFJLFVBQVksUUFBUyxLQUUvSixLQUFPQSxFQUF1Qyw0QkFDNUNVLEdBQXlCLEtBRWZWLEVBQXNELHVDQUFzQixxQkFDeEZXLGlEQUFpRFgsRUFBc0QsdUNBQXNCLG9CQUMxR1ksV0FBVyxXQUN4QkMsZ0RBQ0VsQyxNQUFhcUIsRUFBc0QsdUNBQXNCLG1CQUFxQixrQkFDaEhjLFNBQVNDLFNBQVNDLEtBQU9oQixFQUFzRCx1Q0FBc0IsbUJBQXFCLGtCQUUxSGMsU0FBU0MsU0FBU0UsV0FHckIsS0FDSFAsR0FBeUIsR0FJdkIvQixNQUFhcUIsRUFBc0QsdUNBQWtCLGlCQUN2RmtCLDJDQUEyQ2xCLEVBQXNELHVDQUFrQixnQkFDbkhVLEdBQXlCLEdBR3ZCQSxHQUNGUywwQ0FLSkMseUJBQXlCcEIsRUFBa0MsbUJBQXlCLHVCQUVwRnFCLCtCQUNBekIsT0FBTyxpQkFBaUJVLEtBQUtOLElBaEM3QixJQWNJVSxJQW1CSFksS0FBSyxTQUFVcEIsRUFBT0QsRUFBWXNCLEdBQy9CQyxPQUFPNUMsU0FBVzRDLE9BQU81QyxRQUFRRSxLQUNuQ0YsUUFBUUUsSUFBSSxhQUFjb0IsRUFBT0QsRUFBWXNCLEdBRy9DM0IsT0FBTyxxQkFBcUJRLE9BQ3hCcUIsRUFBZ0IsMkJBQXVDRixFQUV2RHJCLEVBQU13QixlQUNSRCxHQUFpQnZCLEVBQU13QixjQUd6QkQsRUFBZ0JBLEVBQWNoQixRQUFRLE1BQU8sVUFDN0NrQiw4QkFBOEJGLEtBZ0JsQyxTQUFTTCx5QkFBeUJRLEdBQ2hDLElBQUlDLEVBQWtCLEdBVXRCLE9BUklsRCxNQUFhaUQsSUFDWEUsRUFBV2xDLE9BQU8sSUFBTWdDLElBRWZsRCxTQUNYbUQsRUFBa0JFLGlDQUFpQ0QsRUFBU0UsSUFBSSxLQUk3REgsRUFVVCxTQUFTSSxnQ0FBZ0NDLEdBQ3ZDLElBQUlDLEVBQVV2QyxPQUFPc0MsR0FDakJFLEVBQVFELEVBQVFFLEtBQUssS0FDckJSLEVBQWtCTyxFQUFNRSxLQUFLLFNBY2pDLE9BYkFGLEVBQU1HLGNBQWNDLFNBQVMscURBSTdCSixFQUFNRSxLQUFLLHNCQUF1QlQsR0FDbENNLEVBQVFLLFNBQVMsWUFJakJMLEVBQVFHLEtBQUssd0JBQXlCSCxFQUFRRyxLQUFLLFlBRW5ESCxFQUFRRyxLQUFLLFVBQVcsSUFFakJULEVBVVQsU0FBU0UsaUNBQWlDRyxHQUN4QyxJQUFJQyxFQUFVdkMsT0FBT3NDLEdBQ2pCRSxFQUFRRCxFQUFRRSxLQUFLLEtBQ3JCUixFQUFrQk8sRUFBTUUsS0FBSyx1QkFFN0IsSUFBTVQsR0FDUk8sRUFBTUcsY0FBY0MsU0FBU1gsR0FHL0JNLEVBQVFJLFlBQVksWUFFaEJFLEVBQW1CTixFQUFRRyxLQUFLLHlCQU1wQyxNQUpJLElBQU1HLEdBQ1JOLEVBQVFHLEtBQUssVUFBV0csR0FHbkJaLEVBT1QsU0FBU1IsMEJBRUgsbUJBQXNCekIsT0FBTyxxQkFBcUI4QyxlQUNwRDlDLE9BQU8scUJBQXFCOEMsY0FBYyxRQU85QyxTQUFTQyxnQ0FDUC9DLE9BQU8sNENBQTRDUSxPQUNuRFIsT0FBTyw0Q0FBNENnRCxPQUNuRGpDLGlEQUFpRCxDQUMvQ2tDLHlCQUE0QixVQUloQyxTQUFTQywrQkFDUGxELE9BQU8sNENBQTRDUSxPQUNuRFIsT0FBTyw0Q0FBNENnRCxPQUNuRGpDLGlEQUFpRCxDQUMvQ2tDLHlCQUE0QixTQUloQyxTQUFTRSwrQkFBK0JDLEdBQ3RDcEQsT0FBT29ELEdBQVdDLFFBQVEsbUJBQW1CWixLQUFLLHdCQUF3QmEsU0FDMUV0RCxPQUFPb0QsR0FBV0MsUUFBUSxtQkFBbUJaLEtBQUssdUJBQXVCYSxTQVV6RXRFLFFBQVFFLElBQUksaUNBQWtDa0UsR0FVaEQsU0FBU0csc0NBQ1B2RCxPQUFPLGtDQUFrQ3dELEtBQUssU0FBVUMsR0FDdEQsSUFPUUMsRUFQSkMsRUFBWTNELE9BQU80RCxNQUFNbEIsS0FBSyxpQ0FFOUIzRCxJQUFjNEUsSUFDaEIzRCxPQUFPNEQsTUFBTW5CLEtBQUssaUJBQW1Ca0IsRUFBWSxNQUFNRSxLQUFLLFlBQVksR0FFcEUsSUFBTUYsR0FBYTNELE9BQU80RCxNQUFNRSxTQUFTLG1DQUV2Q0osRUFBd0IxRCxPQUFPNEQsTUFBTVAsUUFBUSxzQkFBc0JaLEtBQUssK0JBRXRERyxTQUFTLGVBRTNCLG1CQUFzQm1CLFlBQ3hCTCxFQUFzQnRCLElBQUksR0FBRzRCLE9BQU9DLFdBQVdOLE9BY3pELFNBQVNPLHNDQUNQbEUsT0FBTyx1REFBdUR3RCxLQUFLLFNBQVVDLEdBQzNFLElBR01VLEVBSEZDLEVBQVdwRSxPQUFPNEQsTUFBTVMsV0FFeEJ0RixJQUFjcUYsR0FBWSxJQUFNQSxHQUdQLEdBRnZCRCxFQUFnQm5FLE9BQU80RCxNQUFNUCxRQUFRLGFBQWFaLEtBQUssNkJBRXpDM0QsU0FDaEJxRixFQUFjdkIsU0FBUyxlQUVuQixtQkFBc0JtQixZQUd4QkksRUFBYy9CLElBQUksR0FBRzRCLE9BQU9NLFNBQVMsQ0FDbkNDLFdBQVcsRUFDWEMsUUFBU0osRUFBU3ZELFFBQVEsVUFBVyxhQWNqRCxTQUFTNEQsbUNBQW1DQyxHQUMxQ0EsRUFBVXJCLFFBQVEsYUFBYVosS0FBSyxzQkFBc0JhLFNBTTVELFNBQVNxQixpREFBaURDLEVBQVlDLEdBRXBFN0UsT0FBTyx3Q0FBd0NxRSxJQUFJTyxHQUVuRDVFLE9BQU8sNkNBQTZDcUUsSUFBSVEsR0FBYUMsUUFBUSxVQUd2RTlFLE9BQU8scUNBQXFDK0UsU0FFOUNDLFNBQVNoRixPQUFPLG9EQUFzRDRFLElBSXJFNUUsT0FBTyxvREFBc0Q0RSxHQUFZSyxHQUFHLGFBQy9FakYsT0FBTyw4Q0FBOENRLE9BSXZEUixPQUFPLG9EQUFzRDRFLEdBQVl0QixTQUczRSxTQUFTNEIsaURBQWlEQyxFQUFTQyxFQUFnQkMsR0FDakYxRyxxQ0FBcUMsQ0FDbkN5RyxlQUFrQkEsRUFDbEJSLFdBQWM1RSxPQUFPLHdDQUF3Q3FFLE1BQzdEaUIscUJBQXdCdEYsT0FBTyw2Q0FBNkNxRSxNQUM1RWtCLHNCQUF5QkYsSUFFM0JoRCxnQ0FBZ0M4QyxHQUdsQyxTQUFTSyxvREFHQ3hGLE9BQU8scUNBQXFDK0UsU0FFOUNDLFNBQVNoRixPQUFPLG1EQUd0QkEsT0FBTyxvREFBb0RRLE9BTTdELFNBQVNpRixtREFBbURiLEVBQVlDLEdBRXRFN0UsT0FBTyxvREFBb0RxRSxJQUFJTyxHQUUvRDVFLE9BQU8seURBQXlEcUUsSUFBSVEsR0FBYUMsUUFBUSxVQUduRjlFLE9BQU8saURBQWlEK0UsU0FFMURDLFNBQVNoRixPQUFPLGdFQUFrRTRFLElBR2pGNUUsT0FBTyxnRUFBa0U0RSxHQUFZSyxHQUFHLGFBQzNGakYsT0FBTyw4Q0FBOENRLE9BSXZEUixPQUFPLGdFQUFrRTRFLEdBQVl0QixTQUd2RixTQUFTb0MsbURBQW1EUCxFQUFTQyxFQUFnQkMsR0FDbkYxRyxxQ0FBcUMsQ0FDbkN5RyxlQUFrQkEsRUFDbEJSLFdBQWM1RSxPQUFPLG9EQUFvRHFFLE1BQ3pFaUIscUJBQXdCdEYsT0FBTyx5REFBeURxRSxNQUN4RmtCLHNCQUF5QkYsSUFFM0JoRCxnQ0FBZ0M4QyxHQUdsQyxTQUFTUSxzREFHQzNGLE9BQU8saURBQWlEK0UsU0FFMURDLFNBQVNoRixPQUFPLCtEQUd0QkEsT0FBTyxnRUFBZ0VRLE9BTXpFLFNBQVNvRixvREFBb0RoQixHQUMzRCxJQUFJaUIsRUFBVTdGLE9BQU8sK0NBQWlENEUsR0FBWW5DLEtBQUssVUFDbkZxRCxFQUFzQkQsRUFBUW5ELEtBQUssdUJBRWxDcUQsTUFBTUMsV0FBV0YsSUFHcEJELEVBQVFwRCxLQUFLLGlCQUFtQnFELEVBQXNCLE1BRnRERCxFQUFRcEQsS0FBSyxzQkFFK0NvQixLQUFLLFlBQVksR0FJMUU3RCxPQUFPLCtDQUFpRDRFLEdBQVlLLEdBQUcsYUFDMUVqRixPQUFPLDhDQUE4Q1EsT0FJdkRSLE9BQU8sK0NBQWlENEUsR0FBWXRCLFNBR3RFLFNBQVMyQyxvREFBb0RyQixFQUFZTyxFQUFTQyxFQUFnQkMsR0FDaEcxRyxxQ0FBcUMsQ0FDbkN5RyxlQUFrQkEsRUFDbEJSLFdBQWNBLEVBQ2RzQix3QkFBMkJsRyxPQUFPLDZCQUErQjRFLEdBQVlQLE1BQzdFa0Isc0JBQXlCRixFQUFRLFVBRW5DaEQsZ0NBQWdDOEMsR0FDaENuRixPQUFPLElBQU1xRixFQUFRLFdBQVc3RSxPQUdsQyxTQUFTMkYsdURBRVBuRyxPQUFPLCtDQUErQ1EsT0FNeEQsU0FBUzRGLGtEQUFrRHhCLEVBQVlPLEVBQVNDLEVBQWdCQyxHQUM5RjFHLHFDQUFxQyxDQUNuQ3lHLGVBQWtCQSxFQUNsQlIsV0FBY0EsRUFDZHlCLGFBQWdCckcsT0FBTywyQkFBNkI0RSxFQUFhLFNBQVNQLE1BQzFFa0Isc0JBQXlCRixFQUFRLFVBRW5DaEQsZ0NBQWdDOEMsR0FDaENuRixPQUFPLElBQU1xRixFQUFRLFdBQVc3RSxPQUdsQyxTQUFTOEYscURBRVB0RyxPQUFPLDZDQUE2Q1EsT0FNdEQsU0FBUytGLG1EQUNQNUgscUNBQXFDLENBQ25DeUcsZUFBa0IsdUJBQ2xCUixXQUFjNUUsT0FBTyw0Q0FBNENxRSxNQUNqRW1DLGlCQUFvQnhHLE9BQU8sa0RBQWtEcUUsTUFDN0VrQixzQkFBeUIsNkNBRTNCbEQsZ0NBQWdDckMsT0FBTyw2Q0FBNkNvQyxJQUFJLElBTTFGLFNBQVNxRSxxREFDUDlILHFDQUFxQyxDQUNuQ3lHLGVBQWtCLHlCQUNsQkcsc0JBQXlCLGtEQUN6Qm1CLHlCQUE0QjFHLE9BQU8sMEZBQTBGcUUsTUFDN0hzQyxnQ0FBbUMzRyxPQUFPLGlGQUFpRnFFLE1BQzNIdUMscUNBQXdDNUcsT0FBTyxzR0FBc0dxRSxNQUNySndDLDBCQUE2QjdHLE9BQU8sMkZBQTJGcUUsTUFDL0h5QyxpQ0FBb0M5RyxPQUFPLGtGQUFrRnFFLE1BQzdIMEMsc0NBQXlDL0csT0FBTyx1R0FBdUdxRSxNQUN2SjJDLHdCQUEyQmhILE9BQU8seUVBQXlFcUUsTUFDM0c0QyxzQkFBeUJqSCxPQUFPLHVGQUF1RnFFLFFBRXpIaEMsZ0NBQWdDckMsT0FBTyxpR0FBaUdvQyxJQUFJLElBTTlJLFNBQVM4RSx1Q0FBdUNDLEdBQzlDLElBQUlDLEVBQTBCQywyQkFDOUIxSSxxQ0FBcUMsQ0FDbkN5RyxlQUFrQitCLEVBQXVCLGVBQ3pDNUIsc0JBQXlCNEIsRUFBOEIsc0JBQ3ZERyxZQUFlSCxFQUFvQixZQUNuQ0kscUJBQXdCSixFQUE2QixxQkFDckRLLHVCQUEwQkwsRUFBK0IsdUJBQ3pEdkMsV0FBY3dDLEVBQXdCSyxLQUFLLEtBQzNDMUgsY0FBaUJSLHlCQUF5Qm1JLDBCQUc1Q3JGLGdDQURjckMsT0FBTyxJQUFNbUgsRUFBOEIsdUJBQUcvRSxJQUFJLElBVWxFLFNBQVNkLDJDQUEyQ3FHLEdBRWxEekcsU0FBU0MsU0FBU0MsS0FBT3VHIn0=
includes/page-bookings/_out/bookings__hooks.js ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+ /**
3
+ * Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
4
+ * * We are chnaged it once, because such elements always the same
5
+ */
6
+
7
+ function wpbc_ajx_booking_define_ui_hooks_once() {
8
+ //------------------------------------------------------------------------------------------------------------------
9
+ // Booked dates
10
+ //------------------------------------------------------------------------------------------------------------------
11
+ jQuery('#wh_booking_date').on('change', function (event) {
12
+ var changed_value = JSON.parse(jQuery('#wh_booking_date').val());
13
+ wpbc_ajx_booking_send_search_request_with_params({
14
+ 'wh_booking_date': changed_value,
15
+ 'page_num': 1,
16
+ // Frontend selected elements (saving for future use, after F5)
17
+ 'ui_wh_booking_date_radio': jQuery('input[name="ui_wh_booking_date_radio"]:checked').val(),
18
+ 'ui_wh_booking_date_next': jQuery('#ui_wh_booking_date_next').val(),
19
+ 'ui_wh_booking_date_prior': jQuery('#ui_wh_booking_date_prior').val(),
20
+ 'ui_wh_booking_date_checkin': jQuery('#ui_wh_booking_date_checkin').val(),
21
+ 'ui_wh_booking_date_checkout': jQuery('#ui_wh_booking_date_checkout').val()
22
+ });
23
+ }); //------------------------------------------------------------------------------------------------------------------
24
+ // Approved | Pending | All
25
+ //------------------------------------------------------------------------------------------------------------------
26
+
27
+ jQuery('#wh_approved').on('change', function (event) {
28
+ var changed_value = jQuery('#wh_approved').val();
29
+ changed_value = JSON.parse(changed_value);
30
+ wpbc_ajx_booking_send_search_request_with_params({
31
+ 'wh_approved': changed_value[0],
32
+ 'page_num': 1
33
+ });
34
+ }); //------------------------------------------------------------------------------------------------------------------
35
+ // Keywords
36
+ //------------------------------------------------------------------------------------------------------------------
37
+
38
+ jQuery('#wpbc_search_field').on("keyup", function (event) {
39
+ if (13 !== event.which) {
40
+ wpbc_ajx_booking_searching_after_few_seconds('#wpbc_search_field'); // Searching after 1.5 seconds after Key Up
41
+ } else {
42
+ wpbc_ajx_booking_searching_after_few_seconds('#wpbc_search_field', 0); // Immediate search
43
+ }
44
+ }); //------------------------------------------------------------------------------------------------------------------
45
+ // Existing | Trash | Any
46
+ //------------------------------------------------------------------------------------------------------------------
47
+
48
+ jQuery('#wh_trash').on('change', function (event) {
49
+ var changed_value = JSON.parse(jQuery('#wh_trash').val());
50
+ wpbc_ajx_booking_send_search_request_with_params({
51
+ 'wh_trash': changed_value[0],
52
+ 'page_num': 1
53
+ });
54
+ }); //------------------------------------------------------------------------------------------------------------------
55
+ // All bookings | New bookings
56
+ //------------------------------------------------------------------------------------------------------------------
57
+
58
+ jQuery('#wh_what_bookings').on('change', function (event) {
59
+ var changed_value = JSON.parse(jQuery('#wh_what_bookings').val());
60
+ wpbc_ajx_booking_send_search_request_with_params({
61
+ 'wh_what_bookings': changed_value[0],
62
+ 'page_num': 1
63
+ });
64
+ }); //------------------------------------------------------------------------------------------------------------------
65
+ // "Creation Date" of bookings
66
+ //------------------------------------------------------------------------------------------------------------------
67
+
68
+ jQuery('#wh_modification_date').on('change', function (event) {
69
+ var changed_value = JSON.parse(jQuery('#wh_modification_date').val());
70
+ wpbc_ajx_booking_send_search_request_with_params({
71
+ 'wh_modification_date': changed_value,
72
+ 'page_num': 1,
73
+ // Frontend selected elements (saving for future use, after F5)
74
+ 'ui_wh_modification_date_radio': jQuery('input[name="ui_wh_modification_date_radio"]:checked').val(),
75
+ 'ui_wh_modification_date_prior': jQuery('#ui_wh_modification_date_prior').val(),
76
+ 'ui_wh_modification_date_checkin': jQuery('#ui_wh_modification_date_checkin').val(),
77
+ 'ui_wh_modification_date_checkout': jQuery('#ui_wh_modification_date_checkout').val()
78
+ });
79
+ }); //------------------------------------------------------------------------------------------------------------------
80
+ // Payment Status
81
+ //------------------------------------------------------------------------------------------------------------------
82
+
83
+ jQuery('#wh_pay_status').on('change', function (event) {
84
+ var changed_value = JSON.parse(jQuery('#wh_pay_status').val());
85
+ wpbc_ajx_booking_send_search_request_with_params({
86
+ 'wh_pay_status': changed_value,
87
+ 'page_num': 1,
88
+ // Frontend selected elements (saving for future use, after F5)
89
+ 'ui_wh_pay_status_radio': undefined === jQuery('input[name="ui_wh_pay_status_radio"]:checked').val() ? '' : jQuery('input[name="ui_wh_pay_status_radio"]:checked').val(),
90
+ 'ui_wh_pay_status_custom': jQuery('#ui_wh_pay_status_custom').val()
91
+ });
92
+ }); //------------------------------------------------------------------------------------------------------------------
93
+ // Min Cost
94
+ //------------------------------------------------------------------------------------------------------------------
95
+
96
+ jQuery('#wh_cost').on('change', function (event) {
97
+ var changed_value = jQuery('#wh_cost').val();
98
+ wpbc_ajx_booking_send_search_request_with_params({
99
+ 'wh_cost': changed_value,
100
+ 'page_num': 1
101
+ });
102
+ }); //------------------------------------------------------------------------------------------------------------------
103
+ // Max Cost
104
+ //------------------------------------------------------------------------------------------------------------------
105
+
106
+ jQuery('#wh_cost2').on('change', function (event) {
107
+ var changed_value = jQuery('#wh_cost2').val();
108
+ wpbc_ajx_booking_send_search_request_with_params({
109
+ 'wh_cost2': changed_value,
110
+ 'page_num': 1
111
+ });
112
+ }); //------------------------------------------------------------------------------------------------------------------
113
+ // Booking resources
114
+ //------------------------------------------------------------------------------------------------------------------
115
+
116
+ jQuery('#wh_booking_type').on('change', function (event) {
117
+ var changed_value = jQuery('#wh_booking_type').val(); // it's get as array
118
+
119
+ if (Array.isArray(changed_value) && 0 === changed_value.length) {
120
+ changed_value = ['-1'];
121
+ }
122
+
123
+ wpbc_ajx_booking_send_search_request_with_params({
124
+ 'wh_booking_type': changed_value,
125
+ 'page_num': 1
126
+ });
127
+ }); //------------------------------------------------------------------------------------------------------------------
128
+ // Sorting
129
+ //------------------------------------------------------------------------------------------------------------------
130
+
131
+ jQuery('#wh_sort').on('change', function (event) {
132
+ var changed_value = jQuery('#wh_sort').val();
133
+ changed_value = JSON.parse(changed_value);
134
+ wpbc_ajx_booking_send_search_request_with_params({
135
+ 'wh_sort': changed_value[0]
136
+ });
137
+ });
138
+ }
139
+
140
+ jQuery(document).ready(function () {
141
+ wpbc_ajx_booking_define_ui_hooks_once();
142
+ });
143
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX3NyYy9ib29raW5nc19faG9va3MuanMiXSwibmFtZXMiOlsid3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3Nfb25jZSIsImpRdWVyeSIsIm9uIiwiZXZlbnQiLCJjaGFuZ2VkX3ZhbHVlIiwiSlNPTiIsInBhcnNlIiwidmFsIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zIiwid2hpY2giLCJ3cGJjX2FqeF9ib29raW5nX3NlYXJjaGluZ19hZnRlcl9mZXdfc2Vjb25kcyIsInVuZGVmaW5lZCIsIkFycmF5IiwiaXNBcnJheSIsImxlbmd0aCIsImRvY3VtZW50IiwicmVhZHkiXSwibWFwcGluZ3MiOiJBQUFBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBQ0EsU0FBU0EscUNBQVQsR0FBZ0Q7QUFFL0M7QUFDQTtBQUNBO0FBQ0FDLEVBQUFBLE1BQU0sQ0FBRSxrQkFBRixDQUFOLENBQTZCQyxFQUE3QixDQUFpQyxRQUFqQyxFQUEyQyxVQUFVQyxLQUFWLEVBQWlCO0FBRTNELFFBQUlDLGFBQWEsR0FBR0MsSUFBSSxDQUFDQyxLQUFMLENBQVlMLE1BQU0sQ0FBRSxrQkFBRixDQUFOLENBQTZCTSxHQUE3QixFQUFaLENBQXBCO0FBRUFDLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLHlCQUFtQkosYUFEa0I7QUFFckMsa0JBQW1CLENBRmtCO0FBR3JDO0FBQ0Esa0NBQStCSCxNQUFNLENBQUUsZ0RBQUYsQ0FBTixDQUEyRE0sR0FBM0QsRUFKTTtBQUtyQyxpQ0FBK0JOLE1BQU0sQ0FBRSwwQkFBRixDQUFOLENBQXFDTSxHQUFyQyxFQUxNO0FBTXJDLGtDQUErQk4sTUFBTSxDQUFFLDJCQUFGLENBQU4sQ0FBc0NNLEdBQXRDLEVBTk07QUFPckMsb0NBQStCTixNQUFNLENBQUUsNkJBQUYsQ0FBTixDQUF3Q00sR0FBeEMsRUFQTTtBQVFyQyxxQ0FBK0JOLE1BQU0sQ0FBRSw4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Q0EwSS9DO0FBQ0E7QUFDQTs7QUFDQUgsRUFBQUEsTUFBTSxDQUFFLGtCQUFGLENBQU4sQ0FBNkJDLEVBQTdCLENBQWlDLFFBQWpDLEVBQTJDLFVBQVVDLEtBQVYsRUFBaUI7QUFFM0QsUUFBSUMsYUFBYSxHQUFJSCxNQUFNLENBQUUsa0JBQUYsQ0FBTixDQUE2Qk0sR0FBN0IsRUFBckIsQ0FGMkQsQ0FFRDs7QUFDMUQsUUFBT0ssS0FBSyxDQUFDQyxPQUFOLENBQWVULGFBQWYsQ0FBRixJQUF3QyxNQUFNQSxhQUFhLENBQUNVLE1BQWpFLEVBQTJFO0FBQzFFVixNQUFBQSxhQUFhLEdBQUcsQ0FBQyxJQUFELENBQWhCO0FBQ0E7O0FBQ0RJLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLHlCQUFvQkosYUFEaUI7QUFFckMsa0JBQVk7QUFGeUIsS0FBRixDQUFoRDtBQUlBLEdBVkQsRUE3SStDLENBMEovQztBQUNBO0FBQ0E7O0FBQ0FILEVBQUFBLE1BQU0sQ0FBRSxVQUFGLENBQU4sQ0FBcUJDLEVBQXJCLENBQXlCLFFBQXpCLEVBQW1DLFVBQVVDLEtBQVYsRUFBaUI7QUFFbkQsUUFBSUMsYUFBYSxHQUFHSCxNQUFNLENBQUUsVUFBRixDQUFOLENBQXFCTSxHQUFyQixFQUFwQjtBQUVBSCxJQUFBQSxhQUFhLEdBQUdDLElBQUksQ0FBQ0MsS0FBTCxDQUFZRixhQUFaLENBQWhCO0FBRUFJLElBQUFBLGdEQUFnRCxDQUFFO0FBQ3JDLGlCQUFXSixhQUFhLENBQUUsQ0FBRjtBQURhLEtBQUYsQ0FBaEQ7QUFHQSxHQVREO0FBV0E7O0FBRURILE1BQU0sQ0FBQ2MsUUFBRCxDQUFOLENBQWlCQyxLQUFqQixDQUF1QixZQUFVO0FBQ2hDaEIsRUFBQUEscUNBQXFDO0FBQ3JDLENBRkQiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbi8qKlxyXG4gKiBEZWZpbmUgSFRNTCB1aSBIb29rczogb24gS2V5VXAgfCBDaGFuZ2UgfCAtPiBTb3J0IE9yZGVyICYgTnVtYmVyIEl0ZW1zIC8gUGFnZVxyXG4gKiAqIFdlIGFyZSBjaG5hZ2VkIGl0IG9uY2UsIGJlY2F1c2Ugc3VjaCAgZWxlbWVudHMgYWx3YXlzIHRoZSBzYW1lXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX2RlZmluZV91aV9ob29rc19vbmNlKCl7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gQm9va2VkIGRhdGVzXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfYm9va2luZ19kYXRlJyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oIGV2ZW50ICl7XHJcblxyXG5cdFx0dmFyIGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKCBqUXVlcnkoICcjd2hfYm9va2luZ19kYXRlJyApLnZhbCgpICk7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aF9ib29raW5nX2RhdGUnOiBjaGFuZ2VkX3ZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nICAgICAgIDogMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRnJvbnRlbmQgc2VsZWN0ZWQgZWxlbWVudHMgKHNhdmluZyBmb3IgZnV0dXJlIHVzZSwgYWZ0ZXIgRjUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9ib29raW5nX2RhdGVfcmFkaW8nICAgOiBqUXVlcnkoICdpbnB1dFtuYW1lPVwidWlfd2hfYm9va2luZ19kYXRlX3JhZGlvXCJdOmNoZWNrZWQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9ib29raW5nX2RhdGVfbmV4dCcgICAgOiBqUXVlcnkoICcjdWlfd2hfYm9va2luZ19kYXRlX25leHQnICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9ib29raW5nX2RhdGVfcHJpb3InICAgOiBqUXVlcnkoICcjdWlfd2hfYm9va2luZ19kYXRlX3ByaW9yJyApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfYm9va2luZ19kYXRlX2NoZWNraW4nIDogalF1ZXJ5KCAnI3VpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja2luJyApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfYm9va2luZ19kYXRlX2NoZWNrb3V0JzogalF1ZXJ5KCAnI3VpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja291dCcgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBBcHByb3ZlZCB8IFBlbmRpbmcgfCBBbGxcclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGpRdWVyeSggJyN3aF9hcHByb3ZlZCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX2FwcHJvdmVkJyApLnZhbCgpO1xyXG5cclxuXHRcdGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKCBjaGFuZ2VkX3ZhbHVlICk7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aF9hcHByb3ZlZCc6IGNoYW5nZWRfdmFsdWVbIDAgXSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJyAgIDogMVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBLZXl3b3Jkc1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0alF1ZXJ5KCAnI3dwYmNfc2VhcmNoX2ZpZWxkJyApLm9uKCBcImtleXVwXCIsIGZ1bmN0aW9uICggZXZlbnQgKXtcclxuXHRcdGlmICggMTMgIT09IGV2ZW50LndoaWNoICl7XHJcblx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzKCAnI3dwYmNfc2VhcmNoX2ZpZWxkJyApO1x0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU2VhcmNoaW5nIGFmdGVyIDEuNSBzZWNvbmRzIGFmdGVyIEtleSBVcFxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0d3BiY19hanhfYm9va2luZ19zZWFyY2hpbmdfYWZ0ZXJfZmV3X3NlY29uZHMoICcjd3BiY19zZWFyY2hfZmllbGQnLCAwICk7XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSW1tZWRpYXRlIHNlYXJjaFxyXG5cdFx0fVxyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBFeGlzdGluZyB8IFRyYXNoIHwgQW55XHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfdHJhc2gnICkub24oICdjaGFuZ2UnLCBmdW5jdGlvbiggZXZlbnQgKXtcclxuXHJcblx0XHR2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoIGpRdWVyeSggJyN3aF90cmFzaCcgKS52YWwoKSApO1xyXG5cclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcygge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hfdHJhc2gnOiBjaGFuZ2VkX3ZhbHVlWyAwIF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdwYWdlX251bSc6IDFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gQWxsIGJvb2tpbmdzIHwgTmV3IGJvb2tpbmdzXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfd2hhdF9ib29raW5ncycgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZSggalF1ZXJ5KCAnI3doX3doYXRfYm9va2luZ3MnICkudmFsKCkgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX3doYXRfYm9va2luZ3MnOiBjaGFuZ2VkX3ZhbHVlWyAwIF0sXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdwYWdlX251bSc6IDFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gXCJDcmVhdGlvbiBEYXRlXCIgICBvZiBib29raW5nc1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0alF1ZXJ5KCAnI3doX21vZGlmaWNhdGlvbl9kYXRlJyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oIGV2ZW50ICl7XHJcblxyXG5cdFx0dmFyIGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKCBqUXVlcnkoICcjd2hfbW9kaWZpY2F0aW9uX2RhdGUnICkudmFsKCkgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX21vZGlmaWNhdGlvbl9kYXRlJzogY2hhbmdlZF92YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJyAgICAgICA6IDEsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIEZyb250ZW5kIHNlbGVjdGVkIGVsZW1lbnRzIChzYXZpbmcgZm9yIGZ1dHVyZSB1c2UsIGFmdGVyIEY1KVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfcmFkaW8nICAgOiBqUXVlcnkoICdpbnB1dFtuYW1lPVwidWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfcmFkaW9cIl06Y2hlY2tlZCcgKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX3ByaW9yJyAgIDogalF1ZXJ5KCAnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX3ByaW9yJyApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQndWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfY2hlY2tpbicgOiBqUXVlcnkoICcjdWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfY2hlY2tpbicgKS52YWwoKSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNrb3V0JzogalF1ZXJ5KCAnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNrb3V0JyApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ICk7XHJcblx0fSApO1xyXG5cclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIFBheW1lbnQgU3RhdHVzXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfcGF5X3N0YXR1cycgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZSggalF1ZXJ5KCAnI3doX3BheV9zdGF0dXMnICkudmFsKCkgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX3BheV9zdGF0dXMnOiBjaGFuZ2VkX3ZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nICAgICAgIDogMSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRnJvbnRlbmQgc2VsZWN0ZWQgZWxlbWVudHMgKHNhdmluZyBmb3IgZnV0dXJlIHVzZSwgYWZ0ZXIgRjUpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9wYXlfc3RhdHVzX3JhZGlvJyA6ICggKCB1bmRlZmluZWQgPT09IGpRdWVyeSggJ2lucHV0W25hbWU9XCJ1aV93aF9wYXlfc3RhdHVzX3JhZGlvXCJdOmNoZWNrZWQnICkudmFsKCkgKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0PyAnJ1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0OiBqUXVlcnkoICdpbnB1dFtuYW1lPVwidWlfd2hfcGF5X3N0YXR1c19yYWRpb1wiXTpjaGVja2VkJyApLnZhbCgpXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCAgICksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd1aV93aF9wYXlfc3RhdHVzX2N1c3RvbSc6IGpRdWVyeSggJyN1aV93aF9wYXlfc3RhdHVzX2N1c3RvbScgKS52YWwoKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cclxuXHJcblx0fSApO1xyXG5cclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdC8vIE1pbiBDb3N0XHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfY29zdCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX2Nvc3QnICkudmFsKCk7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCd3aF9jb3N0JyA6IGNoYW5nZWRfdmFsdWUsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdwYWdlX251bSc6IDFcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0Ly8gTWF4IENvc3RcclxuXHQvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdGpRdWVyeSggJyN3aF9jb3N0MicgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX2Nvc3QyJyApLnZhbCgpO1xyXG5cclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcygge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnd2hfY29zdDInIDogY2hhbmdlZF92YWx1ZSxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJzogMVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBCb29raW5nIHJlc291cmNlc1xyXG5cdC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0alF1ZXJ5KCAnI3doX2Jvb2tpbmdfdHlwZScgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0gIGpRdWVyeSggJyN3aF9ib29raW5nX3R5cGUnICkudmFsKCk7XHRcdC8vIGl0J3MgZ2V0IGFzIGFycmF5XHJcblx0XHRpZiAoICggQXJyYXkuaXNBcnJheSggY2hhbmdlZF92YWx1ZSApICkgJiYgKCAwID09PSBjaGFuZ2VkX3ZhbHVlLmxlbmd0aCApICl7XHJcblx0XHRcdGNoYW5nZWRfdmFsdWUgPSBbJy0xJ107XHJcblx0XHR9XHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX2Jvb2tpbmdfdHlwZScgOiBjaGFuZ2VkX3ZhbHVlLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nOiAxXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9ICk7XHJcblx0fSApO1xyXG5cclxuXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHQvLyBTb3J0aW5nXHJcblx0Ly8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHRqUXVlcnkoICcjd2hfc29ydCcgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCAnI3doX3NvcnQnICkudmFsKCk7XHJcblxyXG5cdFx0Y2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoIGNoYW5nZWRfdmFsdWUgKTtcclxuXHJcblx0XHR3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3doX3NvcnQnOiBjaGFuZ2VkX3ZhbHVlWyAwIF1cclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxuXHR9ICk7XHJcblxyXG59XHJcblxyXG5qUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7XHJcblx0d3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3Nfb25jZSgpO1xyXG59KTtcclxuIl0sImZpbGUiOiJpbmNsdWRlcy9wYWdlLWJvb2tpbmdzL19vdXQvYm9va2luZ3NfX2hvb2tzLmpzIn0=
includes/page-bookings/_out/bookings__hooks.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ "use strict";function wpbc_ajx_booking_define_ui_hooks_once(){jQuery("#wh_booking_date").on("change",function(_){var a=JSON.parse(jQuery("#wh_booking_date").val());wpbc_ajx_booking_send_search_request_with_params({wh_booking_date:a,page_num:1,ui_wh_booking_date_radio:jQuery('input[name="ui_wh_booking_date_radio"]:checked').val(),ui_wh_booking_date_next:jQuery("#ui_wh_booking_date_next").val(),ui_wh_booking_date_prior:jQuery("#ui_wh_booking_date_prior").val(),ui_wh_booking_date_checkin:jQuery("#ui_wh_booking_date_checkin").val(),ui_wh_booking_date_checkout:jQuery("#ui_wh_booking_date_checkout").val()})}),jQuery("#wh_approved").on("change",function(_){var a=jQuery("#wh_approved").val(),a=JSON.parse(a);wpbc_ajx_booking_send_search_request_with_params({wh_approved:a[0],page_num:1})}),jQuery("#wpbc_search_field").on("keyup",function(_){13!==_.which?wpbc_ajx_booking_searching_after_few_seconds("#wpbc_search_field"):wpbc_ajx_booking_searching_after_few_seconds("#wpbc_search_field",0)}),jQuery("#wh_trash").on("change",function(_){var a=JSON.parse(jQuery("#wh_trash").val());wpbc_ajx_booking_send_search_request_with_params({wh_trash:a[0],page_num:1})}),jQuery("#wh_what_bookings").on("change",function(_){var a=JSON.parse(jQuery("#wh_what_bookings").val());wpbc_ajx_booking_send_search_request_with_params({wh_what_bookings:a[0],page_num:1})}),jQuery("#wh_modification_date").on("change",function(_){var a=JSON.parse(jQuery("#wh_modification_date").val());wpbc_ajx_booking_send_search_request_with_params({wh_modification_date:a,page_num:1,ui_wh_modification_date_radio:jQuery('input[name="ui_wh_modification_date_radio"]:checked').val(),ui_wh_modification_date_prior:jQuery("#ui_wh_modification_date_prior").val(),ui_wh_modification_date_checkin:jQuery("#ui_wh_modification_date_checkin").val(),ui_wh_modification_date_checkout:jQuery("#ui_wh_modification_date_checkout").val()})}),jQuery("#wh_pay_status").on("change",function(_){var a=JSON.parse(jQuery("#wh_pay_status").val());wpbc_ajx_booking_send_search_request_with_params({wh_pay_status:a,page_num:1,ui_wh_pay_status_radio:void 0===jQuery('input[name="ui_wh_pay_status_radio"]:checked').val()?"":jQuery('input[name="ui_wh_pay_status_radio"]:checked').val(),ui_wh_pay_status_custom:jQuery("#ui_wh_pay_status_custom").val()})}),jQuery("#wh_cost").on("change",function(_){var a=jQuery("#wh_cost").val();wpbc_ajx_booking_send_search_request_with_params({wh_cost:a,page_num:1})}),jQuery("#wh_cost2").on("change",function(_){var a=jQuery("#wh_cost2").val();wpbc_ajx_booking_send_search_request_with_params({wh_cost2:a,page_num:1})}),jQuery("#wh_booking_type").on("change",function(_){var a=jQuery("#wh_booking_type").val();Array.isArray(a)&&0===a.length&&(a=["-1"]),wpbc_ajx_booking_send_search_request_with_params({wh_booking_type:a,page_num:1})}),jQuery("#wh_sort").on("change",function(_){var a=jQuery("#wh_sort").val(),a=JSON.parse(a);wpbc_ajx_booking_send_search_request_with_params({wh_sort:a[0]})})}jQuery(document).ready(function(){wpbc_ajx_booking_define_ui_hooks_once()});
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19ob29rcy5taW4uanMiLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX291dC9ib29raW5nc19faG9va3MuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG4vKipcclxuICogRGVmaW5lIEhUTUwgdWkgSG9va3M6IG9uIEtleVVwIHwgQ2hhbmdlIHwgLT4gU29ydCBPcmRlciAmIE51bWJlciBJdGVtcyAvIFBhZ2VcclxuICogKiBXZSBhcmUgY2huYWdlZCBpdCBvbmNlLCBiZWNhdXNlIHN1Y2ggIGVsZW1lbnRzIGFsd2F5cyB0aGUgc2FtZVxyXG4gKi9cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3Nfb25jZSgpIHtcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQm9va2VkIGRhdGVzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIGpRdWVyeSgnI3doX2Jvb2tpbmdfZGF0ZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoalF1ZXJ5KCcjd2hfYm9va2luZ19kYXRlJykudmFsKCkpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgICAnd2hfYm9va2luZ19kYXRlJzogY2hhbmdlZF92YWx1ZSxcbiAgICAgICdwYWdlX251bSc6IDEsXG4gICAgICAvLyBGcm9udGVuZCBzZWxlY3RlZCBlbGVtZW50cyAoc2F2aW5nIGZvciBmdXR1cmUgdXNlLCBhZnRlciBGNSlcbiAgICAgICd1aV93aF9ib29raW5nX2RhdGVfcmFkaW8nOiBqUXVlcnkoJ2lucHV0W25hbWU9XCJ1aV93aF9ib29raW5nX2RhdGVfcmFkaW9cIl06Y2hlY2tlZCcpLnZhbCgpLFxuICAgICAgJ3VpX3doX2Jvb2tpbmdfZGF0ZV9uZXh0JzogalF1ZXJ5KCcjdWlfd2hfYm9va2luZ19kYXRlX25leHQnKS52YWwoKSxcbiAgICAgICd1aV93aF9ib29raW5nX2RhdGVfcHJpb3InOiBqUXVlcnkoJyN1aV93aF9ib29raW5nX2RhdGVfcHJpb3InKS52YWwoKSxcbiAgICAgICd1aV93aF9ib29raW5nX2RhdGVfY2hlY2tpbic6IGpRdWVyeSgnI3VpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja2luJykudmFsKCksXG4gICAgICAndWlfd2hfYm9va2luZ19kYXRlX2NoZWNrb3V0JzogalF1ZXJ5KCcjdWlfd2hfYm9va2luZ19kYXRlX2NoZWNrb3V0JykudmFsKClcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEFwcHJvdmVkIHwgUGVuZGluZyB8IEFsbFxuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX2FwcHJvdmVkJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBjaGFuZ2VkX3ZhbHVlID0galF1ZXJ5KCcjd2hfYXBwcm92ZWQnKS52YWwoKTtcbiAgICBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZShjaGFuZ2VkX3ZhbHVlKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX2FwcHJvdmVkJzogY2hhbmdlZF92YWx1ZVswXSxcbiAgICAgICdwYWdlX251bSc6IDFcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIEtleXdvcmRzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd3BiY19zZWFyY2hfZmllbGQnKS5vbihcImtleXVwXCIsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIGlmICgxMyAhPT0gZXZlbnQud2hpY2gpIHtcbiAgICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzKCcjd3BiY19zZWFyY2hfZmllbGQnKTsgLy8gU2VhcmNoaW5nIGFmdGVyIDEuNSBzZWNvbmRzIGFmdGVyIEtleSBVcFxuICAgIH0gZWxzZSB7XG4gICAgICB3cGJjX2FqeF9ib29raW5nX3NlYXJjaGluZ19hZnRlcl9mZXdfc2Vjb25kcygnI3dwYmNfc2VhcmNoX2ZpZWxkJywgMCk7IC8vIEltbWVkaWF0ZSBzZWFyY2hcbiAgICB9XG4gIH0pOyAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBFeGlzdGluZyB8IFRyYXNoIHwgQW55XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfdHJhc2gnKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGNoYW5nZWRfdmFsdWUgPSBKU09OLnBhcnNlKGpRdWVyeSgnI3doX3RyYXNoJykudmFsKCkpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgICAnd2hfdHJhc2gnOiBjaGFuZ2VkX3ZhbHVlWzBdLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gQWxsIGJvb2tpbmdzIHwgTmV3IGJvb2tpbmdzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfd2hhdF9ib29raW5ncycpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoalF1ZXJ5KCcjd2hfd2hhdF9ib29raW5ncycpLnZhbCgpKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX3doYXRfYm9va2luZ3MnOiBjaGFuZ2VkX3ZhbHVlWzBdLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gXCJDcmVhdGlvbiBEYXRlXCIgICBvZiBib29raW5nc1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX21vZGlmaWNhdGlvbl9kYXRlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHZhciBjaGFuZ2VkX3ZhbHVlID0gSlNPTi5wYXJzZShqUXVlcnkoJyN3aF9tb2RpZmljYXRpb25fZGF0ZScpLnZhbCgpKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX21vZGlmaWNhdGlvbl9kYXRlJzogY2hhbmdlZF92YWx1ZSxcbiAgICAgICdwYWdlX251bSc6IDEsXG4gICAgICAvLyBGcm9udGVuZCBzZWxlY3RlZCBlbGVtZW50cyAoc2F2aW5nIGZvciBmdXR1cmUgdXNlLCBhZnRlciBGNSlcbiAgICAgICd1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9yYWRpbyc6IGpRdWVyeSgnaW5wdXRbbmFtZT1cInVpX3doX21vZGlmaWNhdGlvbl9kYXRlX3JhZGlvXCJdOmNoZWNrZWQnKS52YWwoKSxcbiAgICAgICd1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9wcmlvcic6IGpRdWVyeSgnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX3ByaW9yJykudmFsKCksXG4gICAgICAndWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfY2hlY2tpbic6IGpRdWVyeSgnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNraW4nKS52YWwoKSxcbiAgICAgICd1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9jaGVja291dCc6IGpRdWVyeSgnI3VpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNrb3V0JykudmFsKClcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIFBheW1lbnQgU3RhdHVzXG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfcGF5X3N0YXR1cycpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoalF1ZXJ5KCcjd2hfcGF5X3N0YXR1cycpLnZhbCgpKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX3BheV9zdGF0dXMnOiBjaGFuZ2VkX3ZhbHVlLFxuICAgICAgJ3BhZ2VfbnVtJzogMSxcbiAgICAgIC8vIEZyb250ZW5kIHNlbGVjdGVkIGVsZW1lbnRzIChzYXZpbmcgZm9yIGZ1dHVyZSB1c2UsIGFmdGVyIEY1KVxuICAgICAgJ3VpX3doX3BheV9zdGF0dXNfcmFkaW8nOiB1bmRlZmluZWQgPT09IGpRdWVyeSgnaW5wdXRbbmFtZT1cInVpX3doX3BheV9zdGF0dXNfcmFkaW9cIl06Y2hlY2tlZCcpLnZhbCgpID8gJycgOiBqUXVlcnkoJ2lucHV0W25hbWU9XCJ1aV93aF9wYXlfc3RhdHVzX3JhZGlvXCJdOmNoZWNrZWQnKS52YWwoKSxcbiAgICAgICd1aV93aF9wYXlfc3RhdHVzX2N1c3RvbSc6IGpRdWVyeSgnI3VpX3doX3BheV9zdGF0dXNfY3VzdG9tJykudmFsKClcbiAgICB9KTtcbiAgfSk7IC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIE1pbiBDb3N0XG4gIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgalF1ZXJ5KCcjd2hfY29zdCcpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IGpRdWVyeSgnI3doX2Nvc3QnKS52YWwoKTtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3doX2Nvc3QnOiBjaGFuZ2VkX3ZhbHVlLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gTWF4IENvc3RcbiAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuICBqUXVlcnkoJyN3aF9jb3N0MicpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IGpRdWVyeSgnI3doX2Nvc3QyJykudmFsKCk7XG4gICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAgICd3aF9jb3N0Mic6IGNoYW5nZWRfdmFsdWUsXG4gICAgICAncGFnZV9udW0nOiAxXG4gICAgfSk7XG4gIH0pOyAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyBCb29raW5nIHJlc291cmNlc1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX2Jvb2tpbmdfdHlwZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB2YXIgY2hhbmdlZF92YWx1ZSA9IGpRdWVyeSgnI3doX2Jvb2tpbmdfdHlwZScpLnZhbCgpOyAvLyBpdCdzIGdldCBhcyBhcnJheVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoY2hhbmdlZF92YWx1ZSkgJiYgMCA9PT0gY2hhbmdlZF92YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGNoYW5nZWRfdmFsdWUgPSBbJy0xJ107XG4gICAgfVxuXG4gICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAgICd3aF9ib29raW5nX3R5cGUnOiBjaGFuZ2VkX3ZhbHVlLFxuICAgICAgJ3BhZ2VfbnVtJzogMVxuICAgIH0pO1xuICB9KTsgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gU29ydGluZ1xuICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4gIGpRdWVyeSgnI3doX3NvcnQnKS5vbignY2hhbmdlJywgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgdmFyIGNoYW5nZWRfdmFsdWUgPSBqUXVlcnkoJyN3aF9zb3J0JykudmFsKCk7XG4gICAgY2hhbmdlZF92YWx1ZSA9IEpTT04ucGFyc2UoY2hhbmdlZF92YWx1ZSk7XG4gICAgd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHtcbiAgICAgICd3aF9zb3J0JzogY2hhbmdlZF92YWx1ZVswXVxuICAgIH0pO1xuICB9KTtcbn1cblxualF1ZXJ5KGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbiAoKSB7XG4gIHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzX29uY2UoKTtcbn0pO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgzTnlZeTlpYjI5cmFXNW5jMTlmYUc5dmEzTXVhbk1pWFN3aWJtRnRaWE1pT2xzaWQzQmlZMTloYW5oZlltOXZhMmx1WjE5a1pXWnBibVZmZFdsZmFHOXZhM05mYjI1alpTSXNJbXBSZFdWeWVTSXNJbTl1SWl3aVpYWmxiblFpTENKamFHRnVaMlZrWDNaaGJIVmxJaXdpU2xOUFRpSXNJbkJoY25ObElpd2lkbUZzSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgzZHBkR2hmY0dGeVlXMXpJaXdpZDJocFkyZ2lMQ0ozY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sWVhKamFHbHVaMTloWm5SbGNsOW1aWGRmYzJWamIyNWtjeUlzSW5WdVpHVm1hVzVsWkNJc0lrRnljbUY1SWl3aWFYTkJjbkpoZVNJc0lteGxibWQwYUNJc0ltUnZZM1Z0Wlc1MElpd2ljbVZoWkhraVhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQk8wRkJSVUU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPMEZCUTBFc1UwRkJVMEVzY1VOQlFWUXNSMEZCWjBRN1FVRkZMME03UVVGRFFUdEJRVU5CTzBGQlEwRkRMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeHJRa0ZCUml4RFFVRk9MRU5CUVRaQ1F5eEZRVUUzUWl4RFFVRnBReXhSUVVGcVF5eEZRVUV5UXl4VlFVRlZReXhMUVVGV0xFVkJRV2xDTzBGQlJUTkVMRkZCUVVsRExHRkJRV0VzUjBGQlIwTXNTVUZCU1N4RFFVRkRReXhMUVVGTUxFTkJRVmxNTEUxQlFVMHNRMEZCUlN4clFrRkJSaXhEUVVGT0xFTkJRVFpDVFN4SFFVRTNRaXhGUVVGYUxFTkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExIbENRVUZ0UWtvc1lVRkVhMEk3UVVGRmNrTXNhMEpCUVcxQ0xFTkJSbXRDTzBGQlIzSkRPMEZCUTBFc2EwTkJRU3RDU0N4TlFVRk5MRU5CUVVVc1owUkJRVVlzUTBGQlRpeERRVUV5UkUwc1IwRkJNMFFzUlVGS1RUdEJRVXR5UXl4cFEwRkJLMEpPTEUxQlFVMHNRMEZCUlN3d1FrRkJSaXhEUVVGT0xFTkJRWEZEVFN4SFFVRnlReXhGUVV4Tk8wRkJUWEpETEd0RFFVRXJRazRzVFVGQlRTeERRVUZGTERKQ1FVRkdMRU5CUVU0c1EwRkJjME5OTEVkQlFYUkRMRVZCVGswN1FVRlBja01zYjBOQlFTdENUaXhOUVVGTkxFTkJRVVVzTmtKQlFVWXNRMEZCVGl4RFFVRjNRMDBzUjBGQmVFTXNSVUZRVFR0QlFWRnlReXh4UTBGQkswSk9MRTFCUVUwc1EwRkJSU3c0UWtGQlJpeERRVUZPTEVOQlFYbERUU3hIUVVGNlF6dEJRVkpOTEV0QlFVWXNRMEZCYUVRN1FVRlZRU3hIUVdSRUxFVkJUQ3RETEVOQmNVSXZRenRCUVVOQk8wRkJRMEU3TzBGQlEwRk9MRVZCUVVGQkxFMUJRVTBzUTBGQlJTeGpRVUZHTEVOQlFVNHNRMEZCZVVKRExFVkJRWHBDTEVOQlFUWkNMRkZCUVRkQ0xFVkJRWFZETEZWQlFWVkRMRXRCUVZZc1JVRkJhVUk3UVVGRmRrUXNVVUZCU1VNc1lVRkJZU3hIUVVGSFNDeE5RVUZOTEVOQlFVVXNZMEZCUml4RFFVRk9MRU5CUVhsQ1RTeEhRVUY2UWl4RlFVRndRanRCUVVWQlNDeEpRVUZCUVN4aFFVRmhMRWRCUVVkRExFbEJRVWtzUTBGQlEwTXNTMEZCVEN4RFFVRlpSaXhoUVVGYUxFTkJRV2hDTzBGQlJVRkpMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExIRkNRVUZsU2l4aFFVRmhMRU5CUVVVc1EwRkJSaXhEUVVSVE8wRkJSWEpETEd0Q1FVRmxPMEZCUm5OQ0xFdEJRVVlzUTBGQmFFUTdRVUZKUVN4SFFWWkVMRVZCZUVJclF5eERRVzlETDBNN1FVRkRRVHRCUVVOQk96dEJRVU5CU0N4RlFVRkJRU3hOUVVGTkxFTkJRVVVzYjBKQlFVWXNRMEZCVGl4RFFVRXJRa01zUlVGQkwwSXNRMEZCYlVNc1QwRkJia01zUlVGQk5FTXNWVUZCVjBNc1MwRkJXQ3hGUVVGclFqdEJRVU0zUkN4UlFVRkxMRTlCUVU5QkxFdEJRVXNzUTBGQlEwMHNTMEZCYkVJc1JVRkJlVUk3UVVGRGVFSkRMRTFCUVVGQkxEUkRRVUUwUXl4RFFVRkZMRzlDUVVGR0xFTkJRVFZETEVOQlJIZENMRU5CUTNWRU8wRkJReTlGTEV0QlJrUXNUVUZGVHp0QlFVTk9RU3hOUVVGQlFTdzBRMEZCTkVNc1EwRkJSU3h2UWtGQlJpeEZRVUYzUWl4RFFVRjRRaXhEUVVFMVF5eERRVVJOTEVOQlF6SkZPMEZCUTJwR08wRkJRMFFzUjBGT1JDeEZRWFpESzBNc1EwRXJReTlETzBGQlEwRTdRVUZEUVRzN1FVRkRRVlFzUlVGQlFVRXNUVUZCVFN4RFFVRkZMRmRCUVVZc1EwRkJUaXhEUVVGelFrTXNSVUZCZEVJc1EwRkJNRUlzVVVGQk1VSXNSVUZCYjBNc1ZVRkJWVU1zUzBGQlZpeEZRVUZwUWp0QlFVVndSQ3hSUVVGSlF5eGhRVUZoTEVkQlFVZERMRWxCUVVrc1EwRkJRME1zUzBGQlRDeERRVUZaVEN4TlFVRk5MRU5CUVVVc1YwRkJSaXhEUVVGT0xFTkJRWE5DVFN4SFFVRjBRaXhGUVVGYUxFTkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExHdENRVUZaU2l4aFFVRmhMRU5CUVVVc1EwRkJSaXhEUVVSWk8wRkJSWEpETEd0Q1FVRlpPMEZCUm5sQ0xFdEJRVVlzUTBGQmFFUTdRVUZKUVN4SFFWSkVMRVZCYkVRclF5eERRVFJFTDBNN1FVRkRRVHRCUVVOQk96dEJRVU5CU0N4RlFVRkJRU3hOUVVGTkxFTkJRVVVzYlVKQlFVWXNRMEZCVGl4RFFVRTRRa01zUlVGQk9VSXNRMEZCYTBNc1VVRkJiRU1zUlVGQk5FTXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVVUxUkN4UlFVRkpReXhoUVVGaExFZEJRVWRETEVsQlFVa3NRMEZCUTBNc1MwRkJUQ3hEUVVGWlRDeE5RVUZOTEVOQlFVVXNiVUpCUVVZc1EwRkJUaXhEUVVFNFFrMHNSMEZCT1VJc1JVRkJXaXhEUVVGd1FqdEJRVVZCUXl4SlFVRkJRU3huUkVGQlowUXNRMEZCUlR0QlFVTnlReXd3UWtGQmIwSktMR0ZCUVdFc1EwRkJSU3hEUVVGR0xFTkJSRWs3UVVGRmNrTXNhMEpCUVZrN1FVRkdlVUlzUzBGQlJpeERRVUZvUkR0QlFVbEJMRWRCVWtRc1JVRXZSQ3RETEVOQmVVVXZRenRCUVVOQk8wRkJRMEU3TzBGQlEwRklMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeDFRa0ZCUml4RFFVRk9MRU5CUVd0RFF5eEZRVUZzUXl4RFFVRnpReXhSUVVGMFF5eEZRVUZuUkN4VlFVRlZReXhMUVVGV0xFVkJRV2xDTzBGQlJXaEZMRkZCUVVsRExHRkJRV0VzUjBGQlIwTXNTVUZCU1N4RFFVRkRReXhMUVVGTUxFTkJRVmxNTEUxQlFVMHNRMEZCUlN4MVFrRkJSaXhEUVVGT0xFTkJRV3REVFN4SFFVRnNReXhGUVVGYUxFTkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExEaENRVUYzUWtvc1lVRkVZVHRCUVVWeVF5eHJRa0ZCYlVJc1EwRkdhMEk3UVVGSGNrTTdRVUZEUVN4MVEwRkJiME5JTEUxQlFVMHNRMEZCUlN4eFJFRkJSaXhEUVVGT0xFTkJRV2RGVFN4SFFVRm9SU3hGUVVwRE8wRkJTM0pETEhWRFFVRnZRMDRzVFVGQlRTeERRVUZGTEdkRFFVRkdMRU5CUVU0c1EwRkJNa05OTEVkQlFUTkRMRVZCVEVNN1FVRk5ja01zZVVOQlFXOURUaXhOUVVGTkxFTkJRVVVzYTBOQlFVWXNRMEZCVGl4RFFVRTJRMDBzUjBGQk4wTXNSVUZPUXp0QlFVOXlReXd3UTBGQmIwTk9MRTFCUVUwc1EwRkJSU3h0UTBGQlJpeERRVUZPTEVOQlFUaERUU3hIUVVFNVF6dEJRVkJETEV0QlFVWXNRMEZCYUVRN1FVRlRRU3hIUVdKRUxFVkJOVVVyUXl4RFFUSkdMME03UVVGRFFUdEJRVU5CT3p0QlFVTkJUaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNaMEpCUVVZc1EwRkJUaXhEUVVFeVFrTXNSVUZCTTBJc1EwRkJLMElzVVVGQkwwSXNSVUZCZVVNc1ZVRkJWVU1zUzBGQlZpeEZRVUZwUWp0QlFVVjZSQ3hSUVVGSlF5eGhRVUZoTEVkQlFVZERMRWxCUVVrc1EwRkJRME1zUzBGQlRDeERRVUZaVEN4TlFVRk5MRU5CUVVVc1owSkJRVVlzUTBGQlRpeERRVUV5UWswc1IwRkJNMElzUlVGQldpeERRVUZ3UWp0QlFVVkJReXhKUVVGQlFTeG5SRUZCWjBRc1EwRkJSVHRCUVVOeVF5eDFRa0ZCYVVKS0xHRkJSRzlDTzBGQlJYSkRMR3RDUVVGdFFpeERRVVpyUWp0QlFVZHlRenRCUVVOQkxHZERRVUVyUWs4c1UwRkJVeXhMUVVGTFZpeE5RVUZOTEVOQlFVVXNPRU5CUVVZc1EwRkJUaXhEUVVGNVJFMHNSMEZCZWtRc1JVRkJhRUlzUjBGRGJrSXNSVUZFYlVJc1IwRkZia0pPTEUxQlFVMHNRMEZCUlN3NFEwRkJSaXhEUVVGT0xFTkJRWGxFVFN4SFFVRjZSQ3hGUVU0eVFqdEJRVkZ5UXl4cFEwRkJNa0pPTEUxQlFVMHNRMEZCUlN3d1FrRkJSaXhEUVVGT0xFTkJRWEZEVFN4SFFVRnlRenRCUVZKVkxFdEJRVVlzUTBGQmFFUTdRVUZaUVN4SFFXaENSQ3hGUVRsR0swTXNRMEZuU0M5RE8wRkJRMEU3UVVGRFFUczdRVUZEUVU0c1JVRkJRVUVzVFVGQlRTeERRVUZGTEZWQlFVWXNRMEZCVGl4RFFVRnhRa01zUlVGQmNrSXNRMEZCZVVJc1VVRkJla0lzUlVGQmJVTXNWVUZCVlVNc1MwRkJWaXhGUVVGcFFqdEJRVVZ1UkN4UlFVRkpReXhoUVVGaExFZEJRVWRJTEUxQlFVMHNRMEZCUlN4VlFVRkdMRU5CUVU0c1EwRkJjVUpOTEVkQlFYSkNMRVZCUVhCQ08wRkJSVUZETEVsQlFVRkJMR2RFUVVGblJDeERRVUZGTzBGQlEzSkRMR2xDUVVGWlNpeGhRVVI1UWp0QlFVVnlReXhyUWtGQldUdEJRVVo1UWl4TFFVRkdMRU5CUVdoRU8wRkJTVUVzUjBGU1JDeEZRVzVJSzBNc1EwRTJTQzlETzBGQlEwRTdRVUZEUVRzN1FVRkRRVWdzUlVGQlFVRXNUVUZCVFN4RFFVRkZMRmRCUVVZc1EwRkJUaXhEUVVGelFrTXNSVUZCZEVJc1EwRkJNRUlzVVVGQk1VSXNSVUZCYjBNc1ZVRkJWVU1zUzBGQlZpeEZRVUZwUWp0QlFVVndSQ3hSUVVGSlF5eGhRVUZoTEVkQlFVZElMRTFCUVUwc1EwRkJSU3hYUVVGR0xFTkJRVTRzUTBGQmMwSk5MRWRCUVhSQ0xFVkJRWEJDTzBGQlJVRkRMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExHdENRVUZoU2l4aFFVUjNRanRCUVVWeVF5eHJRa0ZCV1R0QlFVWjVRaXhMUVVGR0xFTkJRV2hFTzBGQlNVRXNSMEZTUkN4RlFXaEpLME1zUTBFd1NTOURPMEZCUTBFN1FVRkRRVHM3UVVGRFFVZ3NSVUZCUVVFc1RVRkJUU3hEUVVGRkxHdENRVUZHTEVOQlFVNHNRMEZCTmtKRExFVkJRVGRDTEVOQlFXbERMRkZCUVdwRExFVkJRVEpETEZWQlFWVkRMRXRCUVZZc1JVRkJhVUk3UVVGRk0wUXNVVUZCU1VNc1lVRkJZU3hIUVVGSlNDeE5RVUZOTEVOQlFVVXNhMEpCUVVZc1EwRkJUaXhEUVVFMlFrMHNSMEZCTjBJc1JVRkJja0lzUTBGR01rUXNRMEZGUkRzN1FVRkRNVVFzVVVGQlQwc3NTMEZCU3l4RFFVRkRReXhQUVVGT0xFTkJRV1ZVTEdGQlFXWXNRMEZCUml4SlFVRjNReXhOUVVGTlFTeGhRVUZoTEVOQlFVTlZMRTFCUVdwRkxFVkJRVEpGTzBGQlF6RkZWaXhOUVVGQlFTeGhRVUZoTEVkQlFVY3NRMEZCUXl4SlFVRkVMRU5CUVdoQ08wRkJRMEU3TzBGQlEwUkpMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExIbENRVUZ2UWtvc1lVRkVhVUk3UVVGRmNrTXNhMEpCUVZrN1FVRkdlVUlzUzBGQlJpeERRVUZvUkR0QlFVbEJMRWRCVmtRc1JVRTNTU3RETEVOQk1Fb3ZRenRCUVVOQk8wRkJRMEU3TzBGQlEwRklMRVZCUVVGQkxFMUJRVTBzUTBGQlJTeFZRVUZHTEVOQlFVNHNRMEZCY1VKRExFVkJRWEpDTEVOQlFYbENMRkZCUVhwQ0xFVkJRVzFETEZWQlFWVkRMRXRCUVZZc1JVRkJhVUk3UVVGRmJrUXNVVUZCU1VNc1lVRkJZU3hIUVVGSFNDeE5RVUZOTEVOQlFVVXNWVUZCUml4RFFVRk9MRU5CUVhGQ1RTeEhRVUZ5UWl4RlFVRndRanRCUVVWQlNDeEpRVUZCUVN4aFFVRmhMRWRCUVVkRExFbEJRVWtzUTBGQlEwTXNTMEZCVEN4RFFVRlpSaXhoUVVGYUxFTkJRV2hDTzBGQlJVRkpMRWxCUVVGQkxHZEVRVUZuUkN4RFFVRkZPMEZCUTNKRExHbENRVUZYU2l4aFFVRmhMRU5CUVVVc1EwRkJSanRCUVVSaExFdEJRVVlzUTBGQmFFUTdRVUZIUVN4SFFWUkVPMEZCVjBFN08wRkJSVVJJTEUxQlFVMHNRMEZCUTJNc1VVRkJSQ3hEUVVGT0xFTkJRV2xDUXl4TFFVRnFRaXhEUVVGMVFpeFpRVUZWTzBGQlEyaERhRUlzUlVGQlFVRXNjVU5CUVhGRE8wRkJRM0pETEVOQlJrUWlMQ0p6YjNWeVkyVnpRMjl1ZEdWdWRDSTZXeUpjSW5WelpTQnpkSEpwWTNSY0lqdGNjbHh1WEhKY2JpOHFLbHh5WEc0Z0tpQkVaV1pwYm1VZ1NGUk5UQ0IxYVNCSWIyOXJjem9nYjI0Z1MyVjVWWEFnZkNCRGFHRnVaMlVnZkNBdFBpQlRiM0owSUU5eVpHVnlJQ1lnVG5WdFltVnlJRWwwWlcxeklDOGdVR0ZuWlZ4eVhHNGdLaUFxSUZkbElHRnlaU0JqYUc1aFoyVmtJR2wwSUc5dVkyVXNJR0psWTJGMWMyVWdjM1ZqYUNBZ1pXeGxiV1Z1ZEhNZ1lXeDNZWGx6SUhSb1pTQnpZVzFsWEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJSbFptbHVaVjkxYVY5b2IyOXJjMTl2Ym1ObEtDbDdYSEpjYmx4eVhHNWNkQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MEx5OGdRbTl2YTJWa0lHUmhkR1Z6WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZZbTl2YTJsdVoxOWtZWFJsSnlBcExtOXVLQ0FuWTJoaGJtZGxKeXdnWm5WdVkzUnBiMjRvSUdWMlpXNTBJQ2w3WEhKY2JseHlYRzVjZEZ4MGRtRnlJR05vWVc1blpXUmZkbUZzZFdVZ1BTQktVMDlPTG5CaGNuTmxLQ0JxVVhWbGNua29JQ2NqZDJoZlltOXZhMmx1WjE5a1lYUmxKeUFwTG5aaGJDZ3BJQ2s3WEhKY2JseHlYRzVjZEZ4MGQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgzZHBkR2hmY0dGeVlXMXpLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QzYUY5aWIyOXJhVzVuWDJSaGRHVW5PaUJqYUdGdVoyVmtYM1poYkhWbExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNHRm5aVjl1ZFcwbklDQWdJQ0FnSURvZ01TeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdSbkp2Ym5SbGJtUWdjMlZzWldOMFpXUWdaV3hsYldWdWRITWdLSE5oZG1sdVp5Qm1iM0lnWm5WMGRYSmxJSFZ6WlN3Z1lXWjBaWElnUmpVcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOTNhRjlpYjI5cmFXNW5YMlJoZEdWZmNtRmthVzhuSUNBZ09pQnFVWFZsY25rb0lDZHBibkIxZEZ0dVlXMWxQVndpZFdsZmQyaGZZbTl2YTJsdVoxOWtZWFJsWDNKaFpHbHZYQ0pkT21Ob1pXTnJaV1FuSUNrdWRtRnNLQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QxYVY5M2FGOWliMjlyYVc1blgyUmhkR1ZmYm1WNGRDY2dJQ0FnT2lCcVVYVmxjbmtvSUNjamRXbGZkMmhmWW05dmEybHVaMTlrWVhSbFgyNWxlSFFuSUNrdWRtRnNLQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QxYVY5M2FGOWliMjlyYVc1blgyUmhkR1ZmY0hKcGIzSW5JQ0FnT2lCcVVYVmxjbmtvSUNjamRXbGZkMmhmWW05dmEybHVaMTlrWVhSbFgzQnlhVzl5SnlBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZmQyaGZZbTl2YTJsdVoxOWtZWFJsWDJOb1pXTnJhVzRuSURvZ2FsRjFaWEo1S0NBbkkzVnBYM2RvWDJKdmIydHBibWRmWkdGMFpWOWphR1ZqYTJsdUp5QXBMblpoYkNncExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmRXbGZkMmhmWW05dmEybHVaMTlrWVhSbFgyTm9aV05yYjNWMEp6b2dhbEYxWlhKNUtDQW5JM1ZwWDNkb1gySnZiMnRwYm1kZlpHRjBaVjlqYUdWamEyOTFkQ2NnS1M1MllXd29LVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2RIMGdLVHRjY2x4dVhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUXZMeUJCY0hCeWIzWmxaQ0I4SUZCbGJtUnBibWNnZkNCQmJHeGNjbHh1WEhRdkx5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkR3BSZFdWeWVTZ2dKeU4zYUY5aGNIQnliM1psWkNjZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIWmhjaUJqYUdGdVoyVmtYM1poYkhWbElEMGdhbEYxWlhKNUtDQW5JM2RvWDJGd2NISnZkbVZrSnlBcExuWmhiQ2dwTzF4eVhHNWNjbHh1WEhSY2RHTm9ZVzVuWldSZmRtRnNkV1VnUFNCS1UwOU9MbkJoY25ObEtDQmphR0Z1WjJWa1gzWmhiSFZsSUNrN1hISmNibHh5WEc1Y2RGeDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXpaVzVrWDNObFlYSmphRjl5WlhGMVpYTjBYM2RwZEdoZmNHRnlZVzF6S0NCN1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkM2FGOWhjSEJ5YjNabFpDYzZJR05vWVc1blpXUmZkbUZzZFdWYklEQWdYU3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM0JoWjJWZmJuVnRKeUFnSURvZ01WeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlNBcE8xeHlYRzVjZEgwZ0tUdGNjbHh1WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhRdkx5QkxaWGwzYjNKa2MxeHlYRzVjZEM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEhKY2JseDBhbEYxWlhKNUtDQW5JM2R3WW1OZmMyVmhjbU5vWDJacFpXeGtKeUFwTG05dUtDQmNJbXRsZVhWd1hDSXNJR1oxYm1OMGFXOXVJQ2dnWlhabGJuUWdLWHRjY2x4dVhIUmNkR2xtSUNnZ01UTWdJVDA5SUdWMlpXNTBMbmRvYVdOb0lDbDdYSEpjYmx4MFhIUmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjMlZoY21Ob2FXNW5YMkZtZEdWeVgyWmxkMTl6WldOdmJtUnpLQ0FuSTNkd1ltTmZjMlZoY21Ob1gyWnBaV3hrSnlBcE8xeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBMeThnVTJWaGNtTm9hVzVuSUdGbWRHVnlJREV1TlNCelpXTnZibVJ6SUdGbWRHVnlJRXRsZVNCVmNGeHlYRzVjZEZ4MGZTQmxiSE5sSUh0Y2NseHVYSFJjZEZ4MGQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXRnlZMmhwYm1kZllXWjBaWEpmWm1WM1gzTmxZMjl1WkhNb0lDY2pkM0JpWTE5elpXRnlZMmhmWm1sbGJHUW5MQ0F3SUNrN1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdTVzF0WldScFlYUmxJSE5sWVhKamFGeHlYRzVjZEZ4MGZWeHlYRzVjZEgwZ0tUdGNjbHh1WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhRdkx5QkZlR2x6ZEdsdVp5QjhJRlJ5WVhOb0lId2dRVzU1WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZkSEpoYzJnbklDa3ViMjRvSUNkamFHRnVaMlVuTENCbWRXNWpkR2x2YmlnZ1pYWmxiblFnS1h0Y2NseHVYSEpjYmx4MFhIUjJZWElnWTJoaGJtZGxaRjkyWVd4MVpTQTlJRXBUVDA0dWNHRnljMlVvSUdwUmRXVnllU2dnSnlOM2FGOTBjbUZ6YUNjZ0tTNTJZV3dvS1NBcE8xeHlYRzVjY2x4dVhIUmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjMlZ1WkY5elpXRnlZMmhmY21WeGRXVnpkRjkzYVhSb1gzQmhjbUZ0Y3lnZ2UxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmQyaGZkSEpoYzJnbk9pQmphR0Z1WjJWa1gzWmhiSFZsV3lBd0lGMHNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZHdZV2RsWDI1MWJTYzZJREZjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RIMGdLVHRjY2x4dVhIUjlJQ2s3WEhKY2JseHlYRzVjZEM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEhKY2JseDBMeThnUVd4c0lHSnZiMnRwYm1keklId2dUbVYzSUdKdmIydHBibWR6WEhKY2JseDBMeTh0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMWNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZkMmhoZEY5aWIyOXJhVzVuY3ljZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIWmhjaUJqYUdGdVoyVmtYM1poYkhWbElEMGdTbE5QVGk1d1lYSnpaU2dnYWxGMVpYSjVLQ0FuSTNkb1gzZG9ZWFJmWW05dmEybHVaM01uSUNrdWRtRnNLQ2tnS1R0Y2NseHVYSEpjYmx4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTmxibVJmYzJWaGNtTm9YM0psY1hWbGMzUmZkMmwwYUY5d1lYSmhiWE1vSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNkb1gzZG9ZWFJmWW05dmEybHVaM01uT2lCamFHRnVaMlZrWDNaaGJIVmxXeUF3SUYwc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkd1lXZGxYMjUxYlNjNklERmNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEgwZ0tUdGNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNWNkQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MEx5OGdYQ0pEY21WaGRHbHZiaUJFWVhSbFhDSWdJQ0J2WmlCaWIyOXJhVzVuYzF4eVhHNWNkQzh2TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MGFsRjFaWEo1S0NBbkkzZG9YMjF2WkdsbWFXTmhkR2x2Ymw5a1lYUmxKeUFwTG05dUtDQW5ZMmhoYm1kbEp5d2dablZ1WTNScGIyNG9JR1YyWlc1MElDbDdYSEpjYmx4eVhHNWNkRngwZG1GeUlHTm9ZVzVuWldSZmRtRnNkV1VnUFNCS1UwOU9MbkJoY25ObEtDQnFVWFZsY25rb0lDY2pkMmhmYlc5a2FXWnBZMkYwYVc5dVgyUmhkR1VuSUNrdWRtRnNLQ2tnS1R0Y2NseHVYSEpjYmx4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTmxibVJmYzJWaGNtTm9YM0psY1hWbGMzUmZkMmwwYUY5d1lYSmhiWE1vSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNkb1gyMXZaR2xtYVdOaGRHbHZibDlrWVhSbEp6b2dZMmhoYm1kbFpGOTJZV3gxWlN4Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNCaFoyVmZiblZ0SnlBZ0lDQWdJQ0E2SURFc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEM4dklFWnliMjUwWlc1a0lITmxiR1ZqZEdWa0lHVnNaVzFsYm5SeklDaHpZWFpwYm1jZ1ptOXlJR1oxZEhWeVpTQjFjMlVzSUdGbWRHVnlJRVkxS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZmQyaGZiVzlrYVdacFkyRjBhVzl1WDJSaGRHVmZjbUZrYVc4bklDQWdPaUJxVVhWbGNua29JQ2RwYm5CMWRGdHVZVzFsUFZ3aWRXbGZkMmhmYlc5a2FXWnBZMkYwYVc5dVgyUmhkR1ZmY21Ga2FXOWNJbDA2WTJobFkydGxaQ2NnS1M1MllXd29LU3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM1ZwWDNkb1gyMXZaR2xtYVdOaGRHbHZibDlrWVhSbFgzQnlhVzl5SnlBZ0lEb2dhbEYxWlhKNUtDQW5JM1ZwWDNkb1gyMXZaR2xtYVdOaGRHbHZibDlrWVhSbFgzQnlhVzl5SnlBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuZFdsZmQyaGZiVzlrYVdacFkyRjBhVzl1WDJSaGRHVmZZMmhsWTJ0cGJpY2dPaUJxVVhWbGNua29JQ2NqZFdsZmQyaGZiVzlrYVdacFkyRjBhVzl1WDJSaGRHVmZZMmhsWTJ0cGJpY2dLUzUyWVd3b0tTeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozVnBYM2RvWDIxdlpHbG1hV05oZEdsdmJsOWtZWFJsWDJOb1pXTnJiM1YwSnpvZ2FsRjFaWEo1S0NBbkkzVnBYM2RvWDIxdlpHbG1hV05oZEdsdmJsOWtZWFJsWDJOb1pXTnJiM1YwSnlBcExuWmhiQ2dwWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUjlJQ2s3WEhKY2JseDBmU0FwTzF4eVhHNWNjbHh1WEhRdkx5MHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkQzh2SUZCaGVXMWxiblFnVTNSaGRIVnpYSEpjYmx4MEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMxY2NseHVYSFJxVVhWbGNua29JQ2NqZDJoZmNHRjVYM04wWVhSMWN5Y2dLUzV2YmlnZ0oyTm9ZVzVuWlNjc0lHWjFibU4wYVc5dUtDQmxkbVZ1ZENBcGUxeHlYRzVjY2x4dVhIUmNkSFpoY2lCamFHRnVaMlZrWDNaaGJIVmxJRDBnU2xOUFRpNXdZWEp6WlNnZ2FsRjFaWEo1S0NBbkkzZG9YM0JoZVY5emRHRjBkWE1uSUNrdWRtRnNLQ2tnS1R0Y2NseHVYSEpjYmx4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgzTmxibVJmYzJWaGNtTm9YM0psY1hWbGMzUmZkMmwwYUY5d1lYSmhiWE1vSUh0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNkb1gzQmhlVjl6ZEdGMGRYTW5PaUJqYUdGdVoyVmtYM1poYkhWbExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNHRm5aVjl1ZFcwbklDQWdJQ0FnSURvZ01TeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdSbkp2Ym5SbGJtUWdjMlZzWldOMFpXUWdaV3hsYldWdWRITWdLSE5oZG1sdVp5Qm1iM0lnWm5WMGRYSmxJSFZ6WlN3Z1lXWjBaWElnUmpVcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkMWFWOTNhRjl3WVhsZmMzUmhkSFZ6WDNKaFpHbHZKeUE2SUNnZ0tDQjFibVJsWm1sdVpXUWdQVDA5SUdwUmRXVnllU2dnSjJsdWNIVjBXMjVoYldVOVhDSjFhVjkzYUY5d1lYbGZjM1JoZEhWelgzSmhaR2x2WENKZE9tTm9aV05yWldRbklDa3VkbUZzS0NrZ0tWeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwUHlBbkoxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwT2lCcVVYVmxjbmtvSUNkcGJuQjFkRnR1WVcxbFBWd2lkV2xmZDJoZmNHRjVYM04wWVhSMWMxOXlZV1JwYjF3aVhUcGphR1ZqYTJWa0p5QXBMblpoYkNncFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDQWdJQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QxYVY5M2FGOXdZWGxmYzNSaGRIVnpYMk4xYzNSdmJTYzZJR3BSZFdWeWVTZ2dKeU4xYVY5M2FGOXdZWGxmYzNSaGRIVnpYMk4xYzNSdmJTY2dLUzUyWVd3b0tWeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlNBcE8xeHlYRzVjY2x4dVhISmNibHgwZlNBcE8xeHlYRzVjY2x4dVhIUXZMeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExWeHlYRzVjZEM4dklFMXBiaUJEYjNOMFhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUnFVWFZsY25rb0lDY2pkMmhmWTI5emRDY2dLUzV2YmlnZ0oyTm9ZVzVuWlNjc0lHWjFibU4wYVc5dUtDQmxkbVZ1ZENBcGUxeHlYRzVjY2x4dVhIUmNkSFpoY2lCamFHRnVaMlZrWDNaaGJIVmxJRDBnYWxGMVpYSjVLQ0FuSTNkb1gyTnZjM1FuSUNrdWRtRnNLQ2s3WEhKY2JseHlYRzVjZEZ4MGQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgzZHBkR2hmY0dGeVlXMXpLQ0I3WEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2QzYUY5amIzTjBKeUE2SUdOb1lXNW5aV1JmZG1Gc2RXVXNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZHdZV2RsWDI1MWJTYzZJREZjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RIMGdLVHRjY2x4dVhIUjlJQ2s3WEhKY2JseHlYRzVjZEM4dkxTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0WEhKY2JseDBMeThnVFdGNElFTnZjM1JjY2x4dVhIUXZMeTB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExWeHlYRzVjZEdwUmRXVnllU2dnSnlOM2FGOWpiM04wTWljZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIWmhjaUJqYUdGdVoyVmtYM1poYkhWbElEMGdhbEYxWlhKNUtDQW5JM2RvWDJOdmMzUXlKeUFwTG5aaGJDZ3BPMXh5WEc1Y2NseHVYSFJjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5Z2dlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5kMmhmWTI5emRESW5JRG9nWTJoaGJtZGxaRjkyWVd4MVpTeGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozQmhaMlZmYm5WdEp6b2dNVnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2RIMGdLVHRjY2x4dVhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUXZMeUJDYjI5cmFXNW5JSEpsYzI5MWNtTmxjMXh5WEc1Y2RDOHZMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdFhISmNibHgwYWxGMVpYSjVLQ0FuSTNkb1gySnZiMnRwYm1kZmRIbHdaU2NnS1M1dmJpZ2dKMk5vWVc1blpTY3NJR1oxYm1OMGFXOXVLQ0JsZG1WdWRDQXBlMXh5WEc1Y2NseHVYSFJjZEhaaGNpQmphR0Z1WjJWa1gzWmhiSFZsSUQwZ0lHcFJkV1Z5ZVNnZ0p5TjNhRjlpYjI5cmFXNW5YM1I1Y0dVbklDa3VkbUZzS0NrN1hIUmNkQzh2SUdsMEozTWdaMlYwSUdGeklHRnljbUY1WEhKY2JseDBYSFJwWmlBb0lDZ2dRWEp5WVhrdWFYTkJjbkpoZVNnZ1kyaGhibWRsWkY5MllXeDFaU0FwSUNrZ0ppWWdLQ0F3SUQwOVBTQmphR0Z1WjJWa1gzWmhiSFZsTG14bGJtZDBhQ0FwSUNsN1hISmNibHgwWEhSY2RHTm9ZVzVuWldSZmRtRnNkV1VnUFNCYkp5MHhKMTA3WEhKY2JseDBYSFI5WEhKY2JseDBYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmZDJsMGFGOXdZWEpoYlhNb0lIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozZG9YMkp2YjJ0cGJtZGZkSGx3WlNjZ09pQmphR0Z1WjJWa1gzWmhiSFZsTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuY0dGblpWOXVkVzBuT2lBeFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFI5SUNrN1hISmNibHgwZlNBcE8xeHlYRzVjY2x4dVhISmNibHgwTHk4dExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzFjY2x4dVhIUXZMeUJUYjNKMGFXNW5YSEpjYmx4MEx5OHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMxY2NseHVYSFJxVVhWbGNua29JQ2NqZDJoZmMyOXlkQ2NnS1M1dmJpZ2dKMk5vWVc1blpTY3NJR1oxYm1OMGFXOXVLQ0JsZG1WdWRDQXBlMXh5WEc1Y2NseHVYSFJjZEhaaGNpQmphR0Z1WjJWa1gzWmhiSFZsSUQwZ2FsRjFaWEo1S0NBbkkzZG9YM052Y25RbklDa3VkbUZzS0NrN1hISmNibHh5WEc1Y2RGeDBZMmhoYm1kbFpGOTJZV3gxWlNBOUlFcFRUMDR1Y0dGeWMyVW9JR05vWVc1blpXUmZkbUZzZFdVZ0tUdGNjbHh1WEhKY2JseDBYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmZDJsMGFGOXdZWEpoYlhNb0lIdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozZG9YM052Y25Rbk9pQmphR0Z1WjJWa1gzWmhiSFZsV3lBd0lGMWNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEgwZ0tUdGNjbHh1WEhSOUlDazdYSEpjYmx4eVhHNTlYSEpjYmx4eVhHNXFVWFZsY25rb1pHOWpkVzFsYm5RcExuSmxZV1I1S0daMWJtTjBhVzl1S0NsN1hISmNibHgwZDNCaVkxOWhhbmhmWW05dmEybHVaMTlrWldacGJtVmZkV2xmYUc5dmEzTmZiMjVqWlNncE8xeHlYRzU5S1R0Y2NseHVJbDBzSW1acGJHVWlPaUpwYm1Oc2RXUmxjeTl3WVdkbExXSnZiMnRwYm1kekwxOXZkWFF2WW05dmEybHVaM05mWDJodmIydHpMbXB6SW4wPVxuIl0sIm5hbWVzIjpbIndwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzX29uY2UiLCJqUXVlcnkiLCJvbiIsImV2ZW50IiwiY2hhbmdlZF92YWx1ZSIsIkpTT04iLCJwYXJzZSIsInZhbCIsIndwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyIsIndoX2Jvb2tpbmdfZGF0ZSIsInBhZ2VfbnVtIiwidWlfd2hfYm9va2luZ19kYXRlX3JhZGlvIiwidWlfd2hfYm9va2luZ19kYXRlX25leHQiLCJ1aV93aF9ib29raW5nX2RhdGVfcHJpb3IiLCJ1aV93aF9ib29raW5nX2RhdGVfY2hlY2tpbiIsInVpX3doX2Jvb2tpbmdfZGF0ZV9jaGVja291dCIsIndoX2FwcHJvdmVkIiwid2hpY2giLCJ3cGJjX2FqeF9ib29raW5nX3NlYXJjaGluZ19hZnRlcl9mZXdfc2Vjb25kcyIsIndoX3RyYXNoIiwid2hfd2hhdF9ib29raW5ncyIsIndoX21vZGlmaWNhdGlvbl9kYXRlIiwidWlfd2hfbW9kaWZpY2F0aW9uX2RhdGVfcmFkaW8iLCJ1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9wcmlvciIsInVpX3doX21vZGlmaWNhdGlvbl9kYXRlX2NoZWNraW4iLCJ1aV93aF9tb2RpZmljYXRpb25fZGF0ZV9jaGVja291dCIsIndoX3BheV9zdGF0dXMiLCJ1aV93aF9wYXlfc3RhdHVzX3JhZGlvIiwidW5kZWZpbmVkIiwidWlfd2hfcGF5X3N0YXR1c19jdXN0b20iLCJ3aF9jb3N0Iiwid2hfY29zdDIiLCJBcnJheSIsImlzQXJyYXkiLCJsZW5ndGgiLCJ3aF9ib29raW5nX3R5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
includes/page-bookings/_out/bookings__listing.js ADDED
@@ -0,0 +1,502 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+
3
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
4
+
5
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
6
+
7
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
8
+
9
+ function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
10
+
11
+ jQuery('body').on({
12
+ 'touchmove': function touchmove(e) {
13
+ jQuery('.timespartly').each(function (index) {
14
+ var td_el = jQuery(this).get(0);
15
+
16
+ if (undefined != td_el._tippy) {
17
+ var instance = td_el._tippy;
18
+ instance.hide();
19
+ }
20
+ });
21
+ }
22
+ });
23
+ /**
24
+ * Request Object
25
+ * Here we can define Search parameters and Update it later, when some parameter was changed
26
+ *
27
+ */
28
+
29
+ var wpbc_ajx_booking_listing = function (obj, $) {
30
+ // Secure parameters for Ajax ------------------------------------------------------------------------------------
31
+ var p_secure = obj.security_obj = obj.security_obj || {
32
+ user_id: 0,
33
+ nonce: '',
34
+ locale: ''
35
+ };
36
+
37
+ obj.set_secure_param = function (param_key, param_val) {
38
+ p_secure[param_key] = param_val;
39
+ };
40
+
41
+ obj.get_secure_param = function (param_key) {
42
+ return p_secure[param_key];
43
+ }; // Listing Search parameters ------------------------------------------------------------------------------------
44
+
45
+
46
+ var p_listing = obj.search_request_obj = obj.search_request_obj || {
47
+ sort: "booking_id",
48
+ sort_type: "DESC",
49
+ page_num: 1,
50
+ page_items_count: 10,
51
+ create_date: "",
52
+ keyword: "",
53
+ source: ""
54
+ };
55
+
56
+ obj.search_set_all_params = function (request_param_obj) {
57
+ p_listing = request_param_obj;
58
+ };
59
+
60
+ obj.search_get_all_params = function () {
61
+ return p_listing;
62
+ };
63
+
64
+ obj.search_get_param = function (param_key) {
65
+ return p_listing[param_key];
66
+ };
67
+
68
+ obj.search_set_param = function (param_key, param_val) {
69
+ // if ( Array.isArray( param_val ) ){
70
+ // param_val = JSON.stringify( param_val );
71
+ // }
72
+ p_listing[param_key] = param_val;
73
+ };
74
+
75
+ obj.search_set_params_arr = function (params_arr) {
76
+ _.each(params_arr, function (p_val, p_key, p_data) {
77
+ // Define different Search parameters for request
78
+ this.search_set_param(p_key, p_val);
79
+ });
80
+ }; // Other parameters ------------------------------------------------------------------------------------
81
+
82
+
83
+ var p_other = obj.other_obj = obj.other_obj || {};
84
+
85
+ obj.set_other_param = function (param_key, param_val) {
86
+ p_other[param_key] = param_val;
87
+ };
88
+
89
+ obj.get_other_param = function (param_key) {
90
+ return p_other[param_key];
91
+ };
92
+
93
+ return obj;
94
+ }(wpbc_ajx_booking_listing || {}, jQuery);
95
+ /**
96
+ * Ajax ------------------------------------------------------------------------------------------------------ */
97
+
98
+ /**
99
+ * Send Ajax search request
100
+ * for searching specific Keyword and other params
101
+ */
102
+
103
+
104
+ function wpbc_ajx_booking_ajax_search_request() {
105
+ console.groupCollapsed('AJX_BOOKING_LISTING');
106
+ console.log(' == Before Ajax Send - search_get_all_params() == ', wpbc_ajx_booking_listing.search_get_all_params());
107
+ wpbc_booking_listing_reload_button__spin_start();
108
+ /*
109
+ //FixIn: forVideo
110
+ if ( ! is_this_action ){
111
+ //wpbc_ajx_booking__actual_listing__hide();
112
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
113
+ '<div style="width:100%;text-align: center;" id="wpbc_loading_section"><span class="wpbc_icn_autorenew wpbc_spin"></span></div>'
114
+ + jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html()
115
+ );
116
+ if ( 'function' === typeof (jQuery( '#wpbc_loading_section' ).wpbc_my_modal) ){ //FixIn: 9.0.1.5
117
+ jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'show' );
118
+ } else {
119
+ alert( 'Warning! Booking Calendar. Its seems that you have deactivated loading of Bootstrap JS files at Booking Settings General page in Advanced section.' )
120
+ }
121
+ }
122
+ is_this_action = false;
123
+ */
124
+ // Start Ajax
125
+
126
+ jQuery.post(wpbc_global1.wpbc_ajaxurl, {
127
+ action: 'WPBC_AJX_BOOKING_LISTING',
128
+ wpbc_ajx_user_id: wpbc_ajx_booking_listing.get_secure_param('user_id'),
129
+ nonce: wpbc_ajx_booking_listing.get_secure_param('nonce'),
130
+ wpbc_ajx_locale: wpbc_ajx_booking_listing.get_secure_param('locale'),
131
+ search_params: wpbc_ajx_booking_listing.search_get_all_params()
132
+ },
133
+ /**
134
+ * S u c c e s s
135
+ *
136
+ * @param response_data - its object returned from Ajax - class-live-searcg.php
137
+ * @param textStatus - 'success'
138
+ * @param jqXHR - Object
139
+ */
140
+ function (response_data, textStatus, jqXHR) {
141
+ //FixIn: forVideo
142
+ //jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'hide' );
143
+ console.log(' == Response WPBC_AJX_BOOKING_LISTING == ', response_data);
144
+ console.groupEnd(); // Probably Error
145
+
146
+ if (_typeof(response_data) !== 'object' || response_data === null) {
147
+ jQuery('#wh_sort_selector').hide();
148
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">' + response_data + '</div>');
149
+ return;
150
+ } // Reload page, after filter toolbar was reseted
151
+
152
+
153
+ if (undefined != response_data['ajx_cleaned_params'] && 'reset_done' === response_data['ajx_cleaned_params']['ui_reset']) {
154
+ location.reload();
155
+ return;
156
+ } // Show listing
157
+
158
+
159
+ if (response_data['ajx_count'] > 0) {
160
+ wpbc_ajx_booking_show_listing(response_data['ajx_items'], response_data['ajx_search_params'], response_data['ajx_booking_resources']);
161
+ wpbc_pagination_echo(wpbc_ajx_booking_listing.get_other_param('pagination_container'), {
162
+ 'page_active': response_data['ajx_search_params']['page_num'],
163
+ 'pages_count': Math.ceil(response_data['ajx_count'] / response_data['ajx_search_params']['page_items_count']),
164
+ 'page_items_count': response_data['ajx_search_params']['page_items_count'],
165
+ 'sort_type': response_data['ajx_search_params']['sort_type']
166
+ });
167
+ wpbc_ajx_booking_define_ui_hooks(); // Redefine Hooks, because we show new DOM elements
168
+ } else {
169
+ wpbc_ajx_booking__actual_listing__hide();
170
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice0 notice-warning0" style="text-align:center;margin-left:-50px;">' + '<strong>' + 'No results found for current filter options...' + '</strong>' + //'<strong>' + 'No results found...' + '</strong>' +
171
+ '</div>');
172
+ } // Update new booking count
173
+
174
+
175
+ if (undefined !== response_data['ajx_new_bookings_count']) {
176
+ var ajx_new_bookings_count = parseInt(response_data['ajx_new_bookings_count']);
177
+
178
+ if (ajx_new_bookings_count > 0) {
179
+ jQuery('.wpbc_badge_count').show();
180
+ }
181
+
182
+ jQuery('.bk-update-count').html(ajx_new_bookings_count);
183
+ }
184
+
185
+ wpbc_booking_listing_reload_button__spin_pause();
186
+ jQuery('#ajax_respond').html(response_data); // For ability to show response, add such DIV element to page
187
+ }).fail(function (jqXHR, textStatus, errorThrown) {
188
+ if (window.console && window.console.log) {
189
+ console.log('Ajax_Error', jqXHR, textStatus, errorThrown);
190
+ }
191
+
192
+ jQuery('#wh_sort_selector').hide();
193
+ var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown;
194
+
195
+ if (jqXHR.responseText) {
196
+ error_message += jqXHR.responseText;
197
+ }
198
+
199
+ error_message = error_message.replace(/\n/g, "<br />");
200
+ wpbc_ajx_booking_show_message(error_message);
201
+ }) // .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
202
+ // .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
203
+ ; // End Ajax
204
+ }
205
+ /**
206
+ * Views ----------------------------------------------------------------------------------------------------- */
207
+
208
+ /**
209
+ * Show Listing Table and define gMail checkbox hooks
210
+ *
211
+ * @param json_items_arr - JSON object with Items
212
+ * @param json_search_params - JSON object with Search
213
+ */
214
+
215
+
216
+ function wpbc_ajx_booking_show_listing(json_items_arr, json_search_params, json_booking_resources) {
217
+ wpbc_ajx_define_templates__resource_manipulation(json_items_arr, json_search_params, json_booking_resources); //console.log( 'json_items_arr' , json_items_arr, json_search_params );
218
+
219
+ jQuery('#wh_sort_selector').css("display", "flex");
220
+ var list_header_tpl = wp.template('wpbc_ajx_booking_list_header');
221
+ var list_row_tpl = wp.template('wpbc_ajx_booking_list_row'); // Header
222
+
223
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html(list_header_tpl()); // Body
224
+
225
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).append('<div class="wpbc_selectable_body"></div>'); // R o w s
226
+
227
+ console.groupCollapsed('LISTING_ROWS'); // LISTING_ROWS
228
+
229
+ _.each(json_items_arr, function (p_val, p_key, p_data) {
230
+ if ('undefined' !== typeof json_search_params['keyword']) {
231
+ // Parameter for marking keyword with different color in a list
232
+ p_val['__search_request_keyword__'] = json_search_params['keyword'];
233
+ } else {
234
+ p_val['__search_request_keyword__'] = '';
235
+ }
236
+
237
+ p_val['booking_resources'] = json_booking_resources;
238
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container') + ' .wpbc_selectable_body').append(list_row_tpl(p_val));
239
+ });
240
+
241
+ console.groupEnd(); // LISTING_ROWS
242
+
243
+ wpbc_define_gmail_checkbox_selection(jQuery); // Redefine Hooks for clicking at Checkboxes
244
+ }
245
+ /**
246
+ * Define template for changing booking resources & update it each time, when listing updating, useful for showing actual booking resources.
247
+ *
248
+ * @param json_items_arr - JSON object with Items
249
+ * @param json_search_params - JSON object with Search
250
+ * @param json_booking_resources - JSON object with Resources
251
+ */
252
+
253
+
254
+ function wpbc_ajx_define_templates__resource_manipulation(json_items_arr, json_search_params, json_booking_resources) {
255
+ // Change booking resource
256
+ var change_booking_resource_tpl = wp.template('wpbc_ajx_change_booking_resource');
257
+ jQuery('#wpbc_hidden_template__change_booking_resource').html(change_booking_resource_tpl({
258
+ 'ajx_search_params': json_search_params,
259
+ 'ajx_booking_resources': json_booking_resources
260
+ })); // Duplicate booking resource
261
+
262
+ var duplicate_booking_to_other_resource_tpl = wp.template('wpbc_ajx_duplicate_booking_to_other_resource');
263
+ jQuery('#wpbc_hidden_template__duplicate_booking_to_other_resource').html(duplicate_booking_to_other_resource_tpl({
264
+ 'ajx_search_params': json_search_params,
265
+ 'ajx_booking_resources': json_booking_resources
266
+ }));
267
+ }
268
+ /**
269
+ * Show just message instead of listing and hide pagination
270
+ */
271
+
272
+
273
+ function wpbc_ajx_booking_show_message(message) {
274
+ wpbc_ajx_booking__actual_listing__hide();
275
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">' + message + '</div>');
276
+ }
277
+ /**
278
+ * H o o k s - its Action/Times when need to re-Render Views ----------------------------------------------- */
279
+
280
+ /**
281
+ * Send Ajax Search Request after Updating search request parameters
282
+ *
283
+ * @param params_arr
284
+ */
285
+
286
+
287
+ function wpbc_ajx_booking_send_search_request_with_params(params_arr) {
288
+ // Define different Search parameters for request
289
+ _.each(params_arr, function (p_val, p_key, p_data) {
290
+ //console.log( 'Request for: ', p_key, p_val );
291
+ wpbc_ajx_booking_listing.search_set_param(p_key, p_val);
292
+ }); // Send Ajax Request
293
+
294
+
295
+ wpbc_ajx_booking_ajax_search_request();
296
+ }
297
+ /**
298
+ * Search request for "Page Number"
299
+ * @param page_number int
300
+ */
301
+
302
+
303
+ function wpbc_ajx_booking_pagination_click(page_number) {
304
+ wpbc_ajx_booking_send_search_request_with_params({
305
+ 'page_num': page_number
306
+ });
307
+ }
308
+ /**
309
+ * Keyword Searching ----------------------------------------------------------------------------------------- */
310
+
311
+ /**
312
+ * Search request for "Keyword", also set current page to 1
313
+ *
314
+ * @param element_id - HTML ID of element, where was entered keyword
315
+ */
316
+
317
+
318
+ function wpbc_ajx_booking_send_search_request_for_keyword(element_id) {
319
+ // We need to Reset page_num to 1 with each new search, because we can be at page #4, but after new search we can have totally only 1 page
320
+ wpbc_ajx_booking_send_search_request_with_params({
321
+ 'keyword': jQuery(element_id).val(),
322
+ 'page_num': 1
323
+ });
324
+ }
325
+ /**
326
+ * Send search request after few seconds (usually after 1,5 sec)
327
+ * Closure function. Its useful, for do not send too many Ajax requests, when someone make fast typing.
328
+ */
329
+
330
+
331
+ var wpbc_ajx_booking_searching_after_few_seconds = function () {
332
+ var closed_timer = 0;
333
+ return function (element_id, timer_delay) {
334
+ // Get default value of "timer_delay", if parameter was not passed into the function.
335
+ timer_delay = typeof timer_delay !== 'undefined' ? timer_delay : 1500;
336
+ clearTimeout(closed_timer); // Clear previous timer
337
+ // Start new Timer
338
+
339
+ closed_timer = setTimeout(wpbc_ajx_booking_send_search_request_for_keyword.bind(null, element_id), timer_delay);
340
+ };
341
+ }();
342
+ /**
343
+ * Define Dynamic Hooks (like pagination click, which renew each time with new listing showing) ------------- */
344
+
345
+ /**
346
+ * Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
347
+ * We are hcnaged it each time, when showing new listing, because DOM elements chnaged
348
+ */
349
+
350
+
351
+ function wpbc_ajx_booking_define_ui_hooks() {
352
+ if ('function' === typeof wpbc_define_tippy_tooltips) {
353
+ wpbc_define_tippy_tooltips('.wpbc_listing_container ');
354
+ }
355
+
356
+ wpbc_ajx_booking__ui_define__locale();
357
+ wpbc_ajx_booking__ui_define__remark(); // Items Per Page
358
+
359
+ jQuery('.wpbc_items_per_page').on('change', function (event) {
360
+ wpbc_ajx_booking_send_search_request_with_params({
361
+ 'page_items_count': jQuery(this).val(),
362
+ 'page_num': 1
363
+ });
364
+ }); // Sorting
365
+
366
+ jQuery('.wpbc_items_sort_type').on('change', function (event) {
367
+ wpbc_ajx_booking_send_search_request_with_params({
368
+ 'sort_type': jQuery(this).val()
369
+ });
370
+ });
371
+ }
372
+ /**
373
+ * Show / Hide Listing --------------------------------------------------------------------------------------- */
374
+
375
+ /**
376
+ * Show Listing Table - Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
377
+ */
378
+
379
+
380
+ function wpbc_ajx_booking__actual_listing__show() {
381
+ wpbc_ajx_booking_ajax_search_request(); // Send Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
382
+ }
383
+ /**
384
+ * Hide Listing Table ( and Pagination )
385
+ */
386
+
387
+
388
+ function wpbc_ajx_booking__actual_listing__hide() {
389
+ jQuery('#wh_sort_selector').hide();
390
+ jQuery(wpbc_ajx_booking_listing.get_other_param('listing_container')).html('');
391
+ jQuery(wpbc_ajx_booking_listing.get_other_param('pagination_container')).html('');
392
+ }
393
+ /**
394
+ * Support functions for Content Template data --------------------------------------------------------------- */
395
+
396
+ /**
397
+ * Highlight strings,
398
+ * by inserting <span class="fieldvalue name fieldsearchvalue">...</span> html elements into the string.
399
+ * @param {string} booking_details - Source string
400
+ * @param {string} booking_keyword - Keyword to highlight
401
+ * @returns {string}
402
+ */
403
+
404
+
405
+ function wpbc_get_highlighted_search_keyword(booking_details, booking_keyword) {
406
+ booking_keyword = booking_keyword.trim().toLowerCase();
407
+
408
+ if (0 == booking_keyword.length) {
409
+ return booking_details;
410
+ } // Highlight substring withing HTML tags in "Content of booking fields data" -- e.g. starting from > and ending with <
411
+
412
+
413
+ var keywordRegex = new RegExp("fieldvalue[^<>]*>([^<]*".concat(booking_keyword, "[^<]*)"), 'gim'); //let matches = [...booking_details.toLowerCase().matchAll( keywordRegex )];
414
+
415
+ var matches = booking_details.toLowerCase().matchAll(keywordRegex);
416
+ matches = Array.from(matches);
417
+ var strings_arr = [];
418
+ var pos_previous = 0;
419
+ var search_pos_start;
420
+ var search_pos_end;
421
+
422
+ var _iterator = _createForOfIteratorHelper(matches),
423
+ _step;
424
+
425
+ try {
426
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
427
+ var match = _step.value;
428
+ search_pos_start = match.index + match[0].toLowerCase().indexOf('>', 0) + 1;
429
+ strings_arr.push(booking_details.substr(pos_previous, search_pos_start - pos_previous));
430
+ search_pos_end = booking_details.toLowerCase().indexOf('<', search_pos_start);
431
+ strings_arr.push('<span class="fieldvalue name fieldsearchvalue">' + booking_details.substr(search_pos_start, search_pos_end - search_pos_start) + '</span>');
432
+ pos_previous = search_pos_end;
433
+ }
434
+ } catch (err) {
435
+ _iterator.e(err);
436
+ } finally {
437
+ _iterator.f();
438
+ }
439
+
440
+ strings_arr.push(booking_details.substr(pos_previous, booking_details.length - pos_previous));
441
+ return strings_arr.join('');
442
+ }
443
+ /**
444
+ * Convert special HTML characters from: &amp; -> &
445
+ *
446
+ * @param text
447
+ * @returns {*}
448
+ */
449
+
450
+
451
+ function wpbc_decode_HTML_entities(text) {
452
+ var textArea = document.createElement('textarea');
453
+ textArea.innerHTML = text;
454
+ return textArea.value;
455
+ }
456
+ /**
457
+ * Convert TO special HTML characters from: & -> &amp;
458
+ *
459
+ * @param text
460
+ * @returns {*}
461
+ */
462
+
463
+
464
+ function wpbc_encode_HTML_entities(text) {
465
+ var textArea = document.createElement('textarea');
466
+ textArea.innerText = text;
467
+ return textArea.innerHTML;
468
+ }
469
+ /**
470
+ * Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
471
+
472
+ /**
473
+ * Spin button in Filter toolbar - Start
474
+ */
475
+
476
+
477
+ function wpbc_booking_listing_reload_button__spin_start() {
478
+ jQuery('#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').removeClass('wpbc_animation_pause');
479
+ }
480
+ /**
481
+ * Spin button in Filter toolbar - Pause
482
+ */
483
+
484
+
485
+ function wpbc_booking_listing_reload_button__spin_pause() {
486
+ jQuery('#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').addClass('wpbc_animation_pause');
487
+ }
488
+ /**
489
+ * Spin button in Filter toolbar - is Spinning ?
490
+ *
491
+ * @returns {boolean}
492
+ */
493
+
494
+
495
+ function wpbc_booking_listing_reload_button__is_spin() {
496
+ if (jQuery('#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').hasClass('wpbc_animation_pause')) {
497
+ return true;
498
+ } else {
499
+ return false;
500
+ }
501
+ }
502
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX3NyYy9ib29raW5nc19fbGlzdGluZy5qcyJdLCJuYW1lcyI6WyJqUXVlcnkiLCJvbiIsImUiLCJlYWNoIiwiaW5kZXgiLCJ0ZF9lbCIsImdldCIsInVuZGVmaW5lZCIsIl90aXBweSIsImluc3RhbmNlIiwiaGlkZSIsIndwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZyIsIm9iaiIsIiQiLCJwX3NlY3VyZSIsInNlY3VyaXR5X29iaiIsInVzZXJfaWQiLCJub25jZSIsImxvY2FsZSIsInNldF9zZWN1cmVfcGFyYW0iLCJwYXJhbV9rZXkiLCJwYXJhbV92YWwiLCJnZXRfc2VjdXJlX3BhcmFtIiwicF9saXN0aW5nIiwic2VhcmNoX3JlcXVlc3Rfb2JqIiwic29ydCIsInNvcnRfdHlwZSIsInBhZ2VfbnVtIiwicGFnZV9pdGVtc19jb3VudCIsImNyZWF0ZV9kYXRlIiwia2V5d29yZCIsInNvdXJjZSIsInNlYXJjaF9zZXRfYWxsX3BhcmFtcyIsInJlcXVlc3RfcGFyYW1fb2JqIiwic2VhcmNoX2dldF9hbGxfcGFyYW1zIiwic2VhcmNoX2dldF9wYXJhbSIsInNlYXJjaF9zZXRfcGFyYW0iLCJzZWFyY2hfc2V0X3BhcmFtc19hcnIiLCJwYXJhbXNfYXJyIiwiXyIsInBfdmFsIiwicF9rZXkiLCJwX2RhdGEiLCJwX290aGVyIiwib3RoZXJfb2JqIiwic2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtIiwid3BiY19hanhfYm9va2luZ19hamF4X3NlYXJjaF9yZXF1ZXN0IiwiY29uc29sZSIsImdyb3VwQ29sbGFwc2VkIiwibG9nIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCIsInBvc3QiLCJ3cGJjX2dsb2JhbDEiLCJ3cGJjX2FqYXh1cmwiLCJhY3Rpb24iLCJ3cGJjX2FqeF91c2VyX2lkIiwid3BiY19hanhfbG9jYWxlIiwic2VhcmNoX3BhcmFtcyIsInJlc3BvbnNlX2RhdGEiLCJ0ZXh0U3RhdHVzIiwianFYSFIiLCJncm91cEVuZCIsImh0bWwiLCJsb2NhdGlvbiIsInJlbG9hZCIsIndwYmNfYWp4X2Jvb2tpbmdfc2hvd19saXN0aW5nIiwid3BiY19wYWdpbmF0aW9uX2VjaG8iLCJNYXRoIiwiY2VpbCIsIndwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzIiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX2hpZGUiLCJhanhfbmV3X2Jvb2tpbmdzX2NvdW50IiwicGFyc2VJbnQiLCJzaG93Iiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSIsImZhaWwiLCJlcnJvclRocm93biIsIndpbmRvdyIsImVycm9yX21lc3NhZ2UiLCJyZXNwb25zZVRleHQiLCJyZXBsYWNlIiwid3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UiLCJqc29uX2l0ZW1zX2FyciIsImpzb25fc2VhcmNoX3BhcmFtcyIsImpzb25fYm9va2luZ19yZXNvdXJjZXMiLCJ3cGJjX2FqeF9kZWZpbmVfdGVtcGxhdGVzX19yZXNvdXJjZV9tYW5pcHVsYXRpb24iLCJjc3MiLCJsaXN0X2hlYWRlcl90cGwiLCJ3cCIsInRlbXBsYXRlIiwibGlzdF9yb3dfdHBsIiwiYXBwZW5kIiwid3BiY19kZWZpbmVfZ21haWxfY2hlY2tib3hfc2VsZWN0aW9uIiwiY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfdHBsIiwiZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfdHBsIiwibWVzc2FnZSIsIndwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyIsIndwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayIsInBhZ2VfbnVtYmVyIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkIiwiZWxlbWVudF9pZCIsInZhbCIsIndwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzIiwiY2xvc2VkX3RpbWVyIiwidGltZXJfZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYmluZCIsIndwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzIiwid3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyayIsImV2ZW50Iiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3ciLCJ3cGJjX2dldF9oaWdobGlnaHRlZF9zZWFyY2hfa2V5d29yZCIsImJvb2tpbmdfZGV0YWlscyIsImJvb2tpbmdfa2V5d29yZCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsImxlbmd0aCIsImtleXdvcmRSZWdleCIsIlJlZ0V4cCIsIm1hdGNoZXMiLCJtYXRjaEFsbCIsIkFycmF5IiwiZnJvbSIsInN0cmluZ3NfYXJyIiwicG9zX3ByZXZpb3VzIiwic2VhcmNoX3Bvc19zdGFydCIsInNlYXJjaF9wb3NfZW5kIiwibWF0Y2giLCJpbmRleE9mIiwicHVzaCIsInN1YnN0ciIsImpvaW4iLCJ3cGJjX2RlY29kZV9IVE1MX2VudGl0aWVzIiwidGV4dCIsInRleHRBcmVhIiwiZG9jdW1lbnQiLCJjcmVhdGVFbGVtZW50IiwiaW5uZXJIVE1MIiwidmFsdWUiLCJ3cGJjX2VuY29kZV9IVE1MX2VudGl0aWVzIiwiaW5uZXJUZXh0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4iLCJoYXNDbGFzcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7QUFFQUEsTUFBTSxDQUFDLE1BQUQsQ0FBTixDQUFlQyxFQUFmLENBQWtCO0FBQ2QsZUFBYSxtQkFBU0MsQ0FBVCxFQUFZO0FBRTNCRixJQUFBQSxNQUFNLENBQUUsY0FBRixDQUFOLENBQXlCRyxJQUF6QixDQUErQixVQUFXQyxLQUFYLEVBQWtCO0FBRWhELFVBQUlD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QixDQUFQO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNDLHlCQUFULENBQW9DQyxJQUFwQyxFQUEwQztBQUN6QyxNQUFJQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF3QixVQUF4QixDQUFmO0FBQ0FGLEVBQUFBLFFBQVEsQ0FBQ0csU0FBVCxHQUFxQkosSUFBckI7QUFDQSxTQUFPQyxRQUFRLENBQUNJLEtBQWhCO0FBQ0E7QUFFRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNDLHlCQUFULENBQW1DTixJQUFuQyxFQUF5QztBQUN2QyxNQUFJQyxRQUFRLEdBQUdDLFFBQVEsQ0FBQ0MsYUFBVCxDQUF1QixVQUF2QixDQUFmO0FBQ0FGLEVBQUFBLFFBQVEsQ0FBQ00sU0FBVCxHQUFxQlAsSUFBckI7QUFDQSxTQUFPQyxRQUFRLENBQUNHLFNBQWhCO0FBQ0Q7QUFHRDtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3pGLDhDQUFULEdBQXlEO0FBQ3hEbkQsRUFBQUEsTUFBTSxDQUFFLDBEQUFGLENBQU4sQ0FBb0VnSixXQUFwRSxDQUFpRixzQkFBakY7QUFDQTtBQUVEO0FBQ0E7QUFDQTs7O0FBQ0EsU0FBU3JFLDhDQUFULEdBQXlEO0FBQ3hEM0UsRUFBQUEsTUFBTSxDQUFFLDBEQUFGLENBQU4sQ0FBcUVpSixRQUFyRSxDQUErRSxzQkFBL0U7QUFDQTtBQUVEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUNBLFNBQVNDLDJDQUFULEdBQXNEO0FBQ2xELE1BQUtsSixNQUFNLENBQUUsMERBQUYsQ0FBTixDQUFxRW1KLFFBQXJFLENBQStFLHNCQUEvRSxDQUFMLEVBQThHO0FBQ2hILFdBQU8sSUFBUDtBQUNBLEdBRkUsTUFFSTtBQUNOLFdBQU8sS0FBUDtBQUNBO0FBQ0QiLCJzb3VyY2VzQ29udGVudCI6WyJcInVzZSBzdHJpY3RcIjtcclxuXHJcbmpRdWVyeSgnYm9keScpLm9uKHtcclxuICAgICd0b3VjaG1vdmUnOiBmdW5jdGlvbihlKSB7XHJcblxyXG5cdFx0alF1ZXJ5KCAnLnRpbWVzcGFydGx5JyApLmVhY2goIGZ1bmN0aW9uICggaW5kZXggKXtcclxuXHJcblx0XHRcdHZhciB0ZF9lbCA9IGpRdWVyeSggdGhpcyApLmdldCggMCApO1xyXG5cclxuXHRcdFx0aWYgKCAodW5kZWZpbmVkICE9IHRkX2VsLl90aXBweSkgKXtcclxuXHJcblx0XHRcdFx0dmFyIGluc3RhbmNlID0gdGRfZWwuX3RpcHB5O1xyXG5cdFx0XHRcdGluc3RhbmNlLmhpZGUoKTtcclxuXHRcdFx0fVxyXG5cdFx0fSApO1xyXG5cdH1cclxufSk7XHJcblxyXG4vKipcclxuICogUmVxdWVzdCBPYmplY3RcclxuICogSGVyZSB3ZSBjYW4gIGRlZmluZSBTZWFyY2ggcGFyYW1ldGVycyBhbmQgVXBkYXRlIGl0IGxhdGVyLCAgd2hlbiAgc29tZSBwYXJhbWV0ZXIgd2FzIGNoYW5nZWRcclxuICpcclxuICovXHJcbnZhciB3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcgPSAoZnVuY3Rpb24gKCBvYmosICQpIHtcclxuXHJcblx0Ly8gU2VjdXJlIHBhcmFtZXRlcnMgZm9yIEFqYXhcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX3NlY3VyZSA9IG9iai5zZWN1cml0eV9vYmogPSBvYmouc2VjdXJpdHlfb2JqIHx8IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0dXNlcl9pZDogMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bm9uY2UgIDogJycsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGxvY2FsZSA6ICcnXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQgIH07XHJcblxyXG5cdG9iai5zZXRfc2VjdXJlX3BhcmFtID0gZnVuY3Rpb24gKCBwYXJhbV9rZXksIHBhcmFtX3ZhbCApIHtcclxuXHRcdHBfc2VjdXJlWyBwYXJhbV9rZXkgXSA9IHBhcmFtX3ZhbDtcclxuXHR9O1xyXG5cclxuXHRvYmouZ2V0X3NlY3VyZV9wYXJhbSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5ICkge1xyXG5cdFx0cmV0dXJuIHBfc2VjdXJlWyBwYXJhbV9rZXkgXTtcclxuXHR9O1xyXG5cclxuXHJcblx0Ly8gTGlzdGluZyBTZWFyY2ggcGFyYW1ldGVyc1x0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHJcblx0dmFyIHBfbGlzdGluZyA9IG9iai5zZWFyY2hfcmVxdWVzdF9vYmogPSBvYmouc2VhcmNoX3JlcXVlc3Rfb2JqIHx8IHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c29ydCAgICAgICAgICAgIDogXCJib29raW5nX2lkXCIsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHNvcnRfdHlwZSAgICAgICA6IFwiREVTQ1wiLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYWdlX251bSAgICAgICAgOiAxLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwYWdlX2l0ZW1zX2NvdW50OiAxMCxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Y3JlYXRlX2RhdGUgICAgIDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0a2V5d29yZCAgICAgICAgIDogXCJcIixcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0c291cmNlICAgICAgICAgIDogXCJcIlxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fTtcclxuXHJcblx0b2JqLnNlYXJjaF9zZXRfYWxsX3BhcmFtcyA9IGZ1bmN0aW9uICggcmVxdWVzdF9wYXJhbV9vYmogKSB7XHJcblx0XHRwX2xpc3RpbmcgPSByZXF1ZXN0X3BhcmFtX29iajtcclxuXHR9O1xyXG5cclxuXHRvYmouc2VhcmNoX2dldF9hbGxfcGFyYW1zID0gZnVuY3Rpb24gKCkge1xyXG5cdFx0cmV0dXJuIHBfbGlzdGluZztcclxuXHR9O1xyXG5cclxuXHRvYmouc2VhcmNoX2dldF9wYXJhbSA9IGZ1bmN0aW9uICggcGFyYW1fa2V5ICkge1xyXG5cdFx0cmV0dXJuIHBfbGlzdGluZ1sgcGFyYW1fa2V5IF07XHJcblx0fTtcclxuXHJcblx0b2JqLnNlYXJjaF9zZXRfcGFyYW0gPSBmdW5jdGlvbiAoIHBhcmFtX2tleSwgcGFyYW1fdmFsICkge1xyXG5cdFx0Ly8gaWYgKCBBcnJheS5pc0FycmF5KCBwYXJhbV92YWwgKSApe1xyXG5cdFx0Ly8gXHRwYXJhbV92YWwgPSBKU09OLnN0cmluZ2lmeSggcGFyYW1fdmFsICk7XHJcblx0XHQvLyB9XHJcblx0XHRwX2xpc3RpbmdbIHBhcmFtX2tleSBdID0gcGFyYW1fdmFsO1xyXG5cdH07XHJcblxyXG5cdG9iai5zZWFyY2hfc2V0X3BhcmFtc19hcnIgPSBmdW5jdGlvbiggcGFyYW1zX2FyciApe1xyXG5cdFx0Xy5lYWNoKCBwYXJhbXNfYXJyLCBmdW5jdGlvbiAoIHBfdmFsLCBwX2tleSwgcF9kYXRhICl7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmaW5lIGRpZmZlcmVudCBTZWFyY2ggIHBhcmFtZXRlcnMgZm9yIHJlcXVlc3RcclxuXHRcdFx0dGhpcy5zZWFyY2hfc2V0X3BhcmFtKCBwX2tleSwgcF92YWwgKTtcclxuXHRcdH0gKTtcclxuXHR9XHJcblxyXG5cclxuXHQvLyBPdGhlciBwYXJhbWV0ZXJzIFx0XHRcdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5cdHZhciBwX290aGVyID0gb2JqLm90aGVyX29iaiA9IG9iai5vdGhlcl9vYmogfHwgeyB9O1xyXG5cclxuXHRvYmouc2V0X290aGVyX3BhcmFtID0gZnVuY3Rpb24gKCBwYXJhbV9rZXksIHBhcmFtX3ZhbCApIHtcclxuXHRcdHBfb3RoZXJbIHBhcmFtX2tleSBdID0gcGFyYW1fdmFsO1xyXG5cdH07XHJcblxyXG5cdG9iai5nZXRfb3RoZXJfcGFyYW0gPSBmdW5jdGlvbiAoIHBhcmFtX2tleSApIHtcclxuXHRcdHJldHVybiBwX290aGVyWyBwYXJhbV9rZXkgXTtcclxuXHR9O1xyXG5cclxuXHJcblx0cmV0dXJuIG9iajtcclxufSggd3BiY19hanhfYm9va2luZ19saXN0aW5nIHx8IHt9LCBqUXVlcnkgKSk7XHJcblxyXG5cclxuLyoqXHJcbiAqICAgQWpheCAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogU2VuZCBBamF4IHNlYXJjaCByZXF1ZXN0XHJcbiAqIGZvciBzZWFyY2hpbmcgc3BlY2lmaWMgS2V5d29yZCBhbmQgb3RoZXIgcGFyYW1zXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKXtcclxuXHJcbmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoJ0FKWF9CT09LSU5HX0xJU1RJTkcnKTsgY29uc29sZS5sb2coICcgPT0gQmVmb3JlIEFqYXggU2VuZCAtIHNlYXJjaF9nZXRfYWxsX3BhcmFtcygpID09ICcgLCB3cGJjX2FqeF9ib29raW5nX2xpc3Rpbmcuc2VhcmNoX2dldF9hbGxfcGFyYW1zKCkgKTtcclxuXHJcblx0d3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCgpO1xyXG5cclxuLypcclxuLy9GaXhJbjogZm9yVmlkZW9cclxuaWYgKCAhIGlzX3RoaXNfYWN0aW9uICl7XHJcblx0Ly93cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpO1xyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdCc8ZGl2IHN0eWxlPVwid2lkdGg6MTAwJTt0ZXh0LWFsaWduOiBjZW50ZXI7XCIgaWQ9XCJ3cGJjX2xvYWRpbmdfc2VjdGlvblwiPjxzcGFuIGNsYXNzPVwid3BiY19pY25fYXV0b3JlbmV3IHdwYmNfc3BpblwiPjwvc3Bhbj48L2Rpdj4nXHJcblx0XHQrIGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbCgpXHJcblx0KTtcclxuXHRpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiAoalF1ZXJ5KCAnI3dwYmNfbG9hZGluZ19zZWN0aW9uJyApLndwYmNfbXlfbW9kYWwpICl7XHRcdFx0Ly9GaXhJbjogOS4wLjEuNVxyXG5cdFx0alF1ZXJ5KCAnI3dwYmNfbG9hZGluZ19zZWN0aW9uJyApLndwYmNfbXlfbW9kYWwoICdzaG93JyApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRhbGVydCggJ1dhcm5pbmchIEJvb2tpbmcgQ2FsZW5kYXIuIEl0cyBzZWVtcyB0aGF0ICB5b3UgaGF2ZSBkZWFjdGl2YXRlZCBsb2FkaW5nIG9mIEJvb3RzdHJhcCBKUyBmaWxlcyBhdCBCb29raW5nIFNldHRpbmdzIEdlbmVyYWwgcGFnZSBpbiBBZHZhbmNlZCBzZWN0aW9uLicgKVxyXG5cdH1cclxufVxyXG5pc190aGlzX2FjdGlvbiA9IGZhbHNlO1xyXG4qL1xyXG5cdC8vIFN0YXJ0IEFqYXhcclxuXHRqUXVlcnkucG9zdCggd3BiY19nbG9iYWwxLndwYmNfYWpheHVybCxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRhY3Rpb24gICAgICAgICAgOiAnV1BCQ19BSlhfQk9PS0lOR19MSVNUSU5HJyxcclxuXHRcdFx0XHRcdHdwYmNfYWp4X3VzZXJfaWQ6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAndXNlcl9pZCcgKSxcclxuXHRcdFx0XHRcdG5vbmNlICAgICAgICAgICA6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCAnbm9uY2UnICksXHJcblx0XHRcdFx0XHR3cGJjX2FqeF9sb2NhbGUgOiB3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X3NlY3VyZV9wYXJhbSggJ2xvY2FsZScgKSxcclxuXHJcblx0XHRcdFx0XHRzZWFyY2hfcGFyYW1zXHQ6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKVxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0LyoqXHJcblx0XHRcdFx0ICogUyB1IGMgYyBlIHMgc1xyXG5cdFx0XHRcdCAqXHJcblx0XHRcdFx0ICogQHBhcmFtIHJlc3BvbnNlX2RhdGFcdFx0LVx0aXRzIG9iamVjdCByZXR1cm5lZCBmcm9tICBBamF4IC0gY2xhc3MtbGl2ZS1zZWFyY2cucGhwXHJcblx0XHRcdFx0ICogQHBhcmFtIHRleHRTdGF0dXNcdFx0LVx0J3N1Y2Nlc3MnXHJcblx0XHRcdFx0ICogQHBhcmFtIGpxWEhSXHRcdFx0XHQtXHRPYmplY3RcclxuXHRcdFx0XHQgKi9cclxuXHRcdFx0XHRmdW5jdGlvbiAoIHJlc3BvbnNlX2RhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkge1xyXG4vL0ZpeEluOiBmb3JWaWRlb1xyXG4vL2pRdWVyeSggJyN3cGJjX2xvYWRpbmdfc2VjdGlvbicgKS53cGJjX215X21vZGFsKCAnaGlkZScgKTtcclxuXHJcbmNvbnNvbGUubG9nKCAnID09IFJlc3BvbnNlIFdQQkNfQUpYX0JPT0tJTkdfTElTVElORyA9PSAnLCByZXNwb25zZV9kYXRhICk7IGNvbnNvbGUuZ3JvdXBFbmQoKTtcclxuXHRcdFx0XHRcdC8vIFByb2JhYmx5IEVycm9yXHJcblx0XHRcdFx0XHRpZiAoICh0eXBlb2YgcmVzcG9uc2VfZGF0YSAhPT0gJ29iamVjdCcpIHx8IChyZXNwb25zZV9kYXRhID09PSBudWxsKSApe1xyXG5cdFx0XHRcdFx0XHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0XHRcdFx0XHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiYy1zZXR0aW5ncy1ub3RpY2Ugbm90aWNlLXdhcm5pbmdcIiBzdHlsZT1cInRleHQtYWxpZ246bGVmdFwiPicgK1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZV9kYXRhICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHJldHVybjtcclxuXHRcdFx0XHRcdH1cclxuXHJcblx0XHRcdFx0XHQvLyBSZWxvYWQgcGFnZSwgYWZ0ZXIgZmlsdGVyIHRvb2xiYXIgd2FzIHJlc2V0ZWRcclxuXHRcdFx0XHRcdGlmICggICAgICAgKCAgICAgdW5kZWZpbmVkICE9IHJlc3BvbnNlX2RhdGFbICdhanhfY2xlYW5lZF9wYXJhbXMnIF0pXHJcblx0XHRcdFx0XHRcdFx0JiYgKCAncmVzZXRfZG9uZScgPT09IHJlc3BvbnNlX2RhdGFbICdhanhfY2xlYW5lZF9wYXJhbXMnIF1bICd1aV9yZXNldCcgXSlcclxuXHRcdFx0XHRcdCl7XHJcblx0XHRcdFx0XHRcdGxvY2F0aW9uLnJlbG9hZCgpO1xyXG5cdFx0XHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gU2hvdyBsaXN0aW5nXHJcblx0XHRcdFx0XHRpZiAoIHJlc3BvbnNlX2RhdGFbICdhanhfY291bnQnIF0gPiAwICl7XHJcblxyXG5cdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX3Nob3dfbGlzdGluZyggcmVzcG9uc2VfZGF0YVsgJ2FqeF9pdGVtcycgXSwgcmVzcG9uc2VfZGF0YVsgJ2FqeF9zZWFyY2hfcGFyYW1zJyBdLCByZXNwb25zZV9kYXRhWyAnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJyBdICk7XHJcblxyXG5cdFx0XHRcdFx0XHR3cGJjX3BhZ2luYXRpb25fZWNobyhcclxuXHRcdFx0XHRcdFx0XHR3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCAncGFnaW5hdGlvbl9jb250YWluZXInICksXHJcblx0XHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdFx0J3BhZ2VfYWN0aXZlJzogcmVzcG9uc2VfZGF0YVsgJ2FqeF9zZWFyY2hfcGFyYW1zJyBdWyAncGFnZV9udW0nIF0sXHJcblx0XHRcdFx0XHRcdFx0XHQncGFnZXNfY291bnQnOiBNYXRoLmNlaWwoIHJlc3BvbnNlX2RhdGFbICdhanhfY291bnQnIF0gLyByZXNwb25zZV9kYXRhWyAnYWp4X3NlYXJjaF9wYXJhbXMnIF1bICdwYWdlX2l0ZW1zX2NvdW50JyBdICksXHJcblxyXG5cdFx0XHRcdFx0XHRcdFx0J3BhZ2VfaXRlbXNfY291bnQnOiByZXNwb25zZV9kYXRhWyAnYWp4X3NlYXJjaF9wYXJhbXMnIF1bICdwYWdlX2l0ZW1zX2NvdW50JyBdLFxyXG5cdFx0XHRcdFx0XHRcdFx0J3NvcnRfdHlwZScgICAgICAgOiByZXNwb25zZV9kYXRhWyAnYWp4X3NlYXJjaF9wYXJhbXMnIF1bICdzb3J0X3R5cGUnIF1cclxuXHRcdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCk7XHRcdFx0XHRcdFx0Ly8gUmVkZWZpbmUgSG9va3MsIGJlY2F1c2Ugd2Ugc2hvdyBuZXcgRE9NIGVsZW1lbnRzXHJcblxyXG5cdFx0XHRcdFx0fSBlbHNlIHtcclxuXHJcblx0XHRcdFx0XHRcdHdwYmNfYWp4X2Jvb2tpbmdfX2FjdHVhbF9saXN0aW5nX19oaWRlKCk7XHJcblx0XHRcdFx0XHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8ZGl2IGNsYXNzPVwid3BiYy1zZXR0aW5ncy1ub3RpY2UwIG5vdGljZS13YXJuaW5nMFwiIHN0eWxlPVwidGV4dC1hbGlnbjpjZW50ZXI7bWFyZ2luLWxlZnQ6LTUwcHg7XCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8c3Ryb25nPicgKyAnTm8gcmVzdWx0cyBmb3VuZCBmb3IgY3VycmVudCBmaWx0ZXIgb3B0aW9ucy4uLicgKyAnPC9zdHJvbmc+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vJzxzdHJvbmc+JyArICdObyByZXN1bHRzIGZvdW5kLi4uJyArICc8L3N0cm9uZz4nICtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0Ly8gVXBkYXRlIG5ldyBib29raW5nIGNvdW50XHJcblx0XHRcdFx0XHRpZiAoIHVuZGVmaW5lZCAhPT0gcmVzcG9uc2VfZGF0YVsgJ2FqeF9uZXdfYm9va2luZ3NfY291bnQnIF0gKXtcclxuXHRcdFx0XHRcdFx0dmFyIGFqeF9uZXdfYm9va2luZ3NfY291bnQgPSBwYXJzZUludCggcmVzcG9uc2VfZGF0YVsgJ2FqeF9uZXdfYm9va2luZ3NfY291bnQnIF0gKVxyXG5cdFx0XHRcdFx0XHRpZiAoYWp4X25ld19ib29raW5nc19jb3VudD4wKXtcclxuXHRcdFx0XHRcdFx0XHRqUXVlcnkoICcud3BiY19iYWRnZV9jb3VudCcgKS5zaG93KCk7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0alF1ZXJ5KCAnLmJrLXVwZGF0ZS1jb3VudCcgKS5odG1sKCBhanhfbmV3X2Jvb2tpbmdzX2NvdW50ICk7XHJcblx0XHRcdFx0XHR9XHJcblxyXG5cdFx0XHRcdFx0d3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSgpO1xyXG5cclxuXHRcdFx0XHRcdGpRdWVyeSggJyNhamF4X3Jlc3BvbmQnICkuaHRtbCggcmVzcG9uc2VfZGF0YSApO1x0XHQvLyBGb3IgYWJpbGl0eSB0byBzaG93IHJlc3BvbnNlLCBhZGQgc3VjaCBESVYgZWxlbWVudCB0byBwYWdlXHJcblx0XHRcdFx0fVxyXG5cdFx0XHQgICkuZmFpbCggZnVuY3Rpb24gKCBqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24gKSB7ICAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnQWpheF9FcnJvcicsIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93biApOyB9XHJcblx0XHRcdFx0XHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0XHRcdFx0XHR2YXIgZXJyb3JfbWVzc2FnZSA9ICc8c3Ryb25nPicgKyAnRXJyb3IhJyArICc8L3N0cm9uZz4gJyArIGVycm9yVGhyb3duIDtcclxuXHRcdFx0XHRcdGlmICgganFYSFIucmVzcG9uc2VUZXh0ICl7XHJcblx0XHRcdFx0XHRcdGVycm9yX21lc3NhZ2UgKz0ganFYSFIucmVzcG9uc2VUZXh0O1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0ZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UucmVwbGFjZSggL1xcbi9nLCBcIjxiciAvPlwiICk7XHJcblxyXG5cdFx0XHRcdFx0d3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UoIGVycm9yX21lc3NhZ2UgKTtcclxuXHRcdFx0ICB9KVxyXG5cdCAgICAgICAgICAvLyAuZG9uZSggICBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnc2Vjb25kIHN1Y2Nlc3MnLCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApOyB9ICAgIH0pXHJcblx0XHRcdCAgLy8gLmFsd2F5cyggZnVuY3Rpb24gKCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApIHsgICBpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLmxvZyApeyBjb25zb2xlLmxvZyggJ2Fsd2F5cyBmaW5pc2hlZCcsIGRhdGFfanFYSFIsIHRleHRTdGF0dXMsIGpxWEhSX2Vycm9yVGhyb3duICk7IH0gICAgIH0pXHJcblx0XHRcdCAgOyAgLy8gRW5kIEFqYXhcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIFZpZXdzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIFNob3cgTGlzdGluZyBUYWJsZSBcdFx0YW5kIGRlZmluZSBnTWFpbCBjaGVja2JveCBob29rc1xyXG4gKlxyXG4gKiBAcGFyYW0ganNvbl9pdGVtc19hcnJcdFx0LSBKU09OIG9iamVjdCB3aXRoIEl0ZW1zXHJcbiAqIEBwYXJhbSBqc29uX3NlYXJjaF9wYXJhbXNcdC0gSlNPTiBvYmplY3Qgd2l0aCBTZWFyY2hcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19saXN0aW5nKCBqc29uX2l0ZW1zX2FyciwganNvbl9zZWFyY2hfcGFyYW1zLCBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzICl7XHJcblxyXG5cdHdwYmNfYWp4X2RlZmluZV90ZW1wbGF0ZXNfX3Jlc291cmNlX21hbmlwdWxhdGlvbigganNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcyApO1xyXG5cclxuLy9jb25zb2xlLmxvZyggJ2pzb25faXRlbXNfYXJyJyAsIGpzb25faXRlbXNfYXJyLCBqc29uX3NlYXJjaF9wYXJhbXMgKTtcclxuXHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5jc3MoIFwiZGlzcGxheVwiLCBcImZsZXhcIiApO1xyXG5cdHZhciBsaXN0X2hlYWRlcl90cGwgPSB3cC50ZW1wbGF0ZSggJ3dwYmNfYWp4X2Jvb2tpbmdfbGlzdF9oZWFkZXInICk7XHJcblx0dmFyIGxpc3Rfcm93X3RwbCAgICA9IHdwLnRlbXBsYXRlKCAnd3BiY19hanhfYm9va2luZ19saXN0X3JvdycgKTtcclxuXHJcblxyXG5cdC8vIEhlYWRlclxyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbCggbGlzdF9oZWFkZXJfdHBsKCkgKTtcclxuXHJcblx0Ly8gQm9keVxyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuYXBwZW5kKCAnPGRpdiBjbGFzcz1cIndwYmNfc2VsZWN0YWJsZV9ib2R5XCI+PC9kaXY+JyApO1xyXG5cclxuXHQvLyBSIG8gdyBzXHJcbmNvbnNvbGUuZ3JvdXBDb2xsYXBzZWQoICdMSVNUSU5HX1JPV1MnICk7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIExJU1RJTkdfUk9XU1xyXG5cdF8uZWFjaCgganNvbl9pdGVtc19hcnIsIGZ1bmN0aW9uICggcF92YWwsIHBfa2V5LCBwX2RhdGEgKXtcclxuXHRcdGlmICggJ3VuZGVmaW5lZCcgIT09IHR5cGVvZiBqc29uX3NlYXJjaF9wYXJhbXNbICdrZXl3b3JkJyBdICl7XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBQYXJhbWV0ZXIgZm9yIG1hcmtpbmcga2V5d29yZCB3aXRoIGRpZmZlcmVudCBjb2xvciBpbiBhIGxpc3RcclxuXHRcdFx0cF92YWxbICdfX3NlYXJjaF9yZXF1ZXN0X2tleXdvcmRfXycgXSA9IGpzb25fc2VhcmNoX3BhcmFtc1sgJ2tleXdvcmQnIF07XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRwX3ZhbFsgJ19fc2VhcmNoX3JlcXVlc3Rfa2V5d29yZF9fJyBdID0gJyc7XHJcblx0XHR9XHJcblx0XHRwX3ZhbFsgJ2Jvb2tpbmdfcmVzb3VyY2VzJyBdID0ganNvbl9ib29raW5nX3Jlc291cmNlcztcclxuXHRcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICsgJyAud3BiY19zZWxlY3RhYmxlX2JvZHknICkuYXBwZW5kKCBsaXN0X3Jvd190cGwoIHBfdmFsICkgKTtcclxuXHR9ICk7XHJcbmNvbnNvbGUuZ3JvdXBFbmQoKTsgXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBMSVNUSU5HX1JPV1NcclxuXHJcblx0d3BiY19kZWZpbmVfZ21haWxfY2hlY2tib3hfc2VsZWN0aW9uKCBqUXVlcnkgKTtcdFx0XHRcdFx0XHQvLyBSZWRlZmluZSBIb29rcyBmb3IgY2xpY2tpbmcgYXQgQ2hlY2tib3hlc1xyXG59XHJcblxyXG5cclxuXHQvKipcclxuXHQgKiBEZWZpbmUgdGVtcGxhdGUgZm9yIGNoYW5naW5nIGJvb2tpbmcgcmVzb3VyY2VzICYgIHVwZGF0ZSBpdCBlYWNoIHRpbWUsICB3aGVuICBsaXN0aW5nIHVwZGF0aW5nLCB1c2VmdWwgIGZvciBzaG93aW5nIGFjdHVhbCAgYm9va2luZyByZXNvdXJjZXMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ganNvbl9pdGVtc19hcnJcdFx0LSBKU09OIG9iamVjdCB3aXRoIEl0ZW1zXHJcblx0ICogQHBhcmFtIGpzb25fc2VhcmNoX3BhcmFtc1x0LSBKU09OIG9iamVjdCB3aXRoIFNlYXJjaFxyXG5cdCAqIEBwYXJhbSBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzXHQtIEpTT04gb2JqZWN0IHdpdGggUmVzb3VyY2VzXHJcblx0ICovXHJcblx0ZnVuY3Rpb24gd3BiY19hanhfZGVmaW5lX3RlbXBsYXRlc19fcmVzb3VyY2VfbWFuaXB1bGF0aW9uKCBqc29uX2l0ZW1zX2FyciwganNvbl9zZWFyY2hfcGFyYW1zLCBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzICl7XHJcblxyXG5cdFx0Ly8gQ2hhbmdlIGJvb2tpbmcgcmVzb3VyY2VcclxuXHRcdHZhciBjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV90cGwgPSB3cC50ZW1wbGF0ZSggJ3dwYmNfYWp4X2NoYW5nZV9ib29raW5nX3Jlc291cmNlJyApO1xyXG5cclxuXHRcdGpRdWVyeSggJyN3cGJjX2hpZGRlbl90ZW1wbGF0ZV9fY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2UnICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRjaGFuZ2VfYm9va2luZ19yZXNvdXJjZV90cGwoIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhanhfc2VhcmNoX3BhcmFtcycgICAgOiBqc29uX3NlYXJjaF9wYXJhbXMsXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJzoganNvbl9ib29raW5nX3Jlc291cmNlc1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH0gKVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxuXHJcblx0XHQvLyBEdXBsaWNhdGUgYm9va2luZyByZXNvdXJjZVxyXG5cdFx0dmFyIGR1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX3RwbCA9IHdwLnRlbXBsYXRlKCAnd3BiY19hanhfZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2UnICk7XHJcblxyXG5cdFx0alF1ZXJ5KCAnI3dwYmNfaGlkZGVuX3RlbXBsYXRlX19kdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZScgKS5odG1sKFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGR1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlX3RwbCgge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2FqeF9zZWFyY2hfcGFyYW1zJyAgICA6IGpzb25fc2VhcmNoX3BhcmFtcyxcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCdhanhfYm9va2luZ19yZXNvdXJjZXMnOiBqc29uX2Jvb2tpbmdfcmVzb3VyY2VzXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0fSApXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xyXG5cdH1cclxuXHJcblxyXG4vKipcclxuICogU2hvdyBqdXN0IG1lc3NhZ2UgaW5zdGVhZCBvZiBsaXN0aW5nIGFuZCBoaWRlIHBhZ2luYXRpb25cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19tZXNzYWdlKCBtZXNzYWdlICl7XHJcblxyXG5cdHdwYmNfYWp4X2Jvb2tpbmdfX2FjdHVhbF9saXN0aW5nX19oaWRlKCk7XHJcblxyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0JzxkaXYgY2xhc3M9XCJ3cGJjLXNldHRpbmdzLW5vdGljZSBub3RpY2Utd2FybmluZ1wiIHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+JyArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWVzc2FnZSArXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCc8L2Rpdj4nXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIEggbyBvIGsgcyAgLSAgaXRzIEFjdGlvbi9UaW1lcyB3aGVuIG5lZWQgdG8gcmUtUmVuZGVyIFZpZXdzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIFNlbmQgQWpheCBTZWFyY2ggUmVxdWVzdCBhZnRlciBVcGRhdGluZyBzZWFyY2ggcmVxdWVzdCBwYXJhbWV0ZXJzXHJcbiAqXHJcbiAqIEBwYXJhbSBwYXJhbXNfYXJyXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMgKCBwYXJhbXNfYXJyICl7XHJcblxyXG5cdC8vIERlZmluZSBkaWZmZXJlbnQgU2VhcmNoICBwYXJhbWV0ZXJzIGZvciByZXF1ZXN0XHJcblx0Xy5lYWNoKCBwYXJhbXNfYXJyLCBmdW5jdGlvbiAoIHBfdmFsLCBwX2tleSwgcF9kYXRhICkge1xyXG5cdFx0Ly9jb25zb2xlLmxvZyggJ1JlcXVlc3QgZm9yOiAnLCBwX2tleSwgcF92YWwgKTtcclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfc2V0X3BhcmFtKCBwX2tleSwgcF92YWwgKTtcclxuXHR9KTtcclxuXHJcblx0Ly8gU2VuZCBBamF4IFJlcXVlc3RcclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNlYXJjaCByZXF1ZXN0IGZvciBcIlBhZ2UgTnVtYmVyXCJcclxuICogQHBhcmFtIHBhZ2VfbnVtYmVyXHRpbnRcclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayggcGFnZV9udW1iZXIgKXtcclxuXHJcblx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJzogcGFnZV9udW1iZXJcclxuXHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG59XHJcblxyXG5cclxuLyoqXHJcbiAqICAgS2V5d29yZCBTZWFyY2hpbmcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogU2VhcmNoIHJlcXVlc3QgZm9yIFwiS2V5d29yZFwiLCBhbHNvIHNldCBjdXJyZW50IHBhZ2UgdG8gIDFcclxuICpcclxuICogQHBhcmFtIGVsZW1lbnRfaWRcdC1cdEhUTUwgSUQgIG9mIGVsZW1lbnQsICB3aGVyZSB3YXMgZW50ZXJlZCBrZXl3b3JkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3RfZm9yX2tleXdvcmQoIGVsZW1lbnRfaWQgKSB7XHJcblxyXG5cdC8vIFdlIG5lZWQgdG8gUmVzZXQgcGFnZV9udW0gdG8gMSB3aXRoIGVhY2ggbmV3IHNlYXJjaCwgYmVjYXVzZSB3ZSBjYW4gYmUgYXQgcGFnZSAjNCwgIGJ1dCBhZnRlciAgbmV3IHNlYXJjaCAgd2UgY2FuICBoYXZlIHRvdGFsbHkgIG9ubHkgIDEgcGFnZVxyXG5cdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcygge1xyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J2tleXdvcmQnICA6IGpRdWVyeSggZWxlbWVudF9pZCApLnZhbCgpLFxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0J3BhZ2VfbnVtJzogMVxyXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gKTtcclxufVxyXG5cclxuXHQvKipcclxuXHQgKiBTZW5kIHNlYXJjaCByZXF1ZXN0IGFmdGVyIGZldyBzZWNvbmRzICh1c3VhbGx5IGFmdGVyIDEsNSBzZWMpXHJcblx0ICogQ2xvc3VyZSBmdW5jdGlvbi4gSXRzIHVzZWZ1bCwgIGZvciBkbyAgbm90IHNlbmQgdG9vIG1hbnkgQWpheCByZXF1ZXN0cywgd2hlbiBzb21lb25lIG1ha2UgZmFzdCB0eXBpbmcuXHJcblx0ICovXHJcblx0dmFyIHdwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzID0gZnVuY3Rpb24gKCl7XHJcblxyXG5cdFx0dmFyIGNsb3NlZF90aW1lciA9IDA7XHJcblxyXG5cdFx0cmV0dXJuIGZ1bmN0aW9uICggZWxlbWVudF9pZCwgdGltZXJfZGVsYXkgKXtcclxuXHJcblx0XHRcdC8vIEdldCBkZWZhdWx0IHZhbHVlIG9mIFwidGltZXJfZGVsYXlcIiwgIGlmIHBhcmFtZXRlciB3YXMgbm90IHBhc3NlZCBpbnRvIHRoZSBmdW5jdGlvbi5cclxuXHRcdFx0dGltZXJfZGVsYXkgPSB0eXBlb2YgdGltZXJfZGVsYXkgIT09ICd1bmRlZmluZWQnID8gdGltZXJfZGVsYXkgOiAxNTAwO1xyXG5cclxuXHRcdFx0Y2xlYXJUaW1lb3V0KCBjbG9zZWRfdGltZXIgKTtcdFx0Ly8gQ2xlYXIgcHJldmlvdXMgdGltZXJcclxuXHJcblx0XHRcdC8vIFN0YXJ0IG5ldyBUaW1lclxyXG5cdFx0XHRjbG9zZWRfdGltZXIgPSBzZXRUaW1lb3V0KCB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3RfZm9yX2tleXdvcmQuYmluZCggIG51bGwsIGVsZW1lbnRfaWQgKSwgdGltZXJfZGVsYXkgKTtcclxuXHRcdH1cclxuXHR9KCk7XHJcblxyXG5cclxuLyoqXHJcbiAqICAgRGVmaW5lIER5bmFtaWMgSG9va3MgIChsaWtlIHBhZ2luYXRpb24gY2xpY2ssIHdoaWNoIHJlbmV3IGVhY2ggdGltZSB3aXRoIG5ldyBsaXN0aW5nIHNob3dpbmcpICAtLS0tLS0tLS0tLS0tICovXHJcblxyXG4vKipcclxuICogRGVmaW5lIEhUTUwgdWkgSG9va3M6IG9uIEtleVVwIHwgQ2hhbmdlIHwgLT4gU29ydCBPcmRlciAmIE51bWJlciBJdGVtcyAvIFBhZ2VcclxuICogV2UgYXJlIGhjbmFnZWQgaXQgZWFjaCAgdGltZSwgd2hlbiBzaG93aW5nIG5ldyBsaXN0aW5nLCBiZWNhdXNlIERPTSBlbGVtZW50cyBjaG5hZ2VkXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX2RlZmluZV91aV9ob29rcygpe1xyXG5cclxuXHRpZiAoICdmdW5jdGlvbicgPT09IHR5cGVvZiggd3BiY19kZWZpbmVfdGlwcHlfdG9vbHRpcHMgKSApIHtcclxuXHRcdHdwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzKCAnLndwYmNfbGlzdGluZ19jb250YWluZXIgJyApO1xyXG5cdH1cclxuXHJcblx0d3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKTtcclxuXHR3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyaygpO1xyXG5cclxuXHQvLyBJdGVtcyBQZXIgUGFnZVxyXG5cdGpRdWVyeSggJy53cGJjX2l0ZW1zX3Blcl9wYWdlJyApLm9uKCAnY2hhbmdlJywgZnVuY3Rpb24oIGV2ZW50ICl7XHJcblxyXG5cdFx0d3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9pdGVtc19jb3VudCcgIDogalF1ZXJ5KCB0aGlzICkudmFsKCksXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQncGFnZV9udW0nOiAxXHJcblx0XHRcdFx0XHRcdFx0XHRcdFx0fSApO1xyXG5cdH0gKTtcclxuXHJcblx0Ly8gU29ydGluZ1xyXG5cdGpRdWVyeSggJy53cGJjX2l0ZW1zX3NvcnRfdHlwZScgKS5vbiggJ2NoYW5nZScsIGZ1bmN0aW9uKCBldmVudCApe1xyXG5cclxuXHRcdHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyggeydzb3J0X3R5cGUnOiBqUXVlcnkoIHRoaXMgKS52YWwoKX0gKTtcclxuXHR9ICk7XHJcbn1cclxuXHJcblxyXG4vKipcclxuICogICBTaG93IC8gSGlkZSBMaXN0aW5nICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cclxuXHJcbi8qKlxyXG4gKiAgU2hvdyBMaXN0aW5nIFRhYmxlIFx0LSBcdFNlbmRpbmcgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19fc2hvdygpe1xyXG5cclxuXHR3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKTtcdFx0XHQvLyBTZW5kIEFqYXggUmVxdWVzdFx0LVx0d2l0aCBwYXJhbWV0ZXJzIHRoYXQgIHdlIGVhcmx5ICBkZWZpbmVkIGluIFwid3BiY19hanhfYm9va2luZ19saXN0aW5nXCIgT2JqLlxyXG59XHJcblxyXG4vKipcclxuICogSGlkZSBMaXN0aW5nIFRhYmxlICggYW5kIFBhZ2luYXRpb24gKVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX2hpZGUoKXtcclxuXHRqUXVlcnkoICcjd2hfc29ydF9zZWxlY3RvcicgKS5oaWRlKCk7XHJcblx0alF1ZXJ5KCB3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCAnbGlzdGluZ19jb250YWluZXInICkgICAgKS5odG1sKCAnJyApO1xyXG5cdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ3BhZ2luYXRpb25fY29udGFpbmVyJyApICkuaHRtbCggJycgKTtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIFN1cHBvcnQgZnVuY3Rpb25zIGZvciBDb250ZW50IFRlbXBsYXRlIGRhdGEgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIEhpZ2hsaWdodCBzdHJpbmdzLFxyXG4gKiBieSBpbnNlcnRpbmcgPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPi4uLjwvc3Bhbj4gaHRtbCAgZWxlbWVudHMgaW50byB0aGUgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9va2luZ19kZXRhaWxzIFx0LSBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBib29raW5nX2tleXdvcmRcdC0gS2V5d29yZCB0byBoaWdobGlnaHRcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfZ2V0X2hpZ2hsaWdodGVkX3NlYXJjaF9rZXl3b3JkKCBib29raW5nX2RldGFpbHMsIGJvb2tpbmdfa2V5d29yZCApe1xyXG5cclxuXHRib29raW5nX2tleXdvcmQgPSBib29raW5nX2tleXdvcmQudHJpbSgpLnRvTG93ZXJDYXNlKCk7XHJcblx0aWYgKCAwID09IGJvb2tpbmdfa2V5d29yZC5sZW5ndGggKXtcclxuXHRcdHJldHVybiBib29raW5nX2RldGFpbHM7XHJcblx0fVxyXG5cclxuXHQvLyBIaWdobGlnaHQgc3Vic3RyaW5nIHdpdGhpbmcgSFRNTCB0YWdzIGluIFwiQ29udGVudCBvZiBib29raW5nIGZpZWxkcyBkYXRhXCIgLS0gZS5nLiBzdGFydGluZyBmcm9tICA+ICBhbmQgZW5kaW5nIHdpdGggPFxyXG5cdGxldCBrZXl3b3JkUmVnZXggPSBuZXcgUmVnRXhwKCBgZmllbGR2YWx1ZVtePD5dKj4oW148XSoke2Jvb2tpbmdfa2V5d29yZH1bXjxdKilgLCAnZ2ltJyApO1xyXG5cclxuXHQvL2xldCBtYXRjaGVzID0gWy4uLmJvb2tpbmdfZGV0YWlscy50b0xvd2VyQ2FzZSgpLm1hdGNoQWxsKCBrZXl3b3JkUmVnZXggKV07XHJcblx0bGV0IG1hdGNoZXMgPSBib29raW5nX2RldGFpbHMudG9Mb3dlckNhc2UoKS5tYXRjaEFsbCgga2V5d29yZFJlZ2V4ICk7XHJcblx0XHRtYXRjaGVzID0gQXJyYXkuZnJvbSggbWF0Y2hlcyApO1xyXG5cclxuXHRsZXQgc3RyaW5nc19hcnIgPSBbXTtcclxuXHRsZXQgcG9zX3ByZXZpb3VzID0gMDtcclxuXHRsZXQgc2VhcmNoX3Bvc19zdGFydDtcclxuXHRsZXQgc2VhcmNoX3Bvc19lbmQ7XHJcblxyXG5cdGZvciAoIGNvbnN0IG1hdGNoIG9mIG1hdGNoZXMgKXtcclxuXHJcblx0XHRzZWFyY2hfcG9zX3N0YXJ0ID0gbWF0Y2guaW5kZXggKyBtYXRjaFsgMCBdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZiggJz4nLCAwICkgKyAxIDtcclxuXHJcblx0XHRzdHJpbmdzX2Fyci5wdXNoKCBib29raW5nX2RldGFpbHMuc3Vic3RyKCBwb3NfcHJldmlvdXMsIChzZWFyY2hfcG9zX3N0YXJ0IC0gcG9zX3ByZXZpb3VzKSApICk7XHJcblxyXG5cdFx0c2VhcmNoX3Bvc19lbmQgPSBib29raW5nX2RldGFpbHMudG9Mb3dlckNhc2UoKS5pbmRleE9mKCAnPCcsIHNlYXJjaF9wb3Nfc3RhcnQgKTtcclxuXHJcblx0XHRzdHJpbmdzX2Fyci5wdXNoKCAnPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPicgKyBib29raW5nX2RldGFpbHMuc3Vic3RyKCBzZWFyY2hfcG9zX3N0YXJ0LCAoc2VhcmNoX3Bvc19lbmQgLSBzZWFyY2hfcG9zX3N0YXJ0KSApICsgJzwvc3Bhbj4nICk7XHJcblxyXG5cdFx0cG9zX3ByZXZpb3VzID0gc2VhcmNoX3Bvc19lbmQ7XHJcblx0fVxyXG5cclxuXHRzdHJpbmdzX2Fyci5wdXNoKCBib29raW5nX2RldGFpbHMuc3Vic3RyKCBwb3NfcHJldmlvdXMsIChib29raW5nX2RldGFpbHMubGVuZ3RoIC0gcG9zX3ByZXZpb3VzKSApICk7XHJcblxyXG5cdHJldHVybiBzdHJpbmdzX2Fyci5qb2luKCAnJyApO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyAgIGZyb206XHQgJmFtcDsgXHQtPiBcdCZcclxuICpcclxuICogQHBhcmFtIHRleHRcclxuICogQHJldHVybnMgeyp9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2RlY29kZV9IVE1MX2VudGl0aWVzKCB0ZXh0ICl7XHJcblx0dmFyIHRleHRBcmVhID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggJ3RleHRhcmVhJyApO1xyXG5cdHRleHRBcmVhLmlubmVySFRNTCA9IHRleHQ7XHJcblx0cmV0dXJuIHRleHRBcmVhLnZhbHVlO1xyXG59XHJcblxyXG4vKipcclxuICogQ29udmVydCBUTyBzcGVjaWFsIEhUTUwgY2hhcmFjdGVycyAgIGZyb206XHQgJiBcdC0+IFx0JmFtcDtcclxuICpcclxuICogQHBhcmFtIHRleHRcclxuICogQHJldHVybnMgeyp9XHJcbiAqL1xyXG5mdW5jdGlvbiB3cGJjX2VuY29kZV9IVE1MX2VudGl0aWVzKHRleHQpIHtcclxuICB2YXIgdGV4dEFyZWEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xyXG4gIHRleHRBcmVhLmlubmVyVGV4dCA9IHRleHQ7XHJcbiAgcmV0dXJuIHRleHRBcmVhLmlubmVySFRNTDtcclxufVxyXG5cclxuXHJcbi8qKlxyXG4gKiAgIFN1cHBvcnQgRnVuY3Rpb25zIC0gU3BpbiBJY29uIGluIEJ1dHRvbnMgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xyXG5cclxuLyoqXHJcbiAqIFNwaW4gYnV0dG9uIGluIEZpbHRlciB0b29sYmFyICAtICBTdGFydFxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCgpe1xyXG5cdGpRdWVyeSggJyN3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uIC5tZW51X2ljb24ud3BiY19zcGluJykucmVtb3ZlQ2xhc3MoICd3cGJjX2FuaW1hdGlvbl9wYXVzZScgKTtcclxufVxyXG5cclxuLyoqXHJcbiAqIFNwaW4gYnV0dG9uIGluIEZpbHRlciB0b29sYmFyICAtICBQYXVzZVxyXG4gKi9cclxuZnVuY3Rpb24gd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9wYXVzZSgpe1xyXG5cdGpRdWVyeSggJyN3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uIC5tZW51X2ljb24ud3BiY19zcGluJyApLmFkZENsYXNzKCAnd3BiY19hbmltYXRpb25fcGF1c2UnICk7XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBTcGluIGJ1dHRvbiBpbiBGaWx0ZXIgdG9vbGJhciAgLSAgaXMgU3Bpbm5pbmcgP1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXHJcbmZ1bmN0aW9uIHdwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4oKXtcclxuICAgIGlmICggalF1ZXJ5KCAnI3dwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b24gLm1lbnVfaWNvbi53cGJjX3NwaW4nICkuaGFzQ2xhc3MoICd3cGJjX2FuaW1hdGlvbl9wYXVzZScgKSApe1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fSBlbHNlIHtcclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn0iXSwiZmlsZSI6ImluY2x1ZGVzL3BhZ2UtYm9va2luZ3MvX291dC9ib29raW5nc19fbGlzdGluZy5qcyJ9
includes/page-bookings/_out/bookings__listing.min.js ADDED
@@ -0,0 +1,2 @@
 
 
1
+ "use strict";function _createForOfIteratorHelper(e,_){var o="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!o){if(Array.isArray(e)||(o=_unsupportedIterableToArray(e))||_&&e&&"number"==typeof e.length){o&&(e=o);var n=0,_=function(){};return{s:_,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:_}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var t,r=!0,a=!1;return{s:function(){o=o.call(e)},n:function(){var e=o.next();return r=e.done,e},e:function(e){a=!0,t=e},f:function(){try{r||null==o.return||o.return()}finally{if(a)throw t}}}}function _unsupportedIterableToArray(e,_){if(e){if("string"==typeof e)return _arrayLikeToArray(e,_);var o=Object.prototype.toString.call(e).slice(8,-1);return"Map"===(o="Object"===o&&e.constructor?e.constructor.name:o)||"Set"===o?Array.from(e):"Arguments"===o||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(o)?_arrayLikeToArray(e,_):void 0}}function _arrayLikeToArray(e,_){(null==_||_>e.length)&&(_=e.length);for(var o=0,n=new Array(_);o<_;o++)n[o]=e[o];return n}function _typeof(e){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}jQuery("body").on({touchmove:function(e){jQuery(".timespartly").each(function(e){var _=jQuery(this).get(0);null!=_._tippy&&_._tippy.hide()})}});var wpbc_ajx_booking_listing=function(e){var o=e.security_obj=e.security_obj||{user_id:0,nonce:"",locale:""};e.set_secure_param=function(e,_){o[e]=_},e.get_secure_param=function(e){return o[e]};var n=e.search_request_obj=e.search_request_obj||{sort:"booking_id",sort_type:"DESC",page_num:1,page_items_count:10,create_date:"",keyword:"",source:""};e.search_set_all_params=function(e){n=e},e.search_get_all_params=function(){return n},e.search_get_param=function(e){return n[e]},e.search_set_param=function(e,_){n[e]=_},e.search_set_params_arr=function(e){_.each(e,function(e,_,o){this.search_set_param(_,e)})};var t=e.other_obj=e.other_obj||{};return e.set_other_param=function(e,_){t[e]=_},e.get_other_param=function(e){return t[e]},e}(wpbc_ajx_booking_listing||{},jQuery);function wpbc_ajx_booking_ajax_search_request(){console.groupCollapsed("AJX_BOOKING_LISTING"),console.log(" == Before Ajax Send - search_get_all_params() == ",wpbc_ajx_booking_listing.search_get_all_params()),wpbc_booking_listing_reload_button__spin_start(),jQuery.post(wpbc_global1.wpbc_ajaxurl,{action:"WPBC_AJX_BOOKING_LISTING",wpbc_ajx_user_id:wpbc_ajx_booking_listing.get_secure_param("user_id"),nonce:wpbc_ajx_booking_listing.get_secure_param("nonce"),wpbc_ajx_locale:wpbc_ajx_booking_listing.get_secure_param("locale"),search_params:wpbc_ajx_booking_listing.search_get_all_params()},function(e,_,o){return console.log(" == Response WPBC_AJX_BOOKING_LISTING == ",e),console.groupEnd(),"object"!==_typeof(e)||null===e?(jQuery("#wh_sort_selector").hide(),void jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">'+e+"</div>")):void(null==e.ajx_cleaned_params||"reset_done"!==e.ajx_cleaned_params.ui_reset?(0<e.ajx_count?(wpbc_ajx_booking_show_listing(e.ajx_items,e.ajx_search_params,e.ajx_booking_resources),wpbc_pagination_echo(wpbc_ajx_booking_listing.get_other_param("pagination_container"),{page_active:e.ajx_search_params.page_num,pages_count:Math.ceil(e.ajx_count/e.ajx_search_params.page_items_count),page_items_count:e.ajx_search_params.page_items_count,sort_type:e.ajx_search_params.sort_type}),wpbc_ajx_booking_define_ui_hooks()):(wpbc_ajx_booking__actual_listing__hide(),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice0 notice-warning0" style="text-align:center;margin-left:-50px;"><strong>No results found for current filter options...</strong></div>')),void 0!==e.ajx_new_bookings_count&&(0<(n=parseInt(e.ajx_new_bookings_count))&&jQuery(".wpbc_badge_count").show(),jQuery(".bk-update-count").html(n)),wpbc_booking_listing_reload_button__spin_pause(),jQuery("#ajax_respond").html(e)):location.reload());var n}).fail(function(e,_,o){window.console&&window.console.log&&console.log("Ajax_Error",e,_,o),jQuery("#wh_sort_selector").hide();o="<strong>Error!</strong> "+o;e.responseText&&(o+=e.responseText),wpbc_ajx_booking_show_message(o=o.replace(/\n/g,"<br />"))})}function wpbc_ajx_booking_show_listing(e,n,t){wpbc_ajx_define_templates__resource_manipulation(e,n,t),jQuery("#wh_sort_selector").css("display","flex");var o=wp.template("wpbc_ajx_booking_list_header"),r=wp.template("wpbc_ajx_booking_list_row");jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html(o()),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).append('<div class="wpbc_selectable_body"></div>'),console.groupCollapsed("LISTING_ROWS"),_.each(e,function(e,_,o){void 0!==n.keyword?e.__search_request_keyword__=n.keyword:e.__search_request_keyword__="",e.booking_resources=t,jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")+" .wpbc_selectable_body").append(r(e))}),console.groupEnd(),wpbc_define_gmail_checkbox_selection(jQuery)}function wpbc_ajx_define_templates__resource_manipulation(e,_,o){var n=wp.template("wpbc_ajx_change_booking_resource");jQuery("#wpbc_hidden_template__change_booking_resource").html(n({ajx_search_params:_,ajx_booking_resources:o}));n=wp.template("wpbc_ajx_duplicate_booking_to_other_resource");jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource").html(n({ajx_search_params:_,ajx_booking_resources:o}))}function wpbc_ajx_booking_show_message(e){wpbc_ajx_booking__actual_listing__hide(),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html('<div class="wpbc-settings-notice notice-warning" style="text-align:left">'+e+"</div>")}function wpbc_ajx_booking_send_search_request_with_params(e){_.each(e,function(e,_,o){wpbc_ajx_booking_listing.search_set_param(_,e)}),wpbc_ajx_booking_ajax_search_request()}function wpbc_ajx_booking_pagination_click(e){wpbc_ajx_booking_send_search_request_with_params({page_num:e})}function wpbc_ajx_booking_send_search_request_for_keyword(e){wpbc_ajx_booking_send_search_request_with_params({keyword:jQuery(e).val(),page_num:1})}var wpbc_ajx_booking_searching_after_few_seconds=function(){var o=0;return function(e,_){_=void 0!==_?_:1500,clearTimeout(o),o=setTimeout(wpbc_ajx_booking_send_search_request_for_keyword.bind(null,e),_)}}();function wpbc_ajx_booking_define_ui_hooks(){"function"==typeof wpbc_define_tippy_tooltips&&wpbc_define_tippy_tooltips(".wpbc_listing_container "),wpbc_ajx_booking__ui_define__locale(),wpbc_ajx_booking__ui_define__remark(),jQuery(".wpbc_items_per_page").on("change",function(e){wpbc_ajx_booking_send_search_request_with_params({page_items_count:jQuery(this).val(),page_num:1})}),jQuery(".wpbc_items_sort_type").on("change",function(e){wpbc_ajx_booking_send_search_request_with_params({sort_type:jQuery(this).val()})})}function wpbc_ajx_booking__actual_listing__show(){wpbc_ajx_booking_ajax_search_request()}function wpbc_ajx_booking__actual_listing__hide(){jQuery("#wh_sort_selector").hide(),jQuery(wpbc_ajx_booking_listing.get_other_param("listing_container")).html(""),jQuery(wpbc_ajx_booking_listing.get_other_param("pagination_container")).html("")}function wpbc_get_highlighted_search_keyword(e,_){if(0==(_=_.trim().toLowerCase()).length)return e;var o,n,_=new RegExp("fieldvalue[^<>]*>([^<]*".concat(_,"[^<]*)"),"gim"),_=e.toLowerCase().matchAll(_),t=[],r=0,a=_createForOfIteratorHelper(_=Array.from(_));try{for(a.s();!(n=a.n()).done;){var i=n.value,s=i.index+i[0].toLowerCase().indexOf(">",0)+1;t.push(e.substr(r,s-r)),o=e.toLowerCase().indexOf("<",s),t.push('<span class="fieldvalue name fieldsearchvalue">'+e.substr(s,o-s)+"</span>"),r=o}}catch(e){a.e(e)}finally{a.f()}return t.push(e.substr(r,e.length-r)),t.join("")}function wpbc_decode_HTML_entities(e){var _=document.createElement("textarea");return _.innerHTML=e,_.value}function wpbc_encode_HTML_entities(e){var _=document.createElement("textarea");return _.innerText=e,_.innerHTML}function wpbc_booking_listing_reload_button__spin_start(){jQuery("#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin").removeClass("wpbc_animation_pause")}function wpbc_booking_listing_reload_button__spin_pause(){jQuery("#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin").addClass("wpbc_animation_pause")}function wpbc_booking_listing_reload_button__is_spin(){return!!jQuery("#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin").hasClass("wpbc_animation_pause")}
2
+ //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19saXN0aW5nLm1pbi5qcyIsInNvdXJjZXMiOlsiaW5jbHVkZXMvcGFnZS1ib29raW5ncy9fb3V0L2Jvb2tpbmdzX19saXN0aW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5mdW5jdGlvbiBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihvLCBhbGxvd0FycmF5TGlrZSkgeyB2YXIgaXQgPSB0eXBlb2YgU3ltYm9sICE9PSBcInVuZGVmaW5lZFwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXSB8fCBvW1wiQEBpdGVyYXRvclwiXTsgaWYgKCFpdCkgeyBpZiAoQXJyYXkuaXNBcnJheShvKSB8fCAoaXQgPSBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobykpIHx8IGFsbG93QXJyYXlMaWtlICYmIG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSB7IGlmIChpdCkgbyA9IGl0OyB2YXIgaSA9IDA7IHZhciBGID0gZnVuY3Rpb24gRigpIHt9OyByZXR1cm4geyBzOiBGLCBuOiBmdW5jdGlvbiBuKCkgeyBpZiAoaSA+PSBvLmxlbmd0aCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9OyByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IG9baSsrXSB9OyB9LCBlOiBmdW5jdGlvbiBlKF9lKSB7IHRocm93IF9lOyB9LCBmOiBGIH07IH0gdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cXG5JbiBvcmRlciB0byBiZSBpdGVyYWJsZSwgbm9uLWFycmF5IG9iamVjdHMgbXVzdCBoYXZlIGEgW1N5bWJvbC5pdGVyYXRvcl0oKSBtZXRob2QuXCIpOyB9IHZhciBub3JtYWxDb21wbGV0aW9uID0gdHJ1ZSwgZGlkRXJyID0gZmFsc2UsIGVycjsgcmV0dXJuIHsgczogZnVuY3Rpb24gcygpIHsgaXQgPSBpdC5jYWxsKG8pOyB9LCBuOiBmdW5jdGlvbiBuKCkgeyB2YXIgc3RlcCA9IGl0Lm5leHQoKTsgbm9ybWFsQ29tcGxldGlvbiA9IHN0ZXAuZG9uZTsgcmV0dXJuIHN0ZXA7IH0sIGU6IGZ1bmN0aW9uIGUoX2UyKSB7IGRpZEVyciA9IHRydWU7IGVyciA9IF9lMjsgfSwgZjogZnVuY3Rpb24gZigpIHsgdHJ5IHsgaWYgKCFub3JtYWxDb21wbGV0aW9uICYmIGl0W1wicmV0dXJuXCJdICE9IG51bGwpIGl0W1wicmV0dXJuXCJdKCk7IH0gZmluYWxseSB7IGlmIChkaWRFcnIpIHRocm93IGVycjsgfSB9IH07IH1cblxuZnVuY3Rpb24gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KG8sIG1pbkxlbikgeyBpZiAoIW8pIHJldHVybjsgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTsgdmFyIG4gPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc2xpY2UoOCwgLTEpOyBpZiAobiA9PT0gXCJPYmplY3RcIiAmJiBvLmNvbnN0cnVjdG9yKSBuID0gby5jb25zdHJ1Y3Rvci5uYW1lOyBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTsgaWYgKG4gPT09IFwiQXJndW1lbnRzXCIgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QobikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShvLCBtaW5MZW4pOyB9XG5cbmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KGFyciwgbGVuKSB7IGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoOyBmb3IgKHZhciBpID0gMCwgYXJyMiA9IG5ldyBBcnJheShsZW4pOyBpIDwgbGVuOyBpKyspIHsgYXJyMltpXSA9IGFycltpXTsgfSByZXR1cm4gYXJyMjsgfVxuXG5mdW5jdGlvbiBfdHlwZW9mKG9iaikgeyBcIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mXCI7IHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikgeyByZXR1cm4gdHlwZW9mIG9iajsgfSA6IGZ1bmN0aW9uIChvYmopIHsgcmV0dXJuIG9iaiAmJiBcImZ1bmN0aW9uXCIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvYmouY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvYmogIT09IFN5bWJvbC5wcm90b3R5cGUgPyBcInN5bWJvbFwiIDogdHlwZW9mIG9iajsgfSwgX3R5cGVvZihvYmopOyB9XG5cbmpRdWVyeSgnYm9keScpLm9uKHtcbiAgJ3RvdWNobW92ZSc6IGZ1bmN0aW9uIHRvdWNobW92ZShlKSB7XG4gICAgalF1ZXJ5KCcudGltZXNwYXJ0bHknKS5lYWNoKGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgdmFyIHRkX2VsID0galF1ZXJ5KHRoaXMpLmdldCgwKTtcblxuICAgICAgaWYgKHVuZGVmaW5lZCAhPSB0ZF9lbC5fdGlwcHkpIHtcbiAgICAgICAgdmFyIGluc3RhbmNlID0gdGRfZWwuX3RpcHB5O1xuICAgICAgICBpbnN0YW5jZS5oaWRlKCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn0pO1xuLyoqXHJcbiAqIFJlcXVlc3QgT2JqZWN0XHJcbiAqIEhlcmUgd2UgY2FuICBkZWZpbmUgU2VhcmNoIHBhcmFtZXRlcnMgYW5kIFVwZGF0ZSBpdCBsYXRlciwgIHdoZW4gIHNvbWUgcGFyYW1ldGVyIHdhcyBjaGFuZ2VkXHJcbiAqXHJcbiAqL1xuXG52YXIgd3BiY19hanhfYm9va2luZ19saXN0aW5nID0gZnVuY3Rpb24gKG9iaiwgJCkge1xuICAvLyBTZWN1cmUgcGFyYW1ldGVycyBmb3IgQWpheFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIHZhciBwX3NlY3VyZSA9IG9iai5zZWN1cml0eV9vYmogPSBvYmouc2VjdXJpdHlfb2JqIHx8IHtcbiAgICB1c2VyX2lkOiAwLFxuICAgIG5vbmNlOiAnJyxcbiAgICBsb2NhbGU6ICcnXG4gIH07XG5cbiAgb2JqLnNldF9zZWN1cmVfcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1fa2V5LCBwYXJhbV92YWwpIHtcbiAgICBwX3NlY3VyZVtwYXJhbV9rZXldID0gcGFyYW1fdmFsO1xuICB9O1xuXG4gIG9iai5nZXRfc2VjdXJlX3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtX2tleSkge1xuICAgIHJldHVybiBwX3NlY3VyZVtwYXJhbV9rZXldO1xuICB9OyAvLyBMaXN0aW5nIFNlYXJjaCBwYXJhbWV0ZXJzXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuXG4gIHZhciBwX2xpc3RpbmcgPSBvYmouc2VhcmNoX3JlcXVlc3Rfb2JqID0gb2JqLnNlYXJjaF9yZXF1ZXN0X29iaiB8fCB7XG4gICAgc29ydDogXCJib29raW5nX2lkXCIsXG4gICAgc29ydF90eXBlOiBcIkRFU0NcIixcbiAgICBwYWdlX251bTogMSxcbiAgICBwYWdlX2l0ZW1zX2NvdW50OiAxMCxcbiAgICBjcmVhdGVfZGF0ZTogXCJcIixcbiAgICBrZXl3b3JkOiBcIlwiLFxuICAgIHNvdXJjZTogXCJcIlxuICB9O1xuXG4gIG9iai5zZWFyY2hfc2V0X2FsbF9wYXJhbXMgPSBmdW5jdGlvbiAocmVxdWVzdF9wYXJhbV9vYmopIHtcbiAgICBwX2xpc3RpbmcgPSByZXF1ZXN0X3BhcmFtX29iajtcbiAgfTtcblxuICBvYmouc2VhcmNoX2dldF9hbGxfcGFyYW1zID0gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBwX2xpc3Rpbmc7XG4gIH07XG5cbiAgb2JqLnNlYXJjaF9nZXRfcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1fa2V5KSB7XG4gICAgcmV0dXJuIHBfbGlzdGluZ1twYXJhbV9rZXldO1xuICB9O1xuXG4gIG9iai5zZWFyY2hfc2V0X3BhcmFtID0gZnVuY3Rpb24gKHBhcmFtX2tleSwgcGFyYW1fdmFsKSB7XG4gICAgLy8gaWYgKCBBcnJheS5pc0FycmF5KCBwYXJhbV92YWwgKSApe1xuICAgIC8vIFx0cGFyYW1fdmFsID0gSlNPTi5zdHJpbmdpZnkoIHBhcmFtX3ZhbCApO1xuICAgIC8vIH1cbiAgICBwX2xpc3RpbmdbcGFyYW1fa2V5XSA9IHBhcmFtX3ZhbDtcbiAgfTtcblxuICBvYmouc2VhcmNoX3NldF9wYXJhbXNfYXJyID0gZnVuY3Rpb24gKHBhcmFtc19hcnIpIHtcbiAgICBfLmVhY2gocGFyYW1zX2FyciwgZnVuY3Rpb24gKHBfdmFsLCBwX2tleSwgcF9kYXRhKSB7XG4gICAgICAvLyBEZWZpbmUgZGlmZmVyZW50IFNlYXJjaCAgcGFyYW1ldGVycyBmb3IgcmVxdWVzdFxuICAgICAgdGhpcy5zZWFyY2hfc2V0X3BhcmFtKHBfa2V5LCBwX3ZhbCk7XG4gICAgfSk7XG4gIH07IC8vIE90aGVyIHBhcmFtZXRlcnMgXHRcdFx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuICB2YXIgcF9vdGhlciA9IG9iai5vdGhlcl9vYmogPSBvYmoub3RoZXJfb2JqIHx8IHt9O1xuXG4gIG9iai5zZXRfb3RoZXJfcGFyYW0gPSBmdW5jdGlvbiAocGFyYW1fa2V5LCBwYXJhbV92YWwpIHtcbiAgICBwX290aGVyW3BhcmFtX2tleV0gPSBwYXJhbV92YWw7XG4gIH07XG5cbiAgb2JqLmdldF9vdGhlcl9wYXJhbSA9IGZ1bmN0aW9uIChwYXJhbV9rZXkpIHtcbiAgICByZXR1cm4gcF9vdGhlcltwYXJhbV9rZXldO1xuICB9O1xuXG4gIHJldHVybiBvYmo7XG59KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZyB8fCB7fSwgalF1ZXJ5KTtcbi8qKlxyXG4gKiAgIEFqYXggIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogU2VuZCBBamF4IHNlYXJjaCByZXF1ZXN0XHJcbiAqIGZvciBzZWFyY2hpbmcgc3BlY2lmaWMgS2V5d29yZCBhbmQgb3RoZXIgcGFyYW1zXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfYWpheF9zZWFyY2hfcmVxdWVzdCgpIHtcbiAgY29uc29sZS5ncm91cENvbGxhcHNlZCgnQUpYX0JPT0tJTkdfTElTVElORycpO1xuICBjb25zb2xlLmxvZygnID09IEJlZm9yZSBBamF4IFNlbmQgLSBzZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKSA9PSAnLCB3cGJjX2FqeF9ib29raW5nX2xpc3Rpbmcuc2VhcmNoX2dldF9hbGxfcGFyYW1zKCkpO1xuICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0KCk7XG4gIC8qXHJcbiAgLy9GaXhJbjogZm9yVmlkZW9cclxuICBpZiAoICEgaXNfdGhpc19hY3Rpb24gKXtcclxuICBcdC8vd3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX2hpZGUoKTtcclxuICBcdGpRdWVyeSggd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSggJ2xpc3RpbmdfY29udGFpbmVyJyApICkuaHRtbChcclxuICBcdFx0JzxkaXYgc3R5bGU9XCJ3aWR0aDoxMDAlO3RleHQtYWxpZ246IGNlbnRlcjtcIiBpZD1cIndwYmNfbG9hZGluZ19zZWN0aW9uXCI+PHNwYW4gY2xhc3M9XCJ3cGJjX2ljbl9hdXRvcmVuZXcgd3BiY19zcGluXCI+PC9zcGFuPjwvZGl2PidcclxuICBcdFx0KyBqUXVlcnkoIHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oICdsaXN0aW5nX2NvbnRhaW5lcicgKSApLmh0bWwoKVxyXG4gIFx0KTtcclxuICBcdGlmICggJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIChqUXVlcnkoICcjd3BiY19sb2FkaW5nX3NlY3Rpb24nICkud3BiY19teV9tb2RhbCkgKXtcdFx0XHQvL0ZpeEluOiA5LjAuMS41XHJcbiAgXHRcdGpRdWVyeSggJyN3cGJjX2xvYWRpbmdfc2VjdGlvbicgKS53cGJjX215X21vZGFsKCAnc2hvdycgKTtcclxuICBcdH0gZWxzZSB7XHJcbiAgXHRcdGFsZXJ0KCAnV2FybmluZyEgQm9va2luZyBDYWxlbmRhci4gSXRzIHNlZW1zIHRoYXQgIHlvdSBoYXZlIGRlYWN0aXZhdGVkIGxvYWRpbmcgb2YgQm9vdHN0cmFwIEpTIGZpbGVzIGF0IEJvb2tpbmcgU2V0dGluZ3MgR2VuZXJhbCBwYWdlIGluIEFkdmFuY2VkIHNlY3Rpb24uJyApXHJcbiAgXHR9XHJcbiAgfVxyXG4gIGlzX3RoaXNfYWN0aW9uID0gZmFsc2U7XHJcbiAgKi9cbiAgLy8gU3RhcnQgQWpheFxuXG4gIGpRdWVyeS5wb3N0KHdwYmNfZ2xvYmFsMS53cGJjX2FqYXh1cmwsIHtcbiAgICBhY3Rpb246ICdXUEJDX0FKWF9CT09LSU5HX0xJU1RJTkcnLFxuICAgIHdwYmNfYWp4X3VzZXJfaWQ6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCd1c2VyX2lkJyksXG4gICAgbm9uY2U6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfc2VjdXJlX3BhcmFtKCdub25jZScpLFxuICAgIHdwYmNfYWp4X2xvY2FsZTogd3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9zZWN1cmVfcGFyYW0oJ2xvY2FsZScpLFxuICAgIHNlYXJjaF9wYXJhbXM6IHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5zZWFyY2hfZ2V0X2FsbF9wYXJhbXMoKVxuICB9LFxuICAvKipcclxuICAgKiBTIHUgYyBjIGUgcyBzXHJcbiAgICpcclxuICAgKiBAcGFyYW0gcmVzcG9uc2VfZGF0YVx0XHQtXHRpdHMgb2JqZWN0IHJldHVybmVkIGZyb20gIEFqYXggLSBjbGFzcy1saXZlLXNlYXJjZy5waHBcclxuICAgKiBAcGFyYW0gdGV4dFN0YXR1c1x0XHQtXHQnc3VjY2VzcydcclxuICAgKiBAcGFyYW0ganFYSFJcdFx0XHRcdC1cdE9iamVjdFxyXG4gICAqL1xuICBmdW5jdGlvbiAocmVzcG9uc2VfZGF0YSwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAvL0ZpeEluOiBmb3JWaWRlb1xuICAgIC8valF1ZXJ5KCAnI3dwYmNfbG9hZGluZ19zZWN0aW9uJyApLndwYmNfbXlfbW9kYWwoICdoaWRlJyApO1xuICAgIGNvbnNvbGUubG9nKCcgPT0gUmVzcG9uc2UgV1BCQ19BSlhfQk9PS0lOR19MSVNUSU5HID09ICcsIHJlc3BvbnNlX2RhdGEpO1xuICAgIGNvbnNvbGUuZ3JvdXBFbmQoKTsgLy8gUHJvYmFibHkgRXJyb3JcblxuICAgIGlmIChfdHlwZW9mKHJlc3BvbnNlX2RhdGEpICE9PSAnb2JqZWN0JyB8fCByZXNwb25zZV9kYXRhID09PSBudWxsKSB7XG4gICAgICBqUXVlcnkoJyN3aF9zb3J0X3NlbGVjdG9yJykuaGlkZSgpO1xuICAgICAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykpLmh0bWwoJzxkaXYgY2xhc3M9XCJ3cGJjLXNldHRpbmdzLW5vdGljZSBub3RpY2Utd2FybmluZ1wiIHN0eWxlPVwidGV4dC1hbGlnbjpsZWZ0XCI+JyArIHJlc3BvbnNlX2RhdGEgKyAnPC9kaXY+Jyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBSZWxvYWQgcGFnZSwgYWZ0ZXIgZmlsdGVyIHRvb2xiYXIgd2FzIHJlc2V0ZWRcblxuXG4gICAgaWYgKHVuZGVmaW5lZCAhPSByZXNwb25zZV9kYXRhWydhanhfY2xlYW5lZF9wYXJhbXMnXSAmJiAncmVzZXRfZG9uZScgPT09IHJlc3BvbnNlX2RhdGFbJ2FqeF9jbGVhbmVkX3BhcmFtcyddWyd1aV9yZXNldCddKSB7XG4gICAgICBsb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIFNob3cgbGlzdGluZ1xuXG5cbiAgICBpZiAocmVzcG9uc2VfZGF0YVsnYWp4X2NvdW50J10gPiAwKSB7XG4gICAgICB3cGJjX2FqeF9ib29raW5nX3Nob3dfbGlzdGluZyhyZXNwb25zZV9kYXRhWydhanhfaXRlbXMnXSwgcmVzcG9uc2VfZGF0YVsnYWp4X3NlYXJjaF9wYXJhbXMnXSwgcmVzcG9uc2VfZGF0YVsnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJ10pO1xuICAgICAgd3BiY19wYWdpbmF0aW9uX2VjaG8od3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgncGFnaW5hdGlvbl9jb250YWluZXInKSwge1xuICAgICAgICAncGFnZV9hY3RpdmUnOiByZXNwb25zZV9kYXRhWydhanhfc2VhcmNoX3BhcmFtcyddWydwYWdlX251bSddLFxuICAgICAgICAncGFnZXNfY291bnQnOiBNYXRoLmNlaWwocmVzcG9uc2VfZGF0YVsnYWp4X2NvdW50J10gLyByZXNwb25zZV9kYXRhWydhanhfc2VhcmNoX3BhcmFtcyddWydwYWdlX2l0ZW1zX2NvdW50J10pLFxuICAgICAgICAncGFnZV9pdGVtc19jb3VudCc6IHJlc3BvbnNlX2RhdGFbJ2FqeF9zZWFyY2hfcGFyYW1zJ11bJ3BhZ2VfaXRlbXNfY291bnQnXSxcbiAgICAgICAgJ3NvcnRfdHlwZSc6IHJlc3BvbnNlX2RhdGFbJ2FqeF9zZWFyY2hfcGFyYW1zJ11bJ3NvcnRfdHlwZSddXG4gICAgICB9KTtcbiAgICAgIHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCk7IC8vIFJlZGVmaW5lIEhvb2tzLCBiZWNhdXNlIHdlIHNob3cgbmV3IERPTSBlbGVtZW50c1xuICAgIH0gZWxzZSB7XG4gICAgICB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpO1xuICAgICAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykpLmh0bWwoJzxkaXYgY2xhc3M9XCJ3cGJjLXNldHRpbmdzLW5vdGljZTAgbm90aWNlLXdhcm5pbmcwXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmNlbnRlcjttYXJnaW4tbGVmdDotNTBweDtcIj4nICsgJzxzdHJvbmc+JyArICdObyByZXN1bHRzIGZvdW5kIGZvciBjdXJyZW50IGZpbHRlciBvcHRpb25zLi4uJyArICc8L3N0cm9uZz4nICsgLy8nPHN0cm9uZz4nICsgJ05vIHJlc3VsdHMgZm91bmQuLi4nICsgJzwvc3Ryb25nPicgK1xuICAgICAgJzwvZGl2PicpO1xuICAgIH0gLy8gVXBkYXRlIG5ldyBib29raW5nIGNvdW50XG5cblxuICAgIGlmICh1bmRlZmluZWQgIT09IHJlc3BvbnNlX2RhdGFbJ2FqeF9uZXdfYm9va2luZ3NfY291bnQnXSkge1xuICAgICAgdmFyIGFqeF9uZXdfYm9va2luZ3NfY291bnQgPSBwYXJzZUludChyZXNwb25zZV9kYXRhWydhanhfbmV3X2Jvb2tpbmdzX2NvdW50J10pO1xuXG4gICAgICBpZiAoYWp4X25ld19ib29raW5nc19jb3VudCA+IDApIHtcbiAgICAgICAgalF1ZXJ5KCcud3BiY19iYWRnZV9jb3VudCcpLnNob3coKTtcbiAgICAgIH1cblxuICAgICAgalF1ZXJ5KCcuYmstdXBkYXRlLWNvdW50JykuaHRtbChhanhfbmV3X2Jvb2tpbmdzX2NvdW50KTtcbiAgICB9XG5cbiAgICB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlKCk7XG4gICAgalF1ZXJ5KCcjYWpheF9yZXNwb25kJykuaHRtbChyZXNwb25zZV9kYXRhKTsgLy8gRm9yIGFiaWxpdHkgdG8gc2hvdyByZXNwb25zZSwgYWRkIHN1Y2ggRElWIGVsZW1lbnQgdG8gcGFnZVxuICB9KS5mYWlsKGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcbiAgICBpZiAod2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nKSB7XG4gICAgICBjb25zb2xlLmxvZygnQWpheF9FcnJvcicsIGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bik7XG4gICAgfVxuXG4gICAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmhpZGUoKTtcbiAgICB2YXIgZXJyb3JfbWVzc2FnZSA9ICc8c3Ryb25nPicgKyAnRXJyb3IhJyArICc8L3N0cm9uZz4gJyArIGVycm9yVGhyb3duO1xuXG4gICAgaWYgKGpxWEhSLnJlc3BvbnNlVGV4dCkge1xuICAgICAgZXJyb3JfbWVzc2FnZSArPSBqcVhIUi5yZXNwb25zZVRleHQ7XG4gICAgfVxuXG4gICAgZXJyb3JfbWVzc2FnZSA9IGVycm9yX21lc3NhZ2UucmVwbGFjZSgvXFxuL2csIFwiPGJyIC8+XCIpO1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2hvd19tZXNzYWdlKGVycm9yX21lc3NhZ2UpO1xuICB9KSAvLyAuZG9uZSggICBmdW5jdGlvbiAoIGRhdGEsIHRleHRTdGF0dXMsIGpxWEhSICkgeyAgIGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUubG9nICl7IGNvbnNvbGUubG9nKCAnc2Vjb25kIHN1Y2Nlc3MnLCBkYXRhLCB0ZXh0U3RhdHVzLCBqcVhIUiApOyB9ICAgIH0pXG4gIC8vIC5hbHdheXMoIGZ1bmN0aW9uICggZGF0YV9qcVhIUiwgdGV4dFN0YXR1cywganFYSFJfZXJyb3JUaHJvd24gKSB7ICAgaWYgKCB3aW5kb3cuY29uc29sZSAmJiB3aW5kb3cuY29uc29sZS5sb2cgKXsgY29uc29sZS5sb2coICdhbHdheXMgZmluaXNoZWQnLCBkYXRhX2pxWEhSLCB0ZXh0U3RhdHVzLCBqcVhIUl9lcnJvclRocm93biApOyB9ICAgICB9KVxuICA7IC8vIEVuZCBBamF4XG59XG4vKipcclxuICogICBWaWV3cyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIFNob3cgTGlzdGluZyBUYWJsZSBcdFx0YW5kIGRlZmluZSBnTWFpbCBjaGVja2JveCBob29rc1xyXG4gKlxyXG4gKiBAcGFyYW0ganNvbl9pdGVtc19hcnJcdFx0LSBKU09OIG9iamVjdCB3aXRoIEl0ZW1zXHJcbiAqIEBwYXJhbSBqc29uX3NlYXJjaF9wYXJhbXNcdC0gSlNPTiBvYmplY3Qgd2l0aCBTZWFyY2hcclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zaG93X2xpc3RpbmcoanNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcykge1xuICB3cGJjX2FqeF9kZWZpbmVfdGVtcGxhdGVzX19yZXNvdXJjZV9tYW5pcHVsYXRpb24oanNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcyk7IC8vY29uc29sZS5sb2coICdqc29uX2l0ZW1zX2FycicgLCBqc29uX2l0ZW1zX2FyciwganNvbl9zZWFyY2hfcGFyYW1zICk7XG5cbiAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmNzcyhcImRpc3BsYXlcIiwgXCJmbGV4XCIpO1xuICB2YXIgbGlzdF9oZWFkZXJfdHBsID0gd3AudGVtcGxhdGUoJ3dwYmNfYWp4X2Jvb2tpbmdfbGlzdF9oZWFkZXInKTtcbiAgdmFyIGxpc3Rfcm93X3RwbCA9IHdwLnRlbXBsYXRlKCd3cGJjX2FqeF9ib29raW5nX2xpc3Rfcm93Jyk7IC8vIEhlYWRlclxuXG4gIGpRdWVyeSh3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCdsaXN0aW5nX2NvbnRhaW5lcicpKS5odG1sKGxpc3RfaGVhZGVyX3RwbCgpKTsgLy8gQm9keVxuXG4gIGpRdWVyeSh3cGJjX2FqeF9ib29raW5nX2xpc3RpbmcuZ2V0X290aGVyX3BhcmFtKCdsaXN0aW5nX2NvbnRhaW5lcicpKS5hcHBlbmQoJzxkaXYgY2xhc3M9XCJ3cGJjX3NlbGVjdGFibGVfYm9keVwiPjwvZGl2PicpOyAvLyBSIG8gdyBzXG5cbiAgY29uc29sZS5ncm91cENvbGxhcHNlZCgnTElTVElOR19ST1dTJyk7IC8vIExJU1RJTkdfUk9XU1xuXG4gIF8uZWFjaChqc29uX2l0ZW1zX2FyciwgZnVuY3Rpb24gKHBfdmFsLCBwX2tleSwgcF9kYXRhKSB7XG4gICAgaWYgKCd1bmRlZmluZWQnICE9PSB0eXBlb2YganNvbl9zZWFyY2hfcGFyYW1zWydrZXl3b3JkJ10pIHtcbiAgICAgIC8vIFBhcmFtZXRlciBmb3IgbWFya2luZyBrZXl3b3JkIHdpdGggZGlmZmVyZW50IGNvbG9yIGluIGEgbGlzdFxuICAgICAgcF92YWxbJ19fc2VhcmNoX3JlcXVlc3Rfa2V5d29yZF9fJ10gPSBqc29uX3NlYXJjaF9wYXJhbXNbJ2tleXdvcmQnXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcF92YWxbJ19fc2VhcmNoX3JlcXVlc3Rfa2V5d29yZF9fJ10gPSAnJztcbiAgICB9XG5cbiAgICBwX3ZhbFsnYm9va2luZ19yZXNvdXJjZXMnXSA9IGpzb25fYm9va2luZ19yZXNvdXJjZXM7XG4gICAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykgKyAnIC53cGJjX3NlbGVjdGFibGVfYm9keScpLmFwcGVuZChsaXN0X3Jvd190cGwocF92YWwpKTtcbiAgfSk7XG5cbiAgY29uc29sZS5ncm91cEVuZCgpOyAvLyBMSVNUSU5HX1JPV1NcblxuICB3cGJjX2RlZmluZV9nbWFpbF9jaGVja2JveF9zZWxlY3Rpb24oalF1ZXJ5KTsgLy8gUmVkZWZpbmUgSG9va3MgZm9yIGNsaWNraW5nIGF0IENoZWNrYm94ZXNcbn1cbi8qKlxyXG4gKiBEZWZpbmUgdGVtcGxhdGUgZm9yIGNoYW5naW5nIGJvb2tpbmcgcmVzb3VyY2VzICYgIHVwZGF0ZSBpdCBlYWNoIHRpbWUsICB3aGVuICBsaXN0aW5nIHVwZGF0aW5nLCB1c2VmdWwgIGZvciBzaG93aW5nIGFjdHVhbCAgYm9va2luZyByZXNvdXJjZXMuXHJcbiAqXHJcbiAqIEBwYXJhbSBqc29uX2l0ZW1zX2Fyclx0XHQtIEpTT04gb2JqZWN0IHdpdGggSXRlbXNcclxuICogQHBhcmFtIGpzb25fc2VhcmNoX3BhcmFtc1x0LSBKU09OIG9iamVjdCB3aXRoIFNlYXJjaFxyXG4gKiBAcGFyYW0ganNvbl9ib29raW5nX3Jlc291cmNlc1x0LSBKU09OIG9iamVjdCB3aXRoIFJlc291cmNlc1xyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9kZWZpbmVfdGVtcGxhdGVzX19yZXNvdXJjZV9tYW5pcHVsYXRpb24oanNvbl9pdGVtc19hcnIsIGpzb25fc2VhcmNoX3BhcmFtcywganNvbl9ib29raW5nX3Jlc291cmNlcykge1xuICAvLyBDaGFuZ2UgYm9va2luZyByZXNvdXJjZVxuICB2YXIgY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfdHBsID0gd3AudGVtcGxhdGUoJ3dwYmNfYWp4X2NoYW5nZV9ib29raW5nX3Jlc291cmNlJyk7XG4gIGpRdWVyeSgnI3dwYmNfaGlkZGVuX3RlbXBsYXRlX19jaGFuZ2VfYm9va2luZ19yZXNvdXJjZScpLmh0bWwoY2hhbmdlX2Jvb2tpbmdfcmVzb3VyY2VfdHBsKHtcbiAgICAnYWp4X3NlYXJjaF9wYXJhbXMnOiBqc29uX3NlYXJjaF9wYXJhbXMsXG4gICAgJ2FqeF9ib29raW5nX3Jlc291cmNlcyc6IGpzb25fYm9va2luZ19yZXNvdXJjZXNcbiAgfSkpOyAvLyBEdXBsaWNhdGUgYm9va2luZyByZXNvdXJjZVxuXG4gIHZhciBkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV90cGwgPSB3cC50ZW1wbGF0ZSgnd3BiY19hanhfZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2UnKTtcbiAgalF1ZXJ5KCcjd3BiY19oaWRkZW5fdGVtcGxhdGVfX2R1cGxpY2F0ZV9ib29raW5nX3RvX290aGVyX3Jlc291cmNlJykuaHRtbChkdXBsaWNhdGVfYm9va2luZ190b19vdGhlcl9yZXNvdXJjZV90cGwoe1xuICAgICdhanhfc2VhcmNoX3BhcmFtcyc6IGpzb25fc2VhcmNoX3BhcmFtcyxcbiAgICAnYWp4X2Jvb2tpbmdfcmVzb3VyY2VzJzoganNvbl9ib29raW5nX3Jlc291cmNlc1xuICB9KSk7XG59XG4vKipcclxuICogU2hvdyBqdXN0IG1lc3NhZ2UgaW5zdGVhZCBvZiBsaXN0aW5nIGFuZCBoaWRlIHBhZ2luYXRpb25cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UobWVzc2FnZSkge1xuICB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpO1xuICBqUXVlcnkod3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgnbGlzdGluZ19jb250YWluZXInKSkuaHRtbCgnPGRpdiBjbGFzcz1cIndwYmMtc2V0dGluZ3Mtbm90aWNlIG5vdGljZS13YXJuaW5nXCIgc3R5bGU9XCJ0ZXh0LWFsaWduOmxlZnRcIj4nICsgbWVzc2FnZSArICc8L2Rpdj4nKTtcbn1cbi8qKlxyXG4gKiAgIEggbyBvIGsgcyAgLSAgaXRzIEFjdGlvbi9UaW1lcyB3aGVuIG5lZWQgdG8gcmUtUmVuZGVyIFZpZXdzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogU2VuZCBBamF4IFNlYXJjaCBSZXF1ZXN0IGFmdGVyIFVwZGF0aW5nIHNlYXJjaCByZXF1ZXN0IHBhcmFtZXRlcnNcclxuICpcclxuICogQHBhcmFtIHBhcmFtc19hcnJcclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X3dpdGhfcGFyYW1zKHBhcmFtc19hcnIpIHtcbiAgLy8gRGVmaW5lIGRpZmZlcmVudCBTZWFyY2ggIHBhcmFtZXRlcnMgZm9yIHJlcXVlc3RcbiAgXy5lYWNoKHBhcmFtc19hcnIsIGZ1bmN0aW9uIChwX3ZhbCwgcF9rZXksIHBfZGF0YSkge1xuICAgIC8vY29uc29sZS5sb2coICdSZXF1ZXN0IGZvcjogJywgcF9rZXksIHBfdmFsICk7XG4gICAgd3BiY19hanhfYm9va2luZ19saXN0aW5nLnNlYXJjaF9zZXRfcGFyYW0ocF9rZXksIHBfdmFsKTtcbiAgfSk7IC8vIFNlbmQgQWpheCBSZXF1ZXN0XG5cblxuICB3cGJjX2FqeF9ib29raW5nX2FqYXhfc2VhcmNoX3JlcXVlc3QoKTtcbn1cbi8qKlxyXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgXCJQYWdlIE51bWJlclwiXHJcbiAqIEBwYXJhbSBwYWdlX251bWJlclx0aW50XHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayhwYWdlX251bWJlcikge1xuICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICdwYWdlX251bSc6IHBhZ2VfbnVtYmVyXG4gIH0pO1xufVxuLyoqXHJcbiAqICAgS2V5d29yZCBTZWFyY2hpbmcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cbi8qKlxyXG4gKiBTZWFyY2ggcmVxdWVzdCBmb3IgXCJLZXl3b3JkXCIsIGFsc28gc2V0IGN1cnJlbnQgcGFnZSB0byAgMVxyXG4gKlxyXG4gKiBAcGFyYW0gZWxlbWVudF9pZFx0LVx0SFRNTCBJRCAgb2YgZWxlbWVudCwgIHdoZXJlIHdhcyBlbnRlcmVkIGtleXdvcmRcclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkKGVsZW1lbnRfaWQpIHtcbiAgLy8gV2UgbmVlZCB0byBSZXNldCBwYWdlX251bSB0byAxIHdpdGggZWFjaCBuZXcgc2VhcmNoLCBiZWNhdXNlIHdlIGNhbiBiZSBhdCBwYWdlICM0LCAgYnV0IGFmdGVyICBuZXcgc2VhcmNoICB3ZSBjYW4gIGhhdmUgdG90YWxseSAgb25seSAgMSBwYWdlXG4gIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgJ2tleXdvcmQnOiBqUXVlcnkoZWxlbWVudF9pZCkudmFsKCksXG4gICAgJ3BhZ2VfbnVtJzogMVxuICB9KTtcbn1cbi8qKlxyXG4gKiBTZW5kIHNlYXJjaCByZXF1ZXN0IGFmdGVyIGZldyBzZWNvbmRzICh1c3VhbGx5IGFmdGVyIDEsNSBzZWMpXHJcbiAqIENsb3N1cmUgZnVuY3Rpb24uIEl0cyB1c2VmdWwsICBmb3IgZG8gIG5vdCBzZW5kIHRvbyBtYW55IEFqYXggcmVxdWVzdHMsIHdoZW4gc29tZW9uZSBtYWtlIGZhc3QgdHlwaW5nLlxyXG4gKi9cblxuXG52YXIgd3BiY19hanhfYm9va2luZ19zZWFyY2hpbmdfYWZ0ZXJfZmV3X3NlY29uZHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciBjbG9zZWRfdGltZXIgPSAwO1xuICByZXR1cm4gZnVuY3Rpb24gKGVsZW1lbnRfaWQsIHRpbWVyX2RlbGF5KSB7XG4gICAgLy8gR2V0IGRlZmF1bHQgdmFsdWUgb2YgXCJ0aW1lcl9kZWxheVwiLCAgaWYgcGFyYW1ldGVyIHdhcyBub3QgcGFzc2VkIGludG8gdGhlIGZ1bmN0aW9uLlxuICAgIHRpbWVyX2RlbGF5ID0gdHlwZW9mIHRpbWVyX2RlbGF5ICE9PSAndW5kZWZpbmVkJyA/IHRpbWVyX2RlbGF5IDogMTUwMDtcbiAgICBjbGVhclRpbWVvdXQoY2xvc2VkX3RpbWVyKTsgLy8gQ2xlYXIgcHJldmlvdXMgdGltZXJcbiAgICAvLyBTdGFydCBuZXcgVGltZXJcblxuICAgIGNsb3NlZF90aW1lciA9IHNldFRpbWVvdXQod3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkLmJpbmQobnVsbCwgZWxlbWVudF9pZCksIHRpbWVyX2RlbGF5KTtcbiAgfTtcbn0oKTtcbi8qKlxyXG4gKiAgIERlZmluZSBEeW5hbWljIEhvb2tzICAobGlrZSBwYWdpbmF0aW9uIGNsaWNrLCB3aGljaCByZW5ldyBlYWNoIHRpbWUgd2l0aCBuZXcgbGlzdGluZyBzaG93aW5nKSAgLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogRGVmaW5lIEhUTUwgdWkgSG9va3M6IG9uIEtleVVwIHwgQ2hhbmdlIHwgLT4gU29ydCBPcmRlciAmIE51bWJlciBJdGVtcyAvIFBhZ2VcclxuICogV2UgYXJlIGhjbmFnZWQgaXQgZWFjaCAgdGltZSwgd2hlbiBzaG93aW5nIG5ldyBsaXN0aW5nLCBiZWNhdXNlIERPTSBlbGVtZW50cyBjaG5hZ2VkXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYWp4X2Jvb2tpbmdfZGVmaW5lX3VpX2hvb2tzKCkge1xuICBpZiAoJ2Z1bmN0aW9uJyA9PT0gdHlwZW9mIHdwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzKSB7XG4gICAgd3BiY19kZWZpbmVfdGlwcHlfdG9vbHRpcHMoJy53cGJjX2xpc3RpbmdfY29udGFpbmVyICcpO1xuICB9XG5cbiAgd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUoKTtcbiAgd3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19yZW1hcmsoKTsgLy8gSXRlbXMgUGVyIFBhZ2VcblxuICBqUXVlcnkoJy53cGJjX2l0ZW1zX3Blcl9wYWdlJykub24oJ2NoYW5nZScsIGZ1bmN0aW9uIChldmVudCkge1xuICAgIHdwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyh7XG4gICAgICAncGFnZV9pdGVtc19jb3VudCc6IGpRdWVyeSh0aGlzKS52YWwoKSxcbiAgICAgICdwYWdlX251bSc6IDFcbiAgICB9KTtcbiAgfSk7IC8vIFNvcnRpbmdcblxuICBqUXVlcnkoJy53cGJjX2l0ZW1zX3NvcnRfdHlwZScpLm9uKCdjaGFuZ2UnLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICB3cGJjX2FqeF9ib29raW5nX3NlbmRfc2VhcmNoX3JlcXVlc3Rfd2l0aF9wYXJhbXMoe1xuICAgICAgJ3NvcnRfdHlwZSc6IGpRdWVyeSh0aGlzKS52YWwoKVxuICAgIH0pO1xuICB9KTtcbn1cbi8qKlxyXG4gKiAgIFNob3cgLyBIaWRlIExpc3RpbmcgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG4vKipcclxuICogIFNob3cgTGlzdGluZyBUYWJsZSBcdC0gXHRTZW5kaW5nIEFqYXggUmVxdWVzdFx0LVx0d2l0aCBwYXJhbWV0ZXJzIHRoYXQgIHdlIGVhcmx5ICBkZWZpbmVkIGluIFwid3BiY19hanhfYm9va2luZ19saXN0aW5nXCIgT2JqLlxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19fc2hvdygpIHtcbiAgd3BiY19hanhfYm9va2luZ19hamF4X3NlYXJjaF9yZXF1ZXN0KCk7IC8vIFNlbmQgQWpheCBSZXF1ZXN0XHQtXHR3aXRoIHBhcmFtZXRlcnMgdGhhdCAgd2UgZWFybHkgIGRlZmluZWQgaW4gXCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmdcIiBPYmouXG59XG4vKipcclxuICogSGlkZSBMaXN0aW5nIFRhYmxlICggYW5kIFBhZ2luYXRpb24gKVxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSgpIHtcbiAgalF1ZXJ5KCcjd2hfc29ydF9zZWxlY3RvcicpLmhpZGUoKTtcbiAgalF1ZXJ5KHdwYmNfYWp4X2Jvb2tpbmdfbGlzdGluZy5nZXRfb3RoZXJfcGFyYW0oJ2xpc3RpbmdfY29udGFpbmVyJykpLmh0bWwoJycpO1xuICBqUXVlcnkod3BiY19hanhfYm9va2luZ19saXN0aW5nLmdldF9vdGhlcl9wYXJhbSgncGFnaW5hdGlvbl9jb250YWluZXInKSkuaHRtbCgnJyk7XG59XG4vKipcclxuICogICBTdXBwb3J0IGZ1bmN0aW9ucyBmb3IgQ29udGVudCBUZW1wbGF0ZSBkYXRhICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIEhpZ2hsaWdodCBzdHJpbmdzLFxyXG4gKiBieSBpbnNlcnRpbmcgPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPi4uLjwvc3Bhbj4gaHRtbCAgZWxlbWVudHMgaW50byB0aGUgc3RyaW5nLlxyXG4gKiBAcGFyYW0ge3N0cmluZ30gYm9va2luZ19kZXRhaWxzIFx0LSBTb3VyY2Ugc3RyaW5nXHJcbiAqIEBwYXJhbSB7c3RyaW5nfSBib29raW5nX2tleXdvcmRcdC0gS2V5d29yZCB0byBoaWdobGlnaHRcclxuICogQHJldHVybnMge3N0cmluZ31cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19nZXRfaGlnaGxpZ2h0ZWRfc2VhcmNoX2tleXdvcmQoYm9va2luZ19kZXRhaWxzLCBib29raW5nX2tleXdvcmQpIHtcbiAgYm9va2luZ19rZXl3b3JkID0gYm9va2luZ19rZXl3b3JkLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuXG4gIGlmICgwID09IGJvb2tpbmdfa2V5d29yZC5sZW5ndGgpIHtcbiAgICByZXR1cm4gYm9va2luZ19kZXRhaWxzO1xuICB9IC8vIEhpZ2hsaWdodCBzdWJzdHJpbmcgd2l0aGluZyBIVE1MIHRhZ3MgaW4gXCJDb250ZW50IG9mIGJvb2tpbmcgZmllbGRzIGRhdGFcIiAtLSBlLmcuIHN0YXJ0aW5nIGZyb20gID4gIGFuZCBlbmRpbmcgd2l0aCA8XG5cblxuICB2YXIga2V5d29yZFJlZ2V4ID0gbmV3IFJlZ0V4cChcImZpZWxkdmFsdWVbXjw+XSo+KFtePF0qXCIuY29uY2F0KGJvb2tpbmdfa2V5d29yZCwgXCJbXjxdKilcIiksICdnaW0nKTsgLy9sZXQgbWF0Y2hlcyA9IFsuLi5ib29raW5nX2RldGFpbHMudG9Mb3dlckNhc2UoKS5tYXRjaEFsbCgga2V5d29yZFJlZ2V4ICldO1xuXG4gIHZhciBtYXRjaGVzID0gYm9va2luZ19kZXRhaWxzLnRvTG93ZXJDYXNlKCkubWF0Y2hBbGwoa2V5d29yZFJlZ2V4KTtcbiAgbWF0Y2hlcyA9IEFycmF5LmZyb20obWF0Y2hlcyk7XG4gIHZhciBzdHJpbmdzX2FyciA9IFtdO1xuICB2YXIgcG9zX3ByZXZpb3VzID0gMDtcbiAgdmFyIHNlYXJjaF9wb3Nfc3RhcnQ7XG4gIHZhciBzZWFyY2hfcG9zX2VuZDtcblxuICB2YXIgX2l0ZXJhdG9yID0gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIobWF0Y2hlcyksXG4gICAgICBfc3RlcDtcblxuICB0cnkge1xuICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7KSB7XG4gICAgICB2YXIgbWF0Y2ggPSBfc3RlcC52YWx1ZTtcbiAgICAgIHNlYXJjaF9wb3Nfc3RhcnQgPSBtYXRjaC5pbmRleCArIG1hdGNoWzBdLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignPicsIDApICsgMTtcbiAgICAgIHN0cmluZ3NfYXJyLnB1c2goYm9va2luZ19kZXRhaWxzLnN1YnN0cihwb3NfcHJldmlvdXMsIHNlYXJjaF9wb3Nfc3RhcnQgLSBwb3NfcHJldmlvdXMpKTtcbiAgICAgIHNlYXJjaF9wb3NfZW5kID0gYm9va2luZ19kZXRhaWxzLnRvTG93ZXJDYXNlKCkuaW5kZXhPZignPCcsIHNlYXJjaF9wb3Nfc3RhcnQpO1xuICAgICAgc3RyaW5nc19hcnIucHVzaCgnPHNwYW4gY2xhc3M9XCJmaWVsZHZhbHVlIG5hbWUgZmllbGRzZWFyY2h2YWx1ZVwiPicgKyBib29raW5nX2RldGFpbHMuc3Vic3RyKHNlYXJjaF9wb3Nfc3RhcnQsIHNlYXJjaF9wb3NfZW5kIC0gc2VhcmNoX3Bvc19zdGFydCkgKyAnPC9zcGFuPicpO1xuICAgICAgcG9zX3ByZXZpb3VzID0gc2VhcmNoX3Bvc19lbmQ7XG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBfaXRlcmF0b3IuZShlcnIpO1xuICB9IGZpbmFsbHkge1xuICAgIF9pdGVyYXRvci5mKCk7XG4gIH1cblxuICBzdHJpbmdzX2Fyci5wdXNoKGJvb2tpbmdfZGV0YWlscy5zdWJzdHIocG9zX3ByZXZpb3VzLCBib29raW5nX2RldGFpbHMubGVuZ3RoIC0gcG9zX3ByZXZpb3VzKSk7XG4gIHJldHVybiBzdHJpbmdzX2Fyci5qb2luKCcnKTtcbn1cbi8qKlxyXG4gKiBDb252ZXJ0IHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzICAgZnJvbTpcdCAmYW1wOyBcdC0+IFx0JlxyXG4gKlxyXG4gKiBAcGFyYW0gdGV4dFxyXG4gKiBAcmV0dXJucyB7Kn1cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19kZWNvZGVfSFRNTF9lbnRpdGllcyh0ZXh0KSB7XG4gIHZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gIHRleHRBcmVhLmlubmVySFRNTCA9IHRleHQ7XG4gIHJldHVybiB0ZXh0QXJlYS52YWx1ZTtcbn1cbi8qKlxyXG4gKiBDb252ZXJ0IFRPIHNwZWNpYWwgSFRNTCBjaGFyYWN0ZXJzICAgZnJvbTpcdCAmIFx0LT4gXHQmYW1wO1xyXG4gKlxyXG4gKiBAcGFyYW0gdGV4dFxyXG4gKiBAcmV0dXJucyB7Kn1cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19lbmNvZGVfSFRNTF9lbnRpdGllcyh0ZXh0KSB7XG4gIHZhciB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RleHRhcmVhJyk7XG4gIHRleHRBcmVhLmlubmVyVGV4dCA9IHRleHQ7XG4gIHJldHVybiB0ZXh0QXJlYS5pbm5lckhUTUw7XG59XG4vKipcclxuICogICBTdXBwb3J0IEZ1bmN0aW9ucyAtIFNwaW4gSWNvbiBpbiBCdXR0b25zICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuLyoqXHJcbiAqIFNwaW4gYnV0dG9uIGluIEZpbHRlciB0b29sYmFyICAtICBTdGFydFxyXG4gKi9cblxuXG5mdW5jdGlvbiB3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3N0YXJ0KCkge1xuICBqUXVlcnkoJyN3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uIC5tZW51X2ljb24ud3BiY19zcGluJykucmVtb3ZlQ2xhc3MoJ3dwYmNfYW5pbWF0aW9uX3BhdXNlJyk7XG59XG4vKipcclxuICogU3BpbiBidXR0b24gaW4gRmlsdGVyIHRvb2xiYXIgIC0gIFBhdXNlXHJcbiAqL1xuXG5cbmZ1bmN0aW9uIHdwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX3NwaW5fcGF1c2UoKSB7XG4gIGpRdWVyeSgnI3dwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b24gLm1lbnVfaWNvbi53cGJjX3NwaW4nKS5hZGRDbGFzcygnd3BiY19hbmltYXRpb25fcGF1c2UnKTtcbn1cbi8qKlxyXG4gKiBTcGluIGJ1dHRvbiBpbiBGaWx0ZXIgdG9vbGJhciAgLSAgaXMgU3Bpbm5pbmcgP1xyXG4gKlxyXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cclxuICovXG5cblxuZnVuY3Rpb24gd3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9faXNfc3BpbigpIHtcbiAgaWYgKGpRdWVyeSgnI3dwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b24gLm1lbnVfaWNvbi53cGJjX3NwaW4nKS5oYXNDbGFzcygnd3BiY19hbmltYXRpb25fcGF1c2UnKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSnpiM1Z5WTJWeklqcGJJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgzTnlZeTlpYjI5cmFXNW5jMTlmYkdsemRHbHVaeTVxY3lKZExDSnVZVzFsY3lJNld5SnFVWFZsY25raUxDSnZiaUlzSW1VaUxDSmxZV05vSWl3aWFXNWtaWGdpTENKMFpGOWxiQ0lzSW1kbGRDSXNJblZ1WkdWbWFXNWxaQ0lzSWw5MGFYQndlU0lzSW1sdWMzUmhibU5sSWl3aWFHbGtaU0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYkdsemRHbHVaeUlzSW05aWFpSXNJaVFpTENKd1gzTmxZM1Z5WlNJc0luTmxZM1Z5YVhSNVgyOWlhaUlzSW5WelpYSmZhV1FpTENKdWIyNWpaU0lzSW14dlkyRnNaU0lzSW5ObGRGOXpaV04xY21WZmNHRnlZVzBpTENKd1lYSmhiVjlyWlhraUxDSndZWEpoYlY5MllXd2lMQ0puWlhSZmMyVmpkWEpsWDNCaGNtRnRJaXdpY0Y5c2FYTjBhVzVuSWl3aWMyVmhjbU5vWDNKbGNYVmxjM1JmYjJKcUlpd2ljMjl5ZENJc0luTnZjblJmZEhsd1pTSXNJbkJoWjJWZmJuVnRJaXdpY0dGblpWOXBkR1Z0YzE5amIzVnVkQ0lzSW1OeVpXRjBaVjlrWVhSbElpd2lhMlY1ZDI5eVpDSXNJbk52ZFhKalpTSXNJbk5sWVhKamFGOXpaWFJmWVd4c1gzQmhjbUZ0Y3lJc0luSmxjWFZsYzNSZmNHRnlZVzFmYjJKcUlpd2ljMlZoY21Ob1gyZGxkRjloYkd4ZmNHRnlZVzF6SWl3aWMyVmhjbU5vWDJkbGRGOXdZWEpoYlNJc0luTmxZWEpqYUY5elpYUmZjR0Z5WVcwaUxDSnpaV0Z5WTJoZmMyVjBYM0JoY21GdGMxOWhjbklpTENKd1lYSmhiWE5mWVhKeUlpd2lYeUlzSW5CZmRtRnNJaXdpY0Y5clpYa2lMQ0p3WDJSaGRHRWlMQ0p3WDI5MGFHVnlJaXdpYjNSb1pYSmZiMkpxSWl3aWMyVjBYMjkwYUdWeVgzQmhjbUZ0SWl3aVoyVjBYMjkwYUdWeVgzQmhjbUZ0SWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5aGFtRjRYM05sWVhKamFGOXlaWEYxWlhOMElpd2lZMjl1YzI5c1pTSXNJbWR5YjNWd1EyOXNiR0Z3YzJWa0lpd2liRzluSWl3aWQzQmlZMTlpYjI5cmFXNW5YMnhwYzNScGJtZGZjbVZzYjJGa1gySjFkSFJ2Ymw5ZmMzQnBibDl6ZEdGeWRDSXNJbkJ2YzNRaUxDSjNjR0pqWDJkc2IySmhiREVpTENKM2NHSmpYMkZxWVhoMWNtd2lMQ0poWTNScGIyNGlMQ0ozY0dKalgyRnFlRjkxYzJWeVgybGtJaXdpZDNCaVkxOWhhbmhmYkc5allXeGxJaXdpYzJWaGNtTm9YM0JoY21GdGN5SXNJbkpsYzNCdmJuTmxYMlJoZEdFaUxDSjBaWGgwVTNSaGRIVnpJaXdpYW5GWVNGSWlMQ0puY205MWNFVnVaQ0lzSW1oMGJXd2lMQ0pzYjJOaGRHbHZiaUlzSW5KbGJHOWhaQ0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYzJodmQxOXNhWE4wYVc1bklpd2lkM0JpWTE5d1lXZHBibUYwYVc5dVgyVmphRzhpTENKTllYUm9JaXdpWTJWcGJDSXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZaR1ZtYVc1bFgzVnBYMmh2YjJ0eklpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZZV04wZFdGc1gyeHBjM1JwYm1kZlgyaHBaR1VpTENKaGFuaGZibVYzWDJKdmIydHBibWR6WDJOdmRXNTBJaXdpY0dGeWMyVkpiblFpTENKemFHOTNJaXdpZDNCaVkxOWliMjlyYVc1blgyeHBjM1JwYm1kZmNtVnNiMkZrWDJKMWRIUnZibDlmYzNCcGJsOXdZWFZ6WlNJc0ltWmhhV3dpTENKbGNuSnZjbFJvY205M2JpSXNJbmRwYm1SdmR5SXNJbVZ5Y205eVgyMWxjM05oWjJVaUxDSnlaWE53YjI1elpWUmxlSFFpTENKeVpYQnNZV05sSWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5emFHOTNYMjFsYzNOaFoyVWlMQ0pxYzI5dVgybDBaVzF6WDJGeWNpSXNJbXB6YjI1ZmMyVmhjbU5vWDNCaGNtRnRjeUlzSW1wemIyNWZZbTl2YTJsdVoxOXlaWE52ZFhKalpYTWlMQ0ozY0dKalgyRnFlRjlrWldacGJtVmZkR1Z0Y0d4aGRHVnpYMTl5WlhOdmRYSmpaVjl0WVc1cGNIVnNZWFJwYjI0aUxDSmpjM01pTENKc2FYTjBYMmhsWVdSbGNsOTBjR3dpTENKM2NDSXNJblJsYlhCc1lYUmxJaXdpYkdsemRGOXliM2RmZEhCc0lpd2lZWEJ3Wlc1a0lpd2lkM0JpWTE5a1pXWnBibVZmWjIxaGFXeGZZMmhsWTJ0aWIzaGZjMlZzWldOMGFXOXVJaXdpWTJoaGJtZGxYMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVmZkSEJzSWl3aVpIVndiR2xqWVhSbFgySnZiMnRwYm1kZmRHOWZiM1JvWlhKZmNtVnpiM1Z5WTJWZmRIQnNJaXdpYldWemMyRm5aU0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5SXNJbmR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjR0ZuYVc1aGRHbHZibDlqYkdsamF5SXNJbkJoWjJWZmJuVnRZbVZ5SWl3aWQzQmlZMTloYW5oZlltOXZhMmx1WjE5elpXNWtYM05sWVhKamFGOXlaWEYxWlhOMFgyWnZjbDlyWlhsM2IzSmtJaXdpWld4bGJXVnVkRjlwWkNJc0luWmhiQ0lzSW5kd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWaGNtTm9hVzVuWDJGbWRHVnlYMlpsZDE5elpXTnZibVJ6SWl3aVkyeHZjMlZrWDNScGJXVnlJaXdpZEdsdFpYSmZaR1ZzWVhraUxDSmpiR1ZoY2xScGJXVnZkWFFpTENKelpYUlVhVzFsYjNWMElpd2lZbWx1WkNJc0luZHdZbU5mWkdWbWFXNWxYM1JwY0hCNVgzUnZiMngwYVhCeklpd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWkdWbWFXNWxYMTlzYjJOaGJHVWlMQ0ozY0dKalgyRnFlRjlpYjI5cmFXNW5YMTkxYVY5a1pXWnBibVZmWDNKbGJXRnlheUlzSW1WMlpXNTBJaXdpZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmWVdOMGRXRnNYMnhwYzNScGJtZGZYM05vYjNjaUxDSjNjR0pqWDJkbGRGOW9hV2RvYkdsbmFIUmxaRjl6WldGeVkyaGZhMlY1ZDI5eVpDSXNJbUp2YjJ0cGJtZGZaR1YwWVdsc2N5SXNJbUp2YjJ0cGJtZGZhMlY1ZDI5eVpDSXNJblJ5YVcwaUxDSjBiMHh2ZDJWeVEyRnpaU0lzSW14bGJtZDBhQ0lzSW10bGVYZHZjbVJTWldkbGVDSXNJbEpsWjBWNGNDSXNJbTFoZEdOb1pYTWlMQ0p0WVhSamFFRnNiQ0lzSWtGeWNtRjVJaXdpWm5KdmJTSXNJbk4wY21sdVozTmZZWEp5SWl3aWNHOXpYM0J5WlhacGIzVnpJaXdpYzJWaGNtTm9YM0J2YzE5emRHRnlkQ0lzSW5ObFlYSmphRjl3YjNOZlpXNWtJaXdpYldGMFkyZ2lMQ0pwYm1SbGVFOW1JaXdpY0hWemFDSXNJbk4xWW5OMGNpSXNJbXB2YVc0aUxDSjNjR0pqWDJSbFkyOWtaVjlJVkUxTVgyVnVkR2wwYVdWeklpd2lkR1Y0ZENJc0luUmxlSFJCY21WaElpd2laRzlqZFcxbGJuUWlMQ0pqY21WaGRHVkZiR1Z0Wlc1MElpd2lhVzV1WlhKSVZFMU1JaXdpZG1Gc2RXVWlMQ0ozY0dKalgyVnVZMjlrWlY5SVZFMU1YMlZ1ZEdsMGFXVnpJaXdpYVc1dVpYSlVaWGgwSWl3aWNtVnRiM1psUTJ4aGMzTWlMQ0poWkdSRGJHRnpjeUlzSW5kd1ltTmZZbTl2YTJsdVoxOXNhWE4wYVc1blgzSmxiRzloWkY5aWRYUjBiMjVmWDJselgzTndhVzRpTENKb1lYTkRiR0Z6Y3lKZExDSnRZWEJ3YVc1bmN5STZJa0ZCUVVFN096czdPenM3T3pzN1FVRkZRVUVzVFVGQlRTeERRVUZETEUxQlFVUXNRMEZCVGl4RFFVRmxReXhGUVVGbUxFTkJRV3RDTzBGQlEyUXNaVUZCWVN4dFFrRkJVME1zUTBGQlZDeEZRVUZaTzBGQlJUTkNSaXhKUVVGQlFTeE5RVUZOTEVOQlFVVXNZMEZCUml4RFFVRk9MRU5CUVhsQ1J5eEpRVUY2UWl4RFFVRXJRaXhWUVVGWFF5eExRVUZZTEVWQlFXdENPMEZCUldoRUxGVkJRVWxETEV0QlFVc3NSMEZCUjB3c1RVRkJUU3hEUVVGRkxFbEJRVVlzUTBGQlRpeERRVUZsVFN4SFFVRm1MRU5CUVc5Q0xFTkJRWEJDTEVOQlFWbzdPMEZCUlVFc1ZVRkJUVU1zVTBGQlV5eEpRVUZKUml4TFFVRkxMRU5CUVVOSExFMUJRWHBDTEVWQlFXdERPMEZCUldwRExGbEJRVWxETEZGQlFWRXNSMEZCUjBvc1MwRkJTeXhEUVVGRFJ5eE5RVUZ5UWp0QlFVTkJReXhSUVVGQlFTeFJRVUZSTEVOQlFVTkRMRWxCUVZRN1FVRkRRVHRCUVVORUxFdEJWRVE3UVVGVlFUdEJRV0puUWl4RFFVRnNRanRCUVdkQ1FUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenRCUVVOQkxFbEJRVWxETEhkQ1FVRjNRaXhIUVVGSkxGVkJRVmRETEVkQlFWZ3NSVUZCWjBKRExFTkJRV2hDTEVWQlFXMUNPMEZCUld4RU8wRkJRMEVzVFVGQlNVTXNVVUZCVVN4SFFVRkhSaXhIUVVGSExFTkJRVU5ITEZsQlFVb3NSMEZCYlVKSUxFZEJRVWNzUTBGQlEwY3NXVUZCU2l4SlFVRnZRanRCUVVONFEwTXNTVUZCUVVFc1QwRkJUeXhGUVVGRkxFTkJSQ3RDTzBGQlJYaERReXhKUVVGQlFTeExRVUZMTEVWQlFVa3NSVUZHSzBJN1FVRkhlRU5ETEVsQlFVRkJMRTFCUVUwc1JVRkJSenRCUVVnclFpeEhRVUYwUkRzN1FVRk5RVTRzUlVGQlFVRXNSMEZCUnl4RFFVRkRUeXhuUWtGQlNpeEhRVUYxUWl4VlFVRlhReXhUUVVGWUxFVkJRWE5DUXl4VFFVRjBRaXhGUVVGclF6dEJRVU40UkZBc1NVRkJRVUVzVVVGQlVTeERRVUZGVFN4VFFVRkdMRU5CUVZJc1IwRkJkMEpETEZOQlFYaENPMEZCUTBFc1IwRkdSRHM3UVVGSlFWUXNSVUZCUVVFc1IwRkJSeXhEUVVGRFZTeG5Ra0ZCU2l4SFFVRjFRaXhWUVVGWFJpeFRRVUZZTEVWQlFYVkNPMEZCUXpkRExGZEJRVTlPTEZGQlFWRXNRMEZCUlUwc1UwRkJSaXhEUVVGbU8wRkJRMEVzUjBGR1JDeERRV0pyUkN4RFFXdENiRVE3T3p0QlFVTkJMRTFCUVVsSExGTkJRVk1zUjBGQlIxZ3NSMEZCUnl4RFFVRkRXU3hyUWtGQlNpeEhRVUY1UWxvc1IwRkJSeXhEUVVGRFdTeHJRa0ZCU2l4SlFVRXdRanRCUVVOc1JFTXNTVUZCUVVFc1NVRkJTU3hGUVVGakxGbEJSR2RETzBGQlJXeEVReXhKUVVGQlFTeFRRVUZUTEVWQlFWTXNUVUZHWjBNN1FVRkhiRVJETEVsQlFVRkJMRkZCUVZFc1JVRkJWU3hEUVVoblF6dEJRVWxzUkVNc1NVRkJRVUVzWjBKQlFXZENMRVZCUVVVc1JVRktaME03UVVGTGJFUkRMRWxCUVVGQkxGZEJRVmNzUlVGQlR5eEZRVXhuUXp0QlFVMXNSRU1zU1VGQlFVRXNUMEZCVHl4RlFVRlhMRVZCVG1kRE8wRkJUMnhFUXl4SlFVRkJRU3hOUVVGTkxFVkJRVms3UVVGUVowTXNSMEZCYmtVN08wRkJWVUZ1UWl4RlFVRkJRU3hIUVVGSExFTkJRVU52UWl4eFFrRkJTaXhIUVVFMFFpeFZRVUZYUXl4cFFrRkJXQ3hGUVVFclFqdEJRVU14UkZZc1NVRkJRVUVzVTBGQlV5eEhRVUZIVlN4cFFrRkJXanRCUVVOQkxFZEJSa1E3TzBGQlNVRnlRaXhGUVVGQlFTeEhRVUZITEVOQlFVTnpRaXh4UWtGQlNpeEhRVUUwUWl4WlFVRlpPMEZCUTNaRExGZEJRVTlZTEZOQlFWQTdRVUZEUVN4SFFVWkVPenRCUVVsQldDeEZRVUZCUVN4SFFVRkhMRU5CUVVOMVFpeG5Ra0ZCU2l4SFFVRjFRaXhWUVVGWFppeFRRVUZZTEVWQlFYVkNPMEZCUXpkRExGZEJRVTlITEZOQlFWTXNRMEZCUlVnc1UwRkJSaXhEUVVGb1FqdEJRVU5CTEVkQlJrUTdPMEZCU1VGU0xFVkJRVUZCTEVkQlFVY3NRMEZCUTNkQ0xHZENRVUZLTEVkQlFYVkNMRlZCUVZkb1FpeFRRVUZZTEVWQlFYTkNReXhUUVVGMFFpeEZRVUZyUXp0QlFVTjRSRHRCUVVOQk8wRkJRMEU3UVVGRFFVVXNTVUZCUVVFc1UwRkJVeXhEUVVGRlNDeFRRVUZHTEVOQlFWUXNSMEZCZVVKRExGTkJRWHBDTzBGQlEwRXNSMEZNUkRzN1FVRlBRVlFzUlVGQlFVRXNSMEZCUnl4RFFVRkRlVUlzY1VKQlFVb3NSMEZCTkVJc1ZVRkJWVU1zVlVGQlZpeEZRVUZ6UWp0QlFVTnFSRU1zU1VGQlFVRXNRMEZCUXl4RFFVRkRjRU1zU1VGQlJpeERRVUZSYlVNc1ZVRkJVaXhGUVVGdlFpeFZRVUZYUlN4TFFVRllMRVZCUVd0Q1F5eExRVUZzUWl4RlFVRjVRa01zVFVGQmVrSXNSVUZCYVVNN1FVRkJaMEk3UVVGRGNFVXNWMEZCUzA0c1owSkJRVXdzUTBGQmRVSkxMRXRCUVhaQ0xFVkJRVGhDUkN4TFFVRTVRanRCUVVOQkxFdEJSa1E3UVVGSFFTeEhRVXBFTEVOQmFFUnJSQ3hEUVhWRWJFUTdPenRCUVVOQkxFMUJRVWxITEU5QlFVOHNSMEZCUnk5Q0xFZEJRVWNzUTBGQlEyZERMRk5CUVVvc1IwRkJaMEpvUXl4SFFVRkhMRU5CUVVOblF5eFRRVUZLTEVsQlFXbENMRVZCUVM5RE96dEJRVVZCYUVNc1JVRkJRVUVzUjBGQlJ5eERRVUZEYVVNc1pVRkJTaXhIUVVGelFpeFZRVUZYZWtJc1UwRkJXQ3hGUVVGelFrTXNVMEZCZEVJc1JVRkJhME03UVVGRGRrUnpRaXhKUVVGQlFTeFBRVUZQTEVOQlFVVjJRaXhUUVVGR0xFTkJRVkFzUjBGQmRVSkRMRk5CUVhaQ08wRkJRMEVzUjBGR1JEczdRVUZKUVZRc1JVRkJRVUVzUjBGQlJ5eERRVUZEYTBNc1pVRkJTaXhIUVVGelFpeFZRVUZYTVVJc1UwRkJXQ3hGUVVGMVFqdEJRVU0xUXl4WFFVRlBkVUlzVDBGQlR5eERRVUZGZGtJc1UwRkJSaXhEUVVGa08wRkJRMEVzUjBGR1JEczdRVUZMUVN4VFFVRlBVaXhIUVVGUU8wRkJRMEVzUTBGd1JTdENMRU5CYjBVM1FrUXNkMEpCUVhkQ0xFbEJRVWtzUlVGd1JVTXNSVUZ2UlVkWUxFMUJjRVZJTEVOQlFXaERPMEZCZFVWQk8wRkJRMEU3TzBGQlJVRTdRVUZEUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTXJReXh2UTBGQlZDeEhRVUVyUXp0QlFVVXZRME1zUlVGQlFVRXNUMEZCVHl4RFFVRkRReXhqUVVGU0xFTkJRWFZDTEhGQ1FVRjJRanRCUVVFclEwUXNSVUZCUVVFc1QwRkJUeXhEUVVGRFJTeEhRVUZTTEVOQlFXRXNiMFJCUVdJc1JVRkJiMFYyUXl4M1FrRkJkMElzUTBGQlEzVkNMSEZDUVVGNlFpeEZRVUZ3UlR0QlFVVTVRMmxDTEVWQlFVRkJMRGhEUVVFNFF6dEJRVVV2UXp0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5ET3p0QlFVTkJia1FzUlVGQlFVRXNUVUZCVFN4RFFVRkRiMFFzU1VGQlVDeERRVUZoUXl4WlFVRlpMRU5CUVVORExGbEJRVEZDTEVWQlEwYzdRVUZEUTBNc1NVRkJRVUVzVFVGQlRTeEZRVUZaTERCQ1FVUnVRanRCUVVWRFF5eEpRVUZCUVN4blFrRkJaMElzUlVGQlJUZERMSGRDUVVGM1FpeERRVUZEVnl4blFrRkJla0lzUTBGQk1rTXNVMEZCTTBNc1EwRkdia0k3UVVGSFEwd3NTVUZCUVVFc1MwRkJTeXhGUVVGaFRpeDNRa0ZCZDBJc1EwRkJRMWNzWjBKQlFYcENMRU5CUVRKRExFOUJRVE5ETEVOQlNHNUNPMEZCU1VOdFF5eEpRVUZCUVN4bFFVRmxMRVZCUVVjNVF5eDNRa0ZCZDBJc1EwRkJRMWNzWjBKQlFYcENMRU5CUVRKRExGRkJRVE5ETEVOQlNtNUNPMEZCVFVOdlF5eEpRVUZCUVN4aFFVRmhMRVZCUVVjdlF5eDNRa0ZCZDBJc1EwRkJRM1ZDTEhGQ1FVRjZRanRCUVU1cVFpeEhRVVJJTzBGQlUwYzdRVUZEU2p0QlFVTkJPMEZCUTBFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFNTeFpRVUZYZVVJc1lVRkJXQ3hGUVVFd1FrTXNWVUZCTVVJc1JVRkJjME5ETEV0QlFYUkRMRVZCUVRoRE8wRkJRMnhFTzBGQlEwRTdRVUZGUVdJc1NVRkJRVUVzVDBGQlR5eERRVUZEUlN4SFFVRlNMRU5CUVdFc01rTkJRV0lzUlVGQk1FUlRMR0ZCUVRGRU8wRkJRVEpGV0N4SlFVRkJRU3hQUVVGUExFTkJRVU5qTEZGQlFWSXNSMEZLZWtJc1EwRkxOME03TzBGQlEwRXNVVUZCVFN4UlFVRlBTQ3hoUVVGUUxFMUJRWGxDTEZGQlFURkNMRWxCUVhkRFFTeGhRVUZoTEV0QlFVc3NTVUZCTDBRc1JVRkJjMFU3UVVGRGNrVXpSQ3hOUVVGQlFTeE5RVUZOTEVOQlFVVXNiVUpCUVVZc1EwRkJUaXhEUVVFNFFsVXNTVUZCT1VJN1FVRkRRVllzVFVGQlFVRXNUVUZCVFN4RFFVRkZWeXgzUWtGQmQwSXNRMEZCUTIxRExHVkJRWHBDTEVOQlFUQkRMRzFDUVVFeFF5eERRVUZHTEVOQlFVNHNRMEZCTUVWcFFpeEpRVUV4UlN4RFFVTlhMRGhGUVVORFNpeGhRVVJFTEVkQlJVRXNVVUZJV0R0QlFVdEJPMEZCUTBFc1MwRmtORU1zUTBGblFqZERPenM3UVVGRFFTeFJRVUZwUW5CRUxGTkJRVk1zU1VGQlNXOUVMR0ZCUVdFc1EwRkJSU3h2UWtGQlJpeERRVUZvUXl4SlFVTktMR2xDUVVGcFFrRXNZVUZCWVN4RFFVRkZMRzlDUVVGR0xFTkJRV0lzUTBGQmRVTXNWVUZCZGtNc1EwRkVlRUlzUlVGRlF6dEJRVU5CU3l4TlFVRkJRU3hSUVVGUkxFTkJRVU5ETEUxQlFWUTdRVUZEUVR0QlFVTkJMRXRCZEVJMFF5eERRWGRDTjBNN096dEJRVU5CTEZGQlFVdE9MR0ZCUVdFc1EwRkJSU3hYUVVGR0xFTkJRV0lzUjBGQkswSXNRMEZCY0VNc1JVRkJkVU03UVVGRmRFTlBMRTFCUVVGQkxEWkNRVUUyUWl4RFFVRkZVQ3hoUVVGaExFTkJRVVVzVjBGQlJpeERRVUZtTEVWQlFXZERRU3hoUVVGaExFTkJRVVVzYlVKQlFVWXNRMEZCTjBNc1JVRkJjMFZCTEdGQlFXRXNRMEZCUlN4MVFrRkJSaXhEUVVGdVJpeERRVUUzUWp0QlFVVkJVU3hOUVVGQlFTeHZRa0ZCYjBJc1EwRkRia0o0UkN4M1FrRkJkMElzUTBGQlEyMURMR1ZCUVhwQ0xFTkJRVEJETEhOQ1FVRXhReXhEUVVSdFFpeEZRVVZ1UWp0QlFVTkRMSFZDUVVGbFlTeGhRVUZoTEVOQlFVVXNiVUpCUVVZc1EwRkJZaXhEUVVGelF5eFZRVUYwUXl4RFFVUm9RanRCUVVWRExIVkNRVUZsVXl4SlFVRkpMRU5CUVVORExFbEJRVXdzUTBGQlYxWXNZVUZCWVN4RFFVRkZMRmRCUVVZc1EwRkJZaXhIUVVFclFrRXNZVUZCWVN4RFFVRkZMRzFDUVVGR0xFTkJRV0lzUTBGQmMwTXNhMEpCUVhSRExFTkJRVEZETEVOQlJtaENPMEZCU1VNc05FSkJRVzlDUVN4aFFVRmhMRU5CUVVVc2JVSkJRVVlzUTBGQllpeERRVUZ6UXl4clFrRkJkRU1zUTBGS2NrSTdRVUZMUXl4eFFrRkJiMEpCTEdGQlFXRXNRMEZCUlN4dFFrRkJSaXhEUVVGaUxFTkJRWE5ETEZkQlFYUkRPMEZCVEhKQ0xFOUJSbTFDTEVOQlFYQkNPMEZCVlVGWExFMUJRVUZCTEdkRFFVRm5ReXhIUVdSTkxFTkJZMGM3UVVGRmVrTXNTMEZvUWtRc1RVRm5Razg3UVVGRlRrTXNUVUZCUVVFc2MwTkJRWE5ETzBGQlEzUkRka1VzVFVGQlFVRXNUVUZCVFN4RFFVRkZWeXgzUWtGQmQwSXNRMEZCUTIxRExHVkJRWHBDTEVOQlFUQkRMRzFDUVVFeFF5eERRVUZHTEVOQlFVNHNRMEZCTUVWcFFpeEpRVUV4UlN4RFFVTkxMSEZIUVVORExGVkJSRVFzUjBGRFl5eG5SRUZFWkN4SFFVTnBSU3hYUVVScVJTeEhRVVZETzBGQlEwUXNZMEZLVER0QlFVMUJMRXRCYkVRMFF5eERRVzlFTjBNN096dEJRVU5CTEZGQlFVdDRSQ3hUUVVGVExFdEJRVXR2UkN4aFFVRmhMRU5CUVVVc2QwSkJRVVlzUTBGQmFFTXNSVUZCT0VRN1FVRkROMFFzVlVGQlNXRXNjMEpCUVhOQ0xFZEJRVWRETEZGQlFWRXNRMEZCUldRc1lVRkJZU3hEUVVGRkxIZENRVUZHTEVOQlFXWXNRMEZCY2tNN08wRkJRMEVzVlVGQlNXRXNjMEpCUVhOQ0xFZEJRVU1zUTBGQk0wSXNSVUZCTmtJN1FVRkROVUo0UlN4UlFVRkJRU3hOUVVGTkxFTkJRVVVzYlVKQlFVWXNRMEZCVGl4RFFVRTRRakJGTEVsQlFUbENPMEZCUTBFN08wRkJRMFF4UlN4TlFVRkJRU3hOUVVGTkxFTkJRVVVzYTBKQlFVWXNRMEZCVGl4RFFVRTJRaXRFTEVsQlFUZENMRU5CUVcxRFV5eHpRa0ZCYmtNN1FVRkRRVHM3UVVGRlJFY3NTVUZCUVVFc09FTkJRVGhETzBGQlJUbERNMFVzU1VGQlFVRXNUVUZCVFN4RFFVRkZMR1ZCUVVZc1EwRkJUaXhEUVVFd1FpdEVMRWxCUVRGQ0xFTkJRV2REU2l4aFFVRm9ReXhGUVM5RU5rTXNRMEVyUkVzN1FVRkRiRVFzUjBGb1Jrb3NSVUZwUmsxcFFpeEpRV3BHVGl4RFFXbEdXU3hWUVVGWFppeExRVUZZTEVWQlFXdENSQ3hWUVVGc1FpeEZRVUU0UW1sQ0xGZEJRVGxDTEVWQlFUUkRPMEZCUVVzc1VVRkJTME1zVFVGQlRTeERRVUZET1VJc1QwRkJVQ3hKUVVGclFqaENMRTFCUVUwc1EwRkJRemxDTEU5QlFWQXNRMEZCWlVVc1IwRkJkRU1zUlVGQk1rTTdRVUZCUlVZc1RVRkJRVUVzVDBGQlR5eERRVUZEUlN4SFFVRlNMRU5CUVdFc1dVRkJZaXhGUVVFeVFsY3NTMEZCTTBJc1JVRkJhME5FTEZWQlFXeERMRVZCUVRoRGFVSXNWMEZCT1VNN1FVRkJPRVE3TzBGQlEzQkxOMFVzU1VGQlFVRXNUVUZCVFN4RFFVRkZMRzFDUVVGR0xFTkJRVTRzUTBGQk9FSlZMRWxCUVRsQ08wRkJRMEVzVVVGQlNYRkZMR0ZCUVdFc1IwRkJSeXhoUVVGaExGRkJRV0lzUjBGQmQwSXNXVUZCZUVJc1IwRkJkVU5HTEZkQlFUTkVPenRCUVVOQkxGRkJRVXRvUWl4TFFVRkxMRU5CUVVOdFFpeFpRVUZZTEVWQlFYbENPMEZCUTNoQ1JDeE5RVUZCUVN4aFFVRmhMRWxCUVVsc1FpeExRVUZMTEVOQlFVTnRRaXhaUVVGMlFqdEJRVU5CT3p0QlFVTkVSQ3hKUVVGQlFTeGhRVUZoTEVkQlFVZEJMR0ZCUVdFc1EwRkJRMFVzVDBGQlpDeERRVUYxUWl4TFFVRjJRaXhGUVVFNFFpeFJRVUU1UWl4RFFVRm9RanRCUVVWQlF5eEpRVUZCUVN3MlFrRkJOa0lzUTBGQlJVZ3NZVUZCUml4RFFVRTNRanRCUVVORExFZEJNVVpNTEVWQk1rWlZPMEZCUTA0N1FVRTFSa29zUjBGMlFqaERMRU5CYjBoMlF6dEJRVU5RTzBGQlIwUTdRVUZEUVRzN1FVRkZRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5pTERaQ1FVRlVMRU5CUVhkRGFVSXNZMEZCZUVNc1JVRkJkMFJETEd0Q1FVRjRSQ3hGUVVFMFJVTXNjMEpCUVRWRkxFVkJRVzlITzBGQlJXNUhReXhGUVVGQlFTeG5SRUZCWjBRc1EwRkJSVWdzWTBGQlJpeEZRVUZyUWtNc2EwSkJRV3hDTEVWQlFYTkRReXh6UWtGQmRFTXNRMEZCYUVRc1EwRkdiVWNzUTBGSmNFYzdPMEZCUTBOeVJpeEZRVUZCUVN4TlFVRk5MRU5CUVVVc2JVSkJRVVlzUTBGQlRpeERRVUU0UW5WR0xFZEJRVGxDTEVOQlFXMURMRk5CUVc1RExFVkJRVGhETEUxQlFUbERPMEZCUTBFc1RVRkJTVU1zWlVGQlpTeEhRVUZIUXl4RlFVRkZMRU5CUVVORExGRkJRVWdzUTBGQllTdzRRa0ZCWWl4RFFVRjBRanRCUVVOQkxFMUJRVWxETEZsQlFWa3NSMEZCVFVZc1JVRkJSU3hEUVVGRFF5eFJRVUZJTEVOQlFXRXNNa0pCUVdJc1EwRkJkRUlzUTBGUWJVY3NRMEZWYmtjN08wRkJRMEV4Uml4RlFVRkJRU3hOUVVGTkxFTkJRVVZYTEhkQ1FVRjNRaXhEUVVGRGJVTXNaVUZCZWtJc1EwRkJNRU1zYlVKQlFURkRMRU5CUVVZc1EwRkJUaXhEUVVFd1JXbENMRWxCUVRGRkxFTkJRV2RHZVVJc1pVRkJaU3hGUVVFdlJpeEZRVmh0Unl4RFFXRnVSenM3UVVGRFFYaEdMRVZCUVVGQkxFMUJRVTBzUTBGQlJWY3NkMEpCUVhkQ0xFTkJRVU50UXl4bFFVRjZRaXhEUVVFd1F5eHRRa0ZCTVVNc1EwRkJSaXhEUVVGT0xFTkJRVEJGT0VNc1RVRkJNVVVzUTBGQmEwWXNNRU5CUVd4R0xFVkJaRzFITEVOQlowSnVSenM3UVVGRFJEVkRMRVZCUVVGQkxFOUJRVThzUTBGQlEwTXNZMEZCVWl4RFFVRjNRaXhqUVVGNFFpeEZRV3BDYjBjc1EwRnBRblpET3p0QlFVTTFSRllzUlVGQlFVRXNRMEZCUXl4RFFVRkRjRU1zU1VGQlJpeERRVUZSWjBZc1kwRkJVaXhGUVVGM1FpeFZRVUZYTTBNc1MwRkJXQ3hGUVVGclFrTXNTMEZCYkVJc1JVRkJlVUpETEUxQlFYcENMRVZCUVdsRE8wRkJRM2hFTEZGQlFVc3NaMEpCUVdkQ0xFOUJRVTh3UXl4clFrRkJhMElzUTBGQlJTeFRRVUZHTEVOQlFUbERMRVZCUVRaRU8wRkJRV003UVVGRE1VVTFReXhOUVVGQlFTeExRVUZMTEVOQlFVVXNORUpCUVVZc1EwRkJUQ3hIUVVGM1F6UkRMR3RDUVVGclFpeERRVUZGTEZOQlFVWXNRMEZCTVVRN1FVRkRRU3hMUVVaRUxFMUJSVTg3UVVGRFRqVkRMRTFCUVVGQkxFdEJRVXNzUTBGQlJTdzBRa0ZCUml4RFFVRk1MRWRCUVhkRExFVkJRWGhETzBGQlEwRTdPMEZCUTBSQkxFbEJRVUZCTEV0QlFVc3NRMEZCUlN4dFFrRkJSaXhEUVVGTUxFZEJRU3RDTmtNc2MwSkJRUzlDTzBGQlEwRnlSaXhKUVVGQlFTeE5RVUZOTEVOQlFVVlhMSGRDUVVGM1FpeERRVUZEYlVNc1pVRkJla0lzUTBGQk1FTXNiVUpCUVRGRExFbEJRV3RGTEhkQ1FVRndSU3hEUVVGT0xFTkJRWEZIT0VNc1RVRkJja2NzUTBGQk5rZEVMRmxCUVZrc1EwRkJSVzVFTEV0QlFVWXNRMEZCZWtnN1FVRkRRU3hIUVZKRU96dEJRVk5FVVN4RlFVRkJRU3hQUVVGUExFTkJRVU5qTEZGQlFWSXNSMEV6UW05SExFTkJNa0oyUkRzN1FVRkZOVU1yUWl4RlFVRkJRU3h2UTBGQmIwTXNRMEZCUlRkR0xFMUJRVVlzUTBGQmNFTXNRMEUzUW0xSExFTkJOa0k1UXp0QlFVTnlSRHRCUVVkQk8wRkJRMFE3UVVGRFFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFF5eFRRVUZUYzBZc1owUkJRVlFzUTBGQk1rUklMR05CUVRORUxFVkJRVEpGUXl4clFrRkJNMFVzUlVGQkswWkRMSE5DUVVFdlJpeEZRVUYxU0R0QlFVVjBTRHRCUVVOQkxFMUJRVWxUTERKQ1FVRXlRaXhIUVVGSFRDeEZRVUZGTEVOQlFVTkRMRkZCUVVnc1EwRkJZU3hyUTBGQllpeERRVUZzUXp0QlFVVkJNVVlzUlVGQlFVRXNUVUZCVFN4RFFVRkZMR2RFUVVGR0xFTkJRVTRzUTBGQk1rUXJSQ3hKUVVFelJDeERRVU5wUWl0Q0xESkNRVUV5UWl4RFFVRkZPMEZCUTNwQ0xIbENRVUY1UWxZc2EwSkJSRUU3UVVGRmVrSXNOa0pCUVhsQ1F6dEJRVVpCTEVkQlFVWXNRMEZFTlVNc1JVRk1jMGdzUTBGWmRFZzdPMEZCUTBFc1RVRkJTVlVzZFVOQlFYVkRMRWRCUVVkT0xFVkJRVVVzUTBGQlEwTXNVVUZCU0N4RFFVRmhMRGhEUVVGaUxFTkJRVGxETzBGQlJVRXhSaXhGUVVGQlFTeE5RVUZOTEVOQlFVVXNORVJCUVVZc1EwRkJUaXhEUVVGMVJTdEVMRWxCUVhaRkxFTkJRMmxDWjBNc2RVTkJRWFZETEVOQlFVVTdRVUZEY2tNc2VVSkJRWGxDV0N4clFrRkVXVHRCUVVWeVF5dzJRa0ZCZVVKRE8wRkJSbGtzUjBGQlJpeERRVVI0UkR0QlFVMUJPMEZCUjBZN1FVRkRRVHRCUVVOQk96czdRVUZEUVN4VFFVRlRTQ3cyUWtGQlZDeERRVUYzUTJNc1QwRkJlRU1zUlVGQmFVUTdRVUZGYUVSNlFpeEZRVUZCUVN4elEwRkJjME03UVVGRmRFTjJSU3hGUVVGQlFTeE5RVUZOTEVOQlFVVlhMSGRDUVVGM1FpeERRVUZEYlVNc1pVRkJla0lzUTBGQk1FTXNiVUpCUVRGRExFTkJRVVlzUTBGQlRpeERRVUV3UldsQ0xFbEJRVEZGTEVOQlExY3NPRVZCUTBOcFF5eFBRVVJFTEVkQlJVRXNVVUZJV0R0QlFVdEJPMEZCUjBRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUUXl4blJFRkJWQ3hEUVVFMFJETkVMRlZCUVRWRUxFVkJRWGRGTzBGQlJYWkZPMEZCUTBGRExFVkJRVUZCTEVOQlFVTXNRMEZCUTNCRExFbEJRVVlzUTBGQlVXMURMRlZCUVZJc1JVRkJiMElzVlVGQlYwVXNTMEZCV0N4RlFVRnJRa01zUzBGQmJFSXNSVUZCZVVKRExFMUJRWHBDTEVWQlFXdERPMEZCUTNKRU8wRkJRMEV2UWl4SlFVRkJRU3gzUWtGQmQwSXNRMEZCUTNsQ0xHZENRVUY2UWl4RFFVRXlRMHNzUzBGQk0wTXNSVUZCYTBSRUxFdEJRV3hFTzBGQlEwRXNSMEZJUkN4RlFVaDFSU3hEUVZGMlJUczdPMEZCUTBGUExFVkJRVUZCTEc5RFFVRnZRenRCUVVOd1F6dEJRVVZFTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUYlVRc2FVTkJRVlFzUTBGQk5FTkRMRmRCUVRWRExFVkJRWGxFTzBGQlJYaEVSaXhGUVVGQlFTeG5SRUZCWjBRc1EwRkJSVHRCUVVONlF5eG5Ra0ZCV1VVN1FVRkVOa0lzUjBGQlJpeERRVUZvUkR0QlFVZEJPMEZCUjBRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVR0QlFVTkJPenM3UVVGRFFTeFRRVUZUUXl4blJFRkJWQ3hEUVVFeVJFTXNWVUZCTTBRc1JVRkJkMFU3UVVGRmRrVTdRVUZEUVVvc1JVRkJRVUVzWjBSQlFXZEVMRU5CUVVVN1FVRkRlRU1zWlVGQllXcEhMRTFCUVUwc1EwRkJSWEZITEZWQlFVWXNRMEZCVGl4RFFVRnhRa01zUjBGQmNrSXNSVUZFTWtJN1FVRkZlRU1zWjBKQlFWazdRVUZHTkVJc1IwRkJSaXhEUVVGb1JEdEJRVWxCTzBGQlJVRTdRVUZEUkR0QlFVTkJPMEZCUTBFN096dEJRVU5ETEVsQlFVbERMRFJEUVVFMFF5eEhRVUZITEZsQlFWYzdRVUZGTjBRc1RVRkJTVU1zV1VGQldTeEhRVUZITEVOQlFXNUNPMEZCUlVFc1UwRkJUeXhWUVVGWFNDeFZRVUZZTEVWQlFYVkNTU3hYUVVGMlFpeEZRVUZ2UXp0QlFVVXhRenRCUVVOQlFTeEpRVUZCUVN4WFFVRlhMRWRCUVVjc1QwRkJUMEVzVjBGQlVDeExRVUYxUWl4WFFVRjJRaXhIUVVGeFEwRXNWMEZCY2tNc1IwRkJiVVFzU1VGQmFrVTdRVUZGUVVNc1NVRkJRVUVzV1VGQldTeERRVUZGUml4WlFVRkdMRU5CUVZvc1EwRk1NRU1zUTBGTFdEdEJRVVV2UWpzN1FVRkRRVUVzU1VGQlFVRXNXVUZCV1N4SFFVRkhSeXhWUVVGVkxFTkJRVVZRTEdkRVFVRm5SQ3hEUVVGRFVTeEpRVUZxUkN4RFFVRjNSQ3hKUVVGNFJDeEZRVUU0UkZBc1ZVRkJPVVFzUTBGQlJpeEZRVUU0UlVrc1YwRkJPVVVzUTBGQmVrSTdRVUZEUVN4SFFWUkVPMEZCVlVFc1EwRmthMFFzUlVGQmJrUTdRVUZwUWtRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUyNURMR2REUVVGVUxFZEJRVEpETzBGQlJURkRMRTFCUVVzc1pVRkJaU3hQUVVGUmRVTXNNRUpCUVRWQ0xFVkJRVEpFTzBGQlF6RkVRU3hKUVVGQlFTd3dRa0ZCTUVJc1EwRkJSU3d3UWtGQlJpeERRVUV4UWp0QlFVTkJPenRCUVVWRVF5eEZRVUZCUVN4dFEwRkJiVU03UVVGRGJrTkRMRVZCUVVGQkxHMURRVUZ0UXl4SFFWQlBMRU5CVXpGRE96dEJRVU5CTDBjc1JVRkJRVUVzVFVGQlRTeERRVUZGTEhOQ1FVRkdMRU5CUVU0c1EwRkJhVU5ETEVWQlFXcERMRU5CUVhGRExGRkJRWEpETEVWQlFTdERMRlZCUVZVclJ5eExRVUZXTEVWQlFXbENPMEZCUlM5RVppeEpRVUZCUVN4blJFRkJaMFFzUTBGQlJUdEJRVU42UXl3d1FrRkJjMEpxUnl4TlFVRk5MRU5CUVVVc1NVRkJSaXhEUVVGT0xFTkJRV1Z6Unl4SFFVRm1MRVZCUkcxQ08wRkJSWHBETEd0Q1FVRlpPMEZCUmpaQ0xFdEJRVVlzUTBGQmFFUTdRVUZKUVN4SFFVNUVMRVZCVmpCRExFTkJhMEl4UXpzN1FVRkRRWFJITEVWQlFVRkJMRTFCUVUwc1EwRkJSU3gxUWtGQlJpeERRVUZPTEVOQlFXdERReXhGUVVGc1F5eERRVUZ6UXl4UlFVRjBReXhGUVVGblJDeFZRVUZWSzBjc1MwRkJWaXhGUVVGcFFqdEJRVVZvUldZc1NVRkJRVUVzWjBSQlFXZEVMRU5CUVVVN1FVRkJReXh0UWtGQllXcEhMRTFCUVUwc1EwRkJSU3hKUVVGR0xFTkJRVTRzUTBGQlpYTkhMRWRCUVdZN1FVRkJaQ3hMUVVGR0xFTkJRV2hFTzBGQlEwRXNSMEZJUkR0QlFVbEJPMEZCUjBRN1FVRkRRVHM3UVVGRlFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5YTEhORFFVRlVMRWRCUVdsRU8wRkJSV2hFYkVVc1JVRkJRVUVzYjBOQlFXOURMRWRCUmxrc1EwRkZUanRCUVVNeFF6dEJRVVZFTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUzZENMSE5EUVVGVUxFZEJRV2xFTzBGQlEyaEVka1VzUlVGQlFVRXNUVUZCVFN4RFFVRkZMRzFDUVVGR0xFTkJRVTRzUTBGQk9FSlZMRWxCUVRsQ08wRkJRMEZXTEVWQlFVRkJMRTFCUVUwc1EwRkJSVmNzZDBKQlFYZENMRU5CUVVOdFF5eGxRVUY2UWl4RFFVRXdReXh0UWtGQk1VTXNRMEZCUml4RFFVRk9MRU5CUVRaRmFVSXNTVUZCTjBVc1EwRkJiVVlzUlVGQmJrWTdRVUZEUVM5RUxFVkJRVUZCTEUxQlFVMHNRMEZCUlZjc2QwSkJRWGRDTEVOQlFVTnRReXhsUVVGNlFpeERRVUV3UXl4elFrRkJNVU1zUTBGQlJpeERRVUZPTEVOQlFUWkZhVUlzU1VGQk4wVXNRMEZCYlVZc1JVRkJia1k3UVVGRFFUdEJRVWRFTzBGQlEwRTdPMEZCUlVFN1FVRkRRVHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk50UkN4dFEwRkJWQ3hEUVVFNFEwTXNaVUZCT1VNc1JVRkJLMFJETEdWQlFTOUVMRVZCUVdkR08wRkJSUzlGUVN4RlFVRkJRU3hsUVVGbExFZEJRVWRCTEdWQlFXVXNRMEZCUTBNc1NVRkJhRUlzUjBGQmRVSkRMRmRCUVhaQ0xFVkJRV3hDT3p0QlFVTkJMRTFCUVVzc1MwRkJTMFlzWlVGQlpTeERRVUZEUnl4TlFVRXhRaXhGUVVGclF6dEJRVU5xUXl4WFFVRlBTaXhsUVVGUU8wRkJRMEVzUjBGTU9FVXNRMEZQTDBVN096dEJRVU5CTEUxQlFVbExMRmxCUVZrc1IwRkJSeXhKUVVGSlF5eE5RVUZLTEd0RFFVRnpRMHdzWlVGQmRFTXNZVUZCSzBRc1MwRkJMMFFzUTBGQmJrSXNRMEZTSzBVc1EwRlZMMFU3TzBGQlEwRXNUVUZCU1Uwc1QwRkJUeXhIUVVGSFVDeGxRVUZsTEVOQlFVTkhMRmRCUVdoQ0xFZEJRVGhDU3l4UlFVRTVRaXhEUVVGM1EwZ3NXVUZCZUVNc1EwRkJaRHRCUVVORFJTeEZRVUZCUVN4UFFVRlBMRWRCUVVkRkxFdEJRVXNzUTBGQlEwTXNTVUZCVGl4RFFVRlpTQ3hQUVVGYUxFTkJRVlk3UVVGRlJDeE5RVUZKU1N4WFFVRlhMRWRCUVVjc1JVRkJiRUk3UVVGRFFTeE5RVUZKUXl4WlFVRlpMRWRCUVVjc1EwRkJia0k3UVVGRFFTeE5RVUZKUXl4blFrRkJTanRCUVVOQkxFMUJRVWxETEdOQlFVbzdPMEZCYWtJclJTdzJRMEZ0UWpGRVVDeFBRVzVDTUVRN1FVRkJRVHM3UVVGQlFUdEJRVzFDTDBVc2QwUkJRVGhDTzBGQlFVRXNWVUZCYkVKUkxFdEJRV3RDTzBGQlJUZENSaXhOUVVGQlFTeG5Ra0ZCWjBJc1IwRkJSMFVzUzBGQlN5eERRVUZET1Vnc1MwRkJUaXhIUVVGak9FZ3NTMEZCU3l4RFFVRkZMRU5CUVVZc1EwRkJUQ3hEUVVGWFdpeFhRVUZZTEVkQlFYbENZU3hQUVVGNlFpeERRVUZyUXl4SFFVRnNReXhGUVVGMVF5eERRVUYyUXl4RFFVRmtMRWRCUVRKRUxFTkJRVGxGTzBGQlJVRk1MRTFCUVVGQkxGZEJRVmNzUTBGQlEwMHNTVUZCV2l4RFFVRnJRbXBDTEdWQlFXVXNRMEZCUTJ0Q0xFMUJRV2hDTEVOQlFYZENUaXhaUVVGNFFpeEZRVUYxUTBNc1owSkJRV2RDTEVkQlFVZEVMRmxCUVRGRUxFTkJRV3hDTzBGQlJVRkZMRTFCUVVGQkxHTkJRV01zUjBGQlIyUXNaVUZCWlN4RFFVRkRSeXhYUVVGb1FpeEhRVUU0UW1Fc1QwRkJPVUlzUTBGQmRVTXNSMEZCZGtNc1JVRkJORU5JTEdkQ1FVRTFReXhEUVVGcVFqdEJRVVZCUml4TlFVRkJRU3hYUVVGWExFTkJRVU5OTEVsQlFWb3NRMEZCYTBJc2IwUkJRVzlFYWtJc1pVRkJaU3hEUVVGRGEwSXNUVUZCYUVJc1EwRkJkMEpNTEdkQ1FVRjRRaXhGUVVFeVEwTXNZMEZCWXl4SFFVRkhSQ3huUWtGQk5VUXNRMEZCY0VRc1IwRkJjMGtzVTBGQmVFbzdRVUZGUVVRc1RVRkJRVUVzV1VGQldTeEhRVUZIUlN4alFVRm1PMEZCUTBFN1FVRTVRamhGTzBGQlFVRTdRVUZCUVR0QlFVRkJPMEZCUVVFN08wRkJaME12UlVnc1JVRkJRVUVzVjBGQlZ5eERRVUZEVFN4SlFVRmFMRU5CUVd0Q2FrSXNaVUZCWlN4RFFVRkRhMElzVFVGQmFFSXNRMEZCZDBKT0xGbEJRWGhDTEVWQlFYVkRXaXhsUVVGbExFTkJRVU5KTEUxQlFXaENMRWRCUVhsQ1VTeFpRVUZvUlN4RFFVRnNRanRCUVVWQkxGTkJRVTlFTEZkQlFWY3NRMEZCUTFFc1NVRkJXaXhEUVVGclFpeEZRVUZzUWl4RFFVRlFPMEZCUTBFN1FVRkZSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5ETEhsQ1FVRlVMRU5CUVc5RFF5eEpRVUZ3UXl4RlFVRXdRenRCUVVONlF5eE5RVUZKUXl4UlFVRlJMRWRCUVVkRExGRkJRVkVzUTBGQlEwTXNZVUZCVkN4RFFVRjNRaXhWUVVGNFFpeERRVUZtTzBGQlEwRkdMRVZCUVVGQkxGRkJRVkVzUTBGQlEwY3NVMEZCVkN4SFFVRnhRa29zU1VGQmNrSTdRVUZEUVN4VFFVRlBReXhSUVVGUkxFTkJRVU5KTEV0QlFXaENPMEZCUTBFN1FVRkZSRHRCUVVOQk8wRkJRMEU3UVVGRFFUdEJRVU5CTzBGQlEwRTdPenRCUVVOQkxGTkJRVk5ETEhsQ1FVRlVMRU5CUVcxRFRpeEpRVUZ1UXl4RlFVRjVRenRCUVVOMlF5eE5RVUZKUXl4UlFVRlJMRWRCUVVkRExGRkJRVkVzUTBGQlEwTXNZVUZCVkN4RFFVRjFRaXhWUVVGMlFpeERRVUZtTzBGQlEwRkdMRVZCUVVGQkxGRkJRVkVzUTBGQlEwMHNVMEZCVkN4SFFVRnhRbEFzU1VGQmNrSTdRVUZEUVN4VFFVRlBReXhSUVVGUkxFTkJRVU5ITEZOQlFXaENPMEZCUTBRN1FVRkhSRHRCUVVOQk96dEJRVVZCTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUzcEdMRGhEUVVGVUxFZEJRWGxFTzBGQlEzaEVia1FzUlVGQlFVRXNUVUZCVFN4RFFVRkZMREJFUVVGR0xFTkJRVTRzUTBGQmIwVm5TaXhYUVVGd1JTeERRVUZwUml4elFrRkJha1k3UVVGRFFUdEJRVVZFTzBGQlEwRTdRVUZEUVRzN08wRkJRMEVzVTBGQlUzSkZMRGhEUVVGVUxFZEJRWGxFTzBGQlEzaEVNMFVzUlVGQlFVRXNUVUZCVFN4RFFVRkZMREJFUVVGR0xFTkJRVTRzUTBGQmNVVnBTaXhSUVVGeVJTeERRVUVyUlN4elFrRkJMMFU3UVVGRFFUdEJRVVZFTzBGQlEwRTdRVUZEUVR0QlFVTkJPMEZCUTBFN096dEJRVU5CTEZOQlFWTkRMREpEUVVGVUxFZEJRWE5FTzBGQlEyeEVMRTFCUVV0c1NpeE5RVUZOTEVOQlFVVXNNRVJCUVVZc1EwRkJUaXhEUVVGeFJXMUtMRkZCUVhKRkxFTkJRU3RGTEhOQ1FVRXZSU3hEUVVGTUxFVkJRVGhITzBGQlEyaElMRmRCUVU4c1NVRkJVRHRCUVVOQkxFZEJSa1VzVFVGRlNUdEJRVU5PTEZkQlFVOHNTMEZCVUR0QlFVTkJPMEZCUTBRaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SmNJblZ6WlNCemRISnBZM1JjSWp0Y2NseHVYSEpjYm1wUmRXVnllU2duWW05a2VTY3BMbTl1S0h0Y2NseHVJQ0FnSUNkMGIzVmphRzF2ZG1Vbk9pQm1kVzVqZEdsdmJpaGxLU0I3WEhKY2JseHlYRzVjZEZ4MGFsRjFaWEo1S0NBbkxuUnBiV1Z6Y0dGeWRHeDVKeUFwTG1WaFkyZ29JR1oxYm1OMGFXOXVJQ2dnYVc1a1pYZ2dLWHRjY2x4dVhISmNibHgwWEhSY2RIWmhjaUIwWkY5bGJDQTlJR3BSZFdWeWVTZ2dkR2hwY3lBcExtZGxkQ2dnTUNBcE8xeHlYRzVjY2x4dVhIUmNkRngwYVdZZ0tDQW9kVzVrWldacGJtVmtJQ0U5SUhSa1gyVnNMbDkwYVhCd2VTa2dLWHRjY2x4dVhISmNibHgwWEhSY2RGeDBkbUZ5SUdsdWMzUmhibU5sSUQwZ2RHUmZaV3d1WDNScGNIQjVPMXh5WEc1Y2RGeDBYSFJjZEdsdWMzUmhibU5sTG1ocFpHVW9LVHRjY2x4dVhIUmNkRngwZlZ4eVhHNWNkRngwZlNBcE8xeHlYRzVjZEgxY2NseHVmU2s3WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVW1WeGRXVnpkQ0JQWW1wbFkzUmNjbHh1SUNvZ1NHVnlaU0IzWlNCallXNGdJR1JsWm1sdVpTQlRaV0Z5WTJnZ2NHRnlZVzFsZEdWeWN5QmhibVFnVlhCa1lYUmxJR2wwSUd4aGRHVnlMQ0FnZDJobGJpQWdjMjl0WlNCd1lYSmhiV1YwWlhJZ2QyRnpJR05vWVc1blpXUmNjbHh1SUNwY2NseHVJQ292WEhKY2JuWmhjaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtY2dQU0FvWm5WdVkzUnBiMjRnS0NCdlltb3NJQ1FwSUh0Y2NseHVYSEpjYmx4MEx5OGdVMlZqZFhKbElIQmhjbUZ0WlhSbGNuTWdabTl5SUVGcVlYaGNkQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkSFpoY2lCd1gzTmxZM1Z5WlNBOUlHOWlhaTV6WldOMWNtbDBlVjl2WW1vZ1BTQnZZbW91YzJWamRYSnBkSGxmYjJKcUlIeDhJSHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBkWE5sY2w5cFpEb2dNQ3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBibTl1WTJVZ0lEb2dKeWNzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkR3h2WTJGc1pTQTZJQ2NuWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUWdJSDA3WEhKY2JseHlYRzVjZEc5aWFpNXpaWFJmYzJWamRYSmxYM0JoY21GdElEMGdablZ1WTNScGIyNGdLQ0J3WVhKaGJWOXJaWGtzSUhCaGNtRnRYM1poYkNBcElIdGNjbHh1WEhSY2RIQmZjMlZqZFhKbFd5QndZWEpoYlY5clpYa2dYU0E5SUhCaGNtRnRYM1poYkR0Y2NseHVYSFI5TzF4eVhHNWNjbHh1WEhSdlltb3VaMlYwWDNObFkzVnlaVjl3WVhKaGJTQTlJR1oxYm1OMGFXOXVJQ2dnY0dGeVlXMWZhMlY1SUNrZ2UxeHlYRzVjZEZ4MGNtVjBkWEp1SUhCZmMyVmpkWEpsV3lCd1lYSmhiVjlyWlhrZ1hUdGNjbHh1WEhSOU8xeHlYRzVjY2x4dVhISmNibHgwTHk4Z1RHbHpkR2x1WnlCVFpXRnlZMmdnY0dGeVlXMWxkR1Z5YzF4MExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRYSEpjYmx4MGRtRnlJSEJmYkdsemRHbHVaeUE5SUc5aWFpNXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5dlltb2dQU0J2WW1vdWMyVmhjbU5vWDNKbGNYVmxjM1JmYjJKcUlIeDhJSHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGMyOXlkQ0FnSUNBZ0lDQWdJQ0FnSURvZ1hDSmliMjlyYVc1blgybGtYQ0lzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RITnZjblJmZEhsd1pTQWdJQ0FnSUNBNklGd2lSRVZUUTF3aUxGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJ3WVdkbFgyNTFiU0FnSUNBZ0lDQWdPaUF4TEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUndZV2RsWDJsMFpXMXpYMk52ZFc1ME9pQXhNQ3hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFkzSmxZWFJsWDJSaGRHVWdJQ0FnSURvZ1hDSmNJaXhjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGEyVjVkMjl5WkNBZ0lDQWdJQ0FnSURvZ1hDSmNJaXhjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGMyOTFjbU5sSUNBZ0lDQWdJQ0FnSURvZ1hDSmNJbHh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlR0Y2NseHVYSEpjYmx4MGIySnFMbk5sWVhKamFGOXpaWFJmWVd4c1gzQmhjbUZ0Y3lBOUlHWjFibU4wYVc5dUlDZ2djbVZ4ZFdWemRGOXdZWEpoYlY5dlltb2dLU0I3WEhKY2JseDBYSFJ3WDJ4cGMzUnBibWNnUFNCeVpYRjFaWE4wWDNCaGNtRnRYMjlpYWp0Y2NseHVYSFI5TzF4eVhHNWNjbHh1WEhSdlltb3VjMlZoY21Ob1gyZGxkRjloYkd4ZmNHRnlZVzF6SUQwZ1puVnVZM1JwYjI0Z0tDa2dlMXh5WEc1Y2RGeDBjbVYwZFhKdUlIQmZiR2x6ZEdsdVp6dGNjbHh1WEhSOU8xeHlYRzVjY2x4dVhIUnZZbW91YzJWaGNtTm9YMmRsZEY5d1lYSmhiU0E5SUdaMWJtTjBhVzl1SUNnZ2NHRnlZVzFmYTJWNUlDa2dlMXh5WEc1Y2RGeDBjbVYwZFhKdUlIQmZiR2x6ZEdsdVoxc2djR0Z5WVcxZmEyVjVJRjA3WEhKY2JseDBmVHRjY2x4dVhISmNibHgwYjJKcUxuTmxZWEpqYUY5elpYUmZjR0Z5WVcwZ1BTQm1kVzVqZEdsdmJpQW9JSEJoY21GdFgydGxlU3dnY0dGeVlXMWZkbUZzSUNrZ2UxeHlYRzVjZEZ4MEx5OGdhV1lnS0NCQmNuSmhlUzVwYzBGeWNtRjVLQ0J3WVhKaGJWOTJZV3dnS1NBcGUxeHlYRzVjZEZ4MEx5OGdYSFJ3WVhKaGJWOTJZV3dnUFNCS1UwOU9Mbk4wY21sdVoybG1lU2dnY0dGeVlXMWZkbUZzSUNrN1hISmNibHgwWEhRdkx5QjlYSEpjYmx4MFhIUndYMnhwYzNScGJtZGJJSEJoY21GdFgydGxlU0JkSUQwZ2NHRnlZVzFmZG1Gc08xeHlYRzVjZEgwN1hISmNibHh5WEc1Y2RHOWlhaTV6WldGeVkyaGZjMlYwWDNCaGNtRnRjMTloY25JZ1BTQm1kVzVqZEdsdmJpZ2djR0Z5WVcxelgyRnljaUFwZTF4eVhHNWNkRngwWHk1bFlXTm9LQ0J3WVhKaGJYTmZZWEp5TENCbWRXNWpkR2x2YmlBb0lIQmZkbUZzTENCd1gydGxlU3dnY0Y5a1lYUmhJQ2w3WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEx5OGdSR1ZtYVc1bElHUnBabVpsY21WdWRDQlRaV0Z5WTJnZ0lIQmhjbUZ0WlhSbGNuTWdabTl5SUhKbGNYVmxjM1JjY2x4dVhIUmNkRngwZEdocGN5NXpaV0Z5WTJoZmMyVjBYM0JoY21GdEtDQndYMnRsZVN3Z2NGOTJZV3dnS1R0Y2NseHVYSFJjZEgwZ0tUdGNjbHh1WEhSOVhISmNibHh5WEc1Y2NseHVYSFF2THlCUGRHaGxjaUJ3WVhKaGJXVjBaWEp6SUZ4MFhIUmNkQzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFZ4eVhHNWNkSFpoY2lCd1gyOTBhR1Z5SUQwZ2IySnFMbTkwYUdWeVgyOWlhaUE5SUc5aWFpNXZkR2hsY2w5dlltb2dmSHdnZXlCOU8xeHlYRzVjY2x4dVhIUnZZbW91YzJWMFgyOTBhR1Z5WDNCaGNtRnRJRDBnWm5WdVkzUnBiMjRnS0NCd1lYSmhiVjlyWlhrc0lIQmhjbUZ0WDNaaGJDQXBJSHRjY2x4dVhIUmNkSEJmYjNSb1pYSmJJSEJoY21GdFgydGxlU0JkSUQwZ2NHRnlZVzFmZG1Gc08xeHlYRzVjZEgwN1hISmNibHh5WEc1Y2RHOWlhaTVuWlhSZmIzUm9aWEpmY0dGeVlXMGdQU0JtZFc1amRHbHZiaUFvSUhCaGNtRnRYMnRsZVNBcElIdGNjbHh1WEhSY2RISmxkSFZ5YmlCd1gyOTBhR1Z5V3lCd1lYSmhiVjlyWlhrZ1hUdGNjbHh1WEhSOU8xeHlYRzVjY2x4dVhISmNibHgwY21WMGRYSnVJRzlpYWp0Y2NseHVmU2dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5JSHg4SUh0OUxDQnFVWFZsY25rZ0tTazdYSEpjYmx4eVhHNWNjbHh1THlvcVhISmNiaUFxSUNBZ1FXcGhlQ0FnTFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdElDb3ZYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dVMlZ1WkNCQmFtRjRJSE5sWVhKamFDQnlaWEYxWlhOMFhISmNiaUFxSUdadmNpQnpaV0Z5WTJocGJtY2djM0JsWTJsbWFXTWdTMlY1ZDI5eVpDQmhibVFnYjNSb1pYSWdjR0Z5WVcxelhISmNiaUFxTDF4eVhHNW1kVzVqZEdsdmJpQjNjR0pqWDJGcWVGOWliMjlyYVc1blgyRnFZWGhmYzJWaGNtTm9YM0psY1hWbGMzUW9LWHRjY2x4dVhISmNibU52Ym5OdmJHVXVaM0p2ZFhCRGIyeHNZWEJ6WldRb0owRktXRjlDVDA5TFNVNUhYMHhKVTFSSlRrY25LVHNnWTI5dWMyOXNaUzVzYjJjb0lDY2dQVDBnUW1WbWIzSmxJRUZxWVhnZ1UyVnVaQ0F0SUhObFlYSmphRjluWlhSZllXeHNYM0JoY21GdGN5Z3BJRDA5SUNjZ0xDQjNjR0pqWDJGcWVGOWliMjlyYVc1blgyeHBjM1JwYm1jdWMyVmhjbU5vWDJkbGRGOWhiR3hmY0dGeVlXMXpLQ2tnS1R0Y2NseHVYSEpjYmx4MGQzQmlZMTlpYjI5cmFXNW5YMnhwYzNScGJtZGZjbVZzYjJGa1gySjFkSFJ2Ymw5ZmMzQnBibDl6ZEdGeWRDZ3BPMXh5WEc1Y2NseHVMeXBjY2x4dUx5OUdhWGhKYmpvZ1ptOXlWbWxrWlc5Y2NseHVhV1lnS0NBaElHbHpYM1JvYVhOZllXTjBhVzl1SUNsN1hISmNibHgwTHk5M2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5aFkzUjFZV3hmYkdsemRHbHVaMTlmYUdsa1pTZ3BPMXh5WEc1Y2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjJ4cGMzUnBibWRmWTI5dWRHRnBibVZ5SnlBcElDa3VhSFJ0YkNoY2NseHVYSFJjZENjOFpHbDJJSE4wZVd4bFBWd2lkMmxrZEdnNk1UQXdKVHQwWlhoMExXRnNhV2R1T2lCalpXNTBaWEk3WENJZ2FXUTlYQ0ozY0dKalgyeHZZV1JwYm1kZmMyVmpkR2x2Ymx3aVBqeHpjR0Z1SUdOc1lYTnpQVndpZDNCaVkxOXBZMjVmWVhWMGIzSmxibVYzSUhkd1ltTmZjM0JwYmx3aVBqd3ZjM0JoYmo0OEwyUnBkajRuWEhKY2JseDBYSFFySUdwUmRXVnllU2dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5MbWRsZEY5dmRHaGxjbDl3WVhKaGJTZ2dKMnhwYzNScGJtZGZZMjl1ZEdGcGJtVnlKeUFwSUNrdWFIUnRiQ2dwWEhKY2JseDBLVHRjY2x4dVhIUnBaaUFvSUNkbWRXNWpkR2x2YmljZ1BUMDlJSFI1Y0dWdlppQW9hbEYxWlhKNUtDQW5JM2R3WW1OZmJHOWhaR2x1WjE5elpXTjBhVzl1SnlBcExuZHdZbU5mYlhsZmJXOWtZV3dwSUNsN1hIUmNkRngwTHk5R2FYaEpiam9nT1M0d0xqRXVOVnh5WEc1Y2RGeDBhbEYxWlhKNUtDQW5JM2R3WW1OZmJHOWhaR2x1WjE5elpXTjBhVzl1SnlBcExuZHdZbU5mYlhsZmJXOWtZV3dvSUNkemFHOTNKeUFwTzF4eVhHNWNkSDBnWld4elpTQjdYSEpjYmx4MFhIUmhiR1Z5ZENnZ0oxZGhjbTVwYm1jaElFSnZiMnRwYm1jZ1EyRnNaVzVrWVhJdUlFbDBjeUJ6WldWdGN5QjBhR0YwSUNCNWIzVWdhR0YyWlNCa1pXRmpkR2wyWVhSbFpDQnNiMkZrYVc1bklHOW1JRUp2YjNSemRISmhjQ0JLVXlCbWFXeGxjeUJoZENCQ2IyOXJhVzVuSUZObGRIUnBibWR6SUVkbGJtVnlZV3dnY0dGblpTQnBiaUJCWkhaaGJtTmxaQ0J6WldOMGFXOXVMaWNnS1Z4eVhHNWNkSDFjY2x4dWZWeHlYRzVwYzE5MGFHbHpYMkZqZEdsdmJpQTlJR1poYkhObE8xeHlYRzRxTDF4eVhHNWNkQzh2SUZOMFlYSjBJRUZxWVhoY2NseHVYSFJxVVhWbGNua3VjRzl6ZENnZ2QzQmlZMTluYkc5aVlXd3hMbmR3WW1OZllXcGhlSFZ5YkN4Y2NseHVYSFJjZEZ4MFhIUjdYSEpjYmx4MFhIUmNkRngwWEhSaFkzUnBiMjRnSUNBZ0lDQWdJQ0FnT2lBblYxQkNRMTlCU2xoZlFrOVBTMGxPUjE5TVNWTlVTVTVISnl4Y2NseHVYSFJjZEZ4MFhIUmNkSGR3WW1OZllXcDRYM1Z6WlhKZmFXUTZJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NW5aWFJmYzJWamRYSmxYM0JoY21GdEtDQW5kWE5sY2w5cFpDY2dLU3hjY2x4dVhIUmNkRngwWEhSY2RHNXZibU5sSUNBZ0lDQWdJQ0FnSUNBNklIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmJHbHpkR2x1Wnk1blpYUmZjMlZqZFhKbFgzQmhjbUZ0S0NBbmJtOXVZMlVuSUNrc1hISmNibHgwWEhSY2RGeDBYSFIzY0dKalgyRnFlRjlzYjJOaGJHVWdPaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtY3VaMlYwWDNObFkzVnlaVjl3WVhKaGJTZ2dKMnh2WTJGc1pTY2dLU3hjY2x4dVhISmNibHgwWEhSY2RGeDBYSFJ6WldGeVkyaGZjR0Z5WVcxelhIUTZJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NXpaV0Z5WTJoZloyVjBYMkZzYkY5d1lYSmhiWE1vS1Z4eVhHNWNkRngwWEhSY2RIMHNYSEpjYmx4MFhIUmNkRngwTHlvcVhISmNibHgwWEhSY2RGeDBJQ29nVXlCMUlHTWdZeUJsSUhNZ2MxeHlYRzVjZEZ4MFhIUmNkQ0FxWEhKY2JseDBYSFJjZEZ4MElDb2dRSEJoY21GdElISmxjM0J2Ym5ObFgyUmhkR0ZjZEZ4MExWeDBhWFJ6SUc5aWFtVmpkQ0J5WlhSMWNtNWxaQ0JtY205dElDQkJhbUY0SUMwZ1kyeGhjM010YkdsMlpTMXpaV0Z5WTJjdWNHaHdYSEpjYmx4MFhIUmNkRngwSUNvZ1FIQmhjbUZ0SUhSbGVIUlRkR0YwZFhOY2RGeDBMVngwSjNOMVkyTmxjM01uWEhKY2JseDBYSFJjZEZ4MElDb2dRSEJoY21GdElHcHhXRWhTWEhSY2RGeDBYSFF0WEhSUFltcGxZM1JjY2x4dVhIUmNkRngwWEhRZ0tpOWNjbHh1WEhSY2RGeDBYSFJtZFc1amRHbHZiaUFvSUhKbGMzQnZibk5sWDJSaGRHRXNJSFJsZUhSVGRHRjBkWE1zSUdweFdFaFNJQ2tnZTF4eVhHNHZMMFpwZUVsdU9pQm1iM0pXYVdSbGIxeHlYRzR2TDJwUmRXVnllU2dnSnlOM2NHSmpYMnh2WVdScGJtZGZjMlZqZEdsdmJpY2dLUzUzY0dKalgyMTVYMjF2WkdGc0tDQW5hR2xrWlNjZ0tUdGNjbHh1WEhKY2JtTnZibk52YkdVdWJHOW5LQ0FuSUQwOUlGSmxjM0J2Ym5ObElGZFFRa05mUVVwWVgwSlBUMHRKVGtkZlRFbFRWRWxPUnlBOVBTQW5MQ0J5WlhOd2IyNXpaVjlrWVhSaElDazdJR052Ym5OdmJHVXVaM0p2ZFhCRmJtUW9LVHRjY2x4dVhIUmNkRngwWEhSY2RDOHZJRkJ5YjJKaFlteDVJRVZ5Y205eVhISmNibHgwWEhSY2RGeDBYSFJwWmlBb0lDaDBlWEJsYjJZZ2NtVnpjRzl1YzJWZlpHRjBZU0FoUFQwZ0oyOWlhbVZqZENjcElIeDhJQ2h5WlhOd2IyNXpaVjlrWVhSaElEMDlQU0J1ZFd4c0tTQXBlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUnFVWFZsY25rb0lDY2pkMmhmYzI5eWRGOXpaV3hsWTNSdmNpY2dLUzVvYVdSbEtDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjJ4cGMzUnBibWRmWTI5dWRHRnBibVZ5SnlBcElDa3VhSFJ0YkNoY2NseHVYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhaR2wySUdOc1lYTnpQVndpZDNCaVl5MXpaWFIwYVc1bmN5MXViM1JwWTJVZ2JtOTBhV05sTFhkaGNtNXBibWRjSWlCemRIbHNaVDFjSW5SbGVIUXRZV3hwWjI0NmJHVm1kRndpUGljZ0sxeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJ5WlhOd2IyNXpaVjlrWVhSaElDdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2M4TDJScGRqNG5YSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RISmxkSFZ5Ymp0Y2NseHVYSFJjZEZ4MFhIUmNkSDFjY2x4dVhISmNibHgwWEhSY2RGeDBYSFF2THlCU1pXeHZZV1FnY0dGblpTd2dZV1owWlhJZ1ptbHNkR1Z5SUhSdmIyeGlZWElnZDJGeklISmxjMlYwWldSY2NseHVYSFJjZEZ4MFhIUmNkR2xtSUNnZ0lDQWdJQ0FnS0NBZ0lDQWdkVzVrWldacGJtVmtJQ0U5SUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZlkyeGxZVzVsWkY5d1lYSmhiWE1uSUYwcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MEppWWdLQ0FuY21WelpYUmZaRzl1WlNjZ1BUMDlJSEpsYzNCdmJuTmxYMlJoZEdGYklDZGhhbmhmWTJ4bFlXNWxaRjl3WVhKaGJYTW5JRjFiSUNkMWFWOXlaWE5sZENjZ1hTbGNjbHh1WEhSY2RGeDBYSFJjZENsN1hISmNibHgwWEhSY2RGeDBYSFJjZEd4dlkyRjBhVzl1TG5KbGJHOWhaQ2dwTzF4eVhHNWNkRngwWEhSY2RGeDBYSFJ5WlhSMWNtNDdYSEpjYmx4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MEx5OGdVMmh2ZHlCc2FYTjBhVzVuWEhKY2JseDBYSFJjZEZ4MFhIUnBaaUFvSUhKbGMzQnZibk5sWDJSaGRHRmJJQ2RoYW5oZlkyOTFiblFuSUYwZ1BpQXdJQ2w3WEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNOb2IzZGZiR2x6ZEdsdVp5Z2djbVZ6Y0c5dWMyVmZaR0YwWVZzZ0oyRnFlRjlwZEdWdGN5Y2dYU3dnY21WemNHOXVjMlZmWkdGMFlWc2dKMkZxZUY5elpXRnlZMmhmY0dGeVlXMXpKeUJkTENCeVpYTndiMjV6WlY5a1lYUmhXeUFuWVdwNFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWekp5QmRJQ2s3WEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSM2NHSmpYM0JoWjJsdVlYUnBiMjVmWldOb2J5aGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgyeHBjM1JwYm1jdVoyVjBYMjkwYUdWeVgzQmhjbUZ0S0NBbmNHRm5hVzVoZEdsdmJsOWpiMjUwWVdsdVpYSW5JQ2tzWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwZTF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MEozQmhaMlZmWVdOMGFYWmxKem9nY21WemNHOXVjMlZmWkdGMFlWc2dKMkZxZUY5elpXRnlZMmhmY0dGeVlXMXpKeUJkV3lBbmNHRm5aVjl1ZFcwbklGMHNYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFFuY0dGblpYTmZZMjkxYm5Rbk9pQk5ZWFJvTG1ObGFXd29JSEpsYzNCdmJuTmxYMlJoZEdGYklDZGhhbmhmWTI5MWJuUW5JRjBnTHlCeVpYTndiMjV6WlY5a1lYUmhXeUFuWVdwNFgzTmxZWEpqYUY5d1lYSmhiWE1uSUYxYklDZHdZV2RsWDJsMFpXMXpYMk52ZFc1MEp5QmRJQ2tzWEhKY2JseHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM0JoWjJWZmFYUmxiWE5mWTI5MWJuUW5PaUJ5WlhOd2IyNXpaVjlrWVhSaFd5QW5ZV3A0WDNObFlYSmphRjl3WVhKaGJYTW5JRjFiSUNkd1lXZGxYMmwwWlcxelgyTnZkVzUwSnlCZExGeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBKM052Y25SZmRIbHdaU2NnSUNBZ0lDQWdPaUJ5WlhOd2IyNXpaVjlrWVhSaFd5QW5ZV3A0WDNObFlYSmphRjl3WVhKaGJYTW5JRjFiSUNkemIzSjBYM1I1Y0dVbklGMWNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUjlYSEpjYmx4MFhIUmNkRngwWEhSY2RDazdYSEpjYmx4MFhIUmNkRngwWEhSY2RIZHdZbU5mWVdwNFgySnZiMnRwYm1kZlpHVm1hVzVsWDNWcFgyaHZiMnR6S0NrN1hIUmNkRngwWEhSY2RGeDBMeThnVW1Wa1pXWnBibVVnU0c5dmEzTXNJR0psWTJGMWMyVWdkMlVnYzJodmR5QnVaWGNnUkU5TklHVnNaVzFsYm5SelhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGZTQmxiSE5sSUh0Y2NseHVYSEpjYmx4MFhIUmNkRngwWEhSY2RIZHdZbU5mWVdwNFgySnZiMnRwYm1kZlgyRmpkSFZoYkY5c2FYTjBhVzVuWDE5b2FXUmxLQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUmNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1YUhSdGJDaGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhaR2wySUdOc1lYTnpQVndpZDNCaVl5MXpaWFIwYVc1bmN5MXViM1JwWTJVd0lHNXZkR2xqWlMxM1lYSnVhVzVuTUZ3aUlITjBlV3hsUFZ3aWRHVjRkQzFoYkdsbmJqcGpaVzUwWlhJN2JXRnlaMmx1TFd4bFpuUTZMVFV3Y0hnN1hDSStKeUFyWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENjOGMzUnliMjVuUGljZ0t5QW5UbThnY21WemRXeDBjeUJtYjNWdVpDQm1iM0lnWTNWeWNtVnVkQ0JtYVd4MFpYSWdiM0IwYVc5dWN5NHVMaWNnS3lBblBDOXpkSEp2Ym1jK0p5QXJYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQzh2Snp4emRISnZibWMrSnlBcklDZE9ieUJ5WlhOMWJIUnpJR1p2ZFc1a0xpNHVKeUFySUNjOEwzTjBjbTl1Wno0bklDdGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDYzhMMlJwZGo0blhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUjlYSEpjYmx4eVhHNWNkRngwWEhSY2RGeDBMeThnVlhCa1lYUmxJRzVsZHlCaWIyOXJhVzVuSUdOdmRXNTBYSEpjYmx4MFhIUmNkRngwWEhScFppQW9JSFZ1WkdWbWFXNWxaQ0FoUFQwZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOXVaWGRmWW05dmEybHVaM05mWTI5MWJuUW5JRjBnS1h0Y2NseHVYSFJjZEZ4MFhIUmNkRngwZG1GeUlHRnFlRjl1WlhkZlltOXZhMmx1WjNOZlkyOTFiblFnUFNCd1lYSnpaVWx1ZENnZ2NtVnpjRzl1YzJWZlpHRjBZVnNnSjJGcWVGOXVaWGRmWW05dmEybHVaM05mWTI5MWJuUW5JRjBnS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJwWmlBb1lXcDRYMjVsZDE5aWIyOXJhVzVuYzE5amIzVnVkRDR3S1h0Y2NseHVYSFJjZEZ4MFhIUmNkRngwWEhScVVYVmxjbmtvSUNjdWQzQmlZMTlpWVdSblpWOWpiM1Z1ZENjZ0tTNXphRzkzS0NrN1hISmNibHgwWEhSY2RGeDBYSFJjZEgxY2NseHVYSFJjZEZ4MFhIUmNkRngwYWxGMVpYSjVLQ0FuTG1KckxYVndaR0YwWlMxamIzVnVkQ2NnS1M1b2RHMXNLQ0JoYW5oZmJtVjNYMkp2YjJ0cGJtZHpYMk52ZFc1MElDazdYSEpjYmx4MFhIUmNkRngwWEhSOVhISmNibHh5WEc1Y2RGeDBYSFJjZEZ4MGQzQmlZMTlpYjI5cmFXNW5YMnhwYzNScGJtZGZjbVZzYjJGa1gySjFkSFJ2Ymw5ZmMzQnBibDl3WVhWelpTZ3BPMXh5WEc1Y2NseHVYSFJjZEZ4MFhIUmNkR3BSZFdWeWVTZ2dKeU5oYW1GNFgzSmxjM0J2Ym1RbklDa3VhSFJ0YkNnZ2NtVnpjRzl1YzJWZlpHRjBZU0FwTzF4MFhIUXZMeUJHYjNJZ1lXSnBiR2wwZVNCMGJ5QnphRzkzSUhKbGMzQnZibk5sTENCaFpHUWdjM1ZqYUNCRVNWWWdaV3hsYldWdWRDQjBieUJ3WVdkbFhISmNibHgwWEhSY2RGeDBmVnh5WEc1Y2RGeDBYSFFnSUNrdVptRnBiQ2dnWm5WdVkzUnBiMjRnS0NCcWNWaElVaXdnZEdWNGRGTjBZWFIxY3l3Z1pYSnliM0pVYUhKdmQyNGdLU0I3SUNBZ0lHbG1JQ2dnZDJsdVpHOTNMbU52Ym5OdmJHVWdKaVlnZDJsdVpHOTNMbU52Ym5OdmJHVXViRzluSUNsN0lHTnZibk52YkdVdWJHOW5LQ0FuUVdwaGVGOUZjbkp2Y2ljc0lHcHhXRWhTTENCMFpYaDBVM1JoZEhWekxDQmxjbkp2Y2xSb2NtOTNiaUFwT3lCOVhISmNibHgwWEhSY2RGeDBYSFJxVVhWbGNua29JQ2NqZDJoZmMyOXlkRjl6Wld4bFkzUnZjaWNnS1M1b2FXUmxLQ2s3WEhKY2JseDBYSFJjZEZ4MFhIUjJZWElnWlhKeWIzSmZiV1Z6YzJGblpTQTlJQ2M4YzNSeWIyNW5QaWNnS3lBblJYSnliM0loSnlBcklDYzhMM04wY205dVp6NGdKeUFySUdWeWNtOXlWR2h5YjNkdUlEdGNjbHh1WEhSY2RGeDBYSFJjZEdsbUlDZ2dhbkZZU0ZJdWNtVnpjRzl1YzJWVVpYaDBJQ2w3WEhKY2JseDBYSFJjZEZ4MFhIUmNkR1Z5Y205eVgyMWxjM05oWjJVZ0t6MGdhbkZZU0ZJdWNtVnpjRzl1YzJWVVpYaDBPMXh5WEc1Y2RGeDBYSFJjZEZ4MGZWeHlYRzVjZEZ4MFhIUmNkRngwWlhKeWIzSmZiV1Z6YzJGblpTQTlJR1Z5Y205eVgyMWxjM05oWjJVdWNtVndiR0ZqWlNnZ0wxeGNiaTluTENCY0lqeGljaUF2UGx3aUlDazdYSEpjYmx4eVhHNWNkRngwWEhSY2RGeDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXphRzkzWDIxbGMzTmhaMlVvSUdWeWNtOXlYMjFsYzNOaFoyVWdLVHRjY2x4dVhIUmNkRngwSUNCOUtWeHlYRzVjZENBZ0lDQWdJQ0FnSUNBdkx5QXVaRzl1WlNnZ0lDQm1kVzVqZEdsdmJpQW9JR1JoZEdFc0lIUmxlSFJUZEdGMGRYTXNJR3B4V0VoU0lDa2dleUFnSUdsbUlDZ2dkMmx1Wkc5M0xtTnZibk52YkdVZ0ppWWdkMmx1Wkc5M0xtTnZibk52YkdVdWJHOW5JQ2w3SUdOdmJuTnZiR1V1Ykc5bktDQW5jMlZqYjI1a0lITjFZMk5sYzNNbkxDQmtZWFJoTENCMFpYaDBVM1JoZEhWekxDQnFjVmhJVWlBcE95QjlJQ0FnSUgwcFhISmNibHgwWEhSY2RDQWdMeThnTG1Gc2QyRjVjeWdnWm5WdVkzUnBiMjRnS0NCa1lYUmhYMnB4V0VoU0xDQjBaWGgwVTNSaGRIVnpMQ0JxY1ZoSVVsOWxjbkp2Y2xSb2NtOTNiaUFwSUhzZ0lDQnBaaUFvSUhkcGJtUnZkeTVqYjI1emIyeGxJQ1ltSUhkcGJtUnZkeTVqYjI1emIyeGxMbXh2WnlBcGV5QmpiMjV6YjJ4bExteHZaeWdnSjJGc2QyRjVjeUJtYVc1cGMyaGxaQ2NzSUdSaGRHRmZhbkZZU0ZJc0lIUmxlSFJUZEdGMGRYTXNJR3B4V0VoU1gyVnljbTl5VkdoeWIzZHVJQ2s3SUgwZ0lDQWdJSDBwWEhKY2JseDBYSFJjZENBZ095QWdMeThnUlc1a0lFRnFZWGhjY2x4dWZWeHlYRzVjY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnSUZacFpYZHpJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNBcUwxeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlGTm9iM2NnVEdsemRHbHVaeUJVWVdKc1pTQmNkRngwWVc1a0lHUmxabWx1WlNCblRXRnBiQ0JqYUdWamEySnZlQ0JvYjI5cmMxeHlYRzRnS2x4eVhHNGdLaUJBY0dGeVlXMGdhbk52Ymw5cGRHVnRjMTloY25KY2RGeDBMU0JLVTA5T0lHOWlhbVZqZENCM2FYUm9JRWwwWlcxelhISmNiaUFxSUVCd1lYSmhiU0JxYzI5dVgzTmxZWEpqYUY5d1lYSmhiWE5jZEMwZ1NsTlBUaUJ2WW1wbFkzUWdkMmwwYUNCVFpXRnlZMmhjY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJodmQxOXNhWE4wYVc1bktDQnFjMjl1WDJsMFpXMXpYMkZ5Y2l3Z2FuTnZibDl6WldGeVkyaGZjR0Z5WVcxekxDQnFjMjl1WDJKdmIydHBibWRmY21WemIzVnlZMlZ6SUNsN1hISmNibHh5WEc1Y2RIZHdZbU5mWVdwNFgyUmxabWx1WlY5MFpXMXdiR0YwWlhOZlgzSmxjMjkxY21ObFgyMWhibWx3ZFd4aGRHbHZiaWdnYW5OdmJsOXBkR1Z0YzE5aGNuSXNJR3B6YjI1ZmMyVmhjbU5vWDNCaGNtRnRjeXdnYW5OdmJsOWliMjlyYVc1blgzSmxjMjkxY21ObGN5QXBPMXh5WEc1Y2NseHVMeTlqYjI1emIyeGxMbXh2WnlnZ0oycHpiMjVmYVhSbGJYTmZZWEp5SnlBc0lHcHpiMjVmYVhSbGJYTmZZWEp5TENCcWMyOXVYM05sWVhKamFGOXdZWEpoYlhNZ0tUdGNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZjMjl5ZEY5elpXeGxZM1J2Y2ljZ0tTNWpjM01vSUZ3aVpHbHpjR3hoZVZ3aUxDQmNJbVpzWlhoY0lpQXBPMXh5WEc1Y2RIWmhjaUJzYVhOMFgyaGxZV1JsY2w5MGNHd2dQU0IzY0M1MFpXMXdiR0YwWlNnZ0ozZHdZbU5mWVdwNFgySnZiMnRwYm1kZmJHbHpkRjlvWldGa1pYSW5JQ2s3WEhKY2JseDBkbUZ5SUd4cGMzUmZjbTkzWDNSd2JDQWdJQ0E5SUhkd0xuUmxiWEJzWVhSbEtDQW5kM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wWDNKdmR5Y2dLVHRjY2x4dVhISmNibHh5WEc1Y2RDOHZJRWhsWVdSbGNseHlYRzVjZEdwUmRXVnllU2dnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlzYVhOMGFXNW5MbWRsZEY5dmRHaGxjbDl3WVhKaGJTZ2dKMnhwYzNScGJtZGZZMjl1ZEdGcGJtVnlKeUFwSUNrdWFIUnRiQ2dnYkdsemRGOW9aV0ZrWlhKZmRIQnNLQ2tnS1R0Y2NseHVYSEpjYmx4MEx5OGdRbTlrZVZ4eVhHNWNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1WVhCd1pXNWtLQ0FuUEdScGRpQmpiR0Z6Y3oxY0luZHdZbU5mYzJWc1pXTjBZV0pzWlY5aWIyUjVYQ0krUEM5a2FYWStKeUFwTzF4eVhHNWNjbHh1WEhRdkx5QlNJRzhnZHlCelhISmNibU52Ym5OdmJHVXVaM0p2ZFhCRGIyeHNZWEJ6WldRb0lDZE1TVk5VU1U1SFgxSlBWMU1uSUNrN1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkQzh2SUV4SlUxUkpUa2RmVWs5WFUxeHlYRzVjZEY4dVpXRmphQ2dnYW5OdmJsOXBkR1Z0YzE5aGNuSXNJR1oxYm1OMGFXOXVJQ2dnY0Y5MllXd3NJSEJmYTJWNUxDQndYMlJoZEdFZ0tYdGNjbHh1WEhSY2RHbG1JQ2dnSjNWdVpHVm1hVzVsWkNjZ0lUMDlJSFI1Y0dWdlppQnFjMjl1WDNObFlYSmphRjl3WVhKaGJYTmJJQ2RyWlhsM2IzSmtKeUJkSUNsN1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRdkx5QlFZWEpoYldWMFpYSWdabTl5SUcxaGNtdHBibWNnYTJWNWQyOXlaQ0IzYVhSb0lHUnBabVpsY21WdWRDQmpiMnh2Y2lCcGJpQmhJR3hwYzNSY2NseHVYSFJjZEZ4MGNGOTJZV3hiSUNkZlgzTmxZWEpqYUY5eVpYRjFaWE4wWDJ0bGVYZHZjbVJmWHljZ1hTQTlJR3B6YjI1ZmMyVmhjbU5vWDNCaGNtRnRjMXNnSjJ0bGVYZHZjbVFuSUYwN1hISmNibHgwWEhSOUlHVnNjMlVnZTF4eVhHNWNkRngwWEhSd1gzWmhiRnNnSjE5ZmMyVmhjbU5vWDNKbGNYVmxjM1JmYTJWNWQyOXlaRjlmSnlCZElEMGdKeWM3WEhKY2JseDBYSFI5WEhKY2JseDBYSFJ3WDNaaGJGc2dKMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVnpKeUJkSUQwZ2FuTnZibDlpYjI5cmFXNW5YM0psYzI5MWNtTmxjenRjY2x4dVhIUmNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ3NnSnlBdWQzQmlZMTl6Wld4bFkzUmhZbXhsWDJKdlpIa25JQ2t1WVhCd1pXNWtLQ0JzYVhOMFgzSnZkMTkwY0d3b0lIQmZkbUZzSUNrZ0tUdGNjbHh1WEhSOUlDazdYSEpjYm1OdmJuTnZiR1V1WjNKdmRYQkZibVFvS1RzZ1hIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFF2THlCTVNWTlVTVTVIWDFKUFYxTmNjbHh1WEhKY2JseDBkM0JpWTE5a1pXWnBibVZmWjIxaGFXeGZZMmhsWTJ0aWIzaGZjMlZzWldOMGFXOXVLQ0JxVVhWbGNua2dLVHRjZEZ4MFhIUmNkRngwWEhRdkx5QlNaV1JsWm1sdVpTQkliMjlyY3lCbWIzSWdZMnhwWTJ0cGJtY2dZWFFnUTJobFkydGliM2hsYzF4eVhHNTlYSEpjYmx4eVhHNWNjbHh1WEhRdktpcGNjbHh1WEhRZ0tpQkVaV1pwYm1VZ2RHVnRjR3hoZEdVZ1ptOXlJR05vWVc1bmFXNW5JR0p2YjJ0cGJtY2djbVZ6YjNWeVkyVnpJQ1lnSUhWd1pHRjBaU0JwZENCbFlXTm9JSFJwYldVc0lDQjNhR1Z1SUNCc2FYTjBhVzVuSUhWd1pHRjBhVzVuTENCMWMyVm1kV3dnSUdadmNpQnphRzkzYVc1bklHRmpkSFZoYkNBZ1ltOXZhMmx1WnlCeVpYTnZkWEpqWlhNdVhISmNibHgwSUNwY2NseHVYSFFnS2lCQWNHRnlZVzBnYW5OdmJsOXBkR1Z0YzE5aGNuSmNkRngwTFNCS1UwOU9JRzlpYW1WamRDQjNhWFJvSUVsMFpXMXpYSEpjYmx4MElDb2dRSEJoY21GdElHcHpiMjVmYzJWaGNtTm9YM0JoY21GdGMxeDBMU0JLVTA5T0lHOWlhbVZqZENCM2FYUm9JRk5sWVhKamFGeHlYRzVjZENBcUlFQndZWEpoYlNCcWMyOXVYMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVnpYSFF0SUVwVFQwNGdiMkpxWldOMElIZHBkR2dnVW1WemIzVnlZMlZ6WEhKY2JseDBJQ292WEhKY2JseDBablZ1WTNScGIyNGdkM0JpWTE5aGFuaGZaR1ZtYVc1bFgzUmxiWEJzWVhSbGMxOWZjbVZ6YjNWeVkyVmZiV0Z1YVhCMWJHRjBhVzl1S0NCcWMyOXVYMmwwWlcxelgyRnljaXdnYW5OdmJsOXpaV0Z5WTJoZmNHRnlZVzF6TENCcWMyOXVYMkp2YjJ0cGJtZGZjbVZ6YjNWeVkyVnpJQ2w3WEhKY2JseHlYRzVjZEZ4MEx5OGdRMmhoYm1kbElHSnZiMnRwYm1jZ2NtVnpiM1Z5WTJWY2NseHVYSFJjZEhaaGNpQmphR0Z1WjJWZlltOXZhMmx1WjE5eVpYTnZkWEpqWlY5MGNHd2dQU0IzY0M1MFpXMXdiR0YwWlNnZ0ozZHdZbU5mWVdwNFgyTm9ZVzVuWlY5aWIyOXJhVzVuWDNKbGMyOTFjbU5sSnlBcE8xeHlYRzVjY2x4dVhIUmNkR3BSZFdWeWVTZ2dKeU4zY0dKalgyaHBaR1JsYmw5MFpXMXdiR0YwWlY5ZlkyaGhibWRsWDJKdmIydHBibWRmY21WemIzVnlZMlVuSUNrdWFIUnRiQ2hjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmphR0Z1WjJWZlltOXZhMmx1WjE5eVpYTnZkWEpqWlY5MGNHd29JSHRjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RDZGhhbmhmYzJWaGNtTm9YM0JoY21GdGN5Y2dJQ0FnT2lCcWMyOXVYM05sWVhKamFGOXdZWEpoYlhNc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFFuWVdwNFgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWekp6b2dhbk52Ymw5aWIyOXJhVzVuWDNKbGMyOTFjbU5sYzF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkSDBnS1Z4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEtUdGNjbHh1WEhKY2JseDBYSFF2THlCRWRYQnNhV05oZEdVZ1ltOXZhMmx1WnlCeVpYTnZkWEpqWlZ4eVhHNWNkRngwZG1GeUlHUjFjR3hwWTJGMFpWOWliMjlyYVc1blgzUnZYMjkwYUdWeVgzSmxjMjkxY21ObFgzUndiQ0E5SUhkd0xuUmxiWEJzWVhSbEtDQW5kM0JpWTE5aGFuaGZaSFZ3YkdsallYUmxYMkp2YjJ0cGJtZGZkRzlmYjNSb1pYSmZjbVZ6YjNWeVkyVW5JQ2s3WEhKY2JseHlYRzVjZEZ4MGFsRjFaWEo1S0NBbkkzZHdZbU5mYUdsa1pHVnVYM1JsYlhCc1lYUmxYMTlrZFhCc2FXTmhkR1ZmWW05dmEybHVaMTkwYjE5dmRHaGxjbDl5WlhOdmRYSmpaU2NnS1M1b2RHMXNLRnh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RHUjFjR3hwWTJGMFpWOWliMjlyYVc1blgzUnZYMjkwYUdWeVgzSmxjMjkxY21ObFgzUndiQ2dnZTF4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKMkZxZUY5elpXRnlZMmhmY0dGeVlXMXpKeUFnSUNBNklHcHpiMjVmYzJWaGNtTm9YM0JoY21GdGN5eGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENkaGFuaGZZbTl2YTJsdVoxOXlaWE52ZFhKalpYTW5PaUJxYzI5dVgySnZiMnRwYm1kZmNtVnpiM1Z5WTJWelhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwZlNBcFhISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUXBPMXh5WEc1Y2RIMWNjbHh1WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nVTJodmR5QnFkWE4wSUcxbGMzTmhaMlVnYVc1emRHVmhaQ0J2WmlCc2FYTjBhVzVuSUdGdVpDQm9hV1JsSUhCaFoybHVZWFJwYjI1Y2NseHVJQ292WEhKY2JtWjFibU4wYVc5dUlIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmMyaHZkMTl0WlhOellXZGxLQ0J0WlhOellXZGxJQ2w3WEhKY2JseHlYRzVjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmWDJGamRIVmhiRjlzYVhOMGFXNW5YMTlvYVdSbEtDazdYSEpjYmx4eVhHNWNkR3BSZFdWeWVTZ2dkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1bkxtZGxkRjl2ZEdobGNsOXdZWEpoYlNnZ0oyeHBjM1JwYm1kZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1YUhSdGJDaGNjbHh1WEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKenhrYVhZZ1kyeGhjM005WENKM2NHSmpMWE5sZEhScGJtZHpMVzV2ZEdsalpTQnViM1JwWTJVdGQyRnlibWx1WjF3aUlITjBlV3hsUFZ3aWRHVjRkQzFoYkdsbmJqcHNaV1owWENJK0p5QXJYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwYldWemMyRm5aU0FyWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZENjOEwyUnBkajRuWEhKY2JseDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBLVHRjY2x4dWZWeHlYRzVjY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnSUVnZ2J5QnZJR3NnY3lBZ0xTQWdhWFJ6SUVGamRHbHZiaTlVYVcxbGN5QjNhR1Z1SUc1bFpXUWdkRzhnY21VdFVtVnVaR1Z5SUZacFpYZHpJQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFNBcUwxeHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlGTmxibVFnUVdwaGVDQlRaV0Z5WTJnZ1VtVnhkV1Z6ZENCaFpuUmxjaUJWY0dSaGRHbHVaeUJ6WldGeVkyZ2djbVZ4ZFdWemRDQndZWEpoYldWMFpYSnpYSEpjYmlBcVhISmNiaUFxSUVCd1lYSmhiU0J3WVhKaGJYTmZZWEp5WEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNObGJtUmZjMlZoY21Ob1gzSmxjWFZsYzNSZmQybDBhRjl3WVhKaGJYTWdLQ0J3WVhKaGJYTmZZWEp5SUNsN1hISmNibHh5WEc1Y2RDOHZJRVJsWm1sdVpTQmthV1ptWlhKbGJuUWdVMlZoY21Ob0lDQndZWEpoYldWMFpYSnpJR1p2Y2lCeVpYRjFaWE4wWEhKY2JseDBYeTVsWVdOb0tDQndZWEpoYlhOZllYSnlMQ0JtZFc1amRHbHZiaUFvSUhCZmRtRnNMQ0J3WDJ0bGVTd2djRjlrWVhSaElDa2dlMXh5WEc1Y2RGeDBMeTlqYjI1emIyeGxMbXh2WnlnZ0oxSmxjWFZsYzNRZ1ptOXlPaUFuTENCd1gydGxlU3dnY0Y5MllXd2dLVHRjY2x4dVhIUmNkSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZiR2x6ZEdsdVp5NXpaV0Z5WTJoZmMyVjBYM0JoY21GdEtDQndYMnRsZVN3Z2NGOTJZV3dnS1R0Y2NseHVYSFI5S1R0Y2NseHVYSEpjYmx4MEx5OGdVMlZ1WkNCQmFtRjRJRkpsY1hWbGMzUmNjbHh1WEhSM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDJGcVlYaGZjMlZoY21Ob1gzSmxjWFZsYzNRb0tUdGNjbHh1ZlZ4eVhHNWNjbHh1THlvcVhISmNiaUFxSUZObFlYSmphQ0J5WlhGMVpYTjBJR1p2Y2lCY0lsQmhaMlVnVG5WdFltVnlYQ0pjY2x4dUlDb2dRSEJoY21GdElIQmhaMlZmYm5WdFltVnlYSFJwYm5SY2NseHVJQ292WEhKY2JtWjFibU4wYVc5dUlIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmNHRm5hVzVoZEdsdmJsOWpiR2xqYXlnZ2NHRm5aVjl1ZFcxaVpYSWdLWHRjY2x4dVhISmNibHgwZDNCaVkxOWhhbmhmWW05dmEybHVaMTl6Wlc1a1gzTmxZWEpqYUY5eVpYRjFaWE4wWDNkcGRHaGZjR0Z5WVcxektDQjdYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MEozQmhaMlZmYm5WdEp6b2djR0ZuWlY5dWRXMWlaWEpjY2x4dVhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1OVhISmNibHh5WEc1Y2NseHVMeW9xWEhKY2JpQXFJQ0FnUzJWNWQyOXlaQ0JUWldGeVkyaHBibWNnSUMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0SUNvdlhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1UyVmhjbU5vSUhKbGNYVmxjM1FnWm05eUlGd2lTMlY1ZDI5eVpGd2lMQ0JoYkhOdklITmxkQ0JqZFhKeVpXNTBJSEJoWjJVZ2RHOGdJREZjY2x4dUlDcGNjbHh1SUNvZ1FIQmhjbUZ0SUdWc1pXMWxiblJmYVdSY2RDMWNkRWhVVFV3Z1NVUWdJRzltSUdWc1pXMWxiblFzSUNCM2FHVnlaU0IzWVhNZ1pXNTBaWEpsWkNCclpYbDNiM0prWEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDNObGJtUmZjMlZoY21Ob1gzSmxjWFZsYzNSZlptOXlYMnRsZVhkdmNtUW9JR1ZzWlcxbGJuUmZhV1FnS1NCN1hISmNibHh5WEc1Y2RDOHZJRmRsSUc1bFpXUWdkRzhnVW1WelpYUWdjR0ZuWlY5dWRXMGdkRzhnTVNCM2FYUm9JR1ZoWTJnZ2JtVjNJSE5sWVhKamFDd2dZbVZqWVhWelpTQjNaU0JqWVc0Z1ltVWdZWFFnY0dGblpTQWpOQ3dnSUdKMWRDQmhablJsY2lBZ2JtVjNJSE5sWVhKamFDQWdkMlVnWTJGdUlDQm9ZWFpsSUhSdmRHRnNiSGtnSUc5dWJIa2dJREVnY0dGblpWeHlYRzVjZEhkd1ltTmZZV3A0WDJKdmIydHBibWRmYzJWdVpGOXpaV0Z5WTJoZmNtVnhkV1Z6ZEY5M2FYUm9YM0JoY21GdGN5Z2dlMXh5WEc1Y2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhSY2RGeDBKMnRsZVhkdmNtUW5JQ0E2SUdwUmRXVnllU2dnWld4bGJXVnVkRjlwWkNBcExuWmhiQ2dwTEZ4eVhHNWNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwSjNCaFoyVmZiblZ0SnpvZ01WeHlYRzVjZEZ4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEgwZ0tUdGNjbHh1ZlZ4eVhHNWNjbHh1WEhRdktpcGNjbHh1WEhRZ0tpQlRaVzVrSUhObFlYSmphQ0J5WlhGMVpYTjBJR0ZtZEdWeUlHWmxkeUJ6WldOdmJtUnpJQ2gxYzNWaGJHeDVJR0ZtZEdWeUlERXNOU0J6WldNcFhISmNibHgwSUNvZ1EyeHZjM1Z5WlNCbWRXNWpkR2x2Ymk0Z1NYUnpJSFZ6WldaMWJDd2dJR1p2Y2lCa2J5QWdibTkwSUhObGJtUWdkRzl2SUcxaGJua2dRV3BoZUNCeVpYRjFaWE4wY3l3Z2QyaGxiaUJ6YjIxbGIyNWxJRzFoYTJVZ1ptRnpkQ0IwZVhCcGJtY3VYSEpjYmx4MElDb3ZYSEpjYmx4MGRtRnlJSGR3WW1OZllXcDRYMkp2YjJ0cGJtZGZjMlZoY21Ob2FXNW5YMkZtZEdWeVgyWmxkMTl6WldOdmJtUnpJRDBnWm5WdVkzUnBiMjRnS0NsN1hISmNibHh5WEc1Y2RGeDBkbUZ5SUdOc2IzTmxaRjkwYVcxbGNpQTlJREE3WEhKY2JseHlYRzVjZEZ4MGNtVjBkWEp1SUdaMWJtTjBhVzl1SUNnZ1pXeGxiV1Z1ZEY5cFpDd2dkR2x0WlhKZlpHVnNZWGtnS1h0Y2NseHVYSEpjYmx4MFhIUmNkQzh2SUVkbGRDQmtaV1poZFd4MElIWmhiSFZsSUc5bUlGd2lkR2x0WlhKZlpHVnNZWGxjSWl3Z0lHbG1JSEJoY21GdFpYUmxjaUIzWVhNZ2JtOTBJSEJoYzNObFpDQnBiblJ2SUhSb1pTQm1kVzVqZEdsdmJpNWNjbHh1WEhSY2RGeDBkR2x0WlhKZlpHVnNZWGtnUFNCMGVYQmxiMllnZEdsdFpYSmZaR1ZzWVhrZ0lUMDlJQ2QxYm1SbFptbHVaV1FuSUQ4Z2RHbHRaWEpmWkdWc1lYa2dPaUF4TlRBd08xeHlYRzVjY2x4dVhIUmNkRngwWTJ4bFlYSlVhVzFsYjNWMEtDQmpiRzl6WldSZmRHbHRaWElnS1R0Y2RGeDBMeThnUTJ4bFlYSWdjSEpsZG1sdmRYTWdkR2x0WlhKY2NseHVYSEpjYmx4MFhIUmNkQzh2SUZOMFlYSjBJRzVsZHlCVWFXMWxjbHh5WEc1Y2RGeDBYSFJqYkc5elpXUmZkR2x0WlhJZ1BTQnpaWFJVYVcxbGIzVjBLQ0IzY0dKalgyRnFlRjlpYjI5cmFXNW5YM05sYm1SZmMyVmhjbU5vWDNKbGNYVmxjM1JmWm05eVgydGxlWGR2Y21RdVltbHVaQ2dnSUc1MWJHd3NJR1ZzWlcxbGJuUmZhV1FnS1N3Z2RHbHRaWEpmWkdWc1lYa2dLVHRjY2x4dVhIUmNkSDFjY2x4dVhIUjlLQ2s3WEhKY2JseHlYRzVjY2x4dUx5b3FYSEpjYmlBcUlDQWdSR1ZtYVc1bElFUjVibUZ0YVdNZ1NHOXZhM01nSUNoc2FXdGxJSEJoWjJsdVlYUnBiMjRnWTJ4cFkyc3NJSGRvYVdOb0lISmxibVYzSUdWaFkyZ2dkR2x0WlNCM2FYUm9JRzVsZHlCc2FYTjBhVzVuSUhOb2IzZHBibWNwSUNBdExTMHRMUzB0TFMwdExTMHRJQ292WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nUkdWbWFXNWxJRWhVVFV3Z2RXa2dTRzl2YTNNNklHOXVJRXRsZVZWd0lId2dRMmhoYm1kbElId2dMVDRnVTI5eWRDQlBjbVJsY2lBbUlFNTFiV0psY2lCSmRHVnRjeUF2SUZCaFoyVmNjbHh1SUNvZ1YyVWdZWEpsSUdoamJtRm5aV1FnYVhRZ1pXRmphQ0FnZEdsdFpTd2dkMmhsYmlCemFHOTNhVzVuSUc1bGR5QnNhWE4wYVc1bkxDQmlaV05oZFhObElFUlBUU0JsYkdWdFpXNTBjeUJqYUc1aFoyVmtYSEpjYmlBcUwxeHlYRzVtZFc1amRHbHZiaUIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMlJsWm1sdVpWOTFhVjlvYjI5cmN5Z3BlMXh5WEc1Y2NseHVYSFJwWmlBb0lDZG1kVzVqZEdsdmJpY2dQVDA5SUhSNWNHVnZaaWdnZDNCaVkxOWtaV1pwYm1WZmRHbHdjSGxmZEc5dmJIUnBjSE1nS1NBcElIdGNjbHh1WEhSY2RIZHdZbU5mWkdWbWFXNWxYM1JwY0hCNVgzUnZiMngwYVhCektDQW5MbmR3WW1OZmJHbHpkR2x1WjE5amIyNTBZV2x1WlhJZ0p5QXBPMXh5WEc1Y2RIMWNjbHh1WEhKY2JseDBkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOWZkV2xmWkdWbWFXNWxYMTlzYjJOaGJHVW9LVHRjY2x4dVhIUjNjR0pqWDJGcWVGOWliMjlyYVc1blgxOTFhVjlrWldacGJtVmZYM0psYldGeWF5Z3BPMXh5WEc1Y2NseHVYSFF2THlCSmRHVnRjeUJRWlhJZ1VHRm5aVnh5WEc1Y2RHcFJkV1Z5ZVNnZ0p5NTNjR0pqWDJsMFpXMXpYM0JsY2w5d1lXZGxKeUFwTG05dUtDQW5ZMmhoYm1kbEp5d2dablZ1WTNScGIyNG9JR1YyWlc1MElDbDdYSEpjYmx4eVhHNWNkRngwZDNCaVkxOWhhbmhmWW05dmEybHVaMTl6Wlc1a1gzTmxZWEpqYUY5eVpYRjFaWE4wWDNkcGRHaGZjR0Z5WVcxektDQjdYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MFhIUW5jR0ZuWlY5cGRHVnRjMTlqYjNWdWRDY2dJRG9nYWxGMVpYSjVLQ0IwYUdseklDa3VkbUZzS0Nrc1hISmNibHgwWEhSY2RGeDBYSFJjZEZ4MFhIUmNkRngwWEhRbmNHRm5aVjl1ZFcwbk9pQXhYSEpjYmx4MFhIUmNkRngwWEhSY2RGeDBYSFJjZEZ4MGZTQXBPMXh5WEc1Y2RIMGdLVHRjY2x4dVhISmNibHgwTHk4Z1UyOXlkR2x1WjF4eVhHNWNkR3BSZFdWeWVTZ2dKeTUzY0dKalgybDBaVzF6WDNOdmNuUmZkSGx3WlNjZ0tTNXZiaWdnSjJOb1lXNW5aU2NzSUdaMWJtTjBhVzl1S0NCbGRtVnVkQ0FwZTF4eVhHNWNjbHh1WEhSY2RIZHdZbU5mWVdwNFgySnZiMnRwYm1kZmMyVnVaRjl6WldGeVkyaGZjbVZ4ZFdWemRGOTNhWFJvWDNCaGNtRnRjeWdnZXlkemIzSjBYM1I1Y0dVbk9pQnFVWFZsY25rb0lIUm9hWE1nS1M1MllXd29LWDBnS1R0Y2NseHVYSFI5SUNrN1hISmNibjFjY2x4dVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ0lDQlRhRzkzSUM4Z1NHbGtaU0JNYVhOMGFXNW5JQ0F0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMGdLaTljY2x4dVhISmNiaThxS2x4eVhHNGdLaUFnVTJodmR5Qk1hWE4wYVc1bklGUmhZbXhsSUZ4MExTQmNkRk5sYm1ScGJtY2dRV3BoZUNCU1pYRjFaWE4wWEhRdFhIUjNhWFJvSUhCaGNtRnRaWFJsY25NZ2RHaGhkQ0FnZDJVZ1pXRnliSGtnSUdSbFptbHVaV1FnYVc0Z1hDSjNjR0pqWDJGcWVGOWliMjlyYVc1blgyeHBjM1JwYm1kY0lpQlBZbW91WEhKY2JpQXFMMXh5WEc1bWRXNWpkR2x2YmlCM2NHSmpYMkZxZUY5aWIyOXJhVzVuWDE5aFkzUjFZV3hmYkdsemRHbHVaMTlmYzJodmR5Z3BlMXh5WEc1Y2NseHVYSFIzY0dKalgyRnFlRjlpYjI5cmFXNW5YMkZxWVhoZmMyVmhjbU5vWDNKbGNYVmxjM1FvS1R0Y2RGeDBYSFF2THlCVFpXNWtJRUZxWVhnZ1VtVnhkV1Z6ZEZ4MExWeDBkMmwwYUNCd1lYSmhiV1YwWlhKeklIUm9ZWFFnSUhkbElHVmhjbXg1SUNCa1pXWnBibVZrSUdsdUlGd2lkM0JpWTE5aGFuaGZZbTl2YTJsdVoxOXNhWE4wYVc1blhDSWdUMkpxTGx4eVhHNTlYSEpjYmx4eVhHNHZLaXBjY2x4dUlDb2dTR2xrWlNCTWFYTjBhVzVuSUZSaFlteGxJQ2dnWVc1a0lGQmhaMmx1WVhScGIyNGdLVnh5WEc0Z0tpOWNjbHh1Wm5WdVkzUnBiMjRnZDNCaVkxOWhhbmhmWW05dmEybHVaMTlmWVdOMGRXRnNYMnhwYzNScGJtZGZYMmhwWkdVb0tYdGNjbHh1WEhScVVYVmxjbmtvSUNjamQyaGZjMjl5ZEY5elpXeGxZM1J2Y2ljZ0tTNW9hV1JsS0NrN1hISmNibHgwYWxGMVpYSjVLQ0IzY0dKalgyRnFlRjlpYjI5cmFXNW5YMnhwYzNScGJtY3VaMlYwWDI5MGFHVnlYM0JoY21GdEtDQW5iR2x6ZEdsdVoxOWpiMjUwWVdsdVpYSW5JQ2tnSUNBZ0tTNW9kRzFzS0NBbkp5QXBPMXh5WEc1Y2RHcFJkV1Z5ZVNnZ2QzQmlZMTloYW5oZlltOXZhMmx1WjE5c2FYTjBhVzVuTG1kbGRGOXZkR2hsY2w5d1lYSmhiU2dnSjNCaFoybHVZWFJwYjI1ZlkyOXVkR0ZwYm1WeUp5QXBJQ2t1YUhSdGJDZ2dKeWNnS1R0Y2NseHVmVnh5WEc1Y2NseHVYSEpjYmk4cUtseHlYRzRnS2lBZ0lGTjFjSEJ2Y25RZ1puVnVZM1JwYjI1eklHWnZjaUJEYjI1MFpXNTBJRlJsYlhCc1lYUmxJR1JoZEdFZ0lDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTQXFMMXh5WEc1Y2NseHVMeW9xWEhKY2JpQXFJRWhwWjJoc2FXZG9kQ0J6ZEhKcGJtZHpMRnh5WEc0Z0tpQmllU0JwYm5ObGNuUnBibWNnUEhOd1lXNGdZMnhoYzNNOVhDSm1hV1ZzWkhaaGJIVmxJRzVoYldVZ1ptbGxiR1J6WldGeVkyaDJZV3gxWlZ3aVBpNHVMand2YzNCaGJqNGdhSFJ0YkNBZ1pXeGxiV1Z1ZEhNZ2FXNTBieUIwYUdVZ2MzUnlhVzVuTGx4eVhHNGdLaUJBY0dGeVlXMGdlM04wY21sdVozMGdZbTl2YTJsdVoxOWtaWFJoYVd4eklGeDBMU0JUYjNWeVkyVWdjM1J5YVc1blhISmNiaUFxSUVCd1lYSmhiU0I3YzNSeWFXNW5mU0JpYjI5cmFXNW5YMnRsZVhkdmNtUmNkQzBnUzJWNWQyOXlaQ0IwYnlCb2FXZG9iR2xuYUhSY2NseHVJQ29nUUhKbGRIVnlibk1nZTNOMGNtbHVaMzFjY2x4dUlDb3ZYSEpjYm1aMWJtTjBhVzl1SUhkd1ltTmZaMlYwWDJocFoyaHNhV2RvZEdWa1gzTmxZWEpqYUY5clpYbDNiM0prS0NCaWIyOXJhVzVuWDJSbGRHRnBiSE1zSUdKdmIydHBibWRmYTJWNWQyOXlaQ0FwZTF4eVhHNWNjbHh1WEhSaWIyOXJhVzVuWDJ0bGVYZHZjbVFnUFNCaWIyOXJhVzVuWDJ0bGVYZHZjbVF1ZEhKcGJTZ3BMblJ2VEc5M1pYSkRZWE5sS0NrN1hISmNibHgwYVdZZ0tDQXdJRDA5SUdKdmIydHBibWRmYTJWNWQyOXlaQzVzWlc1bmRHZ2dLWHRjY2x4dVhIUmNkSEpsZEhWeWJpQmliMjlyYVc1blgyUmxkR0ZwYkhNN1hISmNibHgwZlZ4eVhHNWNjbHh1WEhRdkx5QklhV2RvYkdsbmFIUWdjM1ZpYzNSeWFXNW5JSGRwZEdocGJtY2dTRlJOVENCMFlXZHpJR2x1SUZ3aVEyOXVkR1Z1ZENCdlppQmliMjlyYVc1bklHWnBaV3hrY3lCa1lYUmhYQ0lnTFMwZ1pTNW5MaUJ6ZEdGeWRHbHVaeUJtY205dElDQStJQ0JoYm1RZ1pXNWthVzVuSUhkcGRHZ2dQRnh5WEc1Y2RHeGxkQ0JyWlhsM2IzSmtVbVZuWlhnZ1BTQnVaWGNnVW1WblJYaHdLQ0JnWm1sbGJHUjJZV3gxWlZ0ZVBENWRLajRvVzE0OFhTb2tlMkp2YjJ0cGJtZGZhMlY1ZDI5eVpIMWJYanhkS2lsZ0xDQW5aMmx0SnlBcE8xeHlYRzVjY2x4dVhIUXZMMnhsZENCdFlYUmphR1Z6SUQwZ1d5NHVMbUp2YjJ0cGJtZGZaR1YwWVdsc2N5NTBiMHh2ZDJWeVEyRnpaU2dwTG0xaGRHTm9RV3hzS0NCclpYbDNiM0prVW1WblpYZ2dLVjA3WEhKY2JseDBiR1YwSUcxaGRHTm9aWE1nUFNCaWIyOXJhVzVuWDJSbGRHRnBiSE11ZEc5TWIzZGxja05oYzJVb0tTNXRZWFJqYUVGc2JDZ2dhMlY1ZDI5eVpGSmxaMlY0SUNrN1hISmNibHgwWEhSdFlYUmphR1Z6SUQwZ1FYSnlZWGt1Wm5KdmJTZ2diV0YwWTJobGN5QXBPMXh5WEc1Y2NseHVYSFJzWlhRZ2MzUnlhVzVuYzE5aGNuSWdQU0JiWFR0Y2NseHVYSFJzWlhRZ2NHOXpYM0J5WlhacGIzVnpJRDBnTUR0Y2NseHVYSFJzWlhRZ2MyVmhjbU5vWDNCdmMxOXpkR0Z5ZER0Y2NseHVYSFJzWlhRZ2MyVmhjbU5vWDNCdmMxOWxibVE3WEhKY2JseHlYRzVjZEdadmNpQW9JR052Ym5OMElHMWhkR05vSUc5bUlHMWhkR05vWlhNZ0tYdGNjbHh1WEhKY2JseDBYSFJ6WldGeVkyaGZjRzl6WDNOMFlYSjBJRDBnYldGMFkyZ3VhVzVrWlhnZ0t5QnRZWFJqYUZzZ01DQmRMblJ2VEc5M1pYSkRZWE5sS0NrdWFXNWtaWGhQWmlnZ0p6NG5MQ0F3SUNrZ0t5QXhJRHRjY2x4dVhISmNibHgwWEhSemRISnBibWR6WDJGeWNpNXdkWE5vS0NCaWIyOXJhVzVuWDJSbGRHRnBiSE11YzNWaWMzUnlLQ0J3YjNOZmNISmxkbWx2ZFhNc0lDaHpaV0Z5WTJoZmNHOXpYM04wWVhKMElDMGdjRzl6WDNCeVpYWnBiM1Z6S1NBcElDazdYSEpjYmx4eVhHNWNkRngwYzJWaGNtTm9YM0J2YzE5bGJtUWdQU0JpYjI5cmFXNW5YMlJsZEdGcGJITXVkRzlNYjNkbGNrTmhjMlVvS1M1cGJtUmxlRTltS0NBblBDY3NJSE5sWVhKamFGOXdiM05mYzNSaGNuUWdLVHRjY2x4dVhISmNibHgwWEhSemRISnBibWR6WDJGeWNpNXdkWE5vS0NBblBITndZVzRnWTJ4aGMzTTlYQ0ptYVdWc1pIWmhiSFZsSUc1aGJXVWdabWxsYkdSelpXRnlZMmgyWVd4MVpWd2lQaWNnS3lCaWIyOXJhVzVuWDJSbGRHRnBiSE11YzNWaWMzUnlLQ0J6WldGeVkyaGZjRzl6WDNOMFlYSjBMQ0FvYzJWaGNtTm9YM0J2YzE5bGJtUWdMU0J6WldGeVkyaGZjRzl6WDNOMFlYSjBLU0FwSUNzZ0p6d3ZjM0JoYmo0bklDazdYSEpjYmx4eVhHNWNkRngwY0c5elgzQnlaWFpwYjNWeklEMGdjMlZoY21Ob1gzQnZjMTlsYm1RN1hISmNibHgwZlZ4eVhHNWNjbHh1WEhSemRISnBibWR6WDJGeWNpNXdkWE5vS0NCaWIyOXJhVzVuWDJSbGRHRnBiSE11YzNWaWMzUnlLQ0J3YjNOZmNISmxkbWx2ZFhNc0lDaGliMjlyYVc1blgyUmxkR0ZwYkhNdWJHVnVaM1JvSUMwZ2NHOXpYM0J5WlhacGIzVnpLU0FwSUNrN1hISmNibHh5WEc1Y2RISmxkSFZ5YmlCemRISnBibWR6WDJGeWNpNXFiMmx1S0NBbkp5QXBPMXh5WEc1OVhISmNibHh5WEc0dktpcGNjbHh1SUNvZ1EyOXVkbVZ5ZENCemNHVmphV0ZzSUVoVVRVd2dZMmhoY21GamRHVnljeUFnSUdaeWIyMDZYSFFnSm1GdGNEc2dYSFF0UGlCY2RDWmNjbHh1SUNwY2NseHVJQ29nUUhCaGNtRnRJSFJsZUhSY2NseHVJQ29nUUhKbGRIVnlibk1nZXlwOVhISmNiaUFxTDF4eVhHNW1kVzVqZEdsdmJpQjNjR0pqWDJSbFkyOWtaVjlJVkUxTVgyVnVkR2wwYVdWektDQjBaWGgwSUNsN1hISmNibHgwZG1GeUlIUmxlSFJCY21WaElEMGdaRzlqZFcxbGJuUXVZM0psWVhSbFJXeGxiV1Z1ZENnZ0ozUmxlSFJoY21WaEp5QXBPMXh5WEc1Y2RIUmxlSFJCY21WaExtbHVibVZ5U0ZSTlRDQTlJSFJsZUhRN1hISmNibHgwY21WMGRYSnVJSFJsZUhSQmNtVmhMblpoYkhWbE8xeHlYRzU5WEhKY2JseHlYRzR2S2lwY2NseHVJQ29nUTI5dWRtVnlkQ0JVVHlCemNHVmphV0ZzSUVoVVRVd2dZMmhoY21GamRHVnljeUFnSUdaeWIyMDZYSFFnSmlCY2RDMCtJRngwSm1GdGNEdGNjbHh1SUNwY2NseHVJQ29nUUhCaGNtRnRJSFJsZUhSY2NseHVJQ29nUUhKbGRIVnlibk1nZXlwOVhISmNiaUFxTDF4eVhHNW1kVzVqZEdsdmJpQjNjR0pqWDJWdVkyOWtaVjlJVkUxTVgyVnVkR2wwYVdWektIUmxlSFFwSUh0Y2NseHVJQ0IyWVhJZ2RHVjRkRUZ5WldFZ1BTQmtiMk4xYldWdWRDNWpjbVZoZEdWRmJHVnRaVzUwS0NkMFpYaDBZWEpsWVNjcE8xeHlYRzRnSUhSbGVIUkJjbVZoTG1sdWJtVnlWR1Y0ZENBOUlIUmxlSFE3WEhKY2JpQWdjbVYwZFhKdUlIUmxlSFJCY21WaExtbHVibVZ5U0ZSTlREdGNjbHh1ZlZ4eVhHNWNjbHh1WEhKY2JpOHFLbHh5WEc0Z0tpQWdJRk4xY0hCdmNuUWdSblZ1WTNScGIyNXpJQzBnVTNCcGJpQkpZMjl1SUdsdUlFSjFkSFJ2Ym5NZ0lDMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMUzB0TFMwdExTMHRMU0FxTDF4eVhHNWNjbHh1THlvcVhISmNiaUFxSUZOd2FXNGdZblYwZEc5dUlHbHVJRVpwYkhSbGNpQjBiMjlzWW1GeUlDQXRJQ0JUZEdGeWRGeHlYRzRnS2k5Y2NseHVablZ1WTNScGIyNGdkM0JpWTE5aWIyOXJhVzVuWDJ4cGMzUnBibWRmY21Wc2IyRmtYMkoxZEhSdmJsOWZjM0JwYmw5emRHRnlkQ2dwZTF4eVhHNWNkR3BSZFdWeWVTZ2dKeU4zY0dKalgySnZiMnRwYm1kZmJHbHpkR2x1WjE5eVpXeHZZV1JmWW5WMGRHOXVJQzV0Wlc1MVgybGpiMjR1ZDNCaVkxOXpjR2x1SnlrdWNtVnRiM1psUTJ4aGMzTW9JQ2QzY0dKalgyRnVhVzFoZEdsdmJsOXdZWFZ6WlNjZ0tUdGNjbHh1ZlZ4eVhHNWNjbHh1THlvcVhISmNiaUFxSUZOd2FXNGdZblYwZEc5dUlHbHVJRVpwYkhSbGNpQjBiMjlzWW1GeUlDQXRJQ0JRWVhWelpWeHlYRzRnS2k5Y2NseHVablZ1WTNScGIyNGdkM0JpWTE5aWIyOXJhVzVuWDJ4cGMzUnBibWRmY21Wc2IyRmtYMkoxZEhSdmJsOWZjM0JwYmw5d1lYVnpaU2dwZTF4eVhHNWNkR3BSZFdWeWVTZ2dKeU4zY0dKalgySnZiMnRwYm1kZmJHbHpkR2x1WjE5eVpXeHZZV1JmWW5WMGRHOXVJQzV0Wlc1MVgybGpiMjR1ZDNCaVkxOXpjR2x1SnlBcExtRmtaRU5zWVhOektDQW5kM0JpWTE5aGJtbHRZWFJwYjI1ZmNHRjFjMlVuSUNrN1hISmNibjFjY2x4dVhISmNiaThxS2x4eVhHNGdLaUJUY0dsdUlHSjFkSFJ2YmlCcGJpQkdhV3gwWlhJZ2RHOXZiR0poY2lBZ0xTQWdhWE1nVTNCcGJtNXBibWNnUDF4eVhHNGdLbHh5WEc0Z0tpQkFjbVYwZFhKdWN5QjdZbTl2YkdWaGJuMWNjbHh1SUNvdlhISmNibVoxYm1OMGFXOXVJSGR3WW1OZlltOXZhMmx1WjE5c2FYTjBhVzVuWDNKbGJHOWhaRjlpZFhSMGIyNWZYMmx6WDNOd2FXNG9LWHRjY2x4dUlDQWdJR2xtSUNnZ2FsRjFaWEo1S0NBbkkzZHdZbU5mWW05dmEybHVaMTlzYVhOMGFXNW5YM0psYkc5aFpGOWlkWFIwYjI0Z0xtMWxiblZmYVdOdmJpNTNjR0pqWDNOd2FXNG5JQ2t1YUdGelEyeGhjM01vSUNkM2NHSmpYMkZ1YVcxaGRHbHZibDl3WVhWelpTY2dLU0FwZTF4eVhHNWNkRngwY21WMGRYSnVJSFJ5ZFdVN1hISmNibHgwZlNCbGJITmxJSHRjY2x4dVhIUmNkSEpsZEhWeWJpQm1ZV3h6WlR0Y2NseHVYSFI5WEhKY2JuMGlYU3dpWm1sc1pTSTZJbWx1WTJ4MVpHVnpMM0JoWjJVdFltOXZhMmx1WjNNdlgyOTFkQzlpYjI5cmFXNW5jMTlmYkdsemRHbHVaeTVxY3lKOVxuIl0sIm5hbWVzIjpbIl9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyIiwibyIsImFsbG93QXJyYXlMaWtlIiwiaXQiLCJTeW1ib2wiLCJpdGVyYXRvciIsIkFycmF5IiwiaXNBcnJheSIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsImxlbmd0aCIsImkiLCJGIiwicyIsIm4iLCJkb25lIiwidmFsdWUiLCJlIiwiX2UiLCJmIiwiVHlwZUVycm9yIiwiZXJyIiwibm9ybWFsQ29tcGxldGlvbiIsImRpZEVyciIsImNhbGwiLCJzdGVwIiwibmV4dCIsIl9lMiIsIm1pbkxlbiIsIl9hcnJheUxpa2VUb0FycmF5IiwiT2JqZWN0IiwicHJvdG90eXBlIiwidG9TdHJpbmciLCJzbGljZSIsImNvbnN0cnVjdG9yIiwibmFtZSIsImZyb20iLCJ0ZXN0IiwiYXJyIiwibGVuIiwiYXJyMiIsIl90eXBlb2YiLCJvYmoiLCJqUXVlcnkiLCJvbiIsInRvdWNobW92ZSIsImVhY2giLCJpbmRleCIsInRkX2VsIiwidGhpcyIsImdldCIsInVuZGVmaW5lZCIsIl90aXBweSIsImhpZGUiLCJ3cGJjX2FqeF9ib29raW5nX2xpc3RpbmciLCJwX3NlY3VyZSIsInNlY3VyaXR5X29iaiIsInVzZXJfaWQiLCJub25jZSIsImxvY2FsZSIsInNldF9zZWN1cmVfcGFyYW0iLCJwYXJhbV9rZXkiLCJwYXJhbV92YWwiLCJnZXRfc2VjdXJlX3BhcmFtIiwicF9saXN0aW5nIiwic2VhcmNoX3JlcXVlc3Rfb2JqIiwic29ydCIsInNvcnRfdHlwZSIsInBhZ2VfbnVtIiwicGFnZV9pdGVtc19jb3VudCIsImNyZWF0ZV9kYXRlIiwia2V5d29yZCIsInNvdXJjZSIsInNlYXJjaF9zZXRfYWxsX3BhcmFtcyIsInJlcXVlc3RfcGFyYW1fb2JqIiwic2VhcmNoX2dldF9hbGxfcGFyYW1zIiwic2VhcmNoX2dldF9wYXJhbSIsInNlYXJjaF9zZXRfcGFyYW0iLCJzZWFyY2hfc2V0X3BhcmFtc19hcnIiLCJwYXJhbXNfYXJyIiwiXyIsInBfdmFsIiwicF9rZXkiLCJwX2RhdGEiLCJwX290aGVyIiwib3RoZXJfb2JqIiwic2V0X290aGVyX3BhcmFtIiwiZ2V0X290aGVyX3BhcmFtIiwid3BiY19hanhfYm9va2luZ19hamF4X3NlYXJjaF9yZXF1ZXN0IiwiY29uc29sZSIsImdyb3VwQ29sbGFwc2VkIiwibG9nIiwid3BiY19ib29raW5nX2xpc3RpbmdfcmVsb2FkX2J1dHRvbl9fc3Bpbl9zdGFydCIsInBvc3QiLCJ3cGJjX2dsb2JhbDEiLCJ3cGJjX2FqYXh1cmwiLCJhY3Rpb24iLCJ3cGJjX2FqeF91c2VyX2lkIiwid3BiY19hanhfbG9jYWxlIiwic2VhcmNoX3BhcmFtcyIsInJlc3BvbnNlX2RhdGEiLCJ0ZXh0U3RhdHVzIiwianFYSFIiLCJncm91cEVuZCIsImh0bWwiLCJ3cGJjX2FqeF9ib29raW5nX3Nob3dfbGlzdGluZyIsIndwYmNfcGFnaW5hdGlvbl9lY2hvIiwicGFnZV9hY3RpdmUiLCJwYWdlc19jb3VudCIsIk1hdGgiLCJjZWlsIiwid3BiY19hanhfYm9va2luZ19kZWZpbmVfdWlfaG9va3MiLCJ3cGJjX2FqeF9ib29raW5nX19hY3R1YWxfbGlzdGluZ19faGlkZSIsImFqeF9uZXdfYm9va2luZ3NfY291bnQiLCJwYXJzZUludCIsInNob3ciLCJ3cGJjX2Jvb2tpbmdfbGlzdGluZ19yZWxvYWRfYnV0dG9uX19zcGluX3BhdXNlIiwibG9jYXRpb24iLCJyZWxvYWQiLCJmYWlsIiwiZXJyb3JUaHJvd24iLCJ3aW5kb3ciLCJlcnJvcl9tZXNzYWdlIiwicmVzcG9uc2VUZXh0Iiwid3BiY19hanhfYm9va2luZ19zaG93X21lc3NhZ2UiLCJyZXBsYWNlIiwianNvbl9pdGVtc19hcnIiLCJqc29uX3NlYXJjaF9wYXJhbXMiLCJqc29uX2Jvb2tpbmdfcmVzb3VyY2VzIiwid3BiY19hanhfZGVmaW5lX3RlbXBsYXRlc19fcmVzb3VyY2VfbWFuaXB1bGF0aW9uIiwiY3NzIiwibGlzdF9oZWFkZXJfdHBsIiwid3AiLCJ0ZW1wbGF0ZSIsImxpc3Rfcm93X3RwbCIsImFwcGVuZCIsIndwYmNfZGVmaW5lX2dtYWlsX2NoZWNrYm94X3NlbGVjdGlvbiIsImNoYW5nZV9ib29raW5nX3Jlc291cmNlX3RwbCIsImFqeF9zZWFyY2hfcGFyYW1zIiwiYWp4X2Jvb2tpbmdfcmVzb3VyY2VzIiwiZHVwbGljYXRlX2Jvb2tpbmdfdG9fb3RoZXJfcmVzb3VyY2VfdHBsIiwibWVzc2FnZSIsIndwYmNfYWp4X2Jvb2tpbmdfc2VuZF9zZWFyY2hfcmVxdWVzdF93aXRoX3BhcmFtcyIsIndwYmNfYWp4X2Jvb2tpbmdfcGFnaW5hdGlvbl9jbGljayIsInBhZ2VfbnVtYmVyIiwid3BiY19hanhfYm9va2luZ19zZW5kX3NlYXJjaF9yZXF1ZXN0X2Zvcl9rZXl3b3JkIiwiZWxlbWVudF9pZCIsInZhbCIsIndwYmNfYWp4X2Jvb2tpbmdfc2VhcmNoaW5nX2FmdGVyX2Zld19zZWNvbmRzIiwiY2xvc2VkX3RpbWVyIiwidGltZXJfZGVsYXkiLCJjbGVhclRpbWVvdXQiLCJzZXRUaW1lb3V0IiwiYmluZCIsIndwYmNfZGVmaW5lX3RpcHB5X3Rvb2x0aXBzIiwid3BiY19hanhfYm9va2luZ19fdWlfZGVmaW5lX19sb2NhbGUiLCJ3cGJjX2FqeF9ib29raW5nX191aV9kZWZpbmVfX3JlbWFyayIsImV2ZW50Iiwid3BiY19hanhfYm9va2luZ19fYWN0dWFsX2xpc3RpbmdfX3Nob3ciLCJ3cGJjX2dldF9oaWdobGlnaHRlZF9zZWFyY2hfa2V5d29yZCIsImJvb2tpbmdfZGV0YWlscyIsImJvb2tpbmdfa2V5d29yZCIsInRyaW0iLCJ0b0xvd2VyQ2FzZSIsInNlYXJjaF9wb3NfZW5kIiwiX3N0ZXAiLCJrZXl3b3JkUmVnZXgiLCJSZWdFeHAiLCJjb25jYXQiLCJtYXRjaGVzIiwibWF0Y2hBbGwiLCJzdHJpbmdzX2FyciIsInBvc19wcmV2aW91cyIsIl9pdGVyYXRvciIsIm1hdGNoIiwic2VhcmNoX3Bvc19zdGFydCIsImluZGV4T2YiLCJwdXNoIiwic3Vic3RyIiwiam9pbiIsIndwYmNfZGVjb2RlX0hUTUxfZW50aXRpZXMiLCJ0ZXh0IiwidGV4dEFyZWEiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJpbm5lckhUTUwiLCJ3cGJjX2VuY29kZV9IVE1MX2VudGl0aWVzIiwiaW5uZXJUZXh0IiwicmVtb3ZlQ2xhc3MiLCJhZGRDbGFzcyIsIndwYmNfYm9va2luZ19saXN0aW5nX3JlbG9hZF9idXR0b25fX2lzX3NwaW4iLCJoYXNDbGFzcyJdLCJtYXBwaW5ncyI6ImFBRUEsU0FBU0EsMkJBQTJCQyxFQUFHQyxHQUFrQixJQUFJQyxFQUF1QixvQkFBWEMsUUFBMEJILEVBQUVHLE9BQU9DLFdBQWFKLEVBQUUsY0FBZSxJQUFLRSxFQUFJLENBQUUsR0FBSUcsTUFBTUMsUUFBUU4sS0FBT0UsRUFBS0ssNEJBQTRCUCxLQUFPQyxHQUFrQkQsR0FBeUIsaUJBQWJBLEVBQUVRLE9BQXFCLENBQU1OLElBQUlGLEVBQUlFLEdBQUksSUFBSU8sRUFBSSxFQUFPQyxFQUFJLGFBQWlCLE1BQU8sQ0FBRUMsRUFBR0QsRUFBR0UsRUFBRyxXQUFlLE9BQUlILEdBQUtULEVBQUVRLE9BQWUsQ0FBRUssTUFBTSxHQUFlLENBQUVBLE1BQU0sRUFBT0MsTUFBT2QsRUFBRVMsT0FBV00sRUFBRyxTQUFXQyxHQUFNLE1BQU1BLEdBQU9DLEVBQUdQLEdBQU8sTUFBTSxJQUFJUSxVQUFVLHlJQUE0SSxJQUE2Q0MsRUFBekNDLEdBQW1CLEVBQU1DLEdBQVMsRUFBWSxNQUFPLENBQUVWLEVBQUcsV0FBZVQsRUFBS0EsRUFBR29CLEtBQUt0QixJQUFPWSxFQUFHLFdBQWUsSUFBSVcsRUFBT3JCLEVBQUdzQixPQUFzQyxP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
includes/page-bookings/_src/bookings__actions.js ADDED
@@ -0,0 +1,589 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+
3
+ /**
4
+ * Ajax ----------------------------------------------------------------------------------------------------- */
5
+ //var is_this_action = false;
6
+ /**
7
+ * Send Ajax action request, like approving or cancellation
8
+ *
9
+ * @param action_param
10
+ */
11
+ function wpbc_ajx_booking_ajax_action_request( action_param = {} ){
12
+
13
+ console.groupCollapsed( 'WPBC_AJX_BOOKING_ACTIONS' ); console.log( ' == Ajax Actions :: Params == ', action_param );
14
+ //is_this_action = true;
15
+
16
+ wpbc_booking_listing_reload_button__spin_start();
17
+
18
+ // Get redefined Locale, if action on single booking !
19
+ if ( ( undefined != action_param[ 'booking_id' ] ) && ( ! Array.isArray( action_param[ 'booking_id' ] ) ) ){ // Not array
20
+
21
+ action_param[ 'locale' ] = wpbc_get_selected_locale( action_param[ 'booking_id' ], wpbc_ajx_booking_listing.get_secure_param( 'locale' ) );
22
+ }
23
+
24
+ var action_post_params = {
25
+ action : 'WPBC_AJX_BOOKING_ACTIONS',
26
+ nonce : wpbc_ajx_booking_listing.get_secure_param( 'nonce' ),
27
+ wpbc_ajx_user_id: ( ( undefined == action_param[ 'user_id' ] ) ? wpbc_ajx_booking_listing.get_secure_param( 'user_id' ) : action_param[ 'user_id' ] ),
28
+ wpbc_ajx_locale: ( ( undefined == action_param[ 'locale' ] ) ? wpbc_ajx_booking_listing.get_secure_param( 'locale' ) : action_param[ 'locale' ] ),
29
+
30
+ action_params : action_param
31
+ };
32
+
33
+ // It's required for CSV export - getting the same list of bookings
34
+ if ( typeof action_param.search_params !== 'undefined' ){
35
+ action_post_params[ 'search_params' ] = action_param.search_params;
36
+ delete action_post_params.action_params.search_params;
37
+ }
38
+
39
+ // Start Ajax
40
+ jQuery.post( wpbc_global1.wpbc_ajaxurl ,
41
+
42
+ action_post_params ,
43
+
44
+ /**
45
+ * S u c c e s s
46
+ *
47
+ * @param response_data - its object returned from Ajax - class-live-searcg.php
48
+ * @param textStatus - 'success'
49
+ * @param jqXHR - Object
50
+ */
51
+ function ( response_data, textStatus, jqXHR ) {
52
+
53
+ console.log( ' == Ajax Actions :: Response WPBC_AJX_BOOKING_ACTIONS == ', response_data ); console.groupEnd();
54
+
55
+ // Probably Error
56
+ if ( (typeof response_data !== 'object') || (response_data === null) ){
57
+ jQuery( '#wh_sort_selector' ).hide();
58
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
59
+ '<div class="wpbc-settings-notice notice-warning" style="text-align:left">' +
60
+ response_data +
61
+ '</div>'
62
+ );
63
+ return;
64
+ }
65
+
66
+ wpbc_booking_listing_reload_button__spin_pause();
67
+
68
+ wpbc_admin_show_message(
69
+ response_data[ 'ajx_after_action_message' ].replace( /\n/g, "<br />" )
70
+ , ( '1' == response_data[ 'ajx_after_action_result' ] ) ? 'success' : 'error'
71
+ , 10000
72
+ );
73
+
74
+ // Success response
75
+ if ( '1' == response_data[ 'ajx_after_action_result' ] ){
76
+
77
+ var is_reload_ajax_listing = true;
78
+
79
+ // After Google Calendar import show imported bookings and reload the page for toolbar parameters update
80
+ if ( false !== response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ] ){
81
+
82
+ wpbc_ajx_booking_send_search_request_with_params( response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ] );
83
+
84
+ var closed_timer = setTimeout( function (){
85
+
86
+ if ( wpbc_booking_listing_reload_button__is_spin() ){
87
+ if ( undefined != response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ][ 'reload_url_params' ] ){
88
+ document.location.href = response_data[ 'ajx_after_action_result_all_params_arr' ][ 'new_listing_params' ][ 'reload_url_params' ];
89
+ } else {
90
+ document.location.reload();
91
+ }
92
+ }
93
+ }
94
+ , 2000 );
95
+ is_reload_ajax_listing = false;
96
+ }
97
+
98
+ // Start download exported CSV file
99
+ if ( undefined != response_data[ 'ajx_after_action_result_all_params_arr' ][ 'export_csv_url' ] ){
100
+ wpbc_ajx_booking__export_csv_url__download( response_data[ 'ajx_after_action_result_all_params_arr' ][ 'export_csv_url' ] );
101
+ is_reload_ajax_listing = false;
102
+ }
103
+
104
+ if ( is_reload_ajax_listing ){
105
+ wpbc_ajx_booking__actual_listing__show(); // Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
106
+ }
107
+
108
+ }
109
+
110
+ // Remove spin icon from button and Enable this button.
111
+ wpbc_button__remove_spin( response_data[ 'ajx_cleaned_params' ][ 'ui_clicked_element_id' ] )
112
+
113
+ // Hide modals
114
+ wpbc_popup_modals__hide();
115
+
116
+ jQuery( '#ajax_respond' ).html( response_data ); // For ability to show response, add such DIV element to page
117
+ }
118
+ ).fail( function ( jqXHR, textStatus, errorThrown ) { if ( window.console && window.console.log ){ console.log( 'Ajax_Error', jqXHR, textStatus, errorThrown ); }
119
+ jQuery( '#wh_sort_selector' ).hide();
120
+ var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown ;
121
+ if ( jqXHR.responseText ){
122
+ error_message += jqXHR.responseText;
123
+ }
124
+ error_message = error_message.replace( /\n/g, "<br />" );
125
+
126
+ wpbc_ajx_booking_show_message( error_message );
127
+ })
128
+ // .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
129
+ // .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
130
+ ; // End Ajax
131
+ }
132
+
133
+
134
+ /**
135
+ * Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
136
+
137
+ /**
138
+ * Remove spin icon from button and Enable this button.
139
+ *
140
+ * @param button_clicked_element_id - HTML ID attribute of this button
141
+ * @return string - CSS classes that was previously in button icon
142
+ */
143
+ function wpbc_button__remove_spin( button_clicked_element_id ){
144
+
145
+ var previos_classes = '';
146
+ if ( undefined != button_clicked_element_id ){
147
+ var jElement = jQuery( '#' + button_clicked_element_id );
148
+ if ( jElement.length ){
149
+ previos_classes = wpbc_button_disable_loading_icon( jElement.get( 0 ) );
150
+ }
151
+ }
152
+
153
+ return previos_classes;
154
+ }
155
+
156
+
157
+ /**
158
+ * Show Loading (rotating arrow) icon for button that has been clicked
159
+ *
160
+ * @param this_button - this object of specific button
161
+ * @return string - CSS classes that was previously in button icon
162
+ */
163
+ function wpbc_button_enable_loading_icon( this_button ){
164
+
165
+ var jButton = jQuery( this_button );
166
+ var jIcon = jButton.find( 'i' );
167
+ var previos_classes = jIcon.attr( 'class' );
168
+
169
+ jIcon.removeClass().addClass( 'menu_icon icon-1x wpbc_icn_rotate_right wpbc_spin' ); // Set Rotate icon
170
+ //jIcon.addClass( 'wpbc_animation_pause' ); // Pause animation
171
+ //jIcon.addClass( 'wpbc_ui_red' ); // Set icon color red
172
+
173
+ jIcon.attr( 'wpbc_previous_class', previos_classes )
174
+
175
+ jButton.addClass( 'disabled' ); // Disable button
176
+ //jButton.prop( "disabled", true );
177
+ // We need to set here attr instead of prop, because for A elements, attribute 'disabled' do not added with jButton.prop( "disabled", true );
178
+
179
+ jButton.attr( 'wpbc_previous_onclick', jButton.attr( 'onclick' ) ); //Save this value
180
+ jButton.attr( 'onclick', '' ); // Disable actions "on click"
181
+
182
+ return previos_classes;
183
+ }
184
+
185
+
186
+ /**
187
+ * Hide Loading (rotating arrow) icon for button that was clicked and show previous icon and enable button
188
+ *
189
+ * @param this_button - this object of specific button
190
+ * @return string - CSS classes that was previously in button icon
191
+ */
192
+ function wpbc_button_disable_loading_icon( this_button ){
193
+
194
+ var jButton = jQuery( this_button );
195
+ var jIcon = jButton.find( 'i' );
196
+
197
+ var previos_classes = jIcon.attr( 'wpbc_previous_class' );
198
+ if ( '' != previos_classes ){
199
+ jIcon.removeClass().addClass( previos_classes );
200
+ }
201
+
202
+ jButton.removeClass( 'disabled' ); // Remove Disable button
203
+
204
+ var previous_onclick = jButton.attr( 'wpbc_previous_onclick' )
205
+ if ( '' != previous_onclick ){
206
+ jButton.attr( 'onclick', previous_onclick );
207
+ }
208
+
209
+ return previos_classes;
210
+ }
211
+
212
+
213
+ /**
214
+ * Hide all open modal popups windows
215
+ */
216
+ function wpbc_popup_modals__hide(){
217
+
218
+ // Hide modals
219
+ if ( 'function' === typeof (jQuery( '.wpbc_popup_modal' ).wpbc_my_modal) ){
220
+ jQuery( '.wpbc_popup_modal' ).wpbc_my_modal( 'hide' );
221
+ }
222
+ }
223
+
224
+
225
+ /**
226
+ * Dates Short <-> Wide ----------------------------------------------------------------------------------- */
227
+
228
+ function wpbc_ajx_click_on_dates_short(){
229
+ jQuery( '#booking_dates_small,.booking_dates_full' ).hide();
230
+ jQuery( '#booking_dates_full,.booking_dates_small' ).show();
231
+ wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__dates_short_wide': 'short'} );
232
+ }
233
+
234
+ function wpbc_ajx_click_on_dates_wide(){
235
+ jQuery( '#booking_dates_full,.booking_dates_small' ).hide();
236
+ jQuery( '#booking_dates_small,.booking_dates_full' ).show();
237
+ wpbc_ajx_booking_send_search_request_with_params( {'ui_usr__dates_short_wide': 'wide'} );
238
+ }
239
+
240
+ function wpbc_ajx_click_on_dates_toggle(this_date){
241
+
242
+ jQuery( this_date ).parents( '.wpbc_col_dates' ).find( '.booking_dates_small' ).toggle();
243
+ jQuery( this_date ).parents( '.wpbc_col_dates' ).find( '.booking_dates_full' ).toggle();
244
+
245
+ /*
246
+ var visible_section = jQuery( this_date ).parents( '.booking_dates_expand_section' );
247
+ visible_section.hide();
248
+ if ( visible_section.hasClass( 'booking_dates_full' ) ){
249
+ visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_small' ).show();
250
+ } else {
251
+ visible_section.parents( '.wpbc_col_dates' ).find( '.booking_dates_full' ).show();
252
+ }*/
253
+ console.log( 'wpbc_ajx_click_on_dates_toggle', this_date );
254
+ }
255
+
256
+ /**
257
+ * Locale --------------------------------------------------------------------------------------------------- */
258
+
259
+ /**
260
+ * Select options in select boxes based on attribute "value_of_selected_option" and RED color and hint for LOCALE button -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
261
+ */
262
+ function wpbc_ajx_booking__ui_define__locale(){
263
+
264
+ jQuery( '.wpbc_listing_container select' ).each( function ( index ){
265
+
266
+ var selection = jQuery( this ).attr( "value_of_selected_option" ); // Define selected select boxes
267
+
268
+ if ( undefined !== selection ){
269
+ jQuery( this ).find( 'option[value="' + selection + '"]' ).prop( 'selected', true );
270
+
271
+ if ( ('' != selection) && (jQuery( this ).hasClass( 'set_booking_locale_selectbox' )) ){ // Locale
272
+
273
+ var booking_locale_button = jQuery( this ).parents( '.ui_element_locale' ).find( '.set_booking_locale_button' )
274
+
275
+ //booking_locale_button.css( 'color', '#db4800' ); // Set button red
276
+ booking_locale_button.addClass( 'wpbc_ui_red' ); // Set button red
277
+ if ( 'function' === typeof( wpbc_tippy ) ){
278
+ booking_locale_button.get(0)._tippy.setContent( selection );
279
+ }
280
+ }
281
+ }
282
+ } );
283
+ }
284
+
285
+ /**
286
+ * Remark --------------------------------------------------------------------------------------------------- */
287
+
288
+ /**
289
+ * Define content of remark "booking note" button and textarea. -- It's called from wpbc_ajx_booking_define_ui_hooks() each time after Listing loading.
290
+ */
291
+ function wpbc_ajx_booking__ui_define__remark(){
292
+
293
+ jQuery( '.wpbc_listing_container .ui_remark_section textarea' ).each( function ( index ){
294
+ var text_val = jQuery( this ).val();
295
+ if ( (undefined !== text_val) && ('' != text_val) ){
296
+
297
+ var remark_button = jQuery( this ).parents( '.ui_group' ).find( '.set_booking_note_button' );
298
+
299
+ if ( remark_button.length > 0 ){
300
+
301
+ remark_button.addClass( 'wpbc_ui_red' ); // Set button red
302
+ if ( 'function' === typeof (wpbc_tippy) ){
303
+ //remark_button.get( 0 )._tippy.allowHTML = true;
304
+ //remark_button.get( 0 )._tippy.setContent( text_val.replace(/[\n\r]/g, '<br>') );
305
+
306
+ remark_button.get( 0 )._tippy.setProps( {
307
+ allowHTML: true,
308
+ content : text_val.replace( /[\n\r]/g, '<br>' )
309
+ } );
310
+ }
311
+ }
312
+ }
313
+ } );
314
+ }
315
+
316
+ /**
317
+ * Actions ,when we click on "Remark" button.
318
+ *
319
+ * @param jq_button - this jQuery button object
320
+ */
321
+ function wpbc_ajx_booking__ui_click__remark( jq_button ){
322
+
323
+ jq_button.parents('.ui_group').find('.ui_remark_section').toggle();
324
+ }
325
+
326
+
327
+ /**
328
+ * Change booking resource ---------------------------------------------------------------------------------- */
329
+
330
+ function wpbc_ajx_booking__ui_click_show__change_resource( booking_id, resource_id ){
331
+
332
+ // Define ID of booking to hidden input
333
+ jQuery( '#change_booking_resource__booking_id' ).val( booking_id );
334
+
335
+ // Select booking resource that belong to booking
336
+ jQuery( '#change_booking_resource__resource_select' ).val( resource_id ).trigger( 'change' );
337
+ var cbr;
338
+
339
+ // Get Resource section
340
+ cbr = jQuery( "#change_booking_resource__section" ).detach();
341
+
342
+ // Append it to booking ROW
343
+ cbr.appendTo( jQuery( "#ui__change_booking_resource__section_in_booking_" + booking_id ) );
344
+ cbr = null;
345
+
346
+ // Hide sections of "Change booking resource" in all other bookings ROWs
347
+ //jQuery( ".ui__change_booking_resource__section_in_booking" ).hide();
348
+ if ( ! jQuery( "#ui__change_booking_resource__section_in_booking_" + booking_id ).is(':visible') ){
349
+ jQuery( ".ui__under_actions_row__section_in_booking" ).hide();
350
+ }
351
+
352
+ // Show only "change booking resource" section for current booking
353
+ jQuery( "#ui__change_booking_resource__section_in_booking_" + booking_id ).toggle();
354
+ }
355
+
356
+ function wpbc_ajx_booking__ui_click_save__change_resource( this_el, booking_action, el_id ){
357
+
358
+ wpbc_ajx_booking_ajax_action_request( {
359
+ 'booking_action' : booking_action,
360
+ 'booking_id' : jQuery( '#change_booking_resource__booking_id' ).val(),
361
+ 'selected_resource_id' : jQuery( '#change_booking_resource__resource_select' ).val(),
362
+ 'ui_clicked_element_id': el_id
363
+ } );
364
+
365
+ wpbc_button_enable_loading_icon( this_el );
366
+
367
+ // wpbc_ajx_booking__ui_click_close__change_resource();
368
+ }
369
+
370
+ function wpbc_ajx_booking__ui_click_close__change_resource(){
371
+
372
+ var cbrce;
373
+
374
+ // Get Resource section
375
+ cbrce = jQuery("#change_booking_resource__section").detach();
376
+
377
+ // Append it to hidden HTML template section at the bottom of the page
378
+ cbrce.appendTo(jQuery("#wpbc_hidden_template__change_booking_resource"));
379
+ cbrce = null;
380
+
381
+ // Hide all change booking resources sections
382
+ jQuery(".ui__change_booking_resource__section_in_booking").hide();
383
+ }
384
+
385
+ /**
386
+ * Duplicate booking in other resource ---------------------------------------------------------------------- */
387
+
388
+ function wpbc_ajx_booking__ui_click_show__duplicate_booking( booking_id, resource_id ){
389
+
390
+ // Define ID of booking to hidden input
391
+ jQuery( '#duplicate_booking_to_other_resource__booking_id' ).val( booking_id );
392
+
393
+ // Select booking resource that belong to booking
394
+ jQuery( '#duplicate_booking_to_other_resource__resource_select' ).val( resource_id ).trigger( 'change' );
395
+ var cbr;
396
+
397
+ // Get Resource section
398
+ cbr = jQuery( "#duplicate_booking_to_other_resource__section" ).detach();
399
+
400
+ // Append it to booking ROW
401
+ cbr.appendTo( jQuery( "#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id ) );
402
+ cbr = null;
403
+
404
+ // Hide sections of "Duplicate booking" in all other bookings ROWs
405
+ if ( ! jQuery( "#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id ).is(':visible') ){
406
+ jQuery( ".ui__under_actions_row__section_in_booking" ).hide();
407
+ }
408
+
409
+ // Show only "Duplicate booking" section for current booking ROW
410
+ jQuery( "#ui__duplicate_booking_to_other_resource__section_in_booking_" + booking_id ).toggle();
411
+ }
412
+
413
+ function wpbc_ajx_booking__ui_click_save__duplicate_booking( this_el, booking_action, el_id ){
414
+
415
+ wpbc_ajx_booking_ajax_action_request( {
416
+ 'booking_action' : booking_action,
417
+ 'booking_id' : jQuery( '#duplicate_booking_to_other_resource__booking_id' ).val(),
418
+ 'selected_resource_id' : jQuery( '#duplicate_booking_to_other_resource__resource_select' ).val(),
419
+ 'ui_clicked_element_id': el_id
420
+ } );
421
+
422
+ wpbc_button_enable_loading_icon( this_el );
423
+
424
+ // wpbc_ajx_booking__ui_click_close__change_resource();
425
+ }
426
+
427
+ function wpbc_ajx_booking__ui_click_close__duplicate_booking(){
428
+
429
+ var cbrce;
430
+
431
+ // Get Resource section
432
+ cbrce = jQuery("#duplicate_booking_to_other_resource__section").detach();
433
+
434
+ // Append it to hidden HTML template section at the bottom of the page
435
+ cbrce.appendTo(jQuery("#wpbc_hidden_template__duplicate_booking_to_other_resource"));
436
+ cbrce = null;
437
+
438
+ // Hide all change booking resources sections
439
+ jQuery(".ui__duplicate_booking_to_other_resource__section_in_booking").hide();
440
+ }
441
+
442
+ /**
443
+ * Change payment status ------------------------------------------------------------------------------------ */
444
+
445
+ function wpbc_ajx_booking__ui_click_show__set_payment_status( booking_id ){
446
+
447
+ var jSelect = jQuery( '#ui__set_payment_status__section_in_booking_' + booking_id ).find( 'select' )
448
+
449
+ var selected_pay_status = jSelect.attr( "ajx-selected-value" );
450
+
451
+ // Is it float - then it's unknown
452
+ if ( !isNaN( parseFloat( selected_pay_status ) ) ){
453
+ jSelect.find( 'option[value="1"]' ).prop( 'selected', true ); // Unknown value is '1' in select box
454
+ } else {
455
+ jSelect.find( 'option[value="' + selected_pay_status + '"]' ).prop( 'selected', true ); // Otherwise known payment status
456
+ }
457
+
458
+ // Hide sections of "Change booking resource" in all other bookings ROWs
459
+ if ( ! jQuery( "#ui__set_payment_status__section_in_booking_" + booking_id ).is(':visible') ){
460
+ jQuery( ".ui__under_actions_row__section_in_booking" ).hide();
461
+ }
462
+
463
+ // Show only "change booking resource" section for current booking
464
+ jQuery( "#ui__set_payment_status__section_in_booking_" + booking_id ).toggle();
465
+ }
466
+
467
+ function wpbc_ajx_booking__ui_click_save__set_payment_status( booking_id, this_el, booking_action, el_id ){
468
+
469
+ wpbc_ajx_booking_ajax_action_request( {
470
+ 'booking_action' : booking_action,
471
+ 'booking_id' : booking_id,
472
+ 'selected_payment_status' : jQuery( '#ui_btn_set_payment_status' + booking_id ).val(),
473
+ 'ui_clicked_element_id': el_id + '_save'
474
+ } );
475
+
476
+ wpbc_button_enable_loading_icon( this_el );
477
+
478
+ jQuery( '#' + el_id + '_cancel').hide();
479
+ //wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
480
+
481
+ }
482
+
483
+ function wpbc_ajx_booking__ui_click_close__set_payment_status(){
484
+ // Hide all change payment status for booking
485
+ jQuery(".ui__set_payment_status__section_in_booking").hide();
486
+ }
487
+
488
+
489
+ /**
490
+ * Change booking cost -------------------------------------------------------------------------------------- */
491
+
492
+ function wpbc_ajx_booking__ui_click_save__set_booking_cost( booking_id, this_el, booking_action, el_id ){
493
+
494
+ wpbc_ajx_booking_ajax_action_request( {
495
+ 'booking_action' : booking_action,
496
+ 'booking_id' : booking_id,
497
+ 'booking_cost' : jQuery( '#ui_btn_set_booking_cost' + booking_id + '_cost').val(),
498
+ 'ui_clicked_element_id': el_id + '_save'
499
+ } );
500
+
501
+ wpbc_button_enable_loading_icon( this_el );
502
+
503
+ jQuery( '#' + el_id + '_cancel').hide();
504
+ //wpbc_button_enable_loading_icon( jQuery( '#' + el_id + '_cancel').get(0) );
505
+
506
+ }
507
+
508
+ function wpbc_ajx_booking__ui_click_close__set_booking_cost(){
509
+ // Hide all change payment status for booking
510
+ jQuery(".ui__set_booking_cost__section_in_booking").hide();
511
+ }
512
+
513
+
514
+ /**
515
+ * Send Payment request -------------------------------------------------------------------------------------- */
516
+
517
+ function wpbc_ajx_booking__ui_click__send_payment_request(){
518
+
519
+ wpbc_ajx_booking_ajax_action_request( {
520
+ 'booking_action' : 'send_payment_request',
521
+ 'booking_id' : jQuery( '#wpbc_modal__payment_request__booking_id').val(),
522
+ 'reason_of_action' : jQuery( '#wpbc_modal__payment_request__reason_of_action').val(),
523
+ 'ui_clicked_element_id': 'wpbc_modal__payment_request__button_send'
524
+ } );
525
+ wpbc_button_enable_loading_icon( jQuery( '#wpbc_modal__payment_request__button_send' ).get( 0 ) );
526
+ }
527
+
528
+
529
+ /**
530
+ * Import Google Calendar ------------------------------------------------------------------------------------ */
531
+
532
+ function wpbc_ajx_booking__ui_click__import_google_calendar(){
533
+
534
+ wpbc_ajx_booking_ajax_action_request( {
535
+ 'booking_action' : 'import_google_calendar',
536
+ 'ui_clicked_element_id': 'wpbc_modal__import_google_calendar__button_send'
537
+
538
+ , 'booking_gcal_events_from' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_from option:selected').val()
539
+ , 'booking_gcal_events_from_offset' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset' ).val()
540
+ , 'booking_gcal_events_from_offset_type' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_from_offset_type option:selected').val()
541
+
542
+ , 'booking_gcal_events_until' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_until option:selected').val()
543
+ , 'booking_gcal_events_until_offset' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset' ).val()
544
+ , 'booking_gcal_events_until_offset_type' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_until_offset_type option:selected').val()
545
+
546
+ , 'booking_gcal_events_max' : jQuery( '#wpbc_modal__import_google_calendar__section #booking_gcal_events_max' ).val()
547
+ , 'booking_gcal_resource' : jQuery( '#wpbc_modal__import_google_calendar__section #wpbc_booking_resource option:selected').val()
548
+ } );
549
+ wpbc_button_enable_loading_icon( jQuery( '#wpbc_modal__import_google_calendar__section #wpbc_modal__import_google_calendar__button_send' ).get( 0 ) );
550
+ }
551
+
552
+
553
+ /**
554
+ * Export bookings to CSV ------------------------------------------------------------------------------------ */
555
+ function wpbc_ajx_booking__ui_click__export_csv( params ){
556
+
557
+ var selected_booking_id_arr = wpbc_get_selected_row_id();
558
+
559
+ wpbc_ajx_booking_ajax_action_request( {
560
+ 'booking_action' : params[ 'booking_action' ],
561
+ 'ui_clicked_element_id' : params[ 'ui_clicked_element_id' ],
562
+
563
+ 'export_type' : params[ 'export_type' ],
564
+ 'csv_export_separator' : params[ 'csv_export_separator' ],
565
+ 'csv_export_skip_fields': params[ 'csv_export_skip_fields' ],
566
+
567
+ 'booking_id' : selected_booking_id_arr.join(','),
568
+ 'search_params' : wpbc_ajx_booking_listing.search_get_all_params()
569
+ } );
570
+
571
+ var this_el = jQuery( '#' + params[ 'ui_clicked_element_id' ] ).get( 0 )
572
+
573
+ wpbc_button_enable_loading_icon( this_el );
574
+ }
575
+
576
+ /**
577
+ * Open URL in new tab - mainly it's used for open CSV link for downloaded exported bookings as CSV
578
+ *
579
+ * @param export_csv_url
580
+ */
581
+ function wpbc_ajx_booking__export_csv_url__download( export_csv_url ){
582
+
583
+ //var selected_booking_id_arr = wpbc_get_selected_row_id();
584
+
585
+ document.location.href = export_csv_url;// + '&selected_id=' + selected_booking_id_arr.join(',');
586
+
587
+ // It's open additional dialog for asking opening ulr in new tab
588
+ // window.open( export_csv_url, '_blank').focus();
589
+ }
includes/page-bookings/_src/bookings__hooks.js ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+
3
+ /**
4
+ * Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
5
+ * * We are chnaged it once, because such elements always the same
6
+ */
7
+ function wpbc_ajx_booking_define_ui_hooks_once(){
8
+
9
+ //------------------------------------------------------------------------------------------------------------------
10
+ // Booked dates
11
+ //------------------------------------------------------------------------------------------------------------------
12
+ jQuery( '#wh_booking_date' ).on( 'change', function( event ){
13
+
14
+ var changed_value = JSON.parse( jQuery( '#wh_booking_date' ).val() );
15
+
16
+ wpbc_ajx_booking_send_search_request_with_params( {
17
+ 'wh_booking_date': changed_value,
18
+ 'page_num' : 1,
19
+ // Frontend selected elements (saving for future use, after F5)
20
+ 'ui_wh_booking_date_radio' : jQuery( 'input[name="ui_wh_booking_date_radio"]:checked' ).val(),
21
+ 'ui_wh_booking_date_next' : jQuery( '#ui_wh_booking_date_next' ).val(),
22
+ 'ui_wh_booking_date_prior' : jQuery( '#ui_wh_booking_date_prior' ).val(),
23
+ 'ui_wh_booking_date_checkin' : jQuery( '#ui_wh_booking_date_checkin' ).val(),
24
+ 'ui_wh_booking_date_checkout': jQuery( '#ui_wh_booking_date_checkout' ).val()
25
+ } );
26
+ } );
27
+
28
+ //------------------------------------------------------------------------------------------------------------------
29
+ // Approved | Pending | All
30
+ //------------------------------------------------------------------------------------------------------------------
31
+ jQuery( '#wh_approved' ).on( 'change', function( event ){
32
+
33
+ var changed_value = jQuery( '#wh_approved' ).val();
34
+
35
+ changed_value = JSON.parse( changed_value );
36
+
37
+ wpbc_ajx_booking_send_search_request_with_params( {
38
+ 'wh_approved': changed_value[ 0 ],
39
+ 'page_num' : 1
40
+ } );
41
+ } );
42
+
43
+ //------------------------------------------------------------------------------------------------------------------
44
+ // Keywords
45
+ //------------------------------------------------------------------------------------------------------------------
46
+ jQuery( '#wpbc_search_field' ).on( "keyup", function ( event ){
47
+ if ( 13 !== event.which ){
48
+ wpbc_ajx_booking_searching_after_few_seconds( '#wpbc_search_field' ); // Searching after 1.5 seconds after Key Up
49
+ } else {
50
+ wpbc_ajx_booking_searching_after_few_seconds( '#wpbc_search_field', 0 ); // Immediate search
51
+ }
52
+ } );
53
+
54
+ //------------------------------------------------------------------------------------------------------------------
55
+ // Existing | Trash | Any
56
+ //------------------------------------------------------------------------------------------------------------------
57
+ jQuery( '#wh_trash' ).on( 'change', function( event ){
58
+
59
+ var changed_value = JSON.parse( jQuery( '#wh_trash' ).val() );
60
+
61
+ wpbc_ajx_booking_send_search_request_with_params( {
62
+ 'wh_trash': changed_value[ 0 ],
63
+ 'page_num': 1
64
+ } );
65
+ } );
66
+
67
+ //------------------------------------------------------------------------------------------------------------------
68
+ // All bookings | New bookings
69
+ //------------------------------------------------------------------------------------------------------------------
70
+ jQuery( '#wh_what_bookings' ).on( 'change', function( event ){
71
+
72
+ var changed_value = JSON.parse( jQuery( '#wh_what_bookings' ).val() );
73
+
74
+ wpbc_ajx_booking_send_search_request_with_params( {
75
+ 'wh_what_bookings': changed_value[ 0 ],
76
+ 'page_num': 1
77
+ } );
78
+ } );
79
+
80
+ //------------------------------------------------------------------------------------------------------------------
81
+ // "Creation Date" of bookings
82
+ //------------------------------------------------------------------------------------------------------------------
83
+ jQuery( '#wh_modification_date' ).on( 'change', function( event ){
84
+
85
+ var changed_value = JSON.parse( jQuery( '#wh_modification_date' ).val() );
86
+
87
+ wpbc_ajx_booking_send_search_request_with_params( {
88
+ 'wh_modification_date': changed_value,
89
+ 'page_num' : 1,
90
+ // Frontend selected elements (saving for future use, after F5)
91
+ 'ui_wh_modification_date_radio' : jQuery( 'input[name="ui_wh_modification_date_radio"]:checked' ).val(),
92
+ 'ui_wh_modification_date_prior' : jQuery( '#ui_wh_modification_date_prior' ).val(),
93
+ 'ui_wh_modification_date_checkin' : jQuery( '#ui_wh_modification_date_checkin' ).val(),
94
+ 'ui_wh_modification_date_checkout': jQuery( '#ui_wh_modification_date_checkout' ).val()
95
+ } );
96
+ } );
97
+
98
+ //------------------------------------------------------------------------------------------------------------------
99
+ // Payment Status
100
+ //------------------------------------------------------------------------------------------------------------------
101
+ jQuery( '#wh_pay_status' ).on( 'change', function( event ){
102
+
103
+ var changed_value = JSON.parse( jQuery( '#wh_pay_status' ).val() );
104
+
105
+ wpbc_ajx_booking_send_search_request_with_params( {
106
+ 'wh_pay_status': changed_value,
107
+ 'page_num' : 1,
108
+ // Frontend selected elements (saving for future use, after F5)
109
+ 'ui_wh_pay_status_radio' : ( ( undefined === jQuery( 'input[name="ui_wh_pay_status_radio"]:checked' ).val() )
110
+ ? ''
111
+ : jQuery( 'input[name="ui_wh_pay_status_radio"]:checked' ).val()
112
+ ),
113
+ 'ui_wh_pay_status_custom': jQuery( '#ui_wh_pay_status_custom' ).val()
114
+ } );
115
+
116
+
117
+ } );
118
+
119
+ //------------------------------------------------------------------------------------------------------------------
120
+ // Min Cost
121
+ //------------------------------------------------------------------------------------------------------------------
122
+ jQuery( '#wh_cost' ).on( 'change', function( event ){
123
+
124
+ var changed_value = jQuery( '#wh_cost' ).val();
125
+
126
+ wpbc_ajx_booking_send_search_request_with_params( {
127
+ 'wh_cost' : changed_value,
128
+ 'page_num': 1
129
+ } );
130
+ } );
131
+
132
+ //------------------------------------------------------------------------------------------------------------------
133
+ // Max Cost
134
+ //------------------------------------------------------------------------------------------------------------------
135
+ jQuery( '#wh_cost2' ).on( 'change', function( event ){
136
+
137
+ var changed_value = jQuery( '#wh_cost2' ).val();
138
+
139
+ wpbc_ajx_booking_send_search_request_with_params( {
140
+ 'wh_cost2' : changed_value,
141
+ 'page_num': 1
142
+ } );
143
+ } );
144
+
145
+ //------------------------------------------------------------------------------------------------------------------
146
+ // Booking resources
147
+ //------------------------------------------------------------------------------------------------------------------
148
+ jQuery( '#wh_booking_type' ).on( 'change', function( event ){
149
+
150
+ var changed_value = jQuery( '#wh_booking_type' ).val(); // it's get as array
151
+ if ( ( Array.isArray( changed_value ) ) && ( 0 === changed_value.length ) ){
152
+ changed_value = ['-1'];
153
+ }
154
+ wpbc_ajx_booking_send_search_request_with_params( {
155
+ 'wh_booking_type' : changed_value,
156
+ 'page_num': 1
157
+ } );
158
+ } );
159
+
160
+
161
+ //------------------------------------------------------------------------------------------------------------------
162
+ // Sorting
163
+ //------------------------------------------------------------------------------------------------------------------
164
+ jQuery( '#wh_sort' ).on( 'change', function( event ){
165
+
166
+ var changed_value = jQuery( '#wh_sort' ).val();
167
+
168
+ changed_value = JSON.parse( changed_value );
169
+
170
+ wpbc_ajx_booking_send_search_request_with_params( {
171
+ 'wh_sort': changed_value[ 0 ]
172
+ } );
173
+ } );
174
+
175
+ }
176
+
177
+ jQuery(document).ready(function(){
178
+ wpbc_ajx_booking_define_ui_hooks_once();
179
+ });
includes/page-bookings/_src/bookings__listing.js ADDED
@@ -0,0 +1,534 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ "use strict";
2
+
3
+ jQuery('body').on({
4
+ 'touchmove': function(e) {
5
+
6
+ jQuery( '.timespartly' ).each( function ( index ){
7
+
8
+ var td_el = jQuery( this ).get( 0 );
9
+
10
+ if ( (undefined != td_el._tippy) ){
11
+
12
+ var instance = td_el._tippy;
13
+ instance.hide();
14
+ }
15
+ } );
16
+ }
17
+ });
18
+
19
+ /**
20
+ * Request Object
21
+ * Here we can define Search parameters and Update it later, when some parameter was changed
22
+ *
23
+ */
24
+ var wpbc_ajx_booking_listing = (function ( obj, $) {
25
+
26
+ // Secure parameters for Ajax ------------------------------------------------------------------------------------
27
+ var p_secure = obj.security_obj = obj.security_obj || {
28
+ user_id: 0,
29
+ nonce : '',
30
+ locale : ''
31
+ };
32
+
33
+ obj.set_secure_param = function ( param_key, param_val ) {
34
+ p_secure[ param_key ] = param_val;
35
+ };
36
+
37
+ obj.get_secure_param = function ( param_key ) {
38
+ return p_secure[ param_key ];
39
+ };
40
+
41
+
42
+ // Listing Search parameters ------------------------------------------------------------------------------------
43
+ var p_listing = obj.search_request_obj = obj.search_request_obj || {
44
+ sort : "booking_id",
45
+ sort_type : "DESC",
46
+ page_num : 1,
47
+ page_items_count: 10,
48
+ create_date : "",
49
+ keyword : "",
50
+ source : ""
51
+ };
52
+
53
+ obj.search_set_all_params = function ( request_param_obj ) {
54
+ p_listing = request_param_obj;
55
+ };
56
+
57
+ obj.search_get_all_params = function () {
58
+ return p_listing;
59
+ };
60
+
61
+ obj.search_get_param = function ( param_key ) {
62
+ return p_listing[ param_key ];
63
+ };
64
+
65
+ obj.search_set_param = function ( param_key, param_val ) {
66
+ // if ( Array.isArray( param_val ) ){
67
+ // param_val = JSON.stringify( param_val );
68
+ // }
69
+ p_listing[ param_key ] = param_val;
70
+ };
71
+
72
+ obj.search_set_params_arr = function( params_arr ){
73
+ _.each( params_arr, function ( p_val, p_key, p_data ){ // Define different Search parameters for request
74
+ this.search_set_param( p_key, p_val );
75
+ } );
76
+ }
77
+
78
+
79
+ // Other parameters ------------------------------------------------------------------------------------
80
+ var p_other = obj.other_obj = obj.other_obj || { };
81
+
82
+ obj.set_other_param = function ( param_key, param_val ) {
83
+ p_other[ param_key ] = param_val;
84
+ };
85
+
86
+ obj.get_other_param = function ( param_key ) {
87
+ return p_other[ param_key ];
88
+ };
89
+
90
+
91
+ return obj;
92
+ }( wpbc_ajx_booking_listing || {}, jQuery ));
93
+
94
+
95
+ /**
96
+ * Ajax ------------------------------------------------------------------------------------------------------ */
97
+
98
+ /**
99
+ * Send Ajax search request
100
+ * for searching specific Keyword and other params
101
+ */
102
+ function wpbc_ajx_booking_ajax_search_request(){
103
+
104
+ console.groupCollapsed('AJX_BOOKING_LISTING'); console.log( ' == Before Ajax Send - search_get_all_params() == ' , wpbc_ajx_booking_listing.search_get_all_params() );
105
+
106
+ wpbc_booking_listing_reload_button__spin_start();
107
+
108
+ /*
109
+ //FixIn: forVideo
110
+ if ( ! is_this_action ){
111
+ //wpbc_ajx_booking__actual_listing__hide();
112
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
113
+ '<div style="width:100%;text-align: center;" id="wpbc_loading_section"><span class="wpbc_icn_autorenew wpbc_spin"></span></div>'
114
+ + jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html()
115
+ );
116
+ if ( 'function' === typeof (jQuery( '#wpbc_loading_section' ).wpbc_my_modal) ){ //FixIn: 9.0.1.5
117
+ jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'show' );
118
+ } else {
119
+ alert( 'Warning! Booking Calendar. Its seems that you have deactivated loading of Bootstrap JS files at Booking Settings General page in Advanced section.' )
120
+ }
121
+ }
122
+ is_this_action = false;
123
+ */
124
+ // Start Ajax
125
+ jQuery.post( wpbc_global1.wpbc_ajaxurl,
126
+ {
127
+ action : 'WPBC_AJX_BOOKING_LISTING',
128
+ wpbc_ajx_user_id: wpbc_ajx_booking_listing.get_secure_param( 'user_id' ),
129
+ nonce : wpbc_ajx_booking_listing.get_secure_param( 'nonce' ),
130
+ wpbc_ajx_locale : wpbc_ajx_booking_listing.get_secure_param( 'locale' ),
131
+
132
+ search_params : wpbc_ajx_booking_listing.search_get_all_params()
133
+ },
134
+ /**
135
+ * S u c c e s s
136
+ *
137
+ * @param response_data - its object returned from Ajax - class-live-searcg.php
138
+ * @param textStatus - 'success'
139
+ * @param jqXHR - Object
140
+ */
141
+ function ( response_data, textStatus, jqXHR ) {
142
+ //FixIn: forVideo
143
+ //jQuery( '#wpbc_loading_section' ).wpbc_my_modal( 'hide' );
144
+
145
+ console.log( ' == Response WPBC_AJX_BOOKING_LISTING == ', response_data ); console.groupEnd();
146
+ // Probably Error
147
+ if ( (typeof response_data !== 'object') || (response_data === null) ){
148
+ jQuery( '#wh_sort_selector' ).hide();
149
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
150
+ '<div class="wpbc-settings-notice notice-warning" style="text-align:left">' +
151
+ response_data +
152
+ '</div>'
153
+ );
154
+ return;
155
+ }
156
+
157
+ // Reload page, after filter toolbar was reseted
158
+ if ( ( undefined != response_data[ 'ajx_cleaned_params' ])
159
+ && ( 'reset_done' === response_data[ 'ajx_cleaned_params' ][ 'ui_reset' ])
160
+ ){
161
+ location.reload();
162
+ return;
163
+ }
164
+
165
+ // Show listing
166
+ if ( response_data[ 'ajx_count' ] > 0 ){
167
+
168
+ wpbc_ajx_booking_show_listing( response_data[ 'ajx_items' ], response_data[ 'ajx_search_params' ], response_data[ 'ajx_booking_resources' ] );
169
+
170
+ wpbc_pagination_echo(
171
+ wpbc_ajx_booking_listing.get_other_param( 'pagination_container' ),
172
+ {
173
+ 'page_active': response_data[ 'ajx_search_params' ][ 'page_num' ],
174
+ 'pages_count': Math.ceil( response_data[ 'ajx_count' ] / response_data[ 'ajx_search_params' ][ 'page_items_count' ] ),
175
+
176
+ 'page_items_count': response_data[ 'ajx_search_params' ][ 'page_items_count' ],
177
+ 'sort_type' : response_data[ 'ajx_search_params' ][ 'sort_type' ]
178
+ }
179
+ );
180
+ wpbc_ajx_booking_define_ui_hooks(); // Redefine Hooks, because we show new DOM elements
181
+
182
+ } else {
183
+
184
+ wpbc_ajx_booking__actual_listing__hide();
185
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
186
+ '<div class="wpbc-settings-notice0 notice-warning0" style="text-align:center;margin-left:-50px;">' +
187
+ '<strong>' + 'No results found for current filter options...' + '</strong>' +
188
+ //'<strong>' + 'No results found...' + '</strong>' +
189
+ '</div>'
190
+ );
191
+ }
192
+
193
+ // Update new booking count
194
+ if ( undefined !== response_data[ 'ajx_new_bookings_count' ] ){
195
+ var ajx_new_bookings_count = parseInt( response_data[ 'ajx_new_bookings_count' ] )
196
+ if (ajx_new_bookings_count>0){
197
+ jQuery( '.wpbc_badge_count' ).show();
198
+ }
199
+ jQuery( '.bk-update-count' ).html( ajx_new_bookings_count );
200
+ }
201
+
202
+ wpbc_booking_listing_reload_button__spin_pause();
203
+
204
+ jQuery( '#ajax_respond' ).html( response_data ); // For ability to show response, add such DIV element to page
205
+ }
206
+ ).fail( function ( jqXHR, textStatus, errorThrown ) { if ( window.console && window.console.log ){ console.log( 'Ajax_Error', jqXHR, textStatus, errorThrown ); }
207
+ jQuery( '#wh_sort_selector' ).hide();
208
+ var error_message = '<strong>' + 'Error!' + '</strong> ' + errorThrown ;
209
+ if ( jqXHR.responseText ){
210
+ error_message += jqXHR.responseText;
211
+ }
212
+ error_message = error_message.replace( /\n/g, "<br />" );
213
+
214
+ wpbc_ajx_booking_show_message( error_message );
215
+ })
216
+ // .done( function ( data, textStatus, jqXHR ) { if ( window.console && window.console.log ){ console.log( 'second success', data, textStatus, jqXHR ); } })
217
+ // .always( function ( data_jqXHR, textStatus, jqXHR_errorThrown ) { if ( window.console && window.console.log ){ console.log( 'always finished', data_jqXHR, textStatus, jqXHR_errorThrown ); } })
218
+ ; // End Ajax
219
+ }
220
+
221
+
222
+ /**
223
+ * Views ----------------------------------------------------------------------------------------------------- */
224
+
225
+ /**
226
+ * Show Listing Table and define gMail checkbox hooks
227
+ *
228
+ * @param json_items_arr - JSON object with Items
229
+ * @param json_search_params - JSON object with Search
230
+ */
231
+ function wpbc_ajx_booking_show_listing( json_items_arr, json_search_params, json_booking_resources ){
232
+
233
+ wpbc_ajx_define_templates__resource_manipulation( json_items_arr, json_search_params, json_booking_resources );
234
+
235
+ //console.log( 'json_items_arr' , json_items_arr, json_search_params );
236
+ jQuery( '#wh_sort_selector' ).css( "display", "flex" );
237
+ var list_header_tpl = wp.template( 'wpbc_ajx_booking_list_header' );
238
+ var list_row_tpl = wp.template( 'wpbc_ajx_booking_list_row' );
239
+
240
+
241
+ // Header
242
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html( list_header_tpl() );
243
+
244
+ // Body
245
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).append( '<div class="wpbc_selectable_body"></div>' );
246
+
247
+ // R o w s
248
+ console.groupCollapsed( 'LISTING_ROWS' ); // LISTING_ROWS
249
+ _.each( json_items_arr, function ( p_val, p_key, p_data ){
250
+ if ( 'undefined' !== typeof json_search_params[ 'keyword' ] ){ // Parameter for marking keyword with different color in a list
251
+ p_val[ '__search_request_keyword__' ] = json_search_params[ 'keyword' ];
252
+ } else {
253
+ p_val[ '__search_request_keyword__' ] = '';
254
+ }
255
+ p_val[ 'booking_resources' ] = json_booking_resources;
256
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) + ' .wpbc_selectable_body' ).append( list_row_tpl( p_val ) );
257
+ } );
258
+ console.groupEnd(); // LISTING_ROWS
259
+
260
+ wpbc_define_gmail_checkbox_selection( jQuery ); // Redefine Hooks for clicking at Checkboxes
261
+ }
262
+
263
+
264
+ /**
265
+ * Define template for changing booking resources & update it each time, when listing updating, useful for showing actual booking resources.
266
+ *
267
+ * @param json_items_arr - JSON object with Items
268
+ * @param json_search_params - JSON object with Search
269
+ * @param json_booking_resources - JSON object with Resources
270
+ */
271
+ function wpbc_ajx_define_templates__resource_manipulation( json_items_arr, json_search_params, json_booking_resources ){
272
+
273
+ // Change booking resource
274
+ var change_booking_resource_tpl = wp.template( 'wpbc_ajx_change_booking_resource' );
275
+
276
+ jQuery( '#wpbc_hidden_template__change_booking_resource' ).html(
277
+ change_booking_resource_tpl( {
278
+ 'ajx_search_params' : json_search_params,
279
+ 'ajx_booking_resources': json_booking_resources
280
+ } )
281
+ );
282
+
283
+ // Duplicate booking resource
284
+ var duplicate_booking_to_other_resource_tpl = wp.template( 'wpbc_ajx_duplicate_booking_to_other_resource' );
285
+
286
+ jQuery( '#wpbc_hidden_template__duplicate_booking_to_other_resource' ).html(
287
+ duplicate_booking_to_other_resource_tpl( {
288
+ 'ajx_search_params' : json_search_params,
289
+ 'ajx_booking_resources': json_booking_resources
290
+ } )
291
+ );
292
+ }
293
+
294
+
295
+ /**
296
+ * Show just message instead of listing and hide pagination
297
+ */
298
+ function wpbc_ajx_booking_show_message( message ){
299
+
300
+ wpbc_ajx_booking__actual_listing__hide();
301
+
302
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html(
303
+ '<div class="wpbc-settings-notice notice-warning" style="text-align:left">' +
304
+ message +
305
+ '</div>'
306
+ );
307
+ }
308
+
309
+
310
+ /**
311
+ * H o o k s - its Action/Times when need to re-Render Views ----------------------------------------------- */
312
+
313
+ /**
314
+ * Send Ajax Search Request after Updating search request parameters
315
+ *
316
+ * @param params_arr
317
+ */
318
+ function wpbc_ajx_booking_send_search_request_with_params ( params_arr ){
319
+
320
+ // Define different Search parameters for request
321
+ _.each( params_arr, function ( p_val, p_key, p_data ) {
322
+ //console.log( 'Request for: ', p_key, p_val );
323
+ wpbc_ajx_booking_listing.search_set_param( p_key, p_val );
324
+ });
325
+
326
+ // Send Ajax Request
327
+ wpbc_ajx_booking_ajax_search_request();
328
+ }
329
+
330
+ /**
331
+ * Search request for "Page Number"
332
+ * @param page_number int
333
+ */
334
+ function wpbc_ajx_booking_pagination_click( page_number ){
335
+
336
+ wpbc_ajx_booking_send_search_request_with_params( {
337
+ 'page_num': page_number
338
+ } );
339
+ }
340
+
341
+
342
+ /**
343
+ * Keyword Searching ----------------------------------------------------------------------------------------- */
344
+
345
+ /**
346
+ * Search request for "Keyword", also set current page to 1
347
+ *
348
+ * @param element_id - HTML ID of element, where was entered keyword
349
+ */
350
+ function wpbc_ajx_booking_send_search_request_for_keyword( element_id ) {
351
+
352
+ // We need to Reset page_num to 1 with each new search, because we can be at page #4, but after new search we can have totally only 1 page
353
+ wpbc_ajx_booking_send_search_request_with_params( {
354
+ 'keyword' : jQuery( element_id ).val(),
355
+ 'page_num': 1
356
+ } );
357
+ }
358
+
359
+ /**
360
+ * Send search request after few seconds (usually after 1,5 sec)
361
+ * Closure function. Its useful, for do not send too many Ajax requests, when someone make fast typing.
362
+ */
363
+ var wpbc_ajx_booking_searching_after_few_seconds = function (){
364
+
365
+ var closed_timer = 0;
366
+
367
+ return function ( element_id, timer_delay ){
368
+
369
+ // Get default value of "timer_delay", if parameter was not passed into the function.
370
+ timer_delay = typeof timer_delay !== 'undefined' ? timer_delay : 1500;
371
+
372
+ clearTimeout( closed_timer ); // Clear previous timer
373
+
374
+ // Start new Timer
375
+ closed_timer = setTimeout( wpbc_ajx_booking_send_search_request_for_keyword.bind( null, element_id ), timer_delay );
376
+ }
377
+ }();
378
+
379
+
380
+ /**
381
+ * Define Dynamic Hooks (like pagination click, which renew each time with new listing showing) ------------- */
382
+
383
+ /**
384
+ * Define HTML ui Hooks: on KeyUp | Change | -> Sort Order & Number Items / Page
385
+ * We are hcnaged it each time, when showing new listing, because DOM elements chnaged
386
+ */
387
+ function wpbc_ajx_booking_define_ui_hooks(){
388
+
389
+ if ( 'function' === typeof( wpbc_define_tippy_tooltips ) ) {
390
+ wpbc_define_tippy_tooltips( '.wpbc_listing_container ' );
391
+ }
392
+
393
+ wpbc_ajx_booking__ui_define__locale();
394
+ wpbc_ajx_booking__ui_define__remark();
395
+
396
+ // Items Per Page
397
+ jQuery( '.wpbc_items_per_page' ).on( 'change', function( event ){
398
+
399
+ wpbc_ajx_booking_send_search_request_with_params( {
400
+ 'page_items_count' : jQuery( this ).val(),
401
+ 'page_num': 1
402
+ } );
403
+ } );
404
+
405
+ // Sorting
406
+ jQuery( '.wpbc_items_sort_type' ).on( 'change', function( event ){
407
+
408
+ wpbc_ajx_booking_send_search_request_with_params( {'sort_type': jQuery( this ).val()} );
409
+ } );
410
+ }
411
+
412
+
413
+ /**
414
+ * Show / Hide Listing --------------------------------------------------------------------------------------- */
415
+
416
+ /**
417
+ * Show Listing Table - Sending Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
418
+ */
419
+ function wpbc_ajx_booking__actual_listing__show(){
420
+
421
+ wpbc_ajx_booking_ajax_search_request(); // Send Ajax Request - with parameters that we early defined in "wpbc_ajx_booking_listing" Obj.
422
+ }
423
+
424
+ /**
425
+ * Hide Listing Table ( and Pagination )
426
+ */
427
+ function wpbc_ajx_booking__actual_listing__hide(){
428
+ jQuery( '#wh_sort_selector' ).hide();
429
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'listing_container' ) ).html( '' );
430
+ jQuery( wpbc_ajx_booking_listing.get_other_param( 'pagination_container' ) ).html( '' );
431
+ }
432
+
433
+
434
+ /**
435
+ * Support functions for Content Template data --------------------------------------------------------------- */
436
+
437
+ /**
438
+ * Highlight strings,
439
+ * by inserting <span class="fieldvalue name fieldsearchvalue">...</span> html elements into the string.
440
+ * @param {string} booking_details - Source string
441
+ * @param {string} booking_keyword - Keyword to highlight
442
+ * @returns {string}
443
+ */
444
+ function wpbc_get_highlighted_search_keyword( booking_details, booking_keyword ){
445
+
446
+ booking_keyword = booking_keyword.trim().toLowerCase();
447
+ if ( 0 == booking_keyword.length ){
448
+ return booking_details;
449
+ }
450
+
451
+ // Highlight substring withing HTML tags in "Content of booking fields data" -- e.g. starting from > and ending with <
452
+ let keywordRegex = new RegExp( `fieldvalue[^<>]*>([^<]*${booking_keyword}[^<]*)`, 'gim' );
453
+
454
+ //let matches = [...booking_details.toLowerCase().matchAll( keywordRegex )];
455
+ let matches = booking_details.toLowerCase().matchAll( keywordRegex );
456
+ matches = Array.from( matches );
457
+
458
+ let strings_arr = [];
459
+ let pos_previous = 0;
460
+ let search_pos_start;
461
+ let search_pos_end;
462
+
463
+ for ( const match of matches ){
464
+
465
+ search_pos_start = match.index + match[ 0 ].toLowerCase().indexOf( '>', 0 ) + 1 ;
466
+
467
+ strings_arr.push( booking_details.substr( pos_previous, (search_pos_start - pos_previous) ) );
468
+
469
+ search_pos_end = booking_details.toLowerCase().indexOf( '<', search_pos_start );
470
+
471
+ strings_arr.push( '<span class="fieldvalue name fieldsearchvalue">' + booking_details.substr( search_pos_start, (search_pos_end - search_pos_start) ) + '</span>' );
472
+
473
+ pos_previous = search_pos_end;
474
+ }
475
+
476
+ strings_arr.push( booking_details.substr( pos_previous, (booking_details.length - pos_previous) ) );
477
+
478
+ return strings_arr.join( '' );
479
+ }
480
+
481
+ /**
482
+ * Convert special HTML characters from: &amp; -> &
483
+ *
484
+ * @param text
485
+ * @returns {*}
486
+ */
487
+ function wpbc_decode_HTML_entities( text ){
488
+ var textArea = document.createElement( 'textarea' );
489
+ textArea.innerHTML = text;
490
+ return textArea.value;
491
+ }
492
+
493
+ /**
494
+ * Convert TO special HTML characters from: & -> &amp;
495
+ *
496
+ * @param text
497
+ * @returns {*}
498
+ */
499
+ function wpbc_encode_HTML_entities(text) {
500
+ var textArea = document.createElement('textarea');
501
+ textArea.innerText = text;
502
+ return textArea.innerHTML;
503
+ }
504
+
505
+
506
+ /**
507
+ * Support Functions - Spin Icon in Buttons ------------------------------------------------------------------ */
508
+
509
+ /**
510
+ * Spin button in Filter toolbar - Start
511
+ */
512
+ function wpbc_booking_listing_reload_button__spin_start(){
513
+ jQuery( '#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin').removeClass( 'wpbc_animation_pause' );
514
+ }
515
+
516
+ /**
517
+ * Spin button in Filter toolbar - Pause
518
+ */
519
+ function wpbc_booking_listing_reload_button__spin_pause(){
520
+ jQuery( '#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin' ).addClass( 'wpbc_animation_pause' );
521
+ }
522
+
523
+ /**
524
+ * Spin button in Filter toolbar - is Spinning ?
525
+ *
526
+ * @returns {boolean}
527
+ */
528
+ function wpbc_booking_listing_reload_button__is_spin(){
529
+ if ( jQuery( '#wpbc_booking_listing_reload_button .menu_icon.wpbc_spin' ).hasClass( 'wpbc_animation_pause' ) ){
530
+ return true;
531
+ } else {
532
+ return false;
533
+ }
534
+ }
includes/page-bookings/bookings__actions.php ADDED
@@ -0,0 +1,3688 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php /**
2
+ * @version 1.0
3
+ * @description AJX_Bookings
4
+ * @category AJX_Bookings Actions
5
+ * @author wpdevelop
6
+ *
7
+ * @web-site http://oplugins.com/
8
+ * @email info@oplugins.com
9
+ *
10
+ * @modified 2022-06-10
11
+ */
12
+
13
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
14
+
15
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
16
+ // Main Ajax handler
17
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
18
+
19
+ /**
20
+ * Ajax Actions - Get Listing Data and Response to JS script
21
+ */
22
+ function wpbc_ajax_WPBC_AJX_BOOKING_ACTIONS() {
23
+
24
+ if ( ! isset( $_POST['action_params'] ) || empty( $_POST['action_params'] ) ) {
25
+ exit;
26
+ }
27
+
28
+ $ajax_errors = new WPBC_AJAX_ERROR_CATCHING();
29
+
30
+ // Security ----------------------------------------------------------------------------------------------- // in Ajax Post: 'nonce': wpbc_ajx_booking_listing.get_secure_param( 'nonce' ),
31
+ $action_name = 'wpbc_ajx_booking_listing_ajx' . '_wpbcnonce';
32
+ $nonce_post_key = 'nonce';
33
+ $result_check = check_ajax_referer( $action_name, $nonce_post_key );
34
+
35
+ $user_id = ( isset( $_REQUEST['wpbc_ajx_user_id'] ) ) ? intval( $_REQUEST['wpbc_ajx_user_id'] ) : get_current_user_id();
36
+
37
+ // Get clean Parameters for SQL ---------------------------------------------------------------------------
38
+ $request_prefix = 'action_params';
39
+
40
+ $request_params = wpbc_esc_get__value_or_default__in_request(
41
+ array(
42
+ 'booking_action' => array( 'validate' => array(
43
+ 'set_booking_locale',
44
+ 'set_booking_pending' ,
45
+ 'set_booking_approved',
46
+ 'move_booking_to_trash',
47
+ 'restore_booking_from_trash',
48
+ 'delete_booking_completely',
49
+ 'set_booking_as_read',
50
+ 'set_booking_as_unread',
51
+ 'empty_trash',
52
+ 'set_booking_note',
53
+ 'change_booking_resource',
54
+ 'duplicate_booking_to_other_resource',
55
+ 'set_payment_status',
56
+ 'set_booking_cost',
57
+ 'send_payment_request',
58
+ 'import_google_calendar',
59
+ 'export_csv'
60
+
61
+ ), 'default' => '' ),
62
+ 'booking_id' => array( 'validate' => 'digit_or_csd', 'default' => 0 ),
63
+ 'selected_resource_id' => array( 'validate' => 'd', 'default' => 0 ),
64
+ 'booking_meta_locale' => array( 'validate' => 's', 'default' => '' ),
65
+ 'reason_of_action' => array( 'validate' => 's', 'default' => '' ),
66
+ 'remark' => array( 'validate' => 's', 'default' => '' ),
67
+ 'ui_clicked_element_id' => array( 'validate' => 's', 'default' => '' ),
68
+ 'selected_payment_status' => array( 'validate' => 's', 'default' => '' ),
69
+ 'booking_cost' => array( 'validate' => 's', 'default' => '' ),
70
+
71
+ 'export_type' => array( 'validate' => array( 'csv_all', 'csv_page' ), 'default' => 'csv_page' ),
72
+ 'csv_export_separator' => array( 'validate' => array( 'semicolon', 'comma' ), 'default' => ';' ),
73
+ 'csv_export_skip_fields' => array( 'validate' => 's', 'default' => '' ),
74
+
75
+ 'booking_gcal_events_from' => array( 'validate' => 's', 'default' => '' ),
76
+ 'booking_gcal_events_from_offset' => array( 'validate' => 's', 'default' => '' ),
77
+ 'booking_gcal_events_from_offset_type' => array( 'validate' => 's', 'default' => '' ),
78
+ 'booking_gcal_events_until' => array( 'validate' => 's', 'default' => '' ),
79
+ 'booking_gcal_events_until_offset' => array( 'validate' => 's', 'default' => '' ),
80
+ 'booking_gcal_events_until_offset_type' => array( 'validate' => 's', 'default' => '' ),
81
+ 'booking_gcal_events_max' => array( 'validate' => 'd', 'default' => 25 ),
82
+ 'booking_gcal_resource' => array( 'validate' => 's', 'default' => '' )
83
+
84
+ ), $request_prefix
85
+ );
86
+
87
+ $action_result = array();
88
+
89
+ switch ( $request_params['booking_action'] ) {
90
+
91
+ case 'set_booking_locale':
92
+ $action_result = wpbc_booking_do_action__set_booking_locale( $request_params['booking_id']
93
+ , array(
94
+ 'user_id' => $user_id,
95
+ 'booking_locale' => $request_params['booking_meta_locale']
96
+ )
97
+ );
98
+ break;
99
+
100
+ case 'set_booking_pending': // Pending
101
+ $action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
102
+ , array(
103
+ 'user_id' => $user_id,
104
+ 'reason_of_action' => $request_params['reason_of_action'],
105
+ 'is_approve' => '0'
106
+ )
107
+ );
108
+ break;
109
+
110
+ case 'set_booking_approved': // Approve
111
+ $action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
112
+ , array(
113
+ 'user_id' => $user_id,
114
+ 'reason_of_action' => $request_params['reason_of_action'],
115
+ 'is_approve' => '1'
116
+ )
117
+ );
118
+ break;
119
+
120
+ case 'move_booking_to_trash': // Approve
121
+ $action_result = wpbc_booking_do_action__trash_booking_or_restore( $request_params['booking_id']
122
+ , array(
123
+ 'user_id' => $user_id,
124
+ 'reason_of_action' => $request_params['reason_of_action'],
125
+ 'is_trash' => '1'
126
+ )
127
+ );
128
+ break;
129
+
130
+ case 'restore_booking_from_trash':
131
+ $action_result = wpbc_booking_do_action__trash_booking_or_restore( $request_params['booking_id']
132
+ , array(
133
+ 'user_id' => $user_id,
134
+ 'reason_of_action' => $request_params['reason_of_action'],
135
+ 'is_trash' => '0'
136
+ )
137
+ );
138
+ break;
139
+
140
+ case 'delete_booking_completely':
141
+ $action_result = wpbc_booking_do_action__delete_booking_completely( $request_params['booking_id']
142
+ , array(
143
+ 'user_id' => $user_id,
144
+ 'reason_of_action' => $request_params['reason_of_action'],
145
+ )
146
+ );
147
+ break;
148
+
149
+ case 'set_booking_as_read':
150
+ $action_result = wpbc_booking_do_action__set_booking_as_read_unread( $request_params['booking_id']
151
+ , array(
152
+ 'user_id' => $user_id,
153
+ 'is_new' => '0'
154
+ )
155
+ );
156
+ break;
157
+
158
+ case 'set_booking_as_unread':
159
+ $action_result = wpbc_booking_do_action__set_booking_as_read_unread( $request_params['booking_id']
160
+ , array(
161
+ 'user_id' => $user_id,
162
+ 'is_new' => '1'
163
+ )
164
+ );
165
+ break;
166
+
167
+ case 'empty_trash':
168
+ $action_result = wpbc_booking_do_action__empty_trash( array(
169
+ 'user_id' => $user_id
170
+ ) );
171
+ break;
172
+
173
+ case 'set_booking_note':
174
+ $action_result = wpbc_booking_do_action__set_booking_note( $request_params['booking_id']
175
+ , array(
176
+ 'user_id' => $user_id,
177
+ 'remark' => $request_params['remark'],
178
+ )
179
+ );
180
+ break;
181
+
182
+ case 'change_booking_resource': // Pending
183
+ $action_result = wpbc_booking_do_action__change_booking_resource( $request_params['booking_id']
184
+ , $request_params['selected_resource_id']
185
+ , array(
186
+ 'user_id' => $user_id
187
+ )
188
+ );
189
+ break;
190
+ case 'duplicate_booking_to_other_resource':
191
+ $action_result = wpbc_booking_do_action__duplicate_booking_to_other_resource( $request_params['booking_id']
192
+ , $request_params['selected_resource_id']
193
+ , array(
194
+ 'user_id' => $user_id
195
+ )
196
+ );
197
+ break;
198
+ case 'set_payment_status':
199
+ $action_result = wpbc_booking_do_action__set_payment_status( $request_params['booking_id']
200
+ , $request_params['selected_payment_status']
201
+ , array(
202
+ 'user_id' => $user_id
203
+ )
204
+ );
205
+ break;
206
+ case 'set_booking_cost':
207
+ $action_result = wpbc_booking_do_action__set_booking_cost( $request_params['booking_id']
208
+ , $request_params['booking_cost']
209
+ , array(
210
+ 'user_id' => $user_id
211
+ )
212
+ );
213
+ break;
214
+ case 'send_payment_request':
215
+ $action_result = wpbc_booking_do_action__send_payment_request( $request_params['booking_id']
216
+ , $request_params['reason_of_action']
217
+ , array(
218
+ 'user_id' => $user_id
219
+ )
220
+ );
221
+ break;
222
+
223
+ case 'import_google_calendar':
224
+ $action_result = wpbc_booking_do_action__import_google_calendar( $request_params
225
+ , array(
226
+ 'user_id' => $user_id
227
+ )
228
+ );
229
+ break;
230
+
231
+ case 'export_csv':
232
+
233
+ $action_result = wpbc_booking_do_action__export_csv( $request_params
234
+ , array(
235
+ 'user_id' => $user_id
236
+ )
237
+ );
238
+ break;
239
+
240
+ default:
241
+ }
242
+
243
+
244
+ $defaults = array(
245
+ 'new_listing_params' => false // required for Import Google Calendar bookings
246
+ , 'after_action_result' => false
247
+ , 'after_action_message' => sprintf( __('No actions %s has been processed.', 'booking')
248
+ , ' <strong>' . $request_params['booking_action'] . '</strong> ' )
249
+ );
250
+ $action_result = wp_parse_args( $action_result, $defaults );
251
+
252
+ // Check if there were some errors --------------------------------------------------------------------------------
253
+ $error_messages = $ajax_errors->get_error_messages();
254
+ if ( ! empty( $error_messages ) ) {
255
+ $action_result['after_action_message'] .= $error_messages;
256
+ }
257
+
258
+ //------------------------------------------------------------------------------------------------------------------
259
+ // Send JSON. Its will make "wp_json_encode" - so pass only array, and This function call wp_die( '', '', array( 'response' => null, ) ) Pass JS OBJ: response_data in "jQuery.post( " function on success.
260
+ wp_send_json( array(
261
+ 'ajx_action_params' => $_REQUEST['action_params'], // Do not clean input parameters
262
+ 'ajx_cleaned_params' => $request_params, // Cleaned input parameters
263
+ 'ajx_after_action_message' => $action_result['after_action_message'], // Message to show
264
+ 'ajx_after_action_result' => (int) $action_result['after_action_result'], // Result key 0 | 1
265
+ 'ajx_after_action_result_all_params_arr' => $action_result // All result parameters
266
+ ) );
267
+ }
268
+
269
+
270
+ // <editor-fold defaultstate="collapsed" desc=" == Ajax Actions for bookings == " >
271
+
272
+ /**
273
+ * Action: set booking as Locale
274
+ *
275
+ * @param int $booking_id ID of booking 10
276
+ * @param $params
277
+ *
278
+ * @return array
279
+ */
280
+ function wpbc_booking_do_action__set_booking_locale( $booking_id, $params ){
281
+
282
+ $booking_locale = $params['booking_locale'];
283
+
284
+ // LOG ---------------------------------------------------------------------------------------------------------
285
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
286
+ wpbc_add_log_info( $booking_id,
287
+ sprintf( __( 'Booking locale changed to %s by:', 'booking' ), $booking_locale )
288
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
289
+ );
290
+
291
+ // Action ---------------------------------------------------------------------------------------------------------
292
+ $option_arr = array( 'booking_meta_locale' => $booking_locale );
293
+
294
+ $result = wpbc_save_booking_meta_option( $booking_id, $option_arr );
295
+
296
+ if ( $result ) {
297
+ $after_action_result = true;
298
+ $after_action_message = ( ( false === strpos( $booking_id, ',' ) )
299
+ ? sprintf( __( 'Booking has been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
300
+ : sprintf( __( 'Bookings have been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
301
+ )
302
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id . '</strong> )</span>';
303
+ } else {
304
+ $after_action_result = false;
305
+ $after_action_message = ( ( false === strpos( $booking_id, ',' ) )
306
+ ? sprintf( __( 'Booking has NOT been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
307
+ : sprintf( __( 'Bookings have NOT been changed locale to %s', 'booking' ), "<strong>{$booking_locale}</strong>" )
308
+ )
309
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id . '</strong> )</span>';
310
+ }
311
+
312
+ return array(
313
+ 'after_action_result' => $after_action_result,
314
+ 'after_action_message' => $after_action_message
315
+ );
316
+ }
317
+
318
+ /**
319
+ * Action: Get Google Calendar Link
320
+ *
321
+ * @param $booking_data array(
322
+ 'form_data' => array( ... )
323
+ 'form_show' => ....
324
+ 'dates_short' => array( ... )
325
+ )
326
+ *
327
+ * @return string URL of encoded link for adding to Google Calendar
328
+ */
329
+ function wpbc_booking_do_action__get_google_calendar_link( $booking_data ){
330
+
331
+ $params = array();
332
+ $params['timezone'] = get_bk_option('booking_gcal_timezone');
333
+
334
+ $booking_gcal_events_form_fields = maybe_unserialize( get_bk_option( 'booking_gcal_events_form_fields') ); // array( [title]=>text^name, [description]=>textarea^details, [where]=>text^ )
335
+
336
+ // Fields ----------------------------------------------------------------------------------------------------------
337
+ $fields = array( 'title' => '', 'description' => '', 'where' => '' );
338
+
339
+ foreach ( $fields as $key_name => $field_value ) {
340
+
341
+ if ( ! empty( $booking_gcal_events_form_fields[ $key_name ] ) ) {
342
+
343
+ $field_name = explode( '^', $booking_gcal_events_form_fields[ $key_name ] );
344
+
345
+ $field_name = $field_name[ ( count( $field_name ) - 1 ) ]; //FixIn: 8.7.7.6
346
+
347
+ if ( 'description' === $key_name ) { //FixIn: 8.1.3.2
348
+
349
+ if ( isset( $booking_data['form_show'] ) ) { //FixIn: 8.7.3.14
350
+ //FixIn: 8.7.11.4
351
+ $fields[ $key_name ] = $booking_data['form_show'];
352
+ $fields[ $key_name ] = htmlspecialchars_decode($fields[ $key_name ], ENT_QUOTES );
353
+ $fields[ $key_name ] = urlencode($fields[ $key_name ]);
354
+ $fields[ $key_name ] = htmlentities($fields[ $key_name ] );
355
+ $fields[ $key_name ] = htmlspecialchars_decode ( $fields[ $key_name ], ENT_NOQUOTES );
356
+ }
357
+
358
+ } else if ( ( ! empty( $field_name ) )
359
+ && ( ! empty( $booking_data['form_data'] ) )
360
+ && ( ! empty( $booking_data['form_data'][ $field_name ] ) )
361
+ ) {
362
+ //FixIn: 8.7.11.4
363
+ $fields[ $key_name ] = $booking_data['form_data'][ $field_name ];
364
+ $fields[ $key_name ] = htmlspecialchars_decode($fields[ $key_name ], ENT_QUOTES );
365
+ /**
366
+ * // Convert here from usual symbols to URL symbols https://www.url-encode-decode.com/
367
+ $fields[ $key_name ] = str_replace( array( '%','#', '+', '&' )
368
+ , array( '%25','%23', '%2B', '%26')
369
+ , $fields[ $key_name ]
370
+ );
371
+ */
372
+ $fields[ $key_name ] = urlencode($fields[ $key_name ]);
373
+ $fields[ $key_name ] = htmlentities($fields[ $key_name ] );
374
+ $fields[ $key_name ] = htmlspecialchars_decode ( $fields[ $key_name ], ENT_NOQUOTES );
375
+ }
376
+ }
377
+ }
378
+
379
+ // Dates -----------------------------------------------------------------------------------------------------------
380
+ $check_in_timestamp = $check_out_timestamp = '';
381
+ if ( ! empty( $booking_data[ 'dates_short' ] ) ) {
382
+
383
+ /**
384
+ * All day events, you can use 20161208/20161209 - note that the old google documentation gets it wrong.
385
+ * You must use the following date as the end date for a one day all day event,
386
+ * or +1 day to whatever you want the end date to be.
387
+ */
388
+
389
+ $check_in_timestamp = strtotime( $booking_data[ 'dates_short' ][ 0 ], current_time( 'timestamp' ) );
390
+ if ( trim( substr( $booking_data[ 'dates_short' ][ 0 ], 11 ) ) == '00:00:00' ) {
391
+ $check_in_timestamp = date( "Ymd", $check_in_timestamp ); // All day
392
+ } else {
393
+ $check_in_timestamp = date( "Ymd\THis", $check_in_timestamp ); //$check_in_timestamp = date( "Ymd\THis\Z", $check_in_timestamp );
394
+ }
395
+
396
+ $check_out_timestamp = strtotime( $booking_data[ 'dates_short' ][ ( count( $booking_data[ 'dates_short' ] ) - 1 ) ], current_time( 'timestamp' ) );
397
+ if ( trim( substr( $booking_data[ 'dates_short' ][ ( count( $booking_data[ 'dates_short' ] ) - 1 ) ], 11 ) ) == '00:00:00' ) {
398
+ $check_out_timestamp = strtotime( '+1 day', $check_out_timestamp );
399
+ $check_out_timestamp = date( "Ymd", $check_out_timestamp ); // All day
400
+ } else {
401
+ $check_out_timestamp = date( "Ymd\THis", $check_out_timestamp ); //$check_out_timestamp = date( "Ymd\THis\Z", $check_out_timestamp );
402
+ }
403
+ }
404
+
405
+ // Link -----------------------------------------------------------------------------------------------------------
406
+ /**
407
+ * Convert an ISO date/time to a UNIX timestamp
408
+ function iso_to_ts( $iso ) {
409
+ sscanf( $iso, "%u-%u-%uT%u:%u:%uZ", $year, $month, $day, $hour, $minute, $second );
410
+ return mktime( $hour, $minute, $second, $month, $day, $year );
411
+ 20140127T224000Z
412
+ date("Ymd\THis\Z", time());
413
+ */
414
+
415
+ /**
416
+ * action: action=TEMPLATE
417
+ A default required parameter.
418
+
419
+ src:
420
+ Example: src=default%40gmail.com
421
+ Format: src=text
422
+ This is not covered by Google help but is an optional parameter in order to add an event to a shared calendar rather than a user's default.
423
+
424
+ text:
425
+ Example: text=Garden%20Waste%20Collection
426
+ Format: text=text
427
+ This is a required parameter giving the event title.
428
+
429
+ dates:
430
+ Example: dates=20090621T063000Z/20090621T080000Z (i.e. an event on 21 June 2009 from 7.30am to 9.0am British Summer Time (=GMT+1)).
431
+ Format: dates=YYYYMMDDToHHMMSSZ/YYYYMMDDToHHMMSSZ
432
+ This required parameter gives the start and end dates and times (in Greenwich Mean Time) for the event.
433
+
434
+ location:
435
+ Example: location=Home
436
+ Format: location=text
437
+ The obvious location field.
438
+
439
+ trp:
440
+ Example: trp=false
441
+ Format: trp=true/false
442
+ Show event as busy (true) or available (false)
443
+
444
+ sprop:
445
+ Example: sprop=http%3A%2F%2Fwww.me.org
446
+ Example: sprop=name:Home%20Page
447
+ Format: sprop=website and/or sprop=name:website_name
448
+ */
449
+
450
+ //$link_add2gcal = 'http://www.google.com/calendar/event?action=TEMPLATE';
451
+ //$link_add2gcal .= '&text=' . $fields['title'];
452
+ $link_add2gcal = 'https://calendar.google.com/calendar/r/eventedit?'; //FixIn: 8.7.3.10
453
+ $link_add2gcal .= 'text=' . $fields['title']; //FixIn: 8.7.11.4
454
+ $link_add2gcal .= '&dates=' . $check_in_timestamp . '/' . $check_out_timestamp; //$link_add2gcal .= '&dates=[start-custom format='Ymd\\THi00\\Z']/[end-custom format='Ymd\\THi00\\Z']';
455
+ $link_add2gcal .= '&details=' . $fields['description']; //FixIn: 8.7.11.4
456
+ $link_add2gcal .= '&location=' . $fields['where']; //FixIn: 8.7.11.4
457
+ $link_add2gcal .= '&trp=false';
458
+ if ( ! empty( $params['timezone'] ) ) {
459
+ $link_add2gcal .= '&ctz=' . str_replace( '%', '%25', $params['timezone'] ); //FixIn: 8.7.3.10 //TimeZone
460
+ }
461
+ //$link_add2gcal .= '&sprop=';
462
+ //$link_add2gcal .= '&sprop=name:';
463
+
464
+ return $link_add2gcal;
465
+ }
466
+
467
+ /**
468
+ * Action: move booking to Trash | Restore
469
+ *
470
+ * @param $booking_id_arr array or int of booking ID
471
+ * @param $params array array of parameters: array( 'user_id' => 1, 'reason_of_action' => 'Because...', 'is_trash' => '1' )
472
+ *
473
+ * @return array
474
+ *
475
+ * Example:
476
+ */
477
+ function wpbc_booking_do_action__trash_booking_or_restore( $booking_id_arr, $params ){
478
+
479
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
480
+
481
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
482
+ if ( ! is_array( $booking_id_arr ) ) {
483
+ $booking_id_arr = array( $booking_id_arr );
484
+ }
485
+ $booking_is_csd = join( ',', $booking_id_arr );
486
+ $booking_is_csd = wpbc_clean_digit_or_csd( $booking_is_csd );
487
+
488
+
489
+ // Get reason of action --------------------------------------------------------------------------------------------
490
+ $action_reason = $params['reason_of_action']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
491
+
492
+ // Get reason of action --------------------------------------------------------------------------------------------
493
+ $is_trash_or_restore = $params['is_trash'];
494
+
495
+ // Is send email for this action ----------------------------------------------------------------------------------
496
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
497
+
498
+
499
+ // -----------------------------------------------------------------------------------------------------------------
500
+
501
+ if ( empty( $booking_is_csd ) ) {
502
+ $after_action_result = false;
503
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
504
+
505
+ } else {
506
+ $after_action_result = true;
507
+ if ( $is_trash_or_restore == '1' ) {
508
+ $after_action_message = ( ( false === strpos( $booking_is_csd, ',' ) )
509
+ ? sprintf( __( 'Booking has been %s trashed %s', 'booking' ), '<strong>', '</strong>' )
510
+ : sprintf( __( 'Bookings have been %s trashed %s', 'booking' ) , '<strong>', '</strong>' )
511
+ )
512
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_is_csd . '</strong> )</span>';
513
+ } else {
514
+ $after_action_message = ( ( false === strpos( $booking_is_csd, ',' ) )
515
+ ? sprintf( __( 'Booking has been set as %s restored %s', 'booking' ), '<strong>', '</strong>' )
516
+ : sprintf( __( 'Bookings have been set as %s restored %s', 'booking' ), '<strong>', '</strong>' )
517
+ )
518
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_is_csd . '</strong> )</span>';
519
+ }
520
+ // SQL ---------------------------------------------------------------------------------------------------
521
+ global $wpdb;
522
+ $prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.trash = %s WHERE booking_id IN ({$booking_is_csd})", $is_trash_or_restore );
523
+ $after_action_result = $wpdb->query( $prepared_sql );
524
+ if ( false === $after_action_result ) {
525
+ $after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
526
+ } else {
527
+ $after_action_result = true;
528
+ }
529
+
530
+ // Update the Hash and Cost of the booking
531
+ $bk_id_arr = explode(',', $booking_is_csd ); //FixIn: 8.6.1.11
532
+ foreach ( $bk_id_arr as $bk_id ) {
533
+ make_bk_action('wpbc_update_booking_hash', $bk_id );
534
+ }
535
+
536
+ // LOG ---------------------------------------------------------------------------------------------------------
537
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
538
+ wpbc_add_log_info( explode( ',', $booking_is_csd ),
539
+ ( ( $is_trash_or_restore == '1' ) ? __( 'Trashed by:', 'booking' ) : __( 'Restored by:', 'booking' ) )
540
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
541
+ );
542
+
543
+ // :: ? :: Update 'is_new' status of bookings in Database
544
+ // wpbc_update_number_new_bookings( explode( ',', $booking_is_csd ), '0', $params['user_id'] );
545
+
546
+ // Just action hook for some other addons
547
+ do_action( 'wpbc_booking_action__trash', $booking_is_csd, $is_trash_or_restore ); //FixIn: 8.7.6.2
548
+
549
+ // Emails ------------------------------------------------------------------------------------------------------
550
+ if ( ! empty( $is_send_emeils ) ) {
551
+
552
+ if ( $is_trash_or_restore == '1' ) {
553
+ wpbc_send_email_trash( $booking_is_csd, $is_send_emeils, $action_reason );
554
+ } else {
555
+ //wpbc_send_email_approved( $booking_is_csd, $is_send_emeils, $action_reason );
556
+ //wpbc_send_email_deny( $booking_is_csd, $is_send_emeils, $action_reason );
557
+ }
558
+ }
559
+ }
560
+
561
+ return array(
562
+ 'after_action_result' => $after_action_result,
563
+ 'after_action_message' => $after_action_message
564
+ );
565
+ }
566
+
567
+ /**
568
+ * Action: set booking as Approved | Pending
569
+ *
570
+ * @param $booking_id_arr array or int of booking ID
571
+ * @param $params array array of parameters: array( 'user_id' => 1, 'reason_of_action' => 'Because...', 'is_approve' => '1' )
572
+ *
573
+ * @return array
574
+ *
575
+ * Example:
576
+ * Approved:
577
+ $action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
578
+ , array(
579
+ 'user_id' => $user_id,
580
+ 'reason_of_action' => $request_params['reason_of_action'],
581
+ 'is_approve' => '1'
582
+ )
583
+ );
584
+ * Pending:
585
+ $action_result = wpbc_booking_do_action__set_booking_approved_or_pending( $request_params['booking_id']
586
+ , array(
587
+ 'user_id' => $user_id,
588
+ 'reason_of_action' => $request_params['reason_of_action'],
589
+ 'is_approve' => '0'
590
+ )
591
+ );
592
+ */
593
+ function wpbc_booking_do_action__set_booking_approved_or_pending( $booking_id_arr, $params ){
594
+
595
+ /**
596
+ *
597
+ * For creation of new bookings or editing use something like this:
598
+ *
599
+ // Be sure to make load in Booking Listing this: wp_enqueue_script( 'wpbc-main-client', wpbc_plugin_url( '/js/client.js' ), array( 'wpbc-datepick' ), WP_BK_VERSION_NUM );
600
+ new wpdev_booking(); // Define ability to work with shortcodes
601
+ $return_sh = do_shortcode('[booking type=1 nummonths=2]');
602
+ wp_send_json($return_sh); // Send calendar
603
+ */
604
+
605
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
606
+
607
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
608
+ if ( ! is_array( $booking_id_arr ) ) {
609
+ $booking_id_arr = array( $booking_id_arr );
610
+ }
611
+ $booking_id_csd = join( ',', $booking_id_arr );
612
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
613
+
614
+
615
+ // Get reason of action --------------------------------------------------------------------------------------------
616
+ $action_reason = $params['reason_of_action']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
617
+
618
+ // Get reason of action --------------------------------------------------------------------------------------------
619
+ $is_approve_or_pending = $params['is_approve'];
620
+
621
+ // Is send email for this action ----------------------------------------------------------------------------------
622
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
623
+
624
+
625
+ // -----------------------------------------------------------------------------------------------------------------
626
+
627
+ if ( empty( $booking_id_csd ) ) {
628
+ $after_action_result = false;
629
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
630
+
631
+ } else {
632
+ $after_action_result = true;
633
+ if ( $is_approve_or_pending == '1' ) {
634
+ $after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
635
+ ? sprintf( __( 'Booking has been %s approved %s', 'booking' ), '<strong>', '</strong>' )
636
+ : sprintf( __( 'Bookings have been %s approved %s', 'booking' ) , '<strong>', '</strong>' )
637
+ )
638
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
639
+ } else {
640
+ $after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
641
+ ? sprintf( __( 'Booking has been set as %s pending %s', 'booking' ), '<strong>', '</strong>' )
642
+ : sprintf( __( 'Bookings have been set as %s pending %s', 'booking' ), '<strong>', '</strong>' )
643
+ )
644
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
645
+ }
646
+ // SQL ---------------------------------------------------------------------------------------------------
647
+ global $wpdb;
648
+ $prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}bookingdates SET approved = %s WHERE booking_id IN ({$booking_id_csd})", $is_approve_or_pending );
649
+ $after_action_result = $wpdb->query( $prepared_sql );
650
+ if ( false === $after_action_result ) {
651
+ $after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
652
+ } else {
653
+ $after_action_result = true;
654
+ }
655
+
656
+ // LOG ---------------------------------------------------------------------------------------------------------
657
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
658
+ wpbc_add_log_info( explode( ',', $booking_id_csd ),
659
+ ( ( $is_approve_or_pending == '1' ) ? __( 'Approved by:', 'booking' ) : __( 'Declined by:', 'booking' ) )
660
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
661
+ );
662
+
663
+ // Update 'is_new' status of bookings in Database
664
+ wpbc_update_number_new_bookings( explode( ',', $booking_id_csd ), '0', $params['user_id'] );
665
+
666
+ // Just action hook for some other addons
667
+ do_action( 'wpbc_booking_action__approved', $booking_id_csd, $is_approve_or_pending ); //FixIn: 8.7.6.1
668
+
669
+ // Emails ------------------------------------------------------------------------------------------------------
670
+ if ( ! empty( $is_send_emeils ) ) {
671
+
672
+ if ( $is_approve_or_pending == '1' ) {
673
+ wpbc_send_email_approved( $booking_id_csd, $is_send_emeils, $action_reason );
674
+ } else {
675
+ wpbc_send_email_deny( $booking_id_csd, $is_send_emeils, $action_reason );
676
+ }
677
+ }
678
+
679
+ // Cancel other pending bookings for the same date ------------------------------------------------------------
680
+ if ( $is_approve_or_pending == '1' ) {
681
+ $all_bk_id_what_canceled = apply_bk_filter( 'cancel_pending_same_resource_bookings_for_specific_dates', false, $booking_id_csd );
682
+ }
683
+ }
684
+
685
+ return array(
686
+ 'after_action_result' => $after_action_result,
687
+ 'after_action_message' => $after_action_message
688
+ );
689
+ }
690
+
691
+ /**
692
+ * Action: booking Completely Delete
693
+ *
694
+ * @param $booking_id_arr array or int of booking ID
695
+ * @param $params array array of parameters: array( 'user_id' => 1, 'reason_of_action' => 'Because...' )
696
+ *
697
+ * @return array
698
+ *
699
+ * Example:
700
+ */
701
+ function wpbc_booking_do_action__delete_booking_completely( $booking_id_arr, $params ){
702
+
703
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
704
+
705
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
706
+ if ( ! is_array( $booking_id_arr ) ) {
707
+ $booking_id_arr = array( $booking_id_arr );
708
+ }
709
+ $booking_is_csd = join( ',', $booking_id_arr );
710
+ $booking_is_csd = wpbc_clean_digit_or_csd( $booking_is_csd );
711
+
712
+
713
+ // Get reason of action --------------------------------------------------------------------------------------------
714
+ $action_reason = $params['reason_of_action']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
715
+
716
+ // Is send email for this action ----------------------------------------------------------------------------------
717
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
718
+
719
+
720
+ // -----------------------------------------------------------------------------------------------------------------
721
+
722
+ if ( empty( $booking_is_csd ) ) {
723
+ $after_action_result = false;
724
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
725
+
726
+ } else {
727
+ $after_action_result = true;
728
+ $after_action_message = ( ( false === strpos( $booking_is_csd, ',' ) )
729
+ ? sprintf( __( 'Booking has been %s deleted %s', 'booking' ), '<strong>', '</strong>' )
730
+ : sprintf( __( 'Bookings have been %s deleted %s', 'booking' ) , '<strong>', '</strong>' )
731
+ )
732
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_is_csd . '</strong> )</span>';
733
+
734
+ // LOG ---------------------------------------------------------------------------------------------------------
735
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
736
+ wpbc_add_log_info( explode( ',', $booking_is_csd ),
737
+ __( 'Deleted by:', 'booking' )
738
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
739
+ );
740
+
741
+ // Just action hook for some other addons
742
+ do_action( 'wpbc_booking_action__delete', $booking_is_csd ); //FixIn: 8.7.6.3
743
+
744
+ // Emails ------------------------------------------------------------------------------------------------------
745
+ if ( ! empty( $is_send_emeils ) ) {
746
+
747
+ wpbc_send_email_deleted( $booking_is_csd, $is_send_emeils, $action_reason );
748
+ }
749
+
750
+ // SQL ---------------------------------------------------------------------------------------------------
751
+ global $wpdb;
752
+
753
+ // Dates
754
+ $prepared_sql = "DELETE FROM {$wpdb->prefix}bookingdates WHERE booking_id IN ({$booking_is_csd})";
755
+ $after_action_result = $wpdb->query( $prepared_sql );
756
+ if ( false === $after_action_result ) {
757
+ $after_action_message = 'Error during deleting dates in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
758
+ } else {
759
+ $after_action_result = true;
760
+ }
761
+ // Bookings
762
+ $prepared_sql = "DELETE FROM {$wpdb->prefix}booking WHERE booking_id IN ({$booking_is_csd})";
763
+ $after_action_result = $wpdb->query( $prepared_sql );
764
+ if ( false === $after_action_result ) {
765
+ $after_action_message = 'Error during deleting bookings in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
766
+ } else {
767
+ $after_action_result = true;
768
+ }
769
+
770
+ }
771
+
772
+ return array(
773
+ 'after_action_result' => $after_action_result,
774
+ 'after_action_message' => $after_action_message
775
+ );
776
+ }
777
+
778
+ /**
779
+ * Action: set booking as Read (Old) | Unread (New)
780
+ *
781
+ * @param $booking_id_arr array or int of booking ID
782
+ * @param $params array array of parameters: array( 'user_id' => 1, 'is_new' => '1' )
783
+ *
784
+ * @return array
785
+ *
786
+ * Example:
787
+ $action_result = wpbc_booking_do_action__set_booking_as_read_unread( $request_params['booking_id']
788
+ , array(
789
+ 'user_id' => $user_id,
790
+ 'is_new' => '0'
791
+ )
792
+ );
793
+
794
+ */
795
+ function wpbc_booking_do_action__set_booking_as_read_unread( $booking_id_arr, $params ){
796
+
797
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
798
+
799
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
800
+ if ( ! is_array( $booking_id_arr ) ) {
801
+ $booking_id_arr = array( $booking_id_arr );
802
+ }
803
+ $booking_id_csd = join( ',', $booking_id_arr );
804
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
805
+
806
+ // Get reason of action --------------------------------------------------------------------------------------------
807
+ $is_new = $params['is_new'];
808
+
809
+ // Is send email for this action ----------------------------------------------------------------------------------
810
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
811
+
812
+ // -----------------------------------------------------------------------------------------------------------------
813
+
814
+ if ( empty( $booking_id_csd ) ) {
815
+ $after_action_result = false;
816
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
817
+
818
+ } else {
819
+ $after_action_result = true;
820
+ if ( $is_new == '1' ) {
821
+ $after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
822
+ ? sprintf( __( 'Booking has been set as %s new %s', 'booking' ), '<strong>', '</strong>' )
823
+ : sprintf( __( 'Bookings have been set as %s new %s', 'booking' ) , '<strong>', '</strong>' )
824
+ )
825
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . (( '-1' == $booking_id_csd ) ? __( 'all', 'booking' ) : $booking_id_csd) . '</strong> )</span>';
826
+ } else {
827
+ $after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
828
+ ? sprintf( __( 'Booking has been set as set as %s read %s', 'booking' ), '<strong>', '</strong>' )
829
+ : sprintf( __( 'Bookings have been set as set as %s read %s', 'booking' ), '<strong>', '</strong>' )
830
+ )
831
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . (( '-1' == $booking_id_csd ) ? __( 'all', 'booking' ) : $booking_id_csd) . '</strong> )</span>';
832
+ }
833
+ // SQL ---------------------------------------------------------------------------------------------------
834
+ global $wpdb;
835
+ if ('-1' == $booking_id_csd ){
836
+ $prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.is_new = %s", $is_new );
837
+
838
+ $prepared_sql .= " WHERE ( 1 = 1 ) ";
839
+ $prepared_sql = apply_bk_filter('update_where_sql_for_getting_bookings_in_multiuser', $prepared_sql );
840
+ } else {
841
+ $prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.is_new = %s WHERE booking_id IN ({$booking_id_csd})", $is_new );
842
+ }
843
+ $after_action_result = $wpdb->query( $prepared_sql );
844
+ if ( false === $after_action_result ) {
845
+ $after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
846
+ } else {
847
+ $after_action_result = true;
848
+ }
849
+
850
+ // LOG ---------------------------------------------------------------------------------------------------------
851
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
852
+ wpbc_add_log_info( explode( ',', $booking_id_csd ),
853
+ ( ( $is_new == '1' ) ? __( 'Set as unread by:', 'booking' ) : __( 'Set as read by:', 'booking' ) )
854
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
855
+ );
856
+
857
+ // Just action hook for some other addons
858
+ do_action( 'wpbc_booking_action__changed_new_status', $booking_id_csd, $is_new ); //FixIn: 8.7.6.1
859
+
860
+ // Emails ------------------------------------------------------------------------------------------------------
861
+ if ( ! empty( $is_send_emeils ) ) {
862
+
863
+ if ( $is_new == '1' ) {
864
+ //wpbc_send_email_approved( $booking_id_csd, $is_send_emeils, $action_reason );
865
+ } else {
866
+ //wpbc_send_email_deny( $booking_id_csd, $is_send_emeils, $action_reason );
867
+ }
868
+ }
869
+ }
870
+
871
+ return array(
872
+ 'after_action_result' => $after_action_result,
873
+ 'after_action_message' => $after_action_message
874
+ );
875
+ }
876
+
877
+ /**
878
+ * Action: Emty Trash
879
+ *
880
+ * @param $params array array of parameters: array( 'user_id' => 1 )
881
+ *
882
+ * @return array
883
+ *
884
+ * Example:
885
+ */
886
+ function wpbc_booking_do_action__empty_trash( $params ){
887
+
888
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
889
+
890
+ // Is send email for this action ----------------------------------------------------------------------------------
891
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
892
+
893
+ // Get bookings ID to delete -------------------------------------------------------------------------------
894
+ global $wpdb;
895
+
896
+ $sql = "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.trash = 1";
897
+
898
+ $sql = apply_bk_filter( 'update_where_sql_for_getting_bookings_in_multiuser', $sql, $params['user_id'] ); // Get booking resources of this user only: $user_id
899
+
900
+ $max_bookings_to_erase = 1000;
901
+ $sql .= " LIMIT 0, " . $max_bookings_to_erase;
902
+
903
+ $bookings_in_trash = $wpdb->get_results( $sql ); //Get ID of all bookings in a trash.
904
+
905
+ $bookings_id_in_trash_arr = array();
906
+
907
+ foreach ( $bookings_in_trash as $booking_obj ) {
908
+ $bookings_id_in_trash_arr[] = $booking_obj->booking_id;
909
+ }
910
+ $booking_is_csd = implode( ',', $bookings_id_in_trash_arr );
911
+
912
+ // Empty trash ------------------------------------------------------------------------------------------------
913
+
914
+ if ( empty( $booking_is_csd ) ) {
915
+ $after_action_result = false;
916
+ $after_action_message = __( 'No bookings in trash to erase.', 'booking' );
917
+
918
+ } else {
919
+ $after_action_result = true;
920
+ if ( count( $bookings_id_in_trash_arr ) < $max_bookings_to_erase ) {
921
+ $after_action_message = sprintf( __( 'Trash has been erased.', 'booking' ) , '<strong>', '</strong>' )
922
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . substr( $booking_is_csd, 0 , 500 ) . '</strong> )</span>';
923
+ } else {
924
+ $after_action_message = sprintf( __( 'From trash has been erased %s bookings.', 'booking' ) , '<strong> ' . count( $bookings_id_in_trash_arr ) . ' </strong> ' ) ;
925
+ }
926
+
927
+ // LOG -----------------------------------------------------------------------------------------------------
928
+ // $curr_user = get_user_by( 'id', (int) $params['user_id'] );
929
+ // wpbc_add_log_info( explode( ',', $booking_is_csd ),
930
+ // __( 'Deleted by:', 'booking' )
931
+ // . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
932
+ // );
933
+
934
+ // Just action hook for some other addons
935
+ do_action( 'wpbc_booking_action__empty_trash' ); //FixIn: 8.7.6.3
936
+
937
+ // Emails ------------------------------------------------------------------------------------------------------
938
+ if ( ! empty( $is_send_emeils ) ) {
939
+
940
+ // wpbc_send_email_deleted( $booking_is_csd, $is_send_emeils, __( 'Empty Trash', 'booking' ) );
941
+ }
942
+
943
+ // SQL ---------------------------------------------------------------------------------------------------
944
+
945
+ // Dates
946
+ $prepared_sql = "DELETE FROM {$wpdb->prefix}bookingdates WHERE booking_id IN ({$booking_is_csd})";
947
+ $after_action_result = $wpdb->query( $prepared_sql );
948
+ if ( false === $after_action_result ) {
949
+ $after_action_message = 'Error during deleting dates in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
950
+ } else {
951
+ $after_action_result = true;
952
+ }
953
+ // Bookings
954
+ $prepared_sql = "DELETE FROM {$wpdb->prefix}booking WHERE booking_id IN ({$booking_is_csd})";
955
+ $after_action_result = $wpdb->query( $prepared_sql );
956
+ if ( false === $after_action_result ) {
957
+ $after_action_message = 'Error during deleting bookings in DB. File:' . __FILE__ . ' on line: ' . __LINE__;
958
+ } else {
959
+ $after_action_result = true;
960
+ }
961
+
962
+ }
963
+
964
+ return array(
965
+ 'after_action_result' => $after_action_result,
966
+ 'after_action_message' => $after_action_message
967
+ );
968
+ }
969
+
970
+ /**
971
+ * Action: save booking Remark
972
+ *
973
+ * @param $booking_id_arr array or int of booking ID
974
+ * @param $params array array of parameters: array( 'user_id' => 1, 'remark' => 'Because...')
975
+ *
976
+ * @return array
977
+ *
978
+ * Example:
979
+ */
980
+ function wpbc_booking_do_action__set_booking_note( $booking_id_arr, $params ){
981
+
982
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
983
+
984
+ // Get ID list of bookings, like '1' or '3,7,9' ------------------------------------------------------------
985
+ if ( ! is_array( $booking_id_arr ) ) {
986
+ $booking_id_arr = array( $booking_id_arr );
987
+ }
988
+ $booking_id_csd = join( ',', $booking_id_arr );
989
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
990
+
991
+ // Get remark --------------------------------------------------------------------------------------------------
992
+ $remark_text = $params['remark']; // stripslashes( $params['reason_of_action'] ); // translate words like don\'t to don't
993
+
994
+ // Is send email for this action ------------------------------------------------------------------------------
995
+ // $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
996
+
997
+
998
+ // -----------------------------------------------------------------------------------------------------------------
999
+
1000
+ if ( empty( $booking_id_csd ) ) {
1001
+ $after_action_result = false;
1002
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
1003
+
1004
+ } else {
1005
+ $after_action_result = true;
1006
+ $after_action_message = __( 'Note has been saved', 'booking' )
1007
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
1008
+ // SQL ---------------------------------------------------------------------------------------------------
1009
+ global $wpdb;
1010
+ $prepared_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking SET remark = %s WHERE booking_id IN ({$booking_id_csd})", $remark_text );
1011
+ $after_action_result = $wpdb->query( $prepared_sql );
1012
+ if ( false === $after_action_result ) {
1013
+ $after_action_message = 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
1014
+ } else {
1015
+ $after_action_result = true;
1016
+ }
1017
+
1018
+ // LOG ---------------------------------------------------------------------------------------------------------
1019
+ if (0) {
1020
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
1021
+ wpbc_add_log_info( explode( ',', $booking_id_csd ),
1022
+ __( 'Note saved by:', 'booking' )
1023
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
1024
+ );
1025
+ }
1026
+
1027
+ // Just action hook for some other addons
1028
+ do_action( 'wpbc_booking_action__note_saved', $booking_id_csd, $remark_text );
1029
+
1030
+ // Emails ------------------------------------------------------------------------------------------------------
1031
+ if ( 0 ) {
1032
+ if ( ! empty( $is_send_emeils ) ) {
1033
+ wpbc_send_email_approved( $booking_id_csd, $is_send_emeils, $remark_text );
1034
+ }
1035
+ }
1036
+ }
1037
+
1038
+ return array(
1039
+ 'after_action_result' => $after_action_result,
1040
+ 'after_action_message' => $after_action_message
1041
+ );
1042
+ }
1043
+
1044
+ /**
1045
+ * Action: change Booking Resource
1046
+ *
1047
+ * @param $booking_id_arr array or int of booking ID
1048
+ * @param $selected_resource_id int of booking resource
1049
+ * @param $params array array of parameters: array( 'user_id' => 1 )
1050
+ *
1051
+ * @return array
1052
+ *
1053
+ * Example:
1054
+ */
1055
+ function wpbc_booking_do_action__change_booking_resource( $booking_id_arr, $selected_resource_id, $params ) {
1056
+
1057
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
1058
+
1059
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
1060
+ if ( ! is_array( $booking_id_arr ) ) {
1061
+ $booking_id_arr = array( $booking_id_arr );
1062
+ }
1063
+ $booking_id_csd = join( ',', $booking_id_arr );
1064
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
1065
+
1066
+ // ID of booking resource ------------------------------------------------------------------------------------------
1067
+ $selected_resource_id = intval($selected_resource_id);
1068
+
1069
+ // Is send email for this action ----------------------------------------------------------------------------------
1070
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
1071
+
1072
+ // -----------------------------------------------------------------------------------------------------------------
1073
+
1074
+ if ( empty( $booking_id_csd ) ) {
1075
+ $after_action_result = false;
1076
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
1077
+
1078
+ } else {
1079
+ $after_action_result = true;
1080
+
1081
+ $after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
1082
+ ? sprintf( __( 'Booking has been changed %s booking resource %s', 'booking' ), '<strong>', '</strong>' )
1083
+ : sprintf( __( 'Bookings have been changed %s booking resource %s', 'booking' ), '<strong>', '</strong>' )
1084
+ )
1085
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
1086
+
1087
+
1088
+ $work_booking_id_arr = explode( ',', $booking_id_csd );
1089
+
1090
+ foreach ( $work_booking_id_arr as $selected_booking_id ) {
1091
+
1092
+ // SQL ---------------------------------------------------------------------------------------------------
1093
+ list( $after_action_result, $after_action_message, $formdata_new ) = wpbc__sql__change_booking_resource_for_booking( $selected_booking_id, $selected_resource_id );
1094
+
1095
+ if ( $after_action_result ) {
1096
+ // LOG ---------------------------------------------------------------------------------------------------------
1097
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
1098
+ wpbc_add_log_info( explode( ',', $selected_booking_id ),
1099
+ __( 'Booking resource changed by:', 'booking' )
1100
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
1101
+ );
1102
+
1103
+ // Just action hook for some other addons
1104
+ do_action( 'wpbc_booking_action__change_booking_resource', $selected_booking_id, $selected_resource_id );
1105
+
1106
+ // Emails ------------------------------------------------------------------------------------------------------
1107
+ if ( ! empty( $is_send_emeils ) ) {
1108
+ wpbc_send_email_modified( $selected_booking_id, $selected_resource_id, $formdata_new );
1109
+ }
1110
+ }
1111
+ }
1112
+ }
1113
+
1114
+ return array(
1115
+ 'after_action_result' => $after_action_result,
1116
+ 'after_action_message' => $after_action_message
1117
+ );
1118
+
1119
+ }
1120
+
1121
+ /**
1122
+ * Change booking resource for specific booking -- SQL manipulation
1123
+ * @param $selected_booking_id
1124
+ * @param $selected_resource_id
1125
+ *
1126
+ * @return array
1127
+ */
1128
+ function wpbc__sql__change_booking_resource_for_booking( $selected_booking_id, $selected_resource_id ){
1129
+
1130
+ global $wpdb;
1131
+
1132
+ $booking_id = intval( $selected_booking_id );
1133
+ $resource_id = intval( $selected_resource_id );
1134
+ $db_form_data_new = '';
1135
+
1136
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1137
+ // 1.Get dates of SOURCE booking
1138
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1139
+ if ( 1 ) {
1140
+ // 1.1.Get booking data of SOURCE booking
1141
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE booking_id = %d ", $booking_id );
1142
+ $res = $wpdb->get_row( $sql );
1143
+ $db_form_data_old = $res->form;
1144
+ $resource_id_old = $res->booking_type;
1145
+
1146
+ // 1.2. Get dates of SOURCE booking
1147
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}bookingdates as dt WHERE booking_id = %d ORDER BY booking_date ASC ", $booking_id );
1148
+ $old_resource_dates_array = $wpdb->get_results( $sql );
1149
+ }
1150
+
1151
+
1152
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1153
+ // 2. Get bookings of selected booking resource - checking if some dates there is booked or not
1154
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1155
+ $exist_dates_results = wpbc_get_booking_dates_in_resource_for_folowing_dates( $old_resource_dates_array , $resource_id );
1156
+
1157
+
1158
+ if ( ( count( $exist_dates_results ) == 3 ) && ( false === $exist_dates_results[0] ) ){
1159
+ // // ERROR :: number of check in/dates does not equal to number of check out dates.
1160
+ return $exist_dates_results;
1161
+ }
1162
+
1163
+ if ( get_bk_option('booking_change_resource_skip_checking') === 'On' ) { //FixIn: 8.4.5.4
1164
+ $is_date_time_booked = false;
1165
+ } else {
1166
+ $is_date_time_booked = wpbc_check_dates_intersections( $old_resource_dates_array, $exist_dates_results );
1167
+ }
1168
+
1169
+ if ( $is_date_time_booked ) {
1170
+
1171
+ $after_action_result = false;
1172
+ $after_action_message = __( 'Warning! The resource was not changed. Current dates are already booked there.', 'booking' );
1173
+
1174
+ } else { // Possible to change
1175
+
1176
+ $db_form_data_new = wpbc_update_resource_id_in_dbformatted_booking_data( $db_form_data_old, $resource_id_old, $resource_id );
1177
+
1178
+ // Update
1179
+ $update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.form=%s, bk.booking_type=%d WHERE bk.booking_id=%d;"
1180
+ , $db_form_data_new, $resource_id, $booking_id );
1181
+ if ( false === $wpdb->query( $update_sql ) ) {
1182
+ $after_action_result = false;
1183
+ $after_action_message = get_debuge_error( 'Error during updating booking reource type in BD', __FILE__, __LINE__ );
1184
+
1185
+ return array( $after_action_result, $after_action_message, $db_form_data_new );
1186
+ }
1187
+
1188
+
1189
+ if ( class_exists( 'wpdev_bk_biz_l' ) ) {
1190
+ $update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}bookingdates SET type_id=NULL WHERE booking_id=%d ", $booking_id );
1191
+ if ( false === $wpdb->query( $update_sql ) ) {
1192
+ $after_action_result = false;
1193
+ $after_action_message = get_debuge_error( 'Error during updating dates type in BD', __FILE__, __LINE__ );
1194
+
1195
+ return array( $after_action_result, $after_action_message, $db_form_data_new );
1196
+ }
1197
+ }
1198
+
1199
+ $booking_resources_arr = wpbc_ajx_get_all_booking_resources_arr();
1200
+ $after_action_result = true;
1201
+ $after_action_message = sprintf( __( 'Booking %s has been changed booking resource from %s to %s' )
1202
+ , '<strong>[ID=' . $booking_id . ']</strong>'
1203
+ , '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id_old ]['title'] ) . '</strong>'
1204
+ , '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id ]['title'] ) . '</strong>'
1205
+ );
1206
+
1207
+ // Everything Cool :) - booking resource changed
1208
+ }
1209
+
1210
+ return array( $after_action_result, $after_action_message , $db_form_data_new );
1211
+ }
1212
+
1213
+ /**
1214
+ * Get booking dates (bookings obj) of selected booking resource - checking if some dates there is booked or not
1215
+ *
1216
+ * @param $old_resource_dates_array array of OBJ with ..->booking_date
1217
+ * @param int $resource_id Resource ID, where we get dates.
1218
+ *
1219
+ * @return array array of booking OBJ with ..->booking_date
1220
+ */
1221
+ function wpbc_get_booking_dates_in_resource_for_folowing_dates( $old_resource_dates_array , $resource_id ){
1222
+
1223
+ global $wpdb;
1224
+
1225
+ $dates_sql_between = '';
1226
+ $check_in_dates_arr = array();
1227
+ $check_out_dates_arr = array();
1228
+
1229
+ if ( 'On' === get_bk_option( 'booking_recurrent_time' ) ) { // If we are using recurrent time slots ?
1230
+
1231
+ foreach ( $old_resource_dates_array as $k => $v ) {
1232
+
1233
+ if ( ':02' == substr( $v->booking_date, - 3 ) ) {
1234
+ $check_out_dates_arr[] = $v->booking_date;
1235
+ }
1236
+ if ( ':01' == substr( $v->booking_date, - 3 ) ) {
1237
+ $check_in_dates_arr[] = $v->booking_date;
1238
+ }
1239
+ }
1240
+
1241
+ if ( count( $check_out_dates_arr ) == count( $check_in_dates_arr ) ) {
1242
+ $dates_sql_between_arr = array();
1243
+ foreach ( $check_in_dates_arr as $k => $v ) {
1244
+
1245
+ $dates_sql_between_arr [] = ' ( dt.booking_date BETWEEN "' . $check_in_dates_arr[ $k ] . '" AND "' . $check_out_dates_arr[ $k ] . '" ) ';
1246
+ }
1247
+ $dates_sql_between = implode( 'OR', $dates_sql_between_arr );
1248
+
1249
+ //TODO: remove (), if only 1 element in array
1250
+
1251
+ } else {
1252
+ // ERROR :: number of check in/dates does not equal to number of check out dates.
1253
+ $after_action_result = false;
1254
+ $after_action_message = '<strong>Error</strong>. Number of check in times of booking dates does not equal to number of check out days.'
1255
+ . '<br>Check in dates: ' . implode( ', ', $check_in_dates_arr )
1256
+ . '<br>Check out dates: ' . implode( ', ', $check_out_dates_arr );
1257
+
1258
+ return array( $after_action_result, $after_action_message, '' );
1259
+ }
1260
+ }
1261
+
1262
+ if ( '' == $dates_sql_between ) {
1263
+
1264
+ $temp_check_in = $old_resource_dates_array[0]->booking_date;
1265
+ $temp_check_out = $old_resource_dates_array[ ( count( $old_resource_dates_array ) - 1 ) ]->booking_date;
1266
+
1267
+ if ( ':02' != substr( $temp_check_out, - 3 ) ) {
1268
+ $temp_check_out = date( 'Y-m-d H:i:s', strtotime( '+1 day -1 second', strtotime( $temp_check_out ) ) );
1269
+ }
1270
+
1271
+ $dates_sql_between .= ' dt.booking_date BETWEEN "' . $temp_check_in . '" AND "' . $temp_check_out . '" ';
1272
+ }
1273
+
1274
+
1275
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk
1276
+ INNER JOIN {$wpdb->prefix}bookingdates as dt
1277
+ ON bk.booking_id = dt.booking_id
1278
+ WHERE bk.trash != 1 AND bk.booking_type = %d", $resource_id );
1279
+ $sql .= " AND ( {$dates_sql_between} ) ";
1280
+
1281
+ // In BL version its does not check for booking belonging to several booking resources
1282
+ if ( class_exists( 'wpdev_bk_biz_l' ) ) {
1283
+ $sql .= " OR bk.booking_id IN ( "
1284
+ . " SELECT DISTINCT booking_id FROM {$wpdb->prefix}bookingdates as dtt
1285
+ WHERE dtt.type_id = {$resource_id} "
1286
+ //."AND DATE(dt.booking_date) IN ( {$dates_string} )"
1287
+ . " AND ( " . str_replace( 'dt.', 'dtt.', $dates_sql_between ) . " ) "
1288
+ . ") ";
1289
+ }
1290
+ $sql .= " ORDER BY bk.booking_id DESC, dt.booking_date ASC ";
1291
+
1292
+ $exist_dates_results = $wpdb->get_results( $sql );
1293
+
1294
+ // We have found only intersected dates. Now we need to get all dates from such bookings, for having correct "Start and end time times for the booking"
1295
+ // and does not add some "start time at the begining of the day inside of wpbc_check_dates_intersections( ) function
1296
+ if ( count( $exist_dates_results ) > 0 ) {
1297
+
1298
+ // Get ID of all bookings that inside of this interval
1299
+ $my_booking_id_arr = [];
1300
+ foreach ( $exist_dates_results as $key => $booking_obj ) {
1301
+ $my_booking_id_arr[] = $booking_obj->booking_id;
1302
+ }
1303
+ // Get all dates of such bookings (not only intersected!
1304
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk
1305
+ INNER JOIN {$wpdb->prefix}bookingdates as dt
1306
+ ON bk.booking_id = dt.booking_id
1307
+ WHERE bk.booking_id IN (" . implode( ',', $my_booking_id_arr ) . ") AND bk.trash != 1 AND bk.booking_type = %d", $resource_id );
1308
+ $sql .= " ORDER BY bk.booking_id DESC, dt.booking_date ASC ";
1309
+
1310
+ $exist_dates_results = $wpdb->get_results( $sql );
1311
+ }
1312
+
1313
+ return $exist_dates_results;
1314
+ }
1315
+
1316
+ /**
1317
+ * Update "Content of booking fields data" from old booking resource id SUFFIX to new booking Resource ID
1318
+ *
1319
+ * @param string $db_form_data_old
1320
+ * @param int $resource_id_old
1321
+ * @param int $resource_id_new
1322
+ *
1323
+ * @return void
1324
+ */
1325
+ function wpbc_update_resource_id_in_dbformatted_booking_data( $db_form_data_old, $resource_id_old, $resource_id_new ) {
1326
+
1327
+ $db_form_data_new = array();
1328
+
1329
+ $form_data_arr = explode( '~', $db_form_data_old );
1330
+ $fields_count = count( $form_data_arr );
1331
+
1332
+ for ( $i = 0; $i < $fields_count; $i ++ ) {
1333
+
1334
+ list( $type, $element_name, $value ) = explode( '^', $form_data_arr[ $i ] );
1335
+
1336
+ if ( substr( $element_name, - 2 ) == '[]' ) {
1337
+ $element_name = str_replace( '[]', '', $element_name );
1338
+ }
1339
+
1340
+ $element_name = substr( $element_name, 0, - 1 * strlen( $resource_id_old ) ) . $resource_id_new; // Change resource ID in field
1341
+
1342
+ $db_form_data_new[] = $type . '^' . $element_name . '^' . $value;
1343
+ }
1344
+
1345
+ return implode( '~', $db_form_data_new );
1346
+ }
1347
+
1348
+ /**
1349
+ * Action: Duplicate Booking into other Resource
1350
+ *
1351
+ * @param $booking_id_arr array or int of booking ID
1352
+ * @param $selected_resource_id int of booking resource
1353
+ * @param $params array array of parameters: array( 'user_id' => 1 )
1354
+ *
1355
+ * @return array
1356
+ *
1357
+ * Example:
1358
+ */
1359
+ function wpbc_booking_do_action__duplicate_booking_to_other_resource( $booking_id_arr, $selected_resource_id, $params ) {
1360
+
1361
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
1362
+
1363
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
1364
+ if ( ! is_array( $booking_id_arr ) ) {
1365
+ $booking_id_arr = array( $booking_id_arr );
1366
+ }
1367
+ $booking_id_csd = join( ',', $booking_id_arr );
1368
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
1369
+
1370
+ // ID of booking resource ------------------------------------------------------------------------------------------
1371
+ $selected_resource_id = intval($selected_resource_id);
1372
+
1373
+ // Is send email for this action ----------------------------------------------------------------------------------
1374
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
1375
+
1376
+ // -----------------------------------------------------------------------------------------------------------------
1377
+
1378
+ if ( empty( $booking_id_csd ) ) {
1379
+ $after_action_result = false;
1380
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
1381
+
1382
+ } else {
1383
+ $after_action_result = true;
1384
+
1385
+ $after_action_message = ( ( false === strpos( $booking_id_csd, ',' ) )
1386
+ ? sprintf( __( 'Booking has been %s duplicated %s', 'booking' ), '<strong>', '</strong>' )
1387
+ : sprintf( __( 'Bookings have been %s duplicated %s', 'booking' ), '<strong>', '</strong>' )
1388
+ )
1389
+ . ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>';
1390
+
1391
+
1392
+ $work_booking_id_arr = explode( ',', $booking_id_csd );
1393
+
1394
+ foreach ( $work_booking_id_arr as $selected_booking_id ) {
1395
+
1396
+ // SQL ---------------------------------------------------------------------------------------------------
1397
+ list( $after_action_result, $after_action_message, $formdata_new ) = wpbc__sql__duplicate_booking_to_other_resource_for_booking( $selected_booking_id, $selected_resource_id, $params );
1398
+
1399
+ if ( $after_action_result ) {
1400
+ // LOG ---------------------------------------------------------------------------------------------------------
1401
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
1402
+ wpbc_add_log_info( explode( ',', $selected_booking_id ),
1403
+ __( 'Booking resource changed by:', 'booking' )
1404
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
1405
+ );
1406
+
1407
+ // Just action hook for some other addons
1408
+ do_action( 'wpbc_booking_action__duplicate_booking_to_other_resource', $selected_booking_id, $selected_resource_id );
1409
+
1410
+ // Emails ------------------------------------------------------------------------------------------------------
1411
+ if ( ! empty( $is_send_emeils ) ) {
1412
+ // We are sending emails about the new booking, if we have created it.
1413
+ // wpbc_send_email_modified( $selected_booking_id, $selected_resource_id, $formdata_new );
1414
+ }
1415
+ }
1416
+ }
1417
+ }
1418
+
1419
+ return array(
1420
+ 'after_action_result' => $after_action_result,
1421
+ 'after_action_message' => $after_action_message
1422
+ );
1423
+
1424
+ }
1425
+
1426
+ /**
1427
+ * Duplicate booking in another resource -- SQL manipulation
1428
+ * @param $selected_booking_id
1429
+ * @param $selected_resource_id
1430
+ *
1431
+ * @return array
1432
+ */
1433
+ function wpbc__sql__duplicate_booking_to_other_resource_for_booking( $selected_booking_id, $selected_resource_id, $params ){
1434
+ global $wpdb;
1435
+
1436
+ $booking_id = intval( $selected_booking_id );
1437
+ $resource_id = intval( $selected_resource_id );
1438
+ $db_form_data_new = '';
1439
+ $booking_resources_arr = wpbc_ajx_get_all_booking_resources_arr();
1440
+
1441
+ $is_send_emails = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
1442
+
1443
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1444
+ // 1.Get dates of SOURCE booking
1445
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1446
+ if ( 1 ) {
1447
+ // 1.1.Get booking data of SOURCE booking
1448
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE booking_id = %d ", $booking_id );
1449
+ $res = $wpdb->get_row( $sql );
1450
+ $db_form_data_old = $res->form;
1451
+ $resource_id_old = $res->booking_type;
1452
+
1453
+ // 1.2. Get dates of SOURCE booking
1454
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}bookingdates as dt WHERE booking_id = %d ORDER BY booking_date ASC ", $booking_id );
1455
+ $old_resource_dates_array = $wpdb->get_results( $sql );
1456
+ }
1457
+
1458
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1459
+ // 2. Get bookings of selected booking resource - checking if some dates there is booked or not
1460
+ ////////////////////////////////////////////////////////////////////////////////////////////////////////////
1461
+ $exist_dates_results = wpbc_get_booking_dates_in_resource_for_folowing_dates( $old_resource_dates_array , $resource_id );
1462
+
1463
+ if ( ( count( $exist_dates_results ) == 3 ) && ( false === $exist_dates_results[0] ) ){
1464
+ // // ERROR :: number of check in/dates does not equal to number of check out dates.
1465
+ return $exist_dates_results;
1466
+ }
1467
+
1468
+ if ( get_bk_option('booking_change_resource_skip_checking') === 'On' ) { //FixIn: 8.4.5.4
1469
+ $is_date_time_booked = false;
1470
+ } else {
1471
+ $is_date_time_booked = wpbc_check_dates_intersections( $old_resource_dates_array, $exist_dates_results );
1472
+ }
1473
+
1474
+ if ( $is_date_time_booked ) {
1475
+
1476
+ $after_action_result = false;
1477
+ $after_action_message = '<strong>' . __( 'Warning', 'booking' ) . '!</strong> '
1478
+ . sprintf( __( 'Booking %s has not been duplicated in booking resource %s. Current dates are already booked there.' )
1479
+ , '<strong style="font-size:0.9em;">[ID=' . $booking_id . ']</strong>'
1480
+ , '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id ]['title'] ) . '</strong>'
1481
+ );
1482
+
1483
+ } else { // Possible to change
1484
+
1485
+ $db_form_data_new = wpbc_update_resource_id_in_dbformatted_booking_data( $db_form_data_old, $resource_id_old, $resource_id );
1486
+
1487
+ $wpdev_active_locale = isset( $_REQUEST['wpbc_ajx_locale'] ) ? esc_js( $_REQUEST['wpbc_ajx_locale'] ) : 'en_US';
1488
+
1489
+
1490
+ // Change dates from DateObj( $selected_date->booking_date = '2015-10-17' ) to array ( '17.10.2015' )
1491
+ $my_dates_for_sql = array();
1492
+ foreach ($old_resource_dates_array as $selected_date) {
1493
+ $selected_date = explode( '-', $selected_date->booking_date );
1494
+ $my_dates_for_sql[] = sprintf( "%02d.%02d.%04d", $selected_date[2], $selected_date[1], $selected_date[0] );
1495
+ }
1496
+ $my_dates_for_sql = implode( ', ', $my_dates_for_sql );
1497
+
1498
+ /*
1499
+ $params = array(
1500
+ ["bktype"] => 4
1501
+ ["dates"] => 24.09.2014, 25.09.2014, 26.09.2014
1502
+ ["form"] => select-one^rangetime4^14:00 - 16:00~text^name4^Costa~text^secondname4^Rika~email^email4^rika@cost.com~text^phone4^2423432~text^address4^Ferrari~text^city4^Rome~text^postcode4^2343~select-one^country4^IT~select-one^visitors4^1~select-one^children4^0~textarea^details4^dhfjksdhfkdhjs~checkbox^term_and_condition4[]^I Accept term and conditions
1503
+ ["is_send_emeils"] => 1
1504
+ ["booking_form_type"] =>
1505
+ [wpdev_active_locale] => en_US
1506
+
1507
+ // Paramters for adding booking in the HTML:
1508
+ ["skip_page_checking_for_updating"] = 0;
1509
+ ["is_show_payment_form"] = 1;
1510
+ ); */
1511
+ // Params for creation new booking
1512
+ $params = array(
1513
+ 'bktype' => $resource_id
1514
+ , 'dates' => $my_dates_for_sql // '27.08.2014, 28.08.2014, 29.08.2014'
1515
+ , 'form' => $db_form_data_new
1516
+ , 'is_send_emeils' => $is_send_emails
1517
+ , 'booking_form_type' => ''
1518
+ , 'wpdev_active_locale' => $wpdev_active_locale
1519
+ );
1520
+ $booking_id_new = apply_bk_filter('wpbc_add_new_booking_filter' , $params );
1521
+
1522
+ $after_action_result = true;
1523
+ $after_action_message = sprintf( __( 'Booking %s has been duplicated in booking resource %s. New booking %s.' )
1524
+ , '<strong style="font-size:0.9em;">[ID=' . $booking_id . ']</strong>'
1525
+ , '<strong>' . apply_bk_filter( 'wpdev_check_for_active_language', $booking_resources_arr[ $resource_id ]['title'] ) . '</strong>'
1526
+ , '<strong style="font-size:0.9em;">[ID=' . $booking_id_new . ']</strong>'
1527
+ );
1528
+ // Everything Cool :) - booking has been duplicated
1529
+ }
1530
+
1531
+ return array( $after_action_result, $after_action_message , $db_form_data_new );
1532
+ }
1533
+
1534
+ /**
1535
+ * Action: Set payment status for the booking
1536
+ *
1537
+ * @param $booking_id_arr array or int of booking ID
1538
+ * @param $selected_payment_status string payment status of booking
1539
+ * @param $params array array of parameters: array( 'user_id' => 1 )
1540
+ *
1541
+ * @return array
1542
+ *
1543
+ * Example:
1544
+ */
1545
+ function wpbc_booking_do_action__set_payment_status( $booking_id_arr, $selected_payment_status, $params ) {
1546
+
1547
+ global $wpdb;
1548
+
1549
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
1550
+
1551
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
1552
+ if ( ! is_array( $booking_id_arr ) ) {
1553
+ $booking_id_arr = array( $booking_id_arr );
1554
+ }
1555
+ $booking_id_csd = join( ',', $booking_id_arr );
1556
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
1557
+
1558
+
1559
+ // Is send email for this action ----------------------------------------------------------------------------------
1560
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
1561
+
1562
+ // -----------------------------------------------------------------------------------------------------------------
1563
+
1564
+ if ( empty( $booking_id_csd ) ) {
1565
+ $after_action_result = false;
1566
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
1567
+
1568
+ } else {
1569
+ $after_action_result = true;
1570
+ $after_action_message = '';
1571
+
1572
+ $work_booking_id_arr = explode( ',', $booking_id_csd );
1573
+
1574
+ foreach ( $work_booking_id_arr as $selected_booking_id ) {
1575
+
1576
+ // SQL ---------------------------------------------------------------------------------------------------
1577
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.booking_id= %d ", $selected_booking_id );
1578
+ $result_bk = $wpdb->get_results( $sql );
1579
+
1580
+ $old_pay_status = '';
1581
+
1582
+ if ( ( 0 == count( $result_bk ) ) ) {
1583
+ // Error
1584
+ $after_action_result = false;
1585
+ $after_action_message .= sprintf( __( 'There is no booking %s', 'booking' )
1586
+ , ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>'
1587
+ );
1588
+ } else {
1589
+ $old_pay_status = $result_bk[0]->pay_status;
1590
+ }
1591
+
1592
+ $update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.pay_status= %s WHERE bk.booking_id= %d ", $selected_payment_status, $selected_booking_id );
1593
+ if ( false === $wpdb->query( $update_sql ) ) {
1594
+ // Error
1595
+ $after_action_result = false;
1596
+ $after_action_message .= 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
1597
+ } else {
1598
+ // Success
1599
+ $after_action_message .= sprintf( __( 'Payment status for Booking %s has been updated from %s to %s', 'booking' )
1600
+ , ' <span style="font-size:0.9em;">( ID = <strong>' . $selected_booking_id . '</strong> )</span>'
1601
+ , '<strong>"' . wpbc__format__get_payment_status_title( $old_pay_status ) . '"</strong>'
1602
+ , '<strong>"' . wpbc__format__get_payment_status_title( $selected_payment_status ) . '"</strong>'
1603
+ ) . '<br/>';
1604
+ }
1605
+
1606
+
1607
+ if ( $after_action_result ) {
1608
+ // LOG ---------------------------------------------------------------------------------------------------------
1609
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
1610
+ wpbc_add_log_info( explode( ',', $selected_booking_id ),
1611
+ $after_action_message
1612
+ . '. ' . __( 'Changed by:', 'booking' )
1613
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
1614
+ );
1615
+
1616
+ // Just action hook for some other addons
1617
+ do_action( 'wpbc_booking_action__set_payment_status', $selected_booking_id, $selected_payment_status , $old_pay_status );
1618
+
1619
+ // Emails ------------------------------------------------------------------------------------------------------
1620
+ if ( ! empty( $is_send_emeils ) ) {
1621
+ // We are sending emails about the new booking, if we have created it.
1622
+ // wpbc_send_email_modified( $selected_booking_id, $selected_resource_id, $formdata_new );
1623
+ }
1624
+ }
1625
+ }
1626
+ }
1627
+
1628
+ return array(
1629
+ 'after_action_result' => $after_action_result,
1630
+ 'after_action_message' => $after_action_message
1631
+ );
1632
+
1633
+ }
1634
+
1635
+ /**
1636
+ * Get title of the payment status
1637
+ *
1638
+ * @param $payment_status_key
1639
+ *
1640
+ * @return string
1641
+ */
1642
+ function wpbc__format__get_payment_status_title( $payment_status_key ){
1643
+
1644
+ $selected_payment_status_text = $payment_status_key;
1645
+
1646
+ $select_box_options = get_payment_status_titles();
1647
+ $select_box_options = array_flip( $select_box_options );
1648
+
1649
+ if ( ! empty( $select_box_options[ $payment_status_key ] ) ) {
1650
+ $selected_payment_status_text = $select_box_options[ $payment_status_key ];
1651
+ }
1652
+
1653
+ return $selected_payment_status_text;
1654
+ }
1655
+
1656
+
1657
+ /**
1658
+ * Action: Set Booking Cost
1659
+ *
1660
+ * @param $booking_id_arr array or int of booking ID
1661
+ * @param $booking_cost string booking cost
1662
+ * @param $params array array of parameters: array( 'user_id' => 1 )
1663
+ *
1664
+ * @return array
1665
+ *
1666
+ * Example:
1667
+ */
1668
+ function wpbc_booking_do_action__set_booking_cost( $booking_id_arr, $booking_cost, $params ) {
1669
+
1670
+ global $wpdb;
1671
+
1672
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
1673
+
1674
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
1675
+ if ( ! is_array( $booking_id_arr ) ) {
1676
+ $booking_id_arr = array( $booking_id_arr );
1677
+ }
1678
+ $booking_id_csd = join( ',', $booking_id_arr );
1679
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
1680
+
1681
+
1682
+ // Is send email for this action ----------------------------------------------------------------------------------
1683
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
1684
+
1685
+ // -----------------------------------------------------------------------------------------------------------------
1686
+
1687
+ $booking_cost = str_replace(',', '.', $booking_cost);
1688
+ $booking_cost = floatval( $booking_cost );
1689
+
1690
+
1691
+ if ( empty( $booking_id_csd ) ) {
1692
+ $after_action_result = false;
1693
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
1694
+
1695
+ } else {
1696
+ $after_action_result = true;
1697
+ $after_action_message = '';
1698
+
1699
+ $work_booking_id_arr = explode( ',', $booking_id_csd );
1700
+
1701
+ foreach ( $work_booking_id_arr as $selected_booking_id ) {
1702
+
1703
+ // SQL ---------------------------------------------------------------------------------------------------
1704
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.booking_id= %d ", $selected_booking_id );
1705
+ $result_bk = $wpdb->get_results( $sql );
1706
+
1707
+ $old_booking_cost = '';
1708
+
1709
+ if ( ( 0 == count( $result_bk ) ) ) {
1710
+ // Error
1711
+ $after_action_result = false;
1712
+ $after_action_message .= sprintf( __( 'There is no booking %s', 'booking' )
1713
+ , ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>'
1714
+ );
1715
+ } else {
1716
+ $old_booking_cost = $result_bk[0]->cost;
1717
+ }
1718
+
1719
+ $update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.cost = %f WHERE bk.booking_id = %d ", $booking_cost, $selected_booking_id );
1720
+ if ( false === $wpdb->query( $update_sql ) ) {
1721
+ // Error
1722
+ $after_action_result = false;
1723
+ $after_action_message .= 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
1724
+ } else {
1725
+ // Success
1726
+ $after_action_message .= sprintf( __( 'Cost for Booking %s has been updated from %s to %s', 'booking' )
1727
+ , ' <span style="font-size:0.9em;">( ID = <strong>' . $selected_booking_id . '</strong> )</span>'
1728
+ , '<strong>"' . wpbc__format__get_payment_status_title( $old_booking_cost ) . '"</strong>'
1729
+ , '<strong>"' . wpbc__format__get_payment_status_title( $booking_cost ) . '"</strong>'
1730
+ ) . '<br/>';
1731
+ }
1732
+
1733
+
1734
+ if ( $after_action_result ) {
1735
+ // LOG ---------------------------------------------------------------------------------------------------------
1736
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
1737
+ wpbc_add_log_info( explode( ',', $selected_booking_id ),
1738
+ $after_action_message
1739
+ . '. ' . __( 'Changed by:', 'booking' )
1740
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
1741
+ );
1742
+
1743
+ // Just action hook for some other addons
1744
+ do_action( 'wpbc_booking_action__set_booking_cost', $selected_booking_id, $booking_cost , $old_booking_cost );
1745
+
1746
+ // Emails ------------------------------------------------------------------------------------------------------
1747
+ if ( ! empty( $is_send_emeils ) ) {
1748
+
1749
+ if ( get_bk_option( 'booking_send_email_on_cost_change' ) == 'On' ) { //FixIn: 8.1.3.30
1750
+ $booking_data = apply_bk_filter( 'wpbc_get_booking_data', $selected_booking_id );
1751
+ wpbc_send_email_modified( $selected_booking_id, $booking_data['type'], $booking_data['form'] );
1752
+ }
1753
+ }
1754
+
1755
+ }
1756
+ }
1757
+ }
1758
+
1759
+ return array(
1760
+ 'after_action_result' => $after_action_result,
1761
+ 'after_action_message' => $after_action_message
1762
+ );
1763
+ }
1764
+
1765
+
1766
+ /**
1767
+ * Action: Send Payment request
1768
+ *
1769
+ * @param $booking_id_arr array or int of booking ID
1770
+ * @param $booking_cost string booking cost
1771
+ * @param $params array array of parameters: array( 'user_id' => 1 )
1772
+ *
1773
+ * @return array
1774
+ */
1775
+ function wpbc_booking_do_action__send_payment_request($booking_id_arr, $reason_of_action, $params ) {
1776
+ global $wpdb;
1777
+
1778
+ make_bk_action('check_multiuser_params_for_client_side_by_user_id', $params['user_id'] );
1779
+
1780
+ // Get ID list of bookings, like '1' or '3,7,9' ----------------------------------------------------------------
1781
+ if ( ! is_array( $booking_id_arr ) ) {
1782
+ $booking_id_arr = array( $booking_id_arr );
1783
+ }
1784
+ $booking_id_csd = join( ',', $booking_id_arr );
1785
+ $booking_id_csd = wpbc_clean_digit_or_csd( $booking_id_csd );
1786
+
1787
+
1788
+ // Is send email for this action ----------------------------------------------------------------------------------
1789
+ $is_send_emeils = wpbc_ajx__user_request_option__is_send_emails( $params['user_id'] );
1790
+
1791
+ // -----------------------------------------------------------------------------------------------------------------
1792
+
1793
+ if ( empty( $booking_id_csd ) ) {
1794
+ $after_action_result = false;
1795
+ $after_action_message = __( 'No bookings have been selected. Please select one or more bookings.', 'booking' );
1796
+
1797
+ } else {
1798
+ $after_action_result = true;
1799
+ $after_action_message = '';
1800
+
1801
+ $work_booking_id_arr = explode( ',', $booking_id_csd );
1802
+
1803
+ foreach ( $work_booking_id_arr as $selected_booking_id ) {
1804
+
1805
+ // SQL ---------------------------------------------------------------------------------------------------
1806
+ $sql = $wpdb->prepare( "SELECT * FROM {$wpdb->prefix}booking as bk WHERE bk.booking_id= %d ", $selected_booking_id );
1807
+ $result_bk = $wpdb->get_results( $sql );
1808
+
1809
+ $old_booking_cost = '';
1810
+
1811
+ if ( ( 0 == count( $result_bk ) ) ) {
1812
+ // Error
1813
+ $after_action_result = false;
1814
+ $after_action_message .= sprintf( __( 'There is no booking %s', 'booking' )
1815
+ , ' <span style="font-size:0.9em;">( ID = <strong>' . $booking_id_csd . '</strong> )</span>'
1816
+ );
1817
+ } else {
1818
+ $old_booking_cost = $result_bk[0]->cost;
1819
+
1820
+ $is_email_payment_request_adress = get_bk_option( 'booking_is_email_payment_request_adress' );
1821
+ if ( 'Off' != $is_email_payment_request_adress ) {
1822
+
1823
+ $reason_of_action = htmlspecialchars( str_replace( '\"', '"', $reason_of_action ) );
1824
+ $reason_of_action = str_replace( "\'", "'", $reason_of_action );
1825
+
1826
+ foreach ( $result_bk as $res ) {
1827
+
1828
+ $is_send = wpbc_send_email_payment_request( $res->booking_id, $res->booking_type, $res->form, $reason_of_action );
1829
+
1830
+ if ( $is_send ) {
1831
+ // Update Payment request number
1832
+ $pay_request_numer = $res->pay_request + 1;
1833
+ $update_sql = $wpdb->prepare( "UPDATE {$wpdb->prefix}booking AS bk SET bk.pay_request= %d WHERE bk.booking_id= %d ", $pay_request_numer, $res->booking_id );
1834
+ if ( false === $wpdb->query( $update_sql ) ) {
1835
+ // Error
1836
+ $after_action_result = false;
1837
+ $after_action_message .= 'Error during updating to DB. File:' . __FILE__ . ' on line: ' . __LINE__;
1838
+ } else {
1839
+ // Success
1840
+ $after_action_message .= sprintf( __( 'Payment request for Booking %s has been sent. Cost for payment: %s', 'booking' )
1841
+ , ' <span style="font-size:0.9em;">( ID = <strong>' . $selected_booking_id . '</strong> )</span>'
1842
+ , '<strong>"' . wpbc__format__get_payment_status_title( $old_booking_cost ) . '"</strong>'
1843
+ ) . '<br/>';
1844
+ }
1845
+ }
1846
+ }
1847
+ }
1848
+ }
1849
+
1850
+ if ( $after_action_result ) {
1851
+ // LOG ---------------------------------------------------------------------------------------------------------
1852
+ $curr_user = get_user_by( 'id', (int) $params['user_id'] );
1853
+ wpbc_add_log_info( explode( ',', $selected_booking_id ),
1854
+ $after_action_message
1855
+ . '. ' . __( 'Send by:', 'booking' )
1856
+ . ' ' . $curr_user->first_name . ' ' . $curr_user->last_name . ' (' . $curr_user->user_email . ')'
1857
+ );
1858
+
1859
+ // Just action hook for some other addons
1860
+ do_action( 'wpbc_booking_action__send_payment_request', $selected_booking_id, $reason_of_action , $old_booking_cost );
1861
+
1862
+ // Emails ------------------------------------------------------------------------------------------------------
1863
+ /*
1864
+ if ( ! empty( $is_send_emeils ) ) {
1865
+
1866
+ if ( get_bk_option( 'booking_send_email_on_cost_change' ) == 'On' ) {
1867
+ $booking_data = apply_bk_filter( 'wpbc_get_booking_data', $selected_booking_id );
1868
+ wpbc_send_email_modified( $selected_booking_id, $booking_data['type'], $booking_data['form'] );
1869
+ }
1870
+ }
1871
+ */
1872
+ }
1873
+ }
1874
+
1875
+ }
1876
+
1877
+ return array(
1878
+ 'after_action_result' => $after_action_result,
1879
+ 'after_action_message' => $after_action_message
1880
+ );
1881
+ }
1882
+
1883
+
1884
+ function wpbc_booking_do_action__import_google_calendar( $request_params, $params ) {
1885
+
1886
+ $user_bk_id = (int) $params['user_id'];
1887
+
1888
+ global $wpdb;
1889
+
1890
+ $wpbc_Google_Calendar = new WPBC_Google_Calendar();
1891
+
1892
+ $wpbc_Google_Calendar->setSilent();
1893
+
1894
+ $wpbc_Google_Calendar->set_timezone( get_bk_option('booking_gcal_timezone') );
1895
+
1896
+ $wpbc_Google_Calendar->set_events_from_with_array( array(
1897
+ $request_params['booking_gcal_events_from'],
1898
+ $request_params['booking_gcal_events_from_offset'],
1899
+