Compare commits

...

No commits in common. "c9s" and "c8" have entirely different histories.
c9s ... c8

11 changed files with 141 additions and 301 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
/*.tar.* SOURCES/rpmdevtools-8.10.tar.xz

1
.rpmdevtools.metadata Normal file
View File

@ -0,0 +1 @@
dae17c4a9e96fc923122be0cddafe97cc9223758 SOURCES/rpmdevtools-8.10.tar.xz

View File

@ -1,39 +0,0 @@
From 4a4693c842b6da5d66e3a6bdb1eb7914d2402f7f Mon Sep 17 00:00:00 2001
From: Neal Gompa <ngompa13@gmail.com>
Date: Wed, 20 Jan 2021 06:50:03 -0500
Subject: [PATCH] Force legacy datestamp while RHBZ#1715412 is still an issue
---
rpmdev-bumpspec | 2 +-
rpmdev-newspec.in | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/rpmdev-bumpspec b/rpmdev-bumpspec
index dc4eb05..3e18b41 100755
--- a/rpmdev-bumpspec
+++ b/rpmdev-bumpspec
@@ -300,7 +300,7 @@ the Free Software Foundation; either version 2 of the License, or
parser.add_option("-n", "--new",
help="set new version and reset/set release "
"(simple spec files only)")
- parser.add_option("-D", "--legacy-datestamp", default=False, action='store_true',
+ parser.add_option("-D", "--legacy-datestamp", default=True, action='store_true',
help="use legacy datestamp for changelog entries")
parser.add_option("-d", "--datestamp",
help="changelog date string (default: today)")
diff --git a/rpmdev-newspec.in b/rpmdev-newspec.in
index 27af10f..a083dd9 100644
--- a/rpmdev-newspec.in
+++ b/rpmdev-newspec.in
@@ -293,7 +293,7 @@ if [[ $NEWSPEC_PREFER_MACROS ]] ; then
"
fi
-if [[ $rpmver -ge 41400 ]] && [[ -z $NEWSPEC_LEGACY_DATESTAMP ]] ; then # >= 4.14 (RHEL >= 8, Fedora >= 27)
+if [[ $rpmver -ge 41400 ]] && [[ $(/bin/false) ]] ; then # >= 4.14 (RHEL >= 8, Fedora >= 27)
chlog="s|^%changelog\\s*|%changelog\\n* $(LC_ALL=C date +'%a %b %d %T %Z %Y') $(rpmdev-packager)\\n- |Mg"
else
chlog="s|^%changelog\\s*|%changelog\\n* $(LC_ALL=C date --utc +'%a %b %d %Y') $(rpmdev-packager)\\n- |Mg"
--
2.29.2

View File

@ -0,0 +1,34 @@
commit 26a8abc746fba9c0b32eb899b96c92841a37855a
Author: Michal Domonkos <mdomonko@redhat.com>
Date: Thu Mar 26 17:00:46 2020 +0100
spectool: ignore query string in URL. BZ 1337544
When constructing the target filename from the given Source or Patch URL
(sub retrieve), do not include the query string (if present).
Example:
* Before: http://some.url/foo.tgz?arg=123 => ./foo.tgz?arg=123
* After: http://some.url/foo.tgz?arg=123 => ./foo.tgz
Regex explanation:
* 1st group: ([^\/]+?)
* Lazily matches one or more characters that are not a forward slash
* 2nd group: (?:\?.*)?$
* Matches a query string (if any) starting with a question mark,
followed by zero or more characters until the end of string,
without creating a capturing group (the leading ?:)
diff --git a/spectool.in b/spectool.in
index 6f7499c..0ebf401 100644
--- a/spectool.in
+++ b/spectool.in
@@ -198,7 +198,7 @@ sub retrievable {
sub retrieve {
my ($where, $url) = @_;
if (retrievable ($url)) {
- my $path = File::Spec->catfile($where, $url =~ m|([^/]+)$|);
+ my $path = File::Spec->catfile($where, $url =~ m|([^\/]+?)(?:\?.*)?$|);
print "Getting $url to $path\n";
if (-e $path) {
if ($force) {

View File

@ -0,0 +1,28 @@
diff -up rpmdevtools-8.10/rpmdev-checksig.orig rpmdevtools-8.10/rpmdev-checksig
--- rpmdevtools-8.10/rpmdev-checksig.orig 2020-06-29 10:29:43.936758775 +0200
+++ rpmdevtools-8.10/rpmdev-checksig 2020-06-29 10:29:55.540983848 +0200
@@ -44,8 +44,8 @@ def lookupKeyID(ts, keyid):
mi.pattern('version', rpm.RPMMIRE_STRCMP, keyid)
for hdr in mi:
sum = hdr['summary']
- mo = re.search(b'\<.*\>', sum)
- email = mo.group().decode(errors='replace')
+ mo = re.search('\<.*\>', sum)
+ email = mo.group()
return email
diff -up rpmdevtools-8.10/rpmdev-rmdevelrpms.py.orig rpmdevtools-8.10/rpmdev-rmdevelrpms.py
--- rpmdevtools-8.10/rpmdev-rmdevelrpms.py.orig 2020-06-29 10:28:59.503896990 +0200
+++ rpmdevtools-8.10/rpmdev-rmdevelrpms.py 2020-06-29 10:29:09.897098576 +0200
@@ -42,8 +42,8 @@ dev_re = re.compile("-(?:de(?:buginfo|ve
test_re = re.compile("^perl-(?:Devel|ExtUtils|Test)-")
lib_re1 = re.compile("^lib.+")
lib_re2 = re.compile("-libs?$")
-a_re = re.compile(b"\\w\\.a$")
-so_re = re.compile(b"\\w\\.so(?:\\.\\d+)*$")
+a_re = re.compile("\\w\\.a$")
+so_re = re.compile("\\w\\.so(?:\\.\\d+)*$")
comp_re = re.compile("^compat-gcc")
# required by Ant, which is required by Eclipse...
jdev_re = re.compile("^java-.+-gcj-compat-devel$")

View File

@ -0,0 +1,21 @@
diff -up rpmdevtools-8.10/Makefile.am.no_qa_robot rpmdevtools-8.10/Makefile.am
--- rpmdevtools-8.10/Makefile.am.no_qa_robot 2018-08-13 22:12:57.934054857 +0200
+++ rpmdevtools-8.10/Makefile.am 2018-08-13 22:14:08.029532966 +0200
@@ -1,4 +1,4 @@
-SUBDIRS = emacs qa-robot
+SUBDIRS = emacs
pkgsysconfdir = $(sysconfdir)/rpmdevtools
bashcompdir = @bashcompdir@
diff -up rpmdevtools-8.10/Makefile.in.no_qa_robot rpmdevtools-8.10/Makefile.in
--- rpmdevtools-8.10/Makefile.in.no_qa_robot 2018-08-13 22:12:57.934054857 +0200
+++ rpmdevtools-8.10/Makefile.in 2018-08-13 22:13:44.650040573 +0200
@@ -316,7 +316,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-SUBDIRS = emacs qa-robot
+SUBDIRS = emacs
pkgsysconfdir = $(sysconfdir)/rpmdevtools
bin_SCRIPTS = rpmdev-newinit rpmdev-newspec rpmdev-rmdevelrpms spectool
dist_bin_SCRIPTS = rpmdev-checksig rpmdev-diff rpmdev-extract rpmdev-md5 \

View File

@ -1,33 +1,37 @@
%global spectool_version 1.0.10
%if 0%{?fedora} || 0%{?rhel} > 7
%bcond_without python3
%else
%bcond_with python3
%endif
Name: rpmdevtools Name: rpmdevtools
Version: 9.5 Version: 8.10
Release: 1%{?dist} Release: 8%{?dist}
Summary: RPM Development Tools Summary: RPM Development Tools
# rpmdev-setuptree is GPLv2, everything else GPLv2+ # rpmdev-setuptree is GPLv2, everything else GPLv2+
License: GPLv2+ and GPLv2 License: GPLv2+ and GPLv2
URL: https://pagure.io/rpmdevtools URL: https://pagure.io/rpmdevtools
Source0: https://releases.pagure.org/rpmdevtools/%{name}-%{version}.tar.xz Source0: https://releases.pagure.org/rpmdevtools/%{name}-%{version}.tar.xz
Source1: progressbar.py
# Fedora-specific downstream patches
## Force legacy datestamp by default until rhbz#1715412 is resolved
Patch1001: 0001-Force-legacy-datestamp-while-RHBZ-1715412-is-still-a.patch
# RHEL-specific downstream patches
## Remove fakeroot dependency (rhbz#1905465)
Patch2001: rpmdevtools-9.5-no_qa_robot.patch
Patch0: rpmdevtools-8.10-no_qa_robot.patch
Patch1: BZ-1826299-spectool-url-ignore-query.patch
Patch2: BZ-1851499-port-to-str-return-values.patch
BuildArch: noarch BuildArch: noarch
# help2man, pod2man, *python for creating man pages # help2man, pod2man, *python for creating man pages
BuildRequires: make
BuildRequires: help2man BuildRequires: help2man
BuildRequires: %{_bindir}/pod2man BuildRequires: %{_bindir}/pod2man
BuildRequires: perl-generators BuildRequires: perl-generators
# python dependencies for spectool %if %{with python3}
# spectool is executed for creating man page BuildRequires: python3
BuildRequires: python3-devel BuildRequires: python3-devel
BuildRequires: python3dist(requests) BuildRequires: python3-rpm
BuildRequires: python3dist(rpm) %else
BuildRequires: python2
BuildRequires: python2-rpm
%endif
# emacs-common >= 1:22.3-3 for macros.emacs # emacs-common >= 1:22.3-3 for macros.emacs
BuildRequires: emacs-common >= 1:22.3-3 BuildRequires: emacs-common >= 1:22.3-3
BuildRequires: bash-completion BuildRequires: bash-completion
@ -35,16 +39,23 @@ BuildRequires: bash-completion
# xemacs-common >= 21.5.29-8 for macros.xemacs # xemacs-common >= 21.5.29-8 for macros.xemacs
BuildRequires: xemacs-common >= 21.5.29-8 BuildRequires: xemacs-common >= 21.5.29-8
%endif %endif
Provides: spectool = %{spectool_version}
Requires: curl Requires: curl
Requires: diffutils Requires: diffutils
%if 0%{?fedora}
Requires: fakeroot
%endif
Requires: file Requires: file
Requires: findutils Requires: findutils
Requires: gawk Requires: gawk
Requires: grep Requires: grep
Requires: rpm-build >= 4.4.2.3 Requires: rpm-build >= 4.4.2.3
Requires: python%{python3_version}dist(argcomplete) %if %{with python3}
Requires: python%{python3_version}dist(requests) Requires: python3-rpm
Requires: python%{python3_version}dist(rpm) %else
Requires: python2
Requires: python2-rpm
%endif
Requires: sed Requires: sed
Requires: emacs-filesystem Requires: emacs-filesystem
%if 0%{?fedora} %if 0%{?fedora}
@ -62,7 +73,7 @@ rpmdev-checksig Check package signatures using alternate RPM keyring
rpminfo Print information about executables and libraries rpminfo Print information about executables and libraries
rpmdev-md5/sha* Display checksums of all files in an archive file rpmdev-md5/sha* Display checksums of all files in an archive file
rpmdev-vercmp RPM version comparison checker rpmdev-vercmp RPM version comparison checker
rpmdev-spectool Expand and download sources and patches in specfiles spectool Expand and download sources and patches in specfiles
rpmdev-wipetree Erase all files within dirs created by rpmdev-setuptree rpmdev-wipetree Erase all files within dirs created by rpmdev-setuptree
rpmdev-extract Extract various archives, "tar xvf" style rpmdev-extract Extract various archives, "tar xvf" style
rpmdev-bumpspec Bump revision in specfile rpmdev-bumpspec Bump revision in specfile
@ -70,18 +81,16 @@ rpmdev-bumpspec Bump revision in specfile
%prep %prep
%autosetup -p1 %setup -q
%if ! 0%{?fedora}
%patch0 -p1 -b .no_qa_robot
%patch1 -p1
%patch2 -p1
%endif
%if %{with python3}
grep -lF "%{_bindir}/python " * \ grep -lF "%{_bindir}/python " * \
| xargs sed -i -e "s|%{_bindir}/python |%{_bindir}/python3 |" | xargs sed -i -e "s|%{_bindir}/python |%{_bindir}/python3 |"
%endif
# Let spectool find the bundled progressbar2 implementation
cp %{SOURCE1} .
sed -i \
's|^\(import progressbar\)$|'\
'import sys\n'\
'sys.path.insert(1, "%{_datadir}/rpmdevtools")\n'\
'\1\nsys.path.pop(1)|' \
rpmdev-spectool
%build %build
@ -90,10 +99,12 @@ rpmdev-spectool
%install %install
rm -rf $RPM_BUILD_ROOT
%make_install %make_install
echo %%{_datadir}/bash-completion > %{name}.files echo %%{_datadir}/bash-completion > %{name}.files
[ -d %{buildroot}%{_sysconfdir}/bash_completion.d ] && \ [ -d $RPM_BUILD_ROOT%{_sysconfdir}/bash_completion.d ] && \
echo %%{_sysconfdir}/bash_completion.d > %{name}.files echo %%{_sysconfdir}/bash_completion.d > %{name}.files
%if 0%{?fedora} %if 0%{?fedora}
@ -101,18 +112,11 @@ for dir in %{_emacs_sitestartdir} %{_xemacs_sitestartdir} ; do
%else %else
for dir in %{_emacs_sitestartdir} ; do for dir in %{_emacs_sitestartdir} ; do
%endif %endif
install -dm 755 %{buildroot}$dir install -dm 755 $RPM_BUILD_ROOT$dir
ln -s %{_datadir}/rpmdevtools/rpmdev-init.el %{buildroot}$dir ln -s %{_datadir}/rpmdevtools/rpmdev-init.el $RPM_BUILD_ROOT$dir
touch %{buildroot}$dir/rpmdev-init.elc touch $RPM_BUILD_ROOT$dir/rpmdev-init.elc
done done
# For backwards compatibility
ln -sr %{buildroot}%{_bindir}/rpmdev-spectool %{buildroot}%{_bindir}/spectool
echo ".so man1/rpmdev-spectool.1" > %{buildroot}%{_mandir}/man1/spectool.1
cp %{SOURCE1} %{buildroot}%{_datadir}/rpmdevtools/
%py_byte_compile %{python3} %{buildroot}%{_datadir}/rpmdevtools/
%files -f %{name}.files %files -f %{name}.files
%license COPYING %license COPYING
@ -130,68 +134,20 @@ cp %{SOURCE1} %{buildroot}%{_datadir}/rpmdevtools/
%changelog %changelog
* Fri Dec 10 2021 Michal Domonkos <mdomonko@redhat.com> - 9.5-1 * Mon Jun 29 2020 Michal Domonkos <mdomonko@redhat.com> - 8.10-8
- Rebase to 9.5 (#2005756) - spectool: ignore query string in URL (RHBZ#1826299)
- Fix TypeError in rpmdev-rmdevelrpms and rpmdev-checksig (RHBZ#1851499)
* Tue Aug 10 2021 Mohan Boddu <mboddu@redhat.com> - 9.3-7 * Mon Aug 13 2018 Thomas Woerner <twoerner@redhat.com> - 8.10-7
- Rebuilt for IMA sigs, glibc 2.34, aarch64 flags - removed fakeroot requirement and all qa_robot scripts (RHBZ#1615605)
Related: rhbz#1991688 - Fixed missing build requires for python3-devel
* Fri Apr 16 2021 Mohan Boddu <mboddu@redhat.com> - 9.3-6 * Wed Aug 01 2018 Charalampos Stratakis <cstratak@redhat.com> - 8.10-6
- Rebuilt for RHEL 9 BETA on Apr 15th 2021. Related: rhbz#1947937 - Rebuild for platform-python
* Thu Feb 11 2021 Michal Domonkos <mdomonko@redhat.com> - 9.3-5 * Tue May 15 2018 Charalampos Stratakis <cstratak@redhat.com> - 8.10-5
- Drop progressbar2 dependency and bundle a tiny replacement (#1927784) - Update some dependency naming declarations
- Drop fakeroot dependency and qa-robot scripts (#1905465) - Build for Python 3 on EL > 7
* Wed Jan 27 2021 Fedora Release Engineering <releng@fedoraproject.org> - 9.3-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild
* Mon Jan 25 2021 Miro Hrončok <mhroncok@redhat.com> - 9.3-3
- spectool: Download text as text
* Fri Jan 22 2021 Michal Domonkos <mdomonko@redhat.com> - 9.3-2
- Replace requests-download dependency with requests
* Wed Jan 20 2021 Neal Gompa <ngompa13@gmail.com> - 9.3-1
- Update to 9.3
- Force legacy datestamp by default until rhbz#1715412 is resolved
* Mon Oct 05 2020 Neal Gompa <ngompa13@gmail.com> - 9.2-1
- Update to 9.2
* Thu Aug 20 2020 Neal Gompa <ngompa13@gmail.com> - 9.1-1
- Update to 9.1
* Wed Jul 29 2020 Fedora Release Engineering <releng@fedoraproject.org> - 9.0-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild
* Thu Jul 16 2020 Neal Gompa <ngompa13@gmail.com> - 9.0-2
- Backport fix for python spec template
* Tue Jul 14 2020 Neal Gompa <ngompa13@gmail.com> - 9.0-1
- Update to 9.0
* Wed Mar 25 2020 Jitka Plesnikova <jplesnik@redhat.com> - 8.10-11
- Add perl dependencies needed for build
* Thu Jan 30 2020 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-10
- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild
* Fri Jul 26 2019 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-9
- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild
* Sat Feb 02 2019 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-8
- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild
* Wed Nov 28 2018 Neal Gompa <ngompa13@gmail.com> - 8.10-7
- Fix regex substitution issues with Python 3.7 (rhbz#1651954)
* Sun Sep 16 2018 Neal Gompa <ngompa13@gmail.com> - 8.10-6
- Fix regex related deprecation warnings (rhbz#1598089)
* Sat Jul 14 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-5
- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild
* Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-4 * Fri Feb 09 2018 Fedora Release Engineering <releng@fedoraproject.org> - 8.10-4
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild

View File

@ -1,6 +0,0 @@
--- !Policy
product_versions:
- rhel-9
decision_context: osci_compose_gate
rules:
- !PassingTestCaseRule {test_case_name: baseos-ci.brew-build.tier1-gating.functional}

View File

@ -1,133 +0,0 @@
#!/usr/bin/python3
# -*- coding: utf-8 -*-
#
# A simple text-based progress bar, compatible with the basic API of:
# https://github.com/WoLpH/python-progressbar
#
# Copyright (C) 2021 Red Hat, Inc.
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
# USA.
import shutil
import sys
import time
class ProgressBar:
FORMAT = '{value:>10} / {max_value:<10} [{bars}]'
BARS = '= '
SPINLEN = 5
def __init__(self, stream=sys.stderr, max_width=80, fps=10):
self._stream = stream
self._max_width = max_width
self._min_delay = 1 / fps
@staticmethod
def _format_value(value):
raise NotImplementedError()
def start(self, max_value):
self._value = 0
self._max_value = max_value or 0
self._status = dict()
self._spinner = 0
self._timestamp = 0
self.update(0)
def update(self, value):
self._value = value
if value > self._max_value:
self._max_value = 0
ts = time.time()
if (ts - self._timestamp) < self._min_delay:
return
self._timestamp = ts
status = {'value': self._format_value(value),
'max_value': self._format_value(self._max_value) \
if self._max_value else '???',
'bars': ''}
termw = min(shutil.get_terminal_size()[0], self._max_width)
nbars = max(termw - len(self.FORMAT.format(**status)), 0)
nfill = nskip = 0
if self._max_value:
nfill = round(nbars * value / self._max_value)
elif nbars > self.SPINLEN:
nfill = self.SPINLEN
nskip = self._spinner % (nbars - self.SPINLEN)
self._spinner = nskip + 1
status['bars'] = self.BARS[1] * nskip + \
self.BARS[0] * nfill + \
self.BARS[1] * (nbars - nfill - nskip)
if status == self._status:
return
self._status = status
self._stream.write('\r')
self._stream.write(self.FORMAT.format(**self._status))
self._stream.flush()
def finish(self):
self._max_value = self._value
self._timestamp = 0 # Force an update
self.update(self._value)
self._stream.write('\n')
self._stream.flush()
class DataTransferBar(ProgressBar):
@staticmethod
def _format_value(value):
symbols = ' KMGTPEZY'
depth = 0
max_depth = len(symbols) - 1
unit = 1024.0
# 1023.95 should be formatted as 1.0 (not 1024.0)
# More info: https://stackoverflow.com/a/63839503
thres = unit - 0.05
while value >= thres and depth < max_depth:
depth += 1
value /= unit
symbol = ' %siB' % symbols[depth] if depth > 0 else ''
return '%.1f%s' % (value, symbol)
if __name__ == '__main__':
# Show a dummy bar for debugging purposes
bar = DataTransferBar()
size = 50*1024*1024
chunk = 1024*1234
recvd = 0
bar.start(size)
while recvd < (size - chunk):
recvd += chunk
bar.update(recvd)
time.sleep(0.1)
bar.update(size)
bar.finish()

View File

@ -1,21 +0,0 @@
diff -up rpmdevtools-9.5/Makefile.am.orig rpmdevtools-9.5/Makefile.am
--- rpmdevtools-9.5/Makefile.am.orig 2021-12-10 11:37:29.889405680 +0100
+++ rpmdevtools-9.5/Makefile.am 2021-12-10 11:37:34.637495820 +0100
@@ -1,4 +1,4 @@
-SUBDIRS = emacs qa-robot
+SUBDIRS = emacs
pkgsysconfdir = $(sysconfdir)/rpmdevtools
bashcompdir = @bashcompdir@
diff -up rpmdevtools-9.5/Makefile.in.orig rpmdevtools-9.5/Makefile.in
--- rpmdevtools-9.5/Makefile.in.orig 2021-12-10 11:37:31.073428158 +0100
+++ rpmdevtools-9.5/Makefile.in 2021-12-10 11:37:38.304565439 +0100
@@ -317,7 +317,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-SUBDIRS = emacs qa-robot
+SUBDIRS = emacs
pkgsysconfdir = $(sysconfdir)/rpmdevtools
bin_SCRIPTS = rpmdev-newinit rpmdev-newspec rpmdev-rmdevelrpms
dist_bin_SCRIPTS = rpmdev-checksig rpmdev-diff rpmdev-extract rpmdev-md5 \

View File

@ -1 +0,0 @@
SHA512 (rpmdevtools-9.5.tar.xz) = d2a110e7557eb149113560d64b3ec1ce75e5ee5ee541de3b4ed88f2bf11ef0248c864383bbffb49f8c32920563704da94004a8f9c099ce3610e6168aabfe440a