Rebase mstflint to latest upstream release v4.11.0-3
Resolves: 1676338 Signed-off-by: Honggang Li <honli@redhat.com>
This commit is contained in:
parent
bbc2798aca
commit
c600aaa732
1
.gitignore
vendored
1
.gitignore
vendored
@ -24,3 +24,4 @@ noarch/
|
|||||||
/mstflint-4.8.0.tar.gz
|
/mstflint-4.8.0.tar.gz
|
||||||
/mstflint-4.10.0.tar.gz
|
/mstflint-4.10.0.tar.gz
|
||||||
/mstflint-4.11.0-2.tar.gz
|
/mstflint-4.11.0-2.tar.gz
|
||||||
|
/mstflint-4.11.0-3.tar.gz
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
From f12533225483f8c9bdc0d1ef7e7a04214571fab2 Mon Sep 17 00:00:00 2001
|
From f355d4902890e5b4db15b87903a299697764bc8a Mon Sep 17 00:00:00 2001
|
||||||
From: Honggang Li <honli@redhat.com>
|
From: Honggang Li <honli@redhat.com>
|
||||||
Date: Fri, 1 Feb 2019 04:07:13 -0500
|
Date: Fri, 8 Feb 2019 21:26:39 -0500
|
||||||
Subject: [PATCH] Fix shebang for python scripts
|
Subject: [PATCH] Fix shebang for python scripts
|
||||||
|
|
||||||
rhel-8 does not support python2. User '#!/usr/bin/python3' for all
|
rhel-8 does not support python2. User '#!/usr/bin/python3' for all
|
||||||
@ -75,15 +75,15 @@ index 4971b00..1f34925 100755
|
|||||||
# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
||||||
#
|
#
|
||||||
diff --git a/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py b/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
diff --git a/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py b/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
||||||
index 36b82ff..6587e6a 100755
|
index 1d614ac..153c87b 100755
|
||||||
--- a/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
--- a/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
||||||
+++ b/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
+++ b/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
||||||
@@ -1,4 +1,4 @@
|
@@ -1,4 +1,4 @@
|
||||||
-#!/usr/bin/python
|
-#!/usr/bin/python
|
||||||
+#!/usr/bin/python3
|
+#!/usr/bin/python3
|
||||||
|
|
||||||
# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
||||||
#
|
#
|
||||||
diff --git a/small_utils/mlxfwresetlib/mlxfwreset_utils.py b/small_utils/mlxfwresetlib/mlxfwreset_utils.py
|
diff --git a/small_utils/mlxfwresetlib/mlxfwreset_utils.py b/small_utils/mlxfwresetlib/mlxfwreset_utils.py
|
||||||
index 9b07328..2c64044 100755
|
index 9b07328..2c64044 100755
|
||||||
--- a/small_utils/mlxfwresetlib/mlxfwreset_utils.py
|
--- a/small_utils/mlxfwresetlib/mlxfwreset_utils.py
|
||||||
@ -115,5 +115,5 @@ index 6d45200..f764de3 100755
|
|||||||
# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
||||||
#
|
#
|
||||||
--
|
--
|
||||||
2.18.1
|
2.20.1
|
||||||
|
|
||||||
|
180
convert-format-for-mlxfwreset_status_checker.patch
Normal file
180
convert-format-for-mlxfwreset_status_checker.patch
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
diff --git a/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py b/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
||||||
|
index 36b82ff..1d614ac 100755
|
||||||
|
--- a/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
||||||
|
+++ b/small_utils/mlxfwresetlib/mlxfwreset_status_checker.py
|
||||||
|
@@ -1,87 +1,87 @@
|
||||||
|
-#!/usr/bin/python
|
||||||
|
-
|
||||||
|
-# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
||||||
|
-#
|
||||||
|
-# This software is available to you under a choice of one of two
|
||||||
|
-# licenses. You may choose to be licensed under the terms of the GNU
|
||||||
|
-# General Public License (GPL) Version 2, available from the file
|
||||||
|
-# COPYING in the main directory of this source tree, or the
|
||||||
|
-# OpenIB.org BSD license below:
|
||||||
|
-#
|
||||||
|
-# Redistribution and use in source and binary forms, with or
|
||||||
|
-# without modification, are permitted provided that the following
|
||||||
|
-# conditions are met:
|
||||||
|
-#
|
||||||
|
-# - Redistributions of source code must retain the above
|
||||||
|
-# copyright notice, this list of conditions and the following
|
||||||
|
-# disclaimer.
|
||||||
|
-#
|
||||||
|
-# - Redistributions in binary form must reproduce the above
|
||||||
|
-# copyright notice, this list of conditions and the following
|
||||||
|
-# disclaimer in the documentation and/or other materials
|
||||||
|
-# provided with the distribution.
|
||||||
|
-#
|
||||||
|
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
-# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
-# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
-# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
-# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
-# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
-# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
-# SOFTWARE.
|
||||||
|
-#--
|
||||||
|
-
|
||||||
|
-"""
|
||||||
|
-* $Id : fwreset_status_checker.py 2017-11-28
|
||||||
|
-* $Authors : Ahmad Soboh (ahmads@mellanox.com)
|
||||||
|
-"""
|
||||||
|
-
|
||||||
|
-######################################################################
|
||||||
|
-# Description: FirmwareResetStatusChecker
|
||||||
|
-# OS Support : Linux/Windows.
|
||||||
|
-######################################################################
|
||||||
|
-
|
||||||
|
-
|
||||||
|
-class FirmwareResetStatusChecker(object):
|
||||||
|
-
|
||||||
|
- FirmwareUptimeStatusInit = 0x0
|
||||||
|
- FirmwareUptimeStatusBeforeDone = 0x1
|
||||||
|
- FirmwareUptimeStatusAfterDone = 0x2
|
||||||
|
- FirmwareUptimeStatusError = 0x3
|
||||||
|
-
|
||||||
|
- FirmwareResetStatusDone = 0x0
|
||||||
|
- FirmwareResetStatusFailed = 0x1
|
||||||
|
- FirmwareResetStatusUnknown = 0x2
|
||||||
|
-
|
||||||
|
- def __init__(self, regAccessObj):
|
||||||
|
- self._RegAccessObj = regAccessObj
|
||||||
|
- self._UptimeBeforeReset = 0x0
|
||||||
|
- self._UptimeBeforeStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusInit
|
||||||
|
- self._UptimeAfterReset = 0x0
|
||||||
|
- self._UptimeAfterStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusInit
|
||||||
|
-
|
||||||
|
- def UpdateUptimeBeforeReset(self):
|
||||||
|
- try:
|
||||||
|
- self._UptimeBeforeReset = self._RegAccessObj.getFWUptime()
|
||||||
|
- self._UptimeBeforeStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusBeforeDone
|
||||||
|
- except Exception as e:
|
||||||
|
- self._UptimeBeforeStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusError
|
||||||
|
-
|
||||||
|
- def UpdateUptimeAfterReset(self):
|
||||||
|
- try:
|
||||||
|
- self._UptimeAfterReset = self._RegAccessObj.getFWUptime()
|
||||||
|
- self._UptimeAfterStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusAfterDone
|
||||||
|
- except Exception as e:
|
||||||
|
- self._UptimeAfterStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusError
|
||||||
|
-
|
||||||
|
- def GetStatus(self):
|
||||||
|
- if self._UptimeBeforeStatus == FirmwareResetStatusChecker.FirmwareUptimeStatusBeforeDone and\
|
||||||
|
- self._UptimeAfterStatus == FirmwareResetStatusChecker.FirmwareUptimeStatusAfterDone:
|
||||||
|
- if self._UptimeAfterReset < self._UptimeBeforeReset:
|
||||||
|
- return FirmwareResetStatusChecker.FirmwareResetStatusDone
|
||||||
|
- else:
|
||||||
|
- if self._UptimeBeforeReset > 5: #5 seconds
|
||||||
|
- return FirmwareResetStatusChecker.FirmwareResetStatusFailed
|
||||||
|
- else:
|
||||||
|
- return FirmwareResetStatusChecker.FirmwareResetStatusUnknown
|
||||||
|
- return FirmwareResetStatusChecker.FirmwareResetStatusUnknown
|
||||||
|
\ No newline at end of file
|
||||||
|
+#!/usr/bin/python
|
||||||
|
+
|
||||||
|
+# Copyright (c) 2004-2010 Mellanox Technologies LTD. All rights reserved.
|
||||||
|
+#
|
||||||
|
+# This software is available to you under a choice of one of two
|
||||||
|
+# licenses. You may choose to be licensed under the terms of the GNU
|
||||||
|
+# General Public License (GPL) Version 2, available from the file
|
||||||
|
+# COPYING in the main directory of this source tree, or the
|
||||||
|
+# OpenIB.org BSD license below:
|
||||||
|
+#
|
||||||
|
+# Redistribution and use in source and binary forms, with or
|
||||||
|
+# without modification, are permitted provided that the following
|
||||||
|
+# conditions are met:
|
||||||
|
+#
|
||||||
|
+# - Redistributions of source code must retain the above
|
||||||
|
+# copyright notice, this list of conditions and the following
|
||||||
|
+# disclaimer.
|
||||||
|
+#
|
||||||
|
+# - Redistributions in binary form must reproduce the above
|
||||||
|
+# copyright notice, this list of conditions and the following
|
||||||
|
+# disclaimer in the documentation and/or other materials
|
||||||
|
+# provided with the distribution.
|
||||||
|
+#
|
||||||
|
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
+# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||||
|
+# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
+# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
||||||
|
+# BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
||||||
|
+# ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
+# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
+# SOFTWARE.
|
||||||
|
+#--
|
||||||
|
+
|
||||||
|
+"""
|
||||||
|
+* $Id : fwreset_status_checker.py 2017-11-28
|
||||||
|
+* $Authors : Ahmad Soboh (ahmads@mellanox.com)
|
||||||
|
+"""
|
||||||
|
+
|
||||||
|
+######################################################################
|
||||||
|
+# Description: FirmwareResetStatusChecker
|
||||||
|
+# OS Support : Linux/Windows.
|
||||||
|
+######################################################################
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+class FirmwareResetStatusChecker(object):
|
||||||
|
+
|
||||||
|
+ FirmwareUptimeStatusInit = 0x0
|
||||||
|
+ FirmwareUptimeStatusBeforeDone = 0x1
|
||||||
|
+ FirmwareUptimeStatusAfterDone = 0x2
|
||||||
|
+ FirmwareUptimeStatusError = 0x3
|
||||||
|
+
|
||||||
|
+ FirmwareResetStatusDone = 0x0
|
||||||
|
+ FirmwareResetStatusFailed = 0x1
|
||||||
|
+ FirmwareResetStatusUnknown = 0x2
|
||||||
|
+
|
||||||
|
+ def __init__(self, regAccessObj):
|
||||||
|
+ self._RegAccessObj = regAccessObj
|
||||||
|
+ self._UptimeBeforeReset = 0x0
|
||||||
|
+ self._UptimeBeforeStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusInit
|
||||||
|
+ self._UptimeAfterReset = 0x0
|
||||||
|
+ self._UptimeAfterStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusInit
|
||||||
|
+
|
||||||
|
+ def UpdateUptimeBeforeReset(self):
|
||||||
|
+ try:
|
||||||
|
+ self._UptimeBeforeReset = self._RegAccessObj.getFWUptime()
|
||||||
|
+ self._UptimeBeforeStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusBeforeDone
|
||||||
|
+ except Exception as e:
|
||||||
|
+ self._UptimeBeforeStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusError
|
||||||
|
+
|
||||||
|
+ def UpdateUptimeAfterReset(self):
|
||||||
|
+ try:
|
||||||
|
+ self._UptimeAfterReset = self._RegAccessObj.getFWUptime()
|
||||||
|
+ self._UptimeAfterStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusAfterDone
|
||||||
|
+ except Exception as e:
|
||||||
|
+ self._UptimeAfterStatus = FirmwareResetStatusChecker.FirmwareUptimeStatusError
|
||||||
|
+
|
||||||
|
+ def GetStatus(self):
|
||||||
|
+ if self._UptimeBeforeStatus == FirmwareResetStatusChecker.FirmwareUptimeStatusBeforeDone and\
|
||||||
|
+ self._UptimeAfterStatus == FirmwareResetStatusChecker.FirmwareUptimeStatusAfterDone:
|
||||||
|
+ if self._UptimeAfterReset < self._UptimeBeforeReset:
|
||||||
|
+ return FirmwareResetStatusChecker.FirmwareResetStatusDone
|
||||||
|
+ else:
|
||||||
|
+ if self._UptimeBeforeReset > 5: #5 seconds
|
||||||
|
+ return FirmwareResetStatusChecker.FirmwareResetStatusFailed
|
||||||
|
+ else:
|
||||||
|
+ return FirmwareResetStatusChecker.FirmwareResetStatusUnknown
|
||||||
|
+ return FirmwareResetStatusChecker.FirmwareResetStatusUnknown
|
@ -3,12 +3,15 @@
|
|||||||
Name: mstflint
|
Name: mstflint
|
||||||
Summary: Mellanox firmware burning tool
|
Summary: Mellanox firmware burning tool
|
||||||
Version: 4.11.0
|
Version: 4.11.0
|
||||||
Release: 2%{?dist}
|
Release: 3%{?dist}
|
||||||
License: GPLv2+ or BSD
|
License: GPLv2+ or BSD
|
||||||
Source: https://github.com/Mellanox/mstflint/releases/download/v4.11.0-2/mstflint-4.11.0-2.tar.gz
|
Group: Applications/System
|
||||||
Patch1: extend-buffer.patch
|
Source: https://github.com/Mellanox/mstflint/releases/download/v4.11.0-3/mstflint-4.11.0-3.tar.gz
|
||||||
Patch2: add-default-link-flags-for-shared-libraries.patch
|
Patch1: convert-format-for-mlxfwreset_status_checker.patch
|
||||||
Patch3: 0001-Fix-shebang-for-python-scripts.patch
|
Patch2: 0001-Fix-shebang-for-python-scripts.patch
|
||||||
|
Patch3: extend-buffer.patch
|
||||||
|
Patch4: add-default-link-flags-for-shared-libraries.patch
|
||||||
|
Patch6: replace-mlxfwreset-with-mstfwreset-in-mstflint-message.patch
|
||||||
Url: https://github.com/Mellanox/mstflint
|
Url: https://github.com/Mellanox/mstflint
|
||||||
BuildRequires: libstdc++-devel, zlib-devel, libibmad-devel, gcc-c++, gcc
|
BuildRequires: libstdc++-devel, zlib-devel, libibmad-devel, gcc-c++, gcc
|
||||||
BuildRequires: libcurl-devel, boost-devel, libxml2-devel, openssl-devel
|
BuildRequires: libcurl-devel, boost-devel, libxml2-devel, openssl-devel
|
||||||
@ -28,12 +31,12 @@ for network adapters based on Mellanox Technologies chips.
|
|||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
%patch3 -p1
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch6 -p1
|
||||||
find . -type f -iname '*.[ch]' -exec chmod a-x '{}' ';'
|
find . -type f -iname '*.[ch]' -exec chmod a-x '{}' ';'
|
||||||
find . -type f -iname '*.cpp' -exec chmod a-x '{}' ';'
|
find . -type f -iname '*.cpp' -exec chmod a-x '{}' ';'
|
||||||
|
|
||||||
%build
|
%build
|
||||||
export CFLAGS="$RPM_OPT_FLAGS"
|
|
||||||
export CXXFLAGS="$RPM_OPT_FLAGS"
|
|
||||||
%if %{__remake_config}
|
%if %{__remake_config}
|
||||||
./autogen.sh
|
./autogen.sh
|
||||||
%endif
|
%endif
|
||||||
@ -46,6 +49,15 @@ make DESTDIR=%{buildroot} install
|
|||||||
rm -fr %{buildroot}%{_includedir}
|
rm -fr %{buildroot}%{_includedir}
|
||||||
find %{buildroot} -type f -name '*.la' -delete
|
find %{buildroot} -type f -name '*.la' -delete
|
||||||
find %{buildroot} -type f -name '*.a' -delete
|
find %{buildroot} -type f -name '*.a' -delete
|
||||||
|
# python scripts with shebang should be installed as executable
|
||||||
|
find %{buildroot} -type f -name test.py -exec chmod -v a+x '{}' ';'
|
||||||
|
find %{buildroot} -type f -name mstfwreset.py -exec chmod -v a+x '{}' ';'
|
||||||
|
find %{buildroot} -type f -name mlxfwreset_mlnxdriver.py -exec chmod -v a+x '{}' ';'
|
||||||
|
find %{buildroot} -type f -name mlnx_peripheral_components.py -exec chmod -v a+x '{}' ';'
|
||||||
|
find %{buildroot} -type f -name mlxfwreset_status_checker.py -exec chmod -v a+x '{}' ';'
|
||||||
|
find %{buildroot} -type f -name mcra.py -exec chmod -v a+x '{}' ';'
|
||||||
|
find %{buildroot} -type f -name mlxfwreset_utils.py -exec chmod -v a+x '{}' ';'
|
||||||
|
find %{buildroot} -type f -name pci_device.py -exec chmod -v a+x '{}' ';'
|
||||||
|
|
||||||
%files
|
%files
|
||||||
%doc README
|
%doc README
|
||||||
@ -57,6 +69,10 @@ find %{buildroot} -type f -name '*.a' -delete
|
|||||||
%{_mandir}/man1/*
|
%{_mandir}/man1/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Feb 12 2019 Honggang Li <honli@redhat.com> - 4.11.0-3
|
||||||
|
- Rebase mstflint to latest upstream release v4.11.0-3
|
||||||
|
- Resolves: 1676338
|
||||||
|
|
||||||
* Fri Feb 1 2019 Honggang Li <honli@redhat.com> - 4.11.0-2
|
* Fri Feb 1 2019 Honggang Li <honli@redhat.com> - 4.11.0-2
|
||||||
- Rebase mstflint to latest upstream release v4.11.0-2
|
- Rebase mstflint to latest upstream release v4.11.0-2
|
||||||
- Resolves: bz1671710
|
- Resolves: bz1671710
|
||||||
|
26
replace-mlxfwreset-with-mstfwreset-in-mstflint-message.patch
Normal file
26
replace-mlxfwreset-with-mstfwreset-in-mstflint-message.patch
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
diff --git a/flint/subcommands.cpp b/flint/subcommands.cpp
|
||||||
|
index 8c85e55..0822e8b 100644
|
||||||
|
--- a/flint/subcommands.cpp
|
||||||
|
+++ b/flint/subcommands.cpp
|
||||||
|
@@ -2997,7 +2997,7 @@ FlintStatus SgSubCommand::sgFs2()
|
||||||
|
return FLINT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
-#define FW_RESET_MSG "To load new configuration run mlxfwreset or reboot machine"
|
||||||
|
+#define FW_RESET_MSG "To load new configuration run mstfwreset or reboot machine"
|
||||||
|
|
||||||
|
FlintStatus SgSubCommand::sgFs3()
|
||||||
|
{
|
||||||
|
diff --git a/mlxfwops/lib/flint_base.h b/mlxfwops/lib/flint_base.h
|
||||||
|
index eb434dc..e851085 100644
|
||||||
|
--- a/mlxfwops/lib/flint_base.h
|
||||||
|
+++ b/mlxfwops/lib/flint_base.h
|
||||||
|
@@ -394,7 +394,7 @@ struct BOARD_ID {
|
||||||
|
#define TLV_FORMAT_SECT "TLVs format section"
|
||||||
|
#define TRACER_HASH_SECT "Tracer Hash section"
|
||||||
|
#define REBOOT_REQUIRED_STR "To load new FW run reboot machine."
|
||||||
|
-#define REBOOT_OR_FWRESET_REQUIRED_STR "To load new FW run mlxfwreset or reboot machine."
|
||||||
|
+#define REBOOT_OR_FWRESET_REQUIRED_STR "To load new FW run mstfwreset or reboot machine."
|
||||||
|
#define numbel(x) (sizeof(x) / sizeof((x)[0]))
|
||||||
|
|
||||||
|
void report(const char *format, ...);
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
SHA512 (mstflint-4.11.0-2.tar.gz) = 0fa0152a427401bb9ff39c4d27f28dbfc9218c69f9bc0db003ceb3cd696d8875c90fd3bd0cd46c75719a4694c624fccfe7fcd0655c5d1d307f7c917a5b40a876
|
SHA512 (mstflint-4.11.0-3.tar.gz) = a7482442df08f97a6e225f8352ce17d361abda1ebe1cff6e9350ece31aaa36c1a7fb1d28751acef7a40ef9f53801aa9b4bfe97f210a9a97c3d2030961dc99da3
|
||||||
|
Loading…
Reference in New Issue
Block a user