Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package blosc2 for openSUSE:Factory checked 
in at 2024-03-25 21:07:47
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/blosc2 (Old)
 and      /work/SRC/openSUSE:Factory/.blosc2.new.1905 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "blosc2"

Mon Mar 25 21:07:47 2024 rev:12 rq:1160818 version:2.13.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/blosc2/blosc2.changes    2024-02-08 
19:02:12.267175787 +0100
+++ /work/SRC/openSUSE:Factory/.blosc2.new.1905/blosc2.changes  2024-03-25 
21:09:34.476215250 +0100
@@ -1,0 +2,13 @@
+Fri Mar 22 19:33:40 UTC 2024 - Ben Greiner <[email protected]>
+
+- Update to 2.13.2
+  * Better checking for SSSE3 availability in Visual Studio.
+    Probably fixes #546 too. Thanks to @t20100 (Thomas Vincent) for
+    the PR (#586).
+  * Documented the globally registered filters and codecs. See:
+    
https://www.blosc.org/c-blosc2/reference/utility_variables.html#codes-for-filters
+    
https://www.blosc.org/c-blosc2/reference/utility_variables.html#compressor-codecs
+- Reenable previously failing but never acknowledged test
+  * gh#Blosc/c-blosc2#464
+
+-------------------------------------------------------------------

Old:
----
  c-blosc2-2.13.1.tar.gz

New:
----
  c-blosc2-2.13.2.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ blosc2.spec ++++++
--- /var/tmp/diff_new_pack.EMzjBH/_old  2024-03-25 21:09:35.464251527 +0100
+++ /var/tmp/diff_new_pack.EMzjBH/_new  2024-03-25 21:09:35.468251674 +0100
@@ -20,7 +20,7 @@
 %define major 2
 %define libname lib%{name}-%{major}
 Name:           blosc2
-Version:        2.13.1
+Version:        2.13.2
 Release:        0
 Summary:        A fast, compressed, persistent binary data store library for C
 License:        BSD-2-Clause AND BSD-3-Clause AND MIT
@@ -70,7 +70,7 @@
 for %{libname}.
 
 %prep
-%autosetup -p1 -n C-Blosc2-%{version}
+%autosetup -p1 -n c-blosc2-%{version}
 
 %build
 %cmake \
@@ -93,9 +93,7 @@
 export LD_PRELOAD="$LD_PRELOAD  %{buildroot}%{_libdir}/libblosc2.so  
%{buildroot}%{_libdir}/libblosc2.so.%{major}"
 # https://github.com/Blosc/c-blosc2/issues/432
 single_thread_tests='test_sframe|test_schunk_frame|test_fill_special'
-# https://github.com/Blosc/c-blosc2/issues/464
-failing_tests='test_contexts'
-%ctest --exclude-regex "${single_thread_tests}|${failing_tests}"
+%ctest --exclude-regex "${single_thread_tests}"
 pushd build
 ctest --tests-regex "${single_thread_tests}"
 popd

++++++ c-blosc2-2.13.1.tar.gz -> c-blosc2-2.13.2.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/ANNOUNCE.md 
new/c-blosc2-2.13.2/ANNOUNCE.md
--- old/C-Blosc2-2.13.1/ANNOUNCE.md     2024-01-25 11:19:16.000000000 +0100
+++ new/c-blosc2-2.13.2/ANNOUNCE.md     2024-02-07 14:22:21.000000000 +0100
@@ -1,9 +1,13 @@
-# Announcing C-Blosc2 2.13.1
+# Announcing C-Blosc2 2.13.2
 A fast, compressed and persistent binary data store library for C.
 
 ## What is new?
 
-This is a patch release for fixing a bug regarding the included files in 
`b2nd.h`.
+This is a patch release for improving of SSSE3 detection on Visual Studio.
+Also, documentation for the globally registered filters and codecs has been
+added:
+https://www.blosc.org/c-blosc2/reference/utility_variables.html#codes-for-filters
+https://www.blosc.org/c-blosc2/reference/utility_variables.html#compressor-codecs
 
 For more info, please see the release notes in:
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/RELEASE_NOTES.md 
new/c-blosc2-2.13.2/RELEASE_NOTES.md
--- old/C-Blosc2-2.13.1/RELEASE_NOTES.md        2024-01-25 11:19:16.000000000 
+0100
+++ new/c-blosc2-2.13.2/RELEASE_NOTES.md        2024-02-07 14:22:21.000000000 
+0100
@@ -1,6 +1,17 @@
 Release notes for C-Blosc2
 ==========================
 
+Changes from 2.13.1 to 2.13.2
+=============================
+
+* Better checking for `SSSE3` availability in Visual Studio.  Probably fixes 
#546 too.
+  Thanks to @t20100 (Thomas Vincent) for the PR (#586).
+
+* Documented the globally registered filters and codecs.  See:
+  
https://www.blosc.org/c-blosc2/reference/utility_variables.html#codes-for-filters
+  
https://www.blosc.org/c-blosc2/reference/utility_variables.html#compressor-codecs
+
+
 Changes from 2.13.0 to 2.13.1
 =============================
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/blosc/frame.c 
new/c-blosc2-2.13.2/blosc/frame.c
--- old/C-Blosc2-2.13.1/blosc/frame.c   2024-01-25 11:19:16.000000000 +0100
+++ new/c-blosc2-2.13.2/blosc/frame.c   2024-02-07 14:22:21.000000000 +0100
@@ -1358,7 +1358,7 @@
     schunk->metalayers[nmetalayer] = metalayer;
 
     // Populate the metalayer string
-    int8_t nslen = *idxp & (uint8_t)0x1F;
+    uint8_t nslen = *idxp & (uint8_t)0x1F;
     idxp += 1;
     header_pos += nslen;
     if (header_len < header_pos) {
@@ -1538,7 +1538,7 @@
     schunk->vlmetalayers[nmetalayer] = metalayer;
 
     // Populate the metalayer string
-    int8_t nslen = *idxp & (uint8_t)0x1F;
+    uint8_t nslen = *idxp & (uint8_t)0x1F;
     idxp += 1;
     trailer_pos += nslen;
     if (trailer_len < trailer_pos) {
@@ -1885,6 +1885,11 @@
       }
       if (chunk_cbytes > (int32_t)prev_alloc) {
         data_chunk = realloc(data_chunk, chunk_cbytes);
+        if (data_chunk == NULL) {
+          BLOSC_TRACE_ERROR("Cannot realloc space for the data_chunk.");
+          rc = BLOSC2_ERROR_MEMORY_ALLOC;
+          break;
+        }
         prev_alloc = chunk_cbytes;
       }
       if (!frame->sframe) {
@@ -3119,7 +3124,7 @@
   }
 
   // Add the new offset
-  int64_t sframe_chunk_id;
+  int64_t sframe_chunk_id = -1;
   if (frame->sframe) {
     if (offsets[nchunk] < 0) {
       sframe_chunk_id = -1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/doc/Doxyfile 
new/c-blosc2-2.13.2/doc/Doxyfile
--- old/C-Blosc2-2.13.1/doc/Doxyfile    2024-01-25 11:19:16.000000000 +0100
+++ new/c-blosc2-2.13.2/doc/Doxyfile    2024-02-07 14:22:21.000000000 +0100
@@ -7,7 +7,7 @@
 CASE_SENSE_NAMES     = NO
 GENERATE_HTML        = NO
 GENERATE_XML         = YES
-RECURSIVE            = NO
+RECURSIVE            = YES
 QUIET                = YES
 JAVADOC_AUTOBRIEF    = YES
 WARN_IF_UNDOCUMENTED = NO
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/doc/reference/utility_variables.rst 
new/c-blosc2-2.13.2/doc/reference/utility_variables.rst
--- old/C-Blosc2-2.13.1/doc/reference/utility_variables.rst     2024-01-25 
11:19:16.000000000 +0100
+++ new/c-blosc2-2.13.2/doc/reference/utility_variables.rst     2024-02-07 
14:22:21.000000000 +0100
@@ -33,6 +33,14 @@
 
 .. doxygenenumvalue:: BLOSC_TRUNC_PREC
 
+.. doxygenenumvalue:: BLOSC_FILTER_NDCELL
+
+.. doxygenenumvalue:: BLOSC_FILTER_NDMEAN
+
+.. doxygenenumvalue:: BLOSC_FILTER_BYTEDELTA
+
+.. doxygenenumvalue:: BLOSC_FILTER_INT_TRUNC
+
 
 Compressor codecs
 -----------------
@@ -46,6 +54,18 @@
 
 .. doxygenenumvalue:: BLOSC_ZSTD
 
+.. doxygenenumvalue:: BLOSC_CODEC_NDLZ
+
+.. doxygenenumvalue:: BLOSC_CODEC_ZFP_FIXED_ACCURACY
+
+.. doxygenenumvalue:: BLOSC_CODEC_ZFP_FIXED_PRECISION
+
+.. doxygenenumvalue:: BLOSC_CODEC_ZFP_FIXED_RATE
+
+.. doxygenenumvalue:: BLOSC_CODEC_OPENHTJ2K
+
+.. doxygenenumvalue:: BLOSC_CODEC_GROK
+
 
 Compressor names
 ----------------
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/examples/CMakeLists.txt 
new/c-blosc2-2.13.2/examples/CMakeLists.txt
--- old/C-Blosc2-2.13.1/examples/CMakeLists.txt 2024-01-25 11:19:16.000000000 
+0100
+++ new/c-blosc2-2.13.2/examples/CMakeLists.txt 2024-02-07 14:22:21.000000000 
+0100
@@ -1,7 +1,7 @@
 # Examples with correspondingly named source files
 set(EXAMPLES contexts instrument_codec delta_schunk_ex multithread simple 
frame_metalayers
     noinit find_roots schunk_simple frame_simple schunk_postfilter urcodecs 
urfilters frame_vlmetalayers
-    sframe_simple frame_backed_schunk compress_file frame_offset 
frame_roundtrip get_set_slice get_blocksize)
+    sframe_simple frame_backed_schunk compress_file decompress_file 
frame_offset frame_roundtrip get_set_slice get_blocksize)
 
 add_subdirectory(b2nd)
 
@@ -44,8 +44,12 @@
         foreach(example ${EXAMPLES})
             if(example STREQUAL compress_file)
                 add_test(NAME test_example_${example}
-                    COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} 
$<TARGET_FILE:${example}>
-                        "${PROJECT_BINARY_DIR}/CMakeCache.txt" 
CMakeCache.b2frame)
+                         COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} 
$<TARGET_FILE:${example}>
+                         "${PROJECT_BINARY_DIR}/CMakeCache.txt" 
CMakeCache.b2frame)
+            elseif(example STREQUAL decompress_file)
+                add_test(NAME test_example_${example}
+                         COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} 
$<TARGET_FILE:${example}>
+                         CMakeCache.b2frame CMakeCache-2.txt)
             else()
                 add_test(NAME test_example_${example}
                     COMMAND ${CMAKE_CROSSCOMPILING_EMULATOR} 
$<TARGET_FILE:${example}>)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/examples/decompress_file.c 
new/c-blosc2-2.13.2/examples/decompress_file.c
--- old/C-Blosc2-2.13.1/examples/decompress_file.c      1970-01-01 
01:00:00.000000000 +0100
+++ new/c-blosc2-2.13.2/examples/decompress_file.c      2024-02-07 
14:22:21.000000000 +0100
@@ -0,0 +1,89 @@
+/*
+  Copyright (c) 2024  The Blosc Development Team <[email protected]>
+  https://blosc.org
+  License: BSD 3-Clause (see LICENSE.txt)
+
+  Example program demonstrating use of the Blosc filter from C code.
+
+  To compile this program:
+
+  $ gcc decompress_file.c -o decompress_file -lblosc2
+
+  Example usage for compression/decompression verification:
+
+  $ sha512sum compress_file
+  385c93c..feaf38dbec  compress_file
+  $ ./compress_file compress_file compress_file.bl2
+  Blosc version info: 2.13.2.dev ($Date:: 2023-01-25 #$)
+  Compression ratio: 5.1 MB -> 2.0 MB (2.5x)
+  Compression time: 0.07 s, 72.8 MB/s
+  $ ./decompress_file compress_file.bl2 compress_file.1
+  Blosc version info: 2.13.2.dev ($Date:: 2023-01-25 #$)
+  Decompression ratio: 2.0 MB -> 5.1 MB (0.4x)
+  Decompression time: 0.0343 s, 148.5 MB/s
+  $ sha512sum compress_file.1
+  385c93c..feaf38dbec  compress_file.1
+
+ */
+
+#include <stdio.h>
+#include <blosc2.h>
+
+#define KB  1024.
+#define MB  (1024*KB)
+#define GB  (1024*MB)
+
+int main(int argc, char* argv[]) {
+  blosc2_init();
+  static char* data;
+  int32_t dsize;
+  int64_t nbytes, cbytes;
+  blosc_timestamp_t last, current;
+  double ttotal;
+
+  if (argc != 3) {
+    fprintf(stderr, "Usage: decompress_file input_file.b2frame output_file\n");
+    return -1;
+  }
+
+  printf("Blosc version info: %s (%s)\n",
+         BLOSC2_VERSION_STRING, BLOSC2_VERSION_DATE);
+
+  /* Open an existing super-chunk that is on-disk (frame). */
+  blosc2_schunk* schunk = blosc2_schunk_open(argv[1]);
+
+  data = (char*)malloc(schunk->chunksize);
+
+  // Decompress the file
+  blosc_set_timestamp(&last);
+  FILE* foutput = fopen(argv[2], "wb");
+  if (foutput == NULL) {
+    printf("Output file cannot be open.");
+    exit(1);
+  }
+  for (int nchunk = 0; nchunk < schunk->nchunks; nchunk++) {
+    dsize = blosc2_schunk_decompress_chunk(schunk, nchunk, data, 
schunk->chunksize);
+    if (dsize < 0) {
+      fprintf(stderr, "Decompression error.  Error code: %d\n", dsize);
+      return dsize;
+    }
+    fwrite(data, dsize, 1, foutput);
+  }
+  fclose(foutput);
+
+  /* Gather some info */
+  nbytes = schunk->nbytes;
+  cbytes = schunk->cbytes;
+  blosc_set_timestamp(&current);
+  ttotal = blosc_elapsed_secs(last, current);
+  printf("Decompression ratio: %.1f MB -> %.1f MB (%.1fx)\n",
+         (float)cbytes / MB, (float)nbytes / MB, (1. * (float)cbytes) / 
(float)nbytes);
+  printf("Decompression time: %.3g s, %.1f MB/s\n",
+         ttotal, (float)nbytes / (ttotal * MB));
+
+  /* Free resources */
+  free(data);
+  blosc2_schunk_free(schunk);
+  blosc2_destroy();
+  return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/include/blosc2/codecs-registry.h 
new/c-blosc2-2.13.2/include/blosc2/codecs-registry.h
--- old/C-Blosc2-2.13.1/include/blosc2/codecs-registry.h        2024-01-25 
11:19:16.000000000 +0100
+++ new/c-blosc2-2.13.2/include/blosc2/codecs-registry.h        2024-02-07 
14:22:21.000000000 +0100
@@ -19,11 +19,22 @@
 
 enum {
     BLOSC_CODEC_NDLZ = 32,
+    //!< Simple Lempel-Ziv compressor for NDim data. Experimental, mainly for 
teaching purposes.
     BLOSC_CODEC_ZFP_FIXED_ACCURACY = 33,
+    //!< ZFP compressor for fixed accuracy mode. The desired accuracy is set 
in `compcode_meta`.
+    //!< See 
https://github.com/Blosc/c-blosc2/blob/main/plugins/codecs/zfp/README.md
     BLOSC_CODEC_ZFP_FIXED_PRECISION = 34,
+    //!< ZFP compressor for fixed precision. The desired precision is set in 
`compcode_meta`.
+    //!< See 
https://github.com/Blosc/c-blosc2/blob/main/plugins/codecs/zfp/README.md
     BLOSC_CODEC_ZFP_FIXED_RATE = 35,
+    //!< ZFP compressor for fixed precision. The desired rate is set in 
`compcode_meta`.
+    //!< See 
https://github.com/Blosc/c-blosc2/blob/main/plugins/codecs/zfp/README.md
     BLOSC_CODEC_OPENHTJ2K = 36,
+    //!< OpenHTJ2K compressor for JPEG 2000 HT.
+    //!< See https://github.com/Blosc/blosc2_openhtj2k
     BLOSC_CODEC_GROK = 37,
+    //!< Grok compressor for JPEG 2000.
+    //!< See https://github.com/Blosc/blosc2_grok
 };
 
 void register_codecs(void);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/include/blosc2/filters-registry.h 
new/c-blosc2-2.13.2/include/blosc2/filters-registry.h
--- old/C-Blosc2-2.13.1/include/blosc2/filters-registry.h       2024-01-25 
11:19:16.000000000 +0100
+++ new/c-blosc2-2.13.2/include/blosc2/filters-registry.h       2024-02-07 
14:22:21.000000000 +0100
@@ -17,10 +17,20 @@
 
 enum {
     BLOSC_FILTER_NDCELL = 32,
+    //!< Simple filter for grouping NDim cell data together.
+    //!< See 
https://github.com/Blosc/c-blosc2/blob/main/plugins/filters/ndcell/README.md
     BLOSC_FILTER_NDMEAN = 33,
-    BLOSC_FILTER_BYTEDELTA_BUGGY = 34, // buggy version. See #524
-    BLOSC_FILTER_BYTEDELTA = 35,  // fixed version
-    BLOSC_FILTER_INT_TRUNC = 36,  // truncate int precision; positive values 
in cparams.filters_meta will keep bits; negative values will reduce bits.
+    //!< Simple filter for replacing content of a NDim cell with its mean 
value.
+    //!< See 
https://github.com/Blosc/c-blosc2/blob/main/plugins/filters/ndmean/README.md
+    BLOSC_FILTER_BYTEDELTA_BUGGY = 34,
+    // buggy version. See #524
+    BLOSC_FILTER_BYTEDELTA = 35,
+    //!< Byteshuffle + delta.  Sometimes this can represent an advantage over
+    //!< @ref BLOSC_SHUFFLE or @ref BLOSC_BITSHUFFLE.
+    //!< See https://www.blosc.org/posts/bytedelta-enhance-compression-toolset/
+    BLOSC_FILTER_INT_TRUNC = 36,
+    //!< Truncate int precision; positive values in `filter_meta` will keep 
bits; negative values will zero bits.
+    //!< This is similar to @ref BLOSC_TRUNC_PREC, but for integers instead of 
floating point data.
 };
 
 void register_filters(void);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/C-Blosc2-2.13.1/include/blosc2.h 
new/c-blosc2-2.13.2/include/blosc2.h
--- old/C-Blosc2-2.13.1/include/blosc2.h        2024-01-25 11:19:16.000000000 
+0100
+++ new/c-blosc2-2.13.2/include/blosc2.h        2024-02-07 14:22:21.000000000 
+0100
@@ -83,10 +83,10 @@
 /* Version numbers */
 #define BLOSC2_VERSION_MAJOR    2    /* for major interface/format changes  */
 #define BLOSC2_VERSION_MINOR    13   /* for minor interface/format changes  */
-#define BLOSC2_VERSION_RELEASE  1    /* for tweaks, bug-fixes, or development 
*/
+#define BLOSC2_VERSION_RELEASE  2    /* for tweaks, bug-fixes, or development 
*/
 
-#define BLOSC2_VERSION_STRING   "2.13.1"  /* string version.  Sync with above! 
*/
-#define BLOSC2_VERSION_DATE     "$Date:: 2023-01-25 #$"    /* date version */
+#define BLOSC2_VERSION_STRING   "2.13.2"  /* string version.  Sync with above! 
*/
+#define BLOSC2_VERSION_DATE     "$Date:: 2023-02-07 #$"    /* date version */
 
 
 /* The maximum number of dimensions for Blosc2 NDim arrays */
@@ -251,7 +251,7 @@
   BLOSC_BITSHUFFLE = 2,  //!< Bit-wise shuffle.
 #endif // BLOSC_H
   BLOSC_DELTA = 3,       //!< Delta filter.
-  BLOSC_TRUNC_PREC = 4,  //!< Truncate mantissa precision; positive values in 
cparams.filters_meta will keep bits; negative values will reduce bits.
+  BLOSC_TRUNC_PREC = 4,  //!< Truncate mantissa precision; positive values in 
`filters_meta` will keep bits; negative values will zero bits.
   BLOSC_LAST_FILTER = 5, //!< sentinel
   BLOSC_LAST_REGISTERED_FILTER = BLOSC2_GLOBAL_REGISTERED_FILTERS_START + 
BLOSC2_GLOBAL_REGISTERED_FILTERS - 1,
   //!< Determine the last registered filter. It is used to check if a filter 
is registered or not.
@@ -2505,6 +2505,11 @@
 BLOSC_EXPORT int blosc2_get_slice_nchunks(blosc2_schunk* schunk, int64_t 
*start, int64_t *stop, int64_t **chunks_idx);
 
 
+/*********************************************************************
+  Private functions, these are here for convenience,
+  and are not meant to be included in public docs
+*********************************************************************/
+
 // Private function needed in b2nd.h for deserializing meta
 static inline void swap_store(void *dest, const void *pa, int size) {
   uint8_t *pa_ = (uint8_t *) pa;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/C-Blosc2-2.13.1/plugins/filters/bytedelta/bytedelta.c 
new/c-blosc2-2.13.2/plugins/filters/bytedelta/bytedelta.c
--- old/C-Blosc2-2.13.1/plugins/filters/bytedelta/bytedelta.c   2024-01-25 
11:19:16.000000000 +0100
+++ new/c-blosc2-2.13.2/plugins/filters/bytedelta/bytedelta.c   2024-02-07 
14:22:21.000000000 +0100
@@ -18,7 +18,15 @@
 #include <stdint.h>
 #include <stdio.h>
 
-#if defined __i386__ || defined _M_IX86 || defined __x86_64__ || defined _M_X64
+/* Define the __SSSE3__ symbol if compiling with Visual C++ and
+   targeting the minimum architecture level.
+*/
+#if !defined(__SSSE3__) && defined(_MSC_VER) && \
+    (defined(_M_X64) || (defined(_M_IX86) && _M_IX86_FP >= 2))
+  #define __SSSE3__
+#endif
+
+#if defined(__SSSE3__)
 // SSSE3 code path for x64/x64
 #define CPU_HAS_SIMD 1
 #include <emmintrin.h>

Reply via email to