diff --git a/.gitignore b/.gitignore index a31a504..4c1991a 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,4 @@ ppl-0.10.2.tar.bz2 /ppl-0.11.2.tar.bz2 /ppl-1.0.tar.bz2 /ppl-1.1.tar.bz2 +/ppl-1.2.tar.bz2 diff --git a/ppl-PlLong.patch b/ppl-PlLong.patch deleted file mode 100644 index 7ebb773..0000000 --- a/ppl-PlLong.patch +++ /dev/null @@ -1,20 +0,0 @@ -diff -up ppl-1.1/interfaces/Prolog/GNU/gprolog_efli.hh.orig ppl-1.1/interfaces/Prolog/GNU/gprolog_efli.hh ---- ppl-1.1/interfaces/Prolog/GNU/gprolog_efli.hh.orig 2014-04-29 17:25:21.639273848 -0300 -+++ ppl-1.1/interfaces/Prolog/GNU/gprolog_efli.hh 2014-04-29 17:25:30.757274198 -0300 -@@ -45,14 +45,14 @@ extern bool Prolog_has_unbounded_integer - integer value representable by a Prolog integer. - Holds zero otherwise. - */ --extern long Prolog_min_integer; -+extern PlLong Prolog_min_integer; - - /*! - If \p Prolog_has_unbounded_integers is false, holds the maximum - integer value representable by a Prolog integer. - Holds zero otherwise. - */ --extern long Prolog_max_integer; -+extern PlLong Prolog_max_integer; - - /*! - Performs system-dependent initialization. diff --git a/ppl-cstddef.patch b/ppl-cstddef.patch deleted file mode 100644 index 8c43b26..0000000 --- a/ppl-cstddef.patch +++ /dev/null @@ -1,238 +0,0 @@ -diff -up ppl-1.1/src/Dense_Row_defs.hh.orig ppl-1.1/src/Dense_Row_defs.hh ---- ppl-1.1/src/Dense_Row_defs.hh.orig 2014-04-29 13:08:10.516682937 -0300 -+++ ppl-1.1/src/Dense_Row_defs.hh 2014-04-29 13:08:50.447684466 -0300 -@@ -33,6 +33,7 @@ site: http://bugseng.com/products/ppl/ . - #include - #include - #include -+#include - - #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS - //! A finite sequence of coefficients. -@@ -433,7 +434,7 @@ public: - - typedef std::bidirectional_iterator_tag iterator_category; - typedef Coefficient value_type; -- typedef ptrdiff_t difference_type; -+ typedef std::ptrdiff_t difference_type; - typedef value_type* pointer; - typedef value_type& reference; - -@@ -474,7 +475,7 @@ class Parma_Polyhedra_Library::Dense_Row - public: - - typedef const Coefficient value_type; -- typedef ptrdiff_t difference_type; -+ typedef std::ptrdiff_t difference_type; - typedef value_type* pointer; - typedef Coefficient_traits::const_reference reference; - -diff -up ppl-1.1/src/Linear_Expression_Interface_defs.hh.orig ppl-1.1/src/Linear_Expression_Interface_defs.hh ---- ppl-1.1/src/Linear_Expression_Interface_defs.hh.orig 2014-04-29 13:08:17.337683198 -0300 -+++ ppl-1.1/src/Linear_Expression_Interface_defs.hh 2014-04-29 13:08:40.999684104 -0300 -@@ -32,6 +32,7 @@ site: http://bugseng.com/products/ppl/ . - #include "Sparse_Row_types.hh" - #include - #include -+#include - - #ifdef PPL_DOXYGEN_INCLUDE_IMPLEMENTATION_DETAILS - //! A linear expression. -@@ -65,7 +66,7 @@ public: - public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef const Coefficient value_type; -- typedef ptrdiff_t difference_type; -+ typedef std::ptrdiff_t difference_type; - typedef value_type* pointer; - typedef Coefficient_traits::const_reference reference; - -diff -up ppl-1.1/src/CO_Tree_defs.hh.orig ppl-1.1/src/CO_Tree_defs.hh ---- ppl-1.1/src/CO_Tree_defs.hh.orig 2014-04-29 13:11:33.725690719 -0300 -+++ ppl-1.1/src/CO_Tree_defs.hh 2014-04-29 13:11:55.943691569 -0300 -@@ -28,6 +28,7 @@ site: http://bugseng.com/products/ppl/ . - - #include "Coefficient_defs.hh" - #include -+#include - - #ifndef PPL_CO_TREE_EXTRA_DEBUG - #ifdef PPL_ABI_BREAKING_EXTRA_DEBUG -@@ -159,7 +160,7 @@ public: - - typedef std::bidirectional_iterator_tag iterator_category; - typedef const data_type value_type; -- typedef ptrdiff_t difference_type; -+ typedef std::ptrdiff_t difference_type; - typedef value_type* pointer; - typedef data_type_const_reference reference; - -@@ -314,7 +315,7 @@ public: - - typedef std::bidirectional_iterator_tag iterator_category; - typedef data_type value_type; -- typedef ptrdiff_t difference_type; -+ typedef std::ptrdiff_t difference_type; - typedef value_type* pointer; - typedef value_type& reference; - -diff -up ppl-1.1/src/CO_Tree_inlines.hh.orig ppl-1.1/src/CO_Tree_inlines.hh ---- ppl-1.1/src/CO_Tree_inlines.hh.orig 2014-04-29 13:14:12.738696808 -0300 -+++ ppl-1.1/src/CO_Tree_inlines.hh 2014-04-29 13:14:48.887698192 -0300 -@@ -24,6 +24,8 @@ site: http://bugseng.com/products/ppl/ . - #ifndef PPL_CO_Tree_inlines_hh - #define PPL_CO_Tree_inlines_hh 1 - -+#include -+ - namespace Parma_Polyhedra_Library { - - inline dimension_type -@@ -31,7 +33,7 @@ CO_Tree::dfs_index(const_iterator itr) c - PPL_ASSERT(itr.current_index != 0); - PPL_ASSERT(itr.current_index >= indexes + 1); - PPL_ASSERT(itr.current_index <= indexes + reserved_size); -- const ptrdiff_t index = itr.current_index - indexes; -+ const std::ptrdiff_t index = itr.current_index - indexes; - return static_cast(index); - } - -@@ -40,7 +42,7 @@ CO_Tree::dfs_index(iterator itr) const { - PPL_ASSERT(itr.current_index != 0); - PPL_ASSERT(itr.current_index >= indexes + 1); - PPL_ASSERT(itr.current_index <= indexes + reserved_size); -- const ptrdiff_t index = itr.current_index - indexes; -+ const std::ptrdiff_t index = itr.current_index - indexes; - return static_cast(index); - } - -@@ -772,7 +774,7 @@ CO_Tree::tree_iterator::follow_left_chil - p -= (offset - 1); - while (*p == unused_index) - ++p; -- const ptrdiff_t distance = p - tree.indexes; -+ const std::ptrdiff_t distance = p - tree.indexes; - PPL_ASSERT(distance >= 0); - i = static_cast(distance); - offset = least_significant_one_mask(i); -@@ -787,7 +789,7 @@ CO_Tree::tree_iterator::follow_right_chi - p += (offset - 1); - while (*p == unused_index) - --p; -- const ptrdiff_t distance = p - tree.indexes; -+ const std::ptrdiff_t distance = p - tree.indexes; - PPL_ASSERT(distance >= 0); - i = static_cast(distance); - offset = least_significant_one_mask(i); -diff -up ppl-1.1/src/Linear_Expression_defs.hh.orig ppl-1.1/src/Linear_Expression_defs.hh ---- ppl-1.1/src/Linear_Expression_defs.hh.orig 2014-04-29 13:15:39.793700141 -0300 -+++ ppl-1.1/src/Linear_Expression_defs.hh 2014-04-29 13:16:07.464701201 -0300 -@@ -51,6 +51,7 @@ site: http://bugseng.com/products/ppl/ . - - #include "Linear_Expression_Interface_defs.hh" - #include "Variable_defs.hh" -+#include - - namespace Parma_Polyhedra_Library { - -@@ -381,7 +382,7 @@ public: - public: - typedef std::bidirectional_iterator_tag iterator_category; - typedef const Coefficient value_type; -- typedef ptrdiff_t difference_type; -+ typedef std::ptrdiff_t difference_type; - typedef value_type* pointer; - typedef Coefficient_traits::const_reference reference; - -diff -up ppl-1.1/src/CO_Tree.cc.orig ppl-1.1/src/CO_Tree.cc ---- ppl-1.1/src/CO_Tree.cc.orig 2014-04-29 13:19:37.192709232 -0300 -+++ ppl-1.1/src/CO_Tree.cc 2014-04-29 13:19:58.000710029 -0300 -@@ -954,7 +954,7 @@ PPL::CO_Tree - --subtree_size; - } - -- const ptrdiff_t distance = first_unused_index - indexes; -+ const std::ptrdiff_t distance = first_unused_index - indexes; - PPL_ASSERT(distance >= 0); - return static_cast(distance); - } -diff -up ppl-1.1/src/Constraint_System_defs.hh.orig ppl-1.1/src/Constraint_System_defs.hh ---- ppl-1.1/src/Constraint_System_defs.hh.orig 2014-04-29 13:30:05.530733294 -0300 -+++ ppl-1.1/src/Constraint_System_defs.hh 2014-04-29 13:30:27.167734122 -0300 -@@ -37,6 +37,7 @@ site: http://bugseng.com/products/ppl/ . - #include "termination_types.hh" - #include - #include -+#include - - namespace Parma_Polyhedra_Library { - -@@ -609,7 +610,7 @@ for (Constraint_System::const_iterator i - class Parma_Polyhedra_Library::Constraint_System_const_iterator - : public std::iterator { - public: -diff -up ppl-1.1/src/Congruence_System_defs.hh.orig ppl-1.1/src/Congruence_System_defs.hh ---- ppl-1.1/src/Congruence_System_defs.hh.orig 2014-04-29 13:33:56.927742155 -0300 -+++ ppl-1.1/src/Congruence_System_defs.hh 2014-04-29 13:34:15.535742867 -0300 -@@ -33,6 +33,7 @@ site: http://bugseng.com/products/ppl/ . - #include "Congruence_defs.hh" - #include "Constraint_System_types.hh" - #include -+#include - - namespace Parma_Polyhedra_Library { - -@@ -249,7 +250,7 @@ public: - class const_iterator - : public std::iterator { - public: -diff -up ppl-1.1/src/Generator_System_defs.hh.orig ppl-1.1/src/Generator_System_defs.hh ---- ppl-1.1/src/Generator_System_defs.hh.orig 2014-04-29 13:44:30.122766402 -0300 -+++ ppl-1.1/src/Generator_System_defs.hh 2014-04-29 13:44:48.167767093 -0300 -@@ -33,6 +33,7 @@ site: http://bugseng.com/products/ppl/ . - #include "Poly_Con_Relation_defs.hh" - #include "Polyhedron_types.hh" - #include -+#include - - namespace Parma_Polyhedra_Library { - -@@ -679,7 +680,7 @@ copy(gs.begin(), gs.end(), ostream_itera - class Parma_Polyhedra_Library::Generator_System_const_iterator - : public std::iterator { - public: -diff -up ppl-1.1/src/Grid_Generator_System_defs.hh.orig ppl-1.1/src/Grid_Generator_System_defs.hh ---- ppl-1.1/src/Grid_Generator_System_defs.hh.orig 2014-04-29 13:45:26.073768544 -0300 -+++ ppl-1.1/src/Grid_Generator_System_defs.hh 2014-04-29 13:45:42.535769175 -0300 -@@ -31,6 +31,7 @@ site: http://bugseng.com/products/ppl/ . - #include "Variables_Set_types.hh" - #include "Polyhedron_types.hh" - #include -+#include - - namespace Parma_Polyhedra_Library { - -@@ -277,7 +278,7 @@ public: - class const_iterator - : public std::iterator { - public: diff --git a/ppl-gcc5.patch b/ppl-gcc5.patch deleted file mode 100644 index 6624642..0000000 --- a/ppl-gcc5.patch +++ /dev/null @@ -1,38 +0,0 @@ -diff -up ppl-1.1/src/Pointset_Powerset_defs.hh.orig ppl-1.1/src/Pointset_Powerset_defs.hh ---- ppl-1.1/src/Pointset_Powerset_defs.hh.orig 2013-10-28 10:38:33.000000000 -0200 -+++ ppl-1.1/src/Pointset_Powerset_defs.hh 2015-02-08 17:33:06.414149334 -0200 -@@ -1391,6 +1391,7 @@ template - bool - check_containment(const PSET& ph, const Pointset_Powerset& ps); - -+#if __GNUC__ < 5 - // CHECKME: according to the Intel compiler, the declaration of the - // following specialization (of the class template parameter) should come - // before the declaration of the corresponding full specialization -@@ -1400,6 +1401,7 @@ template - Pointset_Powerset - ::Pointset_Powerset(const Pointset_Powerset& y, - Complexity_Class); -+#endif - - // Non-inline full specializations should be declared here - // so as to inhibit multiple instantiations of the generic template. -diff -up ppl-1.1/src/ppl.hh.dist.orig ppl-1.1/src/ppl.hh.dist ---- ppl-1.1/src/ppl.hh.dist.orig 2015-02-08 17:32:26.594146810 -0200 -+++ ppl-1.1/src/ppl.hh.dist 2015-02-08 17:33:11.833149677 -0200 -@@ -100618,6 +100618,7 @@ template - bool - check_containment(const PSET& ph, const Pointset_Powerset& ps); - -+#if __GNUC__ < 5 - // CHECKME: according to the Intel compiler, the declaration of the - // following specialization (of the class template parameter) should come - // before the declaration of the corresponding full specialization -@@ -100627,6 +100628,7 @@ template - Pointset_Powerset - ::Pointset_Powerset(const Pointset_Powerset& y, - Complexity_Class); -+#endif - - // Non-inline full specializations should be declared here - // so as to inhibit multiple instantiations of the generic template. diff --git a/ppl-gcc6.patch b/ppl-gcc6.patch deleted file mode 100644 index cd36cf5..0000000 --- a/ppl-gcc6.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -up ppl-1.1/demos/ppl_lcdd/ppl_lcdd.cc.orig ppl-1.1/demos/ppl_lcdd/ppl_lcdd.cc ---- ppl-1.1/demos/ppl_lcdd/ppl_lcdd.cc.orig 2016-03-17 17:48:24.795619726 -0300 -+++ ppl-1.1/demos/ppl_lcdd/ppl_lcdd.cc 2016-03-17 17:49:59.364623348 -0300 -@@ -224,7 +224,7 @@ std::istream* input_stream_p = 0; - - void - set_input(const char* file_name) { -- if (input_stream_p && *input_stream_p != std::cin) -+ if (input_stream_p && (void*)input_stream_p != (void*)&std::cin) - delete input_stream_p; - - if (file_name) { -@@ -250,7 +250,7 @@ std::ostream* output_stream_p = 0; - - void - set_output(const char* file_name) { -- if (output_stream_p && *output_stream_p != std::cout) -+ if (output_stream_p && (void*)output_stream_p != (void*)&std::cout) - delete output_stream_p; - - if (file_name) { -diff -up ppl-1.1/demos/ppl_pips/ppl_pips.cc.orig ppl-1.1/demos/ppl_pips/ppl_pips.cc ---- ppl-1.1/demos/ppl_pips/ppl_pips.cc.orig 2016-03-18 12:01:23.174424242 -0300 -+++ ppl-1.1/demos/ppl_pips/ppl_pips.cc 2016-03-18 12:02:23.743426561 -0300 -@@ -538,7 +538,7 @@ std::istream* input_stream_p = 0; - - void - set_input(const char* file_name) { -- if (input_stream_p && *input_stream_p != std::cin) -+ if (input_stream_p && (void*)input_stream_p != (void*)&std::cin) - delete input_stream_p; - - if (file_name) { -@@ -558,7 +558,7 @@ std::ostream* output_stream_p = 0; - - void - set_output(const char* file_name) { -- if (output_stream_p && *output_stream_p != std::cout) -+ if (output_stream_p && (void*)output_stream_p != (void*)&std::cout) - delete output_stream_p; - - if (file_name) { diff --git a/ppl-swiprolog.patch b/ppl-swiprolog.patch deleted file mode 100644 index ce993c4..0000000 --- a/ppl-swiprolog.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff -up ppl-1.1/interfaces/Prolog/SWI/ppl_interface_generator_swiprolog_cc.m4.orig ppl-1.1/interfaces/Prolog/SWI/ppl_interface_generator_swiprolog_cc.m4 ---- ppl-1.1/interfaces/Prolog/SWI/ppl_interface_generator_swiprolog_cc.m4.orig 2015-06-14 20:20:41.157476020 -0300 -+++ ppl-1.1/interfaces/Prolog/SWI/ppl_interface_generator_swiprolog_cc.m4 2015-06-14 20:20:58.923476700 -0300 -@@ -33,7 +33,8 @@ m4_include(`ppl_interface_generator_copy - - #include "../ppl_prolog_domains.hh" - --#define PL_EXTENSION_ENTRY(name, arity) { #name, arity, (void*) name, 0 }, -+#define PL_EXTENSION_ENTRY(name, arity) \ -+ { #name, arity, reinterpret_cast(name), 0 }, - - namespace { - diff --git a/ppl.spec b/ppl.spec index 9f1b505..c7c0646 100644 --- a/ppl.spec +++ b/ppl.spec @@ -1,28 +1,23 @@ Name: ppl -Version: 1.1 -Release: 15%{?dist} +Version: 1.2 +Release: 1%{?dist} Summary: The Parma Polyhedra Library: a library of numerical abstractions -Group: Development/Libraries License: GPLv3+ URL: http://www.cs.unipr.it/ppl/ Source0: ftp://ftp.cs.unipr.it/pub/ppl/releases/%{version}/%{name}-%{version}.tar.bz2 Source1: ppl.hh Source2: ppl_c.h -Requires(post): /sbin/ldconfig -Requires(postun): /sbin/ldconfig -# Merged into ppl as of 0.12 -Provides: ppl-pwl = %{version}-%{release} -Obsoletes: ppl-pwl <= 0.11.2-11 -BuildRequires: gmp-devel >= 4.1.3, m4 >= 1.4.8 +BuildRequires: gcc-c++ +BuildRequires: gmp-devel +BuildRequires: m4 BuildRequires: perl BuildRequires: perl(Getopt::Long) BuildRequires: perl(strict) BuildRequires: perl(warnings) -Patch0: %{name}-cstddef.patch -Patch1: %{name}-PlLong.patch -Patch2: %{name}-gcc5.patch -Patch3: %{name}-swiprolog.patch -Patch4: %{name}-gcc6.patch + +# This can be removed once F-25 reaches EOL +Obsoletes: %{name}-yap < 1.2-1%{?dist} +Provides: %{name}-yap = %{version}-%{release} %description The Parma Polyhedra Library (PPL) is a library for the manipulation of @@ -39,10 +34,7 @@ applications using the PPL through its C and C++ interfaces. %package devel Summary: Development tools for the Parma Polyhedra Library C and C++ interfaces -Requires: %{name}%{?_isa} = %{version}-%{release}, gmp-devel%{?_isa} >= 4.1.3 -# Merged into ppl as of 0.12 -Provides: ppl-pwl-devel = %{version}-%{release} -Obsoletes: ppl-pwl-devel <= 0.11.2-11 +Requires: %{name}%{?_isa} = %{version}-%{release}, gmp-devel%{?_isa} %description devel The header files, Autoconf macro and minimal documentation for @@ -52,9 +44,6 @@ its C and C++ interfaces. %package static Summary: Static archives for the Parma Polyhedra Library C and C++ interfaces Requires: %{name}-devel%{?_isa} = %{version}-%{release} -# Merged into ppl as of 0.12 -Provides: ppl-pwl-static = %{version}-%{release} -Obsoletes: ppl-pwl-static <= 0.11.2-11 %description static The static archives for the Parma Polyhedra Library C and C++ interfaces. @@ -75,8 +64,8 @@ and the parametric integer programming solver ppl_pips. # The `gprolog' package is not available on ppc64: # the GNU Prolog interface must thus be disabled for that architecture. Summary: The GNU Prolog interface of the Parma Polyhedra Library -BuildRequires: gprolog >= 1.2.19 -Requires: %{name}%{?_isa} = %{version}-%{release}, gprolog%{?_isa} >= 1.2.19 +BuildRequires: gprolog >= 1.3.2 +Requires: %{name}%{?_isa} = %{version}-%{release}, gprolog%{?_isa} >= 1.3.2 %description gprolog This package adds GNU Prolog support to the Parma Polyhedra Library (PPL). @@ -112,18 +101,6 @@ Requires: %{name}-swiprolog%{?_isa} = %{version}-%{release} This package contains the static archive for the SWI-Prolog interface of the Parma Polyhedra Library. -%ifnarch sparc64 sparcv9 %{arm} ppc %{power64} -%package yap -Summary: The YAP Prolog interface of the Parma Polyhedra Library -BuildRequires: yap-devel >= 5.1.1 -Requires: %{name}%{?_isa} = %{version}-%{release}, yap%{?_isa} >= 5.1.1 -Obsoletes: ppl-yap-static - -%description yap -This package adds YAP Prolog support to the Parma Polyhedra Library (PPL). -Install this package if you want to use the library in YAP Prolog programs. -%endif - %package java Summary: The Java interface of the Parma Polyhedra Library BuildRequires: java-devel >= 1:1.6.0 @@ -153,11 +130,6 @@ Install this package if you want to program with the PPL. %prep %setup -q -%patch0 -p1 -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 %build CPPFLAGS="-I%{_includedir}/glpk" @@ -165,11 +137,8 @@ CPPFLAGS="-I%{_includedir}/glpk" %ifarch x86_64 %{ix86} ppc alpha CPPFLAGS="$CPPFLAGS -I%{_libdir}/gprolog-`gprolog --version 2>&1 | head -1 | sed -e "s/.* \([^ ]*\)$/\1/g"`/include" %endif -%ifnarch sparc64 sparcv9 %{arm} ppc %{power64} CPPFLAGS="$CPPFLAGS -I`swipl -dump-runtime-variables | grep PLBASE= | sed 's/PLBASE="\(.*\)";/\1/'`/include" -CPPFLAGS="$CPPFLAGS -I%{_includedir}/Yap" -%endif -%configure --docdir=%{_datadir}/doc/%{name} --enable-shared --disable-rpath --enable-interfaces="c++ c gnu_prolog swi_prolog yap_prolog java" CPPFLAGS="$CPPFLAGS" +%configure --docdir=%{_datadir}/doc/%{name} --enable-shared --disable-rpath --enable-interfaces="cxx c gnu_prolog swi_prolog java" CPPFLAGS="$CPPFLAGS" sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool make %{?_smp_mflags} @@ -272,13 +241,6 @@ mv \ %files swiprolog-static %{_libdir}/%{name}/libppl_swiprolog.a -%ifnarch sparc64 sparcv9 %{arm} ppc %{power64} -%files yap -%doc interfaces/Prolog/YAP/README.yap -%{_datadir}/%{name}/ppl_yap.pl -%{_libdir}/%{name}/ppl_yap.so -%endif - %files java %doc interfaces/Java/README.java %{_libdir}/%{name}/libppl_java.so @@ -309,6 +271,12 @@ mv \ %postun -p /sbin/ldconfig %changelog +* Fri Mar 3 2017 Jerry James - 1.2-1 +- Update to latest upstream release (bz 1403093) +- Drop all patches; all have been upstreamed +- Drop ancient obsoletes +- Drop the yap interface since yap has been retired + * Sat Feb 11 2017 Fedora Release Engineering - 1.1-15 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild diff --git a/sources b/sources index 287f1cd..f74260a 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -98be3e1a272bd5337fbadabb0d3f3d20 ppl-1.1.tar.bz2 +SHA512 (ppl-1.2.tar.bz2) = 9850f4b3ec542f69504e199d5492e156c9eb4521b41ecdd31ea2b3adbc77b90fc1727094377a84632ed9bd9d4ac55eca2728e5e866ac13ab899cc60bedd9db6d