FreeBSD Bugzilla – Attachment 243172 Details for
Bug 272311
graphics/exiv2: upgrade to v0.28
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
graphics/exiv2: upgrade to 0.28, take #5, fix _MSVC_LANG -Wundef warnings, accepted upstream
0001-graphics-exiv2-upgrade-to-0.28.patch (text/plain), 15.93 KB, created by
Matthias Andree
on 2023-07-03 09:58:13 UTC
(
hide
)
Description:
graphics/exiv2: upgrade to 0.28, take #5, fix _MSVC_LANG -Wundef warnings, accepted upstream
Filename:
MIME Type:
Creator:
Matthias Andree
Created:
2023-07-03 09:58:13 UTC
Size:
15.93 KB
patch
obsolete
>From 428f56b0c676abb67ff705383257f9fd0133d31f Mon Sep 17 00:00:00 2001 >From: Matthias Andree <mandree@FreeBSD.org> >Date: Sat, 1 Jul 2023 13:58:04 +0200 >Subject: [PATCH] graphics/exiv2: upgrade to 0.28 > >Add DOCS and DOXYGEN options to allow building/installing >extra documentation. > >Cherry-pick a few fixes from the upstream Git repo, >and add one FreeBSD-specific fix to libprocinfo interface >that caused crashes in the test rig, and add >sscanf/printf vs type fixes. > >Fix a few things in exiv2 and Adobe XMP SDK found while >test-compiling exiv2 consumers. > >All local fixes to .cpp filed with upstream repo as pull req. > >While here, reformat/rearrange to please portlint and >portfmt/portclippy. > >Assisted and >Reviewed by: diizzy@ >PR: 272311 >Differential Revision: https://reviews.freebsd.org/D40828 >--- > graphics/exiv2/Makefile | 71 +++++++++------- > graphics/exiv2/distinfo | 18 +++- > .../files/patch-_MSVC_LANG-warning-Wundef | 84 +++++++++++++++++++ > .../exiv2/files/patch-cmake_mainSetup.cmake | 4 +- > graphics/exiv2/files/patch-src_version.cpp | 16 ++++ > .../exiv2/files/patch-xmpsdk_src_XMPMeta.cpp | 15 ++++ > .../exiv2/files/patch-xmpsdk_src_XMPUtils.cpp | 17 ++++ > graphics/exiv2/pkg-plist | 12 +-- > 8 files changed, 194 insertions(+), 43 deletions(-) > create mode 100644 graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef > create mode 100644 graphics/exiv2/files/patch-src_version.cpp > create mode 100644 graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp > create mode 100644 graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp > >diff --git a/graphics/exiv2/Makefile b/graphics/exiv2/Makefile >index 8dd128d14cf7..5073ed0c0558 100644 >--- a/graphics/exiv2/Makefile >+++ b/graphics/exiv2/Makefile >@@ -1,10 +1,20 @@ > PORTNAME= exiv2 >-DISTVERSION= 0.27.6 >+DISTVERSION= 0.28.0 > DISTVERSIONSUFFIX= -Source > PORTEPOCH= 1 > CATEGORIES= graphics > MASTER_SITES= https://github.com/Exiv2/exiv2/releases/download/v${DISTVERSION}/ > >+# https://git.alpinelinux.org/aports/log/community/exiv2 >+# https://github.com/Exiv2/exiv2/compare/v0.28.0...0.28.x >+PATCH_SITES= https://github.com/Exiv2/exiv2/commit/ >+PATCHFILES= 16c1cd7da0cd159ee2d53c39088564edaf046c77.patch:-p1 \ >+ 2876c8c5f70f71b5b51b0f26b31dd0dc08583212.patch:-p1 \ >+ 3664f5b826f5688b82470235d1dceef0c9c4c47d.patch:-p1 \ >+ b4f435a4ecceba0ef3a785dbe8eead6f55f49cc1.patch:-p1 \ >+ c5c4a54d4cf4ea544c30fe6780dab2755f404300.patch:-p1 \ >+ f47e7bd666aa063d016bdf00ea8f62c97a5b5a7a.patch:-p1 >+ > MAINTAINER= multimedia@FreeBSD.org > COMMENT= Exif, IPTC, and XMP metadata manipulation library and tools > WWW= https://www.exiv2.org/ >@@ -12,47 +22,48 @@ WWW= https://www.exiv2.org/ > LICENSE= GPLv2+ > LICENSE_FILE= ${WRKSRC}/COPYING > >-LIB_DEPENDS= libexpat.so:textproc/expat2 >-TEST_DEPENDS= bash:shells/bash >-TEST_LIB_DEPENDS= libgtest.so:devel/googletest >+LIB_DEPENDS= libbrotlidec.so:archivers/brotli \ >+ libexpat.so:textproc/expat2 \ >+ libinih.so:devel/inih \ >+ libpng.so:graphics/png > >-USES= cmake compiler:c++11-lang cpe dos2unix gettext-tools pathfix \ >- python:test localbase:ldflags >-USE_LDCONFIG= yes >+USES= cmake compiler:c++17-lang cpe dos2unix gettext-tools iconv \ >+ localbase:ldflags pathfix shebangfix > DOS2UNIX_FILES= cmake/compilerFlags.cmake >+USE_LDCONFIG= yes >+SHEBANG_FILES= fuzz/mkdictionary.py tests/runner.py > >-TEST_TARGET= tests >+CMAKE_ARGS= -DPython${PYTHON_MAJOR_VER}_EXECUTABLE:FILEPATH="${PYTHON_CMD}" > > CMAKE_ON= EXIV2_ENABLE_VIDEO >-CMAKE_OFF= EXIV2_ENABLE_LIBXMP >+CMAKE_OFF= EXIV2_ENABLE_EXTERNAL_XMP > >-OPTIONS_DEFINE= NLS SAMPLE TEST >-OPTIONS_SUB= yes >-TEST_IMPLIES= SAMPLE >+LDFLAGS_mips= -lintl >+LDFLAGS_mips64= -lintl > >-NLS_CMAKE_BOOL= EXIV2_ENABLE_NLS >-NLS_USES= gettext-runtime >- >-SAMPLE_DESC= Include sample applications >-SAMPLE_CMAKE_BOOL= EXIV2_BUILD_SAMPLES >+WRKSRC= ${WRKDIR}/${PORTNAME}-${DISTVERSION}-Source > >-TEST_CMAKE_BOOL= EXIV2_BUILD_UNIT_TESTS >+OPTIONS_DEFINE= DOCS DOXYGEN NLS SAMPLE TEST >+OPTIONS_SUB= yes > >-PATHFIX_CMAKELISTSTXT= CMakeChecks.txt >+SAMPLE_DESC= Include sample applications > >-WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION}-Source >+DOXYGEN_BUILD_DEPENDS= dot:graphics/graphviz \ >+ doxygen:devel/doxygen >+DOXYGEN_CMAKE_BOOL= EXIV2_BUILD_DOC >+DOXYGEN_ALL_TARGET= all doc >+DOXYGEN_PORTDOCS= * > >-.include <bsd.port.options.mk> >+NLS_USES= gettext-runtime >+NLS_CMAKE_BOOL= EXIV2_ENABLE_NLS > >-LDFLAGS_mips= -lintl >-LDFLAGS_mips64= -lintl >+SAMPLE_CMAKE_BOOL= EXIV2_BUILD_SAMPLES > >-post-patch: >- @${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|' \ >- ${WRKSRC}/CMakeLists.txt >- @${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|' \ >- ${WRKSRC}/test/Makefile >- @${REINPLACE_CMD} -e 's|python3|${PYTHON_CMD}|' \ >- ${WRKSRC}/test/functions.source >+TEST_IMPLIES= SAMPLE >+TEST_LIB_DEPENDS= libgtest.so:devel/googletest >+TEST_TEST_DEPENDS= bash:shells/bash >+TEST_USES= python:build,test >+TEST_CMAKE_BOOL= EXIV2_BUILD_UNIT_TESTS >+TEST_TEST_TARGET= test > > .include <bsd.port.mk> >diff --git a/graphics/exiv2/distinfo b/graphics/exiv2/distinfo >index cfb011d7e28a..7e5d91c42aac 100644 >--- a/graphics/exiv2/distinfo >+++ b/graphics/exiv2/distinfo >@@ -1,3 +1,15 @@ >-TIMESTAMP = 1674215187 >-SHA256 (exiv2-0.27.6-Source.tar.gz) = 4c192483a1125dc59a3d70b30d30d32edace9e14adf52802d2f853abf72db8a6 >-SIZE (exiv2-0.27.6-Source.tar.gz) = 32280263 >+TIMESTAMP = 1688222531 >+SHA256 (exiv2-0.28.0-Source.tar.gz) = 89af3b5ef7277753ef7a7b5374ae017c6b9e304db3b688f1948e73e103491f3d >+SIZE (exiv2-0.28.0-Source.tar.gz) = 44893310 >+SHA256 (16c1cd7da0cd159ee2d53c39088564edaf046c77.patch) = 04cc88ba5e575fef02545022a8f862dadc16752e21d9bbfdbc3788b86992821b >+SIZE (16c1cd7da0cd159ee2d53c39088564edaf046c77.patch) = 4997 >+SHA256 (2876c8c5f70f71b5b51b0f26b31dd0dc08583212.patch) = f05ab7b3355ae6d5346f6bbd9d0fc9d8db26b04943f27b0f851ac5ad13561a41 >+SIZE (2876c8c5f70f71b5b51b0f26b31dd0dc08583212.patch) = 2269 >+SHA256 (3664f5b826f5688b82470235d1dceef0c9c4c47d.patch) = 6b725a884c8bc225b0bda6a907a39e2238fe0cee4800f7852d18377e66aad2a3 >+SIZE (3664f5b826f5688b82470235d1dceef0c9c4c47d.patch) = 12997 >+SHA256 (b4f435a4ecceba0ef3a785dbe8eead6f55f49cc1.patch) = e3b0dce84cdacbdbb24c6c39772f6cdbba7e3e3101be540d7695d3d981c810e5 >+SIZE (b4f435a4ecceba0ef3a785dbe8eead6f55f49cc1.patch) = 755 >+SHA256 (c5c4a54d4cf4ea544c30fe6780dab2755f404300.patch) = ef9789c846982e6d15ef47f53f25c42229e7d2eb135ac9fa5e0e09e7da0e0d91 >+SIZE (c5c4a54d4cf4ea544c30fe6780dab2755f404300.patch) = 778 >+SHA256 (f47e7bd666aa063d016bdf00ea8f62c97a5b5a7a.patch) = f96c50432d45adf30bffbb21ebfda30c1ffeae08ce3a603eacda1befb9240fb8 >+SIZE (f47e7bd666aa063d016bdf00ea8f62c97a5b5a7a.patch) = 1127 >diff --git a/graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef b/graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef >new file mode 100644 >index 000000000000..a2286868df66 >--- /dev/null >+++ b/graphics/exiv2/files/patch-_MSVC_LANG-warning-Wundef >@@ -0,0 +1,84 @@ >+From aaa876159ada768ba0fb2d44b4eaaf23b3b2ed98 Mon Sep 17 00:00:00 2001 >+From: Matthias Andree <matthias.andree@gmx.de> >+Date: Mon, 3 Jul 2023 11:16:44 +0200 >+Subject: [PATCH] Fix preprocessor warnings about undefined _MSVC_LANG >+ >+Stricter compiler/settings, such as found during a build >+on FreeBSD with clang 14, issue warnings of the kind below. >+ >+/usr/local/include/exiv2/value.hpp:1272:31: warning: '_MSVC_LANG' is not defined, evaluates to 0 [-Wundef] >+fixed-width font helps here-- ^ >+ >+Fix: Guard use of _MSVC_LANG by a check. >+ >+Personally, I found that MSVC has several feature-specific >+checks in predefined macros which might allow for one >+standards-based check that matches GCC/clang/MSVC rather than the >+split check for C++ standard and MSVC language version settings. >+ >+See https://en.cppreference.com/w/cpp/feature_test >+ >+I am not building Exiv2 on MSVC, so I cannot test/suggest >+anything here. >+--- include/exiv2/slice.hpp.orig 2023-05-08 16:01:13 UTC >++++ include/exiv2/slice.hpp >+@@ -255,7 +255,7 @@ struct ContainerStorage { >+ using iterator = typename container::iterator; >+ using const_iterator = typename container::const_iterator; >+ >+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L >++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) >+ using value_type = std::remove_cv_t<typename container::value_type>; >+ #else >+ using value_type = typename std::remove_cv<typename container::value_type>::type; >+@@ -320,7 +320,7 @@ struct ContainerStorage { >+ */ >+ template <typename storage_type> >+ struct PtrSliceStorage { >+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L >++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) >+ using value_type = std::remove_cv_t<std::remove_pointer_t<storage_type>>; >+ #else >+ using value_type = typename std::remove_cv<typename std::remove_pointer<storage_type>::type>::type; >+@@ -423,7 +423,7 @@ struct Slice : public Internal::MutableSliceBase<Inter >+ using iterator = typename container::iterator; >+ using const_iterator = typename container::const_iterator; >+ >+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L >++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) >+ using value_type = std::remove_cv_t<typename container::value_type>; >+ #else >+ using value_type = typename std::remove_cv<typename container::value_type>::type; >+@@ -460,7 +460,7 @@ struct Slice<const container> : public Internal::Const >+ using iterator = typename container::iterator; >+ using const_iterator = typename container::const_iterator; >+ >+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L >++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) >+ using value_type = std::remove_cv_t<typename container::value_type>; >+ #else >+ using value_type = typename std::remove_cv<typename container::value_type>::type; >+ include/exiv2/slice.hpp | 8 ++++---- >+ include/exiv2/value.hpp | 4 ++-- >+ 2 files changed, 6 insertions(+), 6 deletions(-) >+ >+--- include/exiv2/value.hpp.orig 2023-05-08 16:01:13 UTC >++++ include/exiv2/value.hpp >+@@ -1254,7 +1254,7 @@ class ValueType : public Value { >+ } else if (std::is_signed<I>::value) { >+ #endif >+ // conversion is from unsigned to signed >+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L >++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) >+ const auto imax = static_cast<std::make_unsigned_t<I>>(std::numeric_limits<I>::max()); >+ #else >+ const auto imax = static_cast<typename std::make_unsigned<I>::type>(std::numeric_limits<I>::max()); >+@@ -1269,7 +1269,7 @@ class ValueType : public Value { >+ return 0; >+ } >+ // Inputs are not negative so convert them to unsigned. >+-#if __cplusplus >= 201402L || _MSVC_LANG >= 201402L >++#if __cplusplus >= 201402L || (defined(_MSVC_LANG) && (_MSVC_LANG >= 201402L)) >+ const auto a_u = static_cast<std::make_unsigned_t<decltype(a)>>(a); >+ const auto b_u = static_cast<std::make_unsigned_t<decltype(b)>>(b); >+ #else >diff --git a/graphics/exiv2/files/patch-cmake_mainSetup.cmake b/graphics/exiv2/files/patch-cmake_mainSetup.cmake >index be278291f00f..1e8a3939a3ac 100644 >--- a/graphics/exiv2/files/patch-cmake_mainSetup.cmake >+++ b/graphics/exiv2/files/patch-cmake_mainSetup.cmake >@@ -1,6 +1,6 @@ >---- cmake/mainSetup.cmake.orig 2019-07-13 09:31:40 UTC >+--- cmake/mainSetup.cmake.orig 2023-05-08 16:01:13 UTC > +++ cmake/mainSetup.cmake >-@@ -13,7 +13,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} >+@@ -17,7 +17,7 @@ set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} > set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) > set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}) > >diff --git a/graphics/exiv2/files/patch-src_version.cpp b/graphics/exiv2/files/patch-src_version.cpp >new file mode 100644 >index 000000000000..0175b6a0c1b6 >--- /dev/null >+++ b/graphics/exiv2/files/patch-src_version.cpp >@@ -0,0 +1,16 @@ >+This patch fixes a crash when the procstat_getfiles() >+return list contains non-vnodes that don't have an fs_path. >+ >+filed as https://github.com/Exiv2/exiv2/pull/2672 >+ >+--- src/version.cpp.orig 2023-05-08 16:01:13 UTC >++++ src/version.cpp >+@@ -148,7 +148,7 @@ static std::vector<std::string> getLoadedLibraries() { >+ struct filestat_list* files = procs ? procstat_getfiles(procstat, procs, true) : nullptr; >+ if (files) { >+ filestat* entry; >+- STAILQ_FOREACH(entry, files, next) { >++ STAILQ_FOREACH(entry, files, next) if (entry && PS_FST_TYPE_VNODE == entry->fs_type && entry->fs_path) { >+ std::string path(entry->fs_path); >+ pushPath(path, libs, paths); >+ } >diff --git a/graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp b/graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp >new file mode 100644 >index 000000000000..d6bd611488eb >--- /dev/null >+++ b/graphics/exiv2/files/patch-xmpsdk_src_XMPMeta.cpp >@@ -0,0 +1,15 @@ >+XMP code is not dealing with format types properly. Cast argument to match format string. >+ >+filed as https://github.com/Exiv2/exiv2/pull/2671 >+ >+--- xmpsdk/src/XMPMeta.cpp.orig 2023-05-08 16:01:13 UTC >++++ xmpsdk/src/XMPMeta.cpp >+@@ -87,7 +87,7 @@ static const char * kTenSpaces = " "; >+ #define OutProcHexInt(num) { snprintf ( buffer, sizeof(buffer), "%X", (num) ); /* AUDIT: Using sizeof for snprintf length is safe */ \ >+ status = (*outProc) ( refCon, buffer, strlen(buffer) ); if ( status != 0 ) goto EXIT; } >+ #else >+-#define OutProcHexInt(num) { snprintf ( buffer, sizeof(buffer), "%lX", (num) ); /* AUDIT: Using sizeof for snprintf length is safe */ \ >++#define OutProcHexInt(num) { snprintf ( buffer, sizeof(buffer), "%lX", (long)(num) ); /* AUDIT: Using sizeof for snprintf length is safe */ \ >+ status = (*outProc) ( refCon, buffer, strlen(buffer) ); if ( status != 0 ) goto EXIT; } >+ #endif >+ >diff --git a/graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp b/graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp >new file mode 100644 >index 000000000000..e609063362b0 >--- /dev/null >+++ b/graphics/exiv2/files/patch-xmpsdk_src_XMPUtils.cpp >@@ -0,0 +1,17 @@ >+XMP code is not dealing with format types properly. >+Provide a variable that matches the format string to >+avoid crashes when sizeof(long long) != sizeof(XMP_Int64). >+ >+filed as https://github.com/Exiv2/exiv2/pull/2671 >+ >+--- xmpsdk/src/XMPUtils.cpp.orig 2023-05-08 16:01:13 UTC >++++ xmpsdk/src/XMPUtils.cpp >+@@ -1215,7 +1215,7 @@ XMPUtils::ConvertToInt64 ( XMP_StringPtr strValue ) >+ >+ int count; >+ char nextCh; >+- XMP_Int64 result; >++ long long result; >+ >+ if ( ! XMP_LitNMatch ( strValue, "0x", 2 ) ) { >+ count = sscanf ( strValue, "%lld%c", &result, &nextCh ); >diff --git a/graphics/exiv2/pkg-plist b/graphics/exiv2/pkg-plist >index 93b45ca366df..0ce169f2b461 100644 >--- a/graphics/exiv2/pkg-plist >+++ b/graphics/exiv2/pkg-plist >@@ -4,7 +4,6 @@ > %%SAMPLE%%bin/exifprint > %%SAMPLE%%bin/exifvalue > bin/exiv2 >-%%SAMPLE%%bin/exiv2json > %%SAMPLE%%bin/geotag > %%SAMPLE%%bin/iptceasy > %%SAMPLE%%bin/iptcprint >@@ -35,7 +34,7 @@ include/exiv2/futils.hpp > include/exiv2/gifimage.hpp > include/exiv2/http.hpp > include/exiv2/image.hpp >-include/exiv2/ini.hpp >+include/exiv2/image_types.hpp > include/exiv2/iptc.hpp > include/exiv2/jp2image.hpp > include/exiv2/jpgimage.hpp >@@ -44,6 +43,7 @@ include/exiv2/metadatum.hpp > include/exiv2/mrwimage.hpp > include/exiv2/orfimage.hpp > include/exiv2/pgfimage.hpp >+include/exiv2/photoshop.hpp > include/exiv2/pngimage.hpp > include/exiv2/preview.hpp > include/exiv2/properties.hpp >@@ -52,14 +52,11 @@ include/exiv2/quicktimevideo.hpp > include/exiv2/rafimage.hpp > include/exiv2/riffvideo.hpp > include/exiv2/rw2image.hpp >-include/exiv2/rwlock.hpp > include/exiv2/slice.hpp >-include/exiv2/ssh.hpp > include/exiv2/tags.hpp > include/exiv2/tgaimage.hpp > include/exiv2/tiffimage.hpp > include/exiv2/types.hpp >-include/exiv2/utilsvideo.hpp > include/exiv2/value.hpp > include/exiv2/version.hpp > include/exiv2/webpimage.hpp >@@ -69,9 +66,8 @@ lib/cmake/exiv2/exiv2Config-%%CMAKE_BUILD_TYPE%%.cmake > lib/cmake/exiv2/exiv2Config.cmake > lib/cmake/exiv2/exiv2ConfigVersion.cmake > lib/libexiv2.so >-lib/libexiv2.so.0.27.6 >-lib/libexiv2.so.27 >-lib/libexiv2-xmp.a >+lib/libexiv2.so.0.28.0 >+lib/libexiv2.so.28 > libdata/pkgconfig/exiv2.pc > share/man/man1/exiv2.1.gz > %%NLS%%share/locale/bs/LC_MESSAGES/exiv2.mo >-- >2.41.0 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 272311
:
243098
|
243100
|
243103
|
243104
|
243106
|
243111
|
243124
|
243125
|
243135
|
243136
|
243137
|
243138
|
243139
|
243140
|
243141
|
243142
|
243143
|
243144
|
243145
|
243146
|
243147
|
243148
|
243154
|
243155
|
243156
|
243157
|
243158
|
243159
|
243160
|
243166
|
243167
|
243168
|
243169
|
243170
|
243171
| 243172 |
243175
|
243176