From 783f0ae19935ceb66a52ca614854aba6aa33a891 Mon Sep 17 00:00:00 2001 From: Funda Wang Date: Sun, 10 Aug 2025 23:20:15 +0800 Subject: [PATCH] 1.89.0 --- 0001-Use-lld-provided-by-system.patch | 20 +-- 0001-add-support-for-ppc64le.patch | 8 +- cargo_vendor.attr | 2 + cargo_vendor.prov | 127 ++++++++++++++++++ ...st-1.88.0-aarch64-unknown-linux-gnu.tar.xz | 4 +- ....88.0-loongarch64-unknown-linux-gnu.tar.xz | 4 +- ...-1.88.0-riscv64gc-unknown-linux-gnu.tar.xz | 4 +- ...ust-1.88.0-x86_64-unknown-linux-gnu.tar.xz | 4 +- rust.spec | 22 ++- rustc-1.88.0-src.tar.xz | 3 - rustc-1.88.0-src.tar.xz.asc | 16 --- rustc-1.89.0-src.tar.xz | 3 + rustc-1.89.0-src.tar.xz.asc | 16 +++ 13 files changed, 187 insertions(+), 46 deletions(-) create mode 100644 cargo_vendor.attr create mode 100644 cargo_vendor.prov rename rust-1.87.0-aarch64-unknown-linux-gnu.tar.xz => rust-1.88.0-aarch64-unknown-linux-gnu.tar.xz (32%) rename rust-1.87.0-loongarch64-unknown-linux-gnu.tar.xz => rust-1.88.0-loongarch64-unknown-linux-gnu.tar.xz (32%) rename rust-1.87.0-riscv64gc-unknown-linux-gnu.tar.xz => rust-1.88.0-riscv64gc-unknown-linux-gnu.tar.xz (32%) rename rust-1.87.0-x86_64-unknown-linux-gnu.tar.xz => rust-1.88.0-x86_64-unknown-linux-gnu.tar.xz (32%) delete mode 100644 rustc-1.88.0-src.tar.xz delete mode 100644 rustc-1.88.0-src.tar.xz.asc create mode 100644 rustc-1.89.0-src.tar.xz create mode 100644 rustc-1.89.0-src.tar.xz.asc diff --git a/0001-Use-lld-provided-by-system.patch b/0001-Use-lld-provided-by-system.patch index 63c9b14..1e5816b 100644 --- a/0001-Use-lld-provided-by-system.patch +++ b/0001-Use-lld-provided-by-system.patch @@ -1,4 +1,4 @@ -From 687112c89c9058ef1e79f1c3a974940b1ae43ea3 Mon Sep 17 00:00:00 2001 +From 0641fdd833785914f1ead6e1ab374beea5b55437 Mon Sep 17 00:00:00 2001 From: Josh Stone Date: Fri, 16 Aug 2024 10:12:58 -0700 Subject: [PATCH] Use lld provided by system @@ -12,10 +12,10 @@ Subject: [PATCH] Use lld provided by system 5 files changed, 5 insertions(+), 4 deletions(-) diff --git a/compiler/rustc_target/src/spec/base/wasm.rs b/compiler/rustc_target/src/spec/base/wasm.rs -index 81b96cd39ffa..4c9916af826b 100644 +index 88e7af5e669..14100a683f9 100644 --- a/compiler/rustc_target/src/spec/base/wasm.rs +++ b/compiler/rustc_target/src/spec/base/wasm.rs -@@ -85,8 +85,7 @@ macro_rules! args { +@@ -86,8 +86,7 @@ macro_rules! args { // arguments just yet limit_rdylib_exports: false, @@ -26,7 +26,7 @@ index 81b96cd39ffa..4c9916af826b 100644 pre_link_args, diff --git a/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs b/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs -index 3b719ebaf07e..8b4fecee68f0 100644 +index 35a4dd72b86..a9c8fc5edb8 100644 --- a/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs +++ b/compiler/rustc_target/src/spec/targets/aarch64_unknown_none_softfloat.rs @@ -15,7 +15,7 @@ pub(crate) fn target() -> Target { @@ -39,7 +39,7 @@ index 3b719ebaf07e..8b4fecee68f0 100644 relocation_model: RelocModel::Static, disable_redzone: true, diff --git a/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs b/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs -index 9656024ddaa1..2099fa17229f 100644 +index 327b52389b9..17313d7e8b3 100644 --- a/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs +++ b/compiler/rustc_target/src/spec/targets/aarch64_unknown_uefi.rs @@ -9,6 +9,7 @@ pub(crate) fn target() -> Target { @@ -51,7 +51,7 @@ index 9656024ddaa1..2099fa17229f 100644 Target { llvm_target: "aarch64-unknown-windows".into(), diff --git a/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs b/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs -index e14a36735894..b493d7d98b46 100644 +index 1a6343595f5..8015b082cd1 100644 --- a/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs +++ b/compiler/rustc_target/src/spec/targets/x86_64_unknown_none.rs @@ -19,7 +19,7 @@ pub(crate) fn target() -> Target { @@ -64,17 +64,17 @@ index e14a36735894..b493d7d98b46 100644 features: "-mmx,-sse,-sse2,-sse3,-ssse3,-sse4.1,-sse4.2,-avx,-avx2,+soft-float".into(), supported_sanitizers: SanitizerSet::KCFI | SanitizerSet::KERNELADDRESS, diff --git a/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs b/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs -index bce6aa0ebc6b..7fa1148a1de7 100644 +index 0cf6a879462..3677fc662de 100644 --- a/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs +++ b/compiler/rustc_target/src/spec/targets/x86_64_unknown_uefi.rs -@@ -14,6 +14,7 @@ pub(crate) fn target() -> Target { +@@ -15,6 +15,7 @@ pub(crate) fn target() -> Target { base.plt_by_default = false; base.max_atomic_width = Some(64); - base.entry_abi = Conv::X86_64Win64; + base.entry_abi = CanonAbi::X86(X86Call::Win64); + base.linker = Some("lld".into()); // We disable MMX and SSE for now, even though UEFI allows using them. Problem is, you have to // enable these CPU features explicitly before their first use, otherwise their instructions -- -2.48.1 +2.49.0 diff --git a/0001-add-support-for-ppc64le.patch b/0001-add-support-for-ppc64le.patch index edd94fe..30b86e1 100644 --- a/0001-add-support-for-ppc64le.patch +++ b/0001-add-support-for-ppc64le.patch @@ -9,7 +9,7 @@ Subject: [PATCH] add support for ppc64le .../spec/targets/ppc64le_unknown_linux_gnu.rs | 23 +++++++++++++++++++ .../targets/ppc64le_unknown_linux_musl.rs | 23 +++++++++++++++++++ src/bootstrap/configure.py | 5 ++++ - vendor/openssl-src-300.4.2+3.4.1/src/lib.rs | 3 +++ + vendor/openssl-src-300.5.0+3.5.0/src/lib.rs | 3 +++ vendor/target-lexicon-0.13.1/src/targets.rs | 3 +++ 7 files changed, 82 insertions(+) create mode 100644 compiler/rustc_target/src/spec/targets/ppc64le_unknown_freebsd.rs @@ -132,10 +132,10 @@ index 0d4d6e0ff..5d0e213b3 100755 v( "musl-root-riscv32gc", "target.riscv32gc-unknown-linux-musl.musl-root", -diff --git a/vendor/openssl-src-300.4.2+3.4.1/src/lib.rs b/vendor/openssl-src-300.4.2+3.4.1/src/lib.rs +diff --git a/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs b/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs index f7d19d95d..9b574b1e5 100644 ---- a/vendor/openssl-src-300.4.2+3.4.1/src/lib.rs -+++ b/vendor/openssl-src-300.4.2+3.4.1/src/lib.rs +--- a/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs ++++ b/vendor/openssl-src-300.5.0+3.5.0/src/lib.rs @@ -368,6 +368,9 @@ impl Build { "powerpc64le-unknown-freebsd" => "BSD-ppc64le", "powerpc64le-unknown-linux-gnu" => "linux-ppc64le", diff --git a/cargo_vendor.attr b/cargo_vendor.attr new file mode 100644 index 0000000..be2d48f --- /dev/null +++ b/cargo_vendor.attr @@ -0,0 +1,2 @@ +%__cargo_vendor_path ^%{_defaultlicensedir}(/[^/]+)+/cargo-vendor.txt$ +%__cargo_vendor_provides %{_rpmconfigdir}/cargo_vendor.prov diff --git a/cargo_vendor.prov b/cargo_vendor.prov new file mode 100644 index 0000000..6efca18 --- /dev/null +++ b/cargo_vendor.prov @@ -0,0 +1,127 @@ +#! /usr/bin/python3 -s +# Stripped down replacement for cargo2rpm parse-vendor-manifest + +import re +import subprocess +import sys +from typing import Optional + + +VERSION_REGEX = re.compile( + r""" + ^ + (?P0|[1-9]\d*) + \.(?P0|[1-9]\d*) + \.(?P0|[1-9]\d*) + (?:-(?P
(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?
+    (?:\+(?P[0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
+    """,
+    re.VERBOSE,
+)
+
+
+class Version:
+    """
+    Version that adheres to the "semantic versioning" format.
+    """
+
+    def __init__(self, major: int, minor: int, patch: int, pre: Optional[str] = None, build: Optional[str] = None):
+        self.major: int = major
+        self.minor: int = minor
+        self.patch: int = patch
+        self.pre: Optional[str] = pre
+        self.build: Optional[str] = build
+
+    @staticmethod
+    def parse(version: str) -> "Version":
+        """
+        Parses a version string and return a `Version` object.
+        Raises a `ValueError` if the string does not match the expected format.
+        """
+
+        match = VERSION_REGEX.match(version)
+        if not match:
+            raise ValueError(f"Invalid version: {version!r}")
+
+        matches = match.groupdict()
+
+        major_str = matches["major"]
+        minor_str = matches["minor"]
+        patch_str = matches["patch"]
+        pre = matches["pre"]
+        build = matches["build"]
+
+        major = int(major_str)
+        minor = int(minor_str)
+        patch = int(patch_str)
+
+        return Version(major, minor, patch, pre, build)
+
+    def to_rpm(self) -> str:
+        """
+        Formats the `Version` object as an equivalent RPM version string.
+        Characters that are invalid in RPM versions are replaced ("-" -> "_")
+
+        Build metadata (the optional `Version.build` attribute) is dropped, so
+        the conversion is not lossless for versions where this attribute is not
+        `None`. However, build metadata is not intended to be part of the
+        version (and is not even considered when doing version comparison), so
+        dropping it when converting to the RPM version format is correct.
+        """
+
+        s = f"{self.major}.{self.minor}.{self.patch}"
+        if self.pre:
+            s += f"~{self.pre.replace('-', '_')}"
+        return s
+
+
+def break_the_build(error: str):
+    """
+    This function writes a string that is an invalid RPM dependency specifier,
+    which causes dependency generators to fail and break the build. The
+    additional error message is printed to stderr.
+    """
+
+    print("*** FATAL ERROR ***")
+    print(error, file=sys.stderr)
+
+ 
+def get_cargo_vendor_txt_paths_from_stdin() -> set[str]:  # pragma nocover
+    """
+    Read lines from standard input and filter out lines that look like paths
+    to `cargo-vendor.txt` files. This is how RPM generators pass lists of files.
+    """
+
+    lines = {line.rstrip("\n") for line in sys.stdin.readlines()}
+    return {line for line in lines if line.endswith("/cargo-vendor.txt")}
+
+
+def action_parse_vendor_manifest():
+    paths = get_cargo_vendor_txt_paths_from_stdin()
+
+    for path in paths:
+        with open(path) as file:
+            manifest = file.read()
+
+        for line in manifest.strip().splitlines():
+            crate, version = line.split(" v")
+            print(f"bundled(crate({crate})) = {Version.parse(version).to_rpm()}")
+
+
+def main():
+    try:
+        action_parse_vendor_manifest()
+        exit(0)
+
+    # print an error message that is not a valid RPM dependency
+    # to cause the generator to break the build
+    except (IOError, ValueError) as exc:
+        break_the_build(str(exc))
+        exit(1)
+
+    break_the_build("Uncaught exception: This should not happen, please report a bug.")
+    exit(1)
+
+
+if __name__ == "__main__":
+    main()
diff --git a/rust-1.87.0-aarch64-unknown-linux-gnu.tar.xz b/rust-1.88.0-aarch64-unknown-linux-gnu.tar.xz
similarity index 32%
rename from rust-1.87.0-aarch64-unknown-linux-gnu.tar.xz
rename to rust-1.88.0-aarch64-unknown-linux-gnu.tar.xz
index 910db29..ba45e2c 100644
--- a/rust-1.87.0-aarch64-unknown-linux-gnu.tar.xz
+++ b/rust-1.88.0-aarch64-unknown-linux-gnu.tar.xz
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:0bd04d32129f03465c1d2cae66f99d8c1c6d33c070b0e19b80a66b2b31ae6b9e
-size 167259360
+oid sha256:d5decc46123eb888f809f2ee3b118d13586a37ffad38afaefe56aa7139481d34
+size 165627944
diff --git a/rust-1.87.0-loongarch64-unknown-linux-gnu.tar.xz b/rust-1.88.0-loongarch64-unknown-linux-gnu.tar.xz
similarity index 32%
rename from rust-1.87.0-loongarch64-unknown-linux-gnu.tar.xz
rename to rust-1.88.0-loongarch64-unknown-linux-gnu.tar.xz
index eccf1c2..c2eef25 100644
--- a/rust-1.87.0-loongarch64-unknown-linux-gnu.tar.xz
+++ b/rust-1.88.0-loongarch64-unknown-linux-gnu.tar.xz
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:28c9fac570b64f135d1901acceb94cf95eb842ab827e253d14ea60e6745f9d7d
-size 261506320
+oid sha256:351293deeac73e30c3d67db28a4894642d132e934aeeda44eedf8df036a88c97
+size 261520268
diff --git a/rust-1.87.0-riscv64gc-unknown-linux-gnu.tar.xz b/rust-1.88.0-riscv64gc-unknown-linux-gnu.tar.xz
similarity index 32%
rename from rust-1.87.0-riscv64gc-unknown-linux-gnu.tar.xz
rename to rust-1.88.0-riscv64gc-unknown-linux-gnu.tar.xz
index d246419..2227c3c 100644
--- a/rust-1.87.0-riscv64gc-unknown-linux-gnu.tar.xz
+++ b/rust-1.88.0-riscv64gc-unknown-linux-gnu.tar.xz
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:c00530599eb2440856129569164471426c2e6ae8f8a8f7047a75f63284d15590
-size 250242712
+oid sha256:3021ad1c6f5c5d177546f9890acaac105fbfc211bfd4b11fc06156f85112df09
+size 250151976
diff --git a/rust-1.87.0-x86_64-unknown-linux-gnu.tar.xz b/rust-1.88.0-x86_64-unknown-linux-gnu.tar.xz
similarity index 32%
rename from rust-1.87.0-x86_64-unknown-linux-gnu.tar.xz
rename to rust-1.88.0-x86_64-unknown-linux-gnu.tar.xz
index 9e97402..9d59770 100644
--- a/rust-1.87.0-x86_64-unknown-linux-gnu.tar.xz
+++ b/rust-1.88.0-x86_64-unknown-linux-gnu.tar.xz
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:9720bf4ffdd5e6112f8fc93a645d50bfdc64f95cb76d41561be196e1721b4b69
-size 198639092
+oid sha256:7b5437c1d18a174faae253a18eac22c32288dccfc09ff78d5ee99b7467e21bca
+size 197237052
diff --git a/rust.spec b/rust.spec
index 3fda1c4..c78c945 100644
--- a/rust.spec
+++ b/rust.spec
@@ -1,8 +1,8 @@
 %define _lto_cflags %{nil}
-%global bootstrap_rust 1.87.0
-%global bootstrap_cargo 1.87.0
-%global bootstrap_channel 1.87.0
-%global bootstrap_date 2025-05-15
+%global bootstrap_rust 1.88.0
+%global bootstrap_cargo 1.88.0
+%global bootstrap_channel 1.88.0
+%global bootstrap_date 2025-06-26
 %global bootstrap_arches x86_64 aarch64 riscv64 loongarch64
 %bcond_with llvm_static
 %ifarch x86_64 aarch64 riscv64
@@ -26,7 +26,7 @@
 %endif
 
 Name:                rust
-Version:             1.88.0
+Version:             1.89.0
 Release:             1
 Summary:             The Rust Programming Language
 License:             Apache-2.0 OR MIT
@@ -38,6 +38,9 @@ Source2:             https://static.rust-lang.org/rust-key.gpg.ascii
 Source3:             cargo-config
 Source4:             cargo-config.sh
 Source5:             cargo-config.csh
+# Simple rpm macros for rust-toolset
+Source102:           cargo_vendor.attr
+Source103:           cargo_vendor.prov
 
 Patch0000:           rustc-1.88.0-disable-libssh2.patch
 # By default, rust tries to use "rust-lld" as a linker for some targets.
@@ -437,6 +440,10 @@ install -m 0644 -D -p %{SOURCE3} %{buildroot}%{_sysconfdir}/skel/.cargo/config.t
 install -m 0644 -D -p %{SOURCE4} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.sh
 install -m 0644 -D -p %{SOURCE5} %{buildroot}%{_sysconfdir}/profile.d/cargo-config.csh
 
+# This allows users to build packages using Rust Toolset.
+%{__install} -D -m 644 %{S:102} %{buildroot}%{_fileattrsdir}/cargo_vendor.attr
+%{__install} -D -m 755 %{S:103} %{buildroot}%{_rpmconfigdir}/cargo_vendor.prov
+
 %if %without lldb
 rm -f %{buildroot}%{_bindir}/rust-lldb
 rm -f %{buildroot}%{rustlibdir}/etc/lldb_*
@@ -521,6 +528,8 @@ export %{rust_env}
 %{_datadir}/zsh/site-functions/_cargo
 %dir %{_datadir}/cargo
 %dir %{_datadir}/cargo/registry
+%{_fileattrsdir}/cargo_vendor.attr
+%{_rpmconfigdir}/cargo_vendor.prov
 
 %files -n rustfmt
 %{_bindir}/rustfmt
@@ -557,6 +566,9 @@ export %{rust_env}
 %{_mandir}/man1/cargo*.1*
 
 %changelog
+* Sun Aug 10 2025 Funda Wang  - 1.89.0-1
+- update to 1.89.0
+
 * Wed Jul 09 2025 wangkai <13474090681@163.com> - 1.88.0-1
 - Update to 1.88.0
 
diff --git a/rustc-1.88.0-src.tar.xz b/rustc-1.88.0-src.tar.xz
deleted file mode 100644
index 6cb272d..0000000
--- a/rustc-1.88.0-src.tar.xz
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0c1dcbb4f762513d021e1a282c0ac58c0a423642b3a6bf581cafb5414df4193e
-size 283294344
diff --git a/rustc-1.88.0-src.tar.xz.asc b/rustc-1.88.0-src.tar.xz.asc
deleted file mode 100644
index 107eb94..0000000
--- a/rustc-1.88.0-src.tar.xz.asc
+++ /dev/null
@@ -1,16 +0,0 @@
------BEGIN PGP SIGNATURE-----
-
-wsFcBAABCgAQBQJoXYfjCRCFq5bm+hvl/gAAcC4P/0fV1Eg92tJyudEcsWBYkdX4
-9rOXZvbHxmzQK+DBjvtfPMLU/WBOIcGGaWjXMEKnII7kQXZNi3TIwmmZ13Y23sar
-XrDaHJyYQZJIUEdxNGAbRCQzKHdDDh711gc7M4NOmIIOsUVj8rmL+mxvHs4Mxqco
-7mFB9s8E+JA+RPi5g+gTJiFvVCs50LggB5iNRL/mGkjw+zQ9Qge3qWSHCm0dG4Ws
-mzaal46ozH1LLBjVLX1O3a487HNIdP3JoSZMy/Sxn8ev3cDZNxOtG08cjjHckbLG
-ToPq4FwwL/EsnzPpwRNhDsLQ9z8gV37Zg0rGvxrmFEgdh9UUlOaEmsrz0HNbjHPD
-TAIBX0zsD1nXY4Yh9A3KqM9t60O1+ichhn5N8hAQU4yhMedRa3JAuMZl+j/a6HLz
-O+E4+CruB9A9DK+apNqj8hYeiPnPPd9Zou/31HrZj/826YqwoPmOR6Drn25UU6Ps
-lXTzyeIhcI5et6NJ1Od+tjNyhwuzNCxp2cn8X/CETlOQ1aFGxi8rOUimkuM3RetG
-GQhA39ZxwosQJZMPg2SZegVT/DkenWL1ui4Qv5IcdUGb0dj5wR5m7tlXd6u1Kqx0
-TfxxdkjA0rk/GPIf5EO8aJEjWlQl2YDSvvLZh74klYnBc6dYZzg09JXSX0CDztVf
-xgmBaId7hktOVTR9kLZ6
-=JaqZ
------END PGP SIGNATURE-----
diff --git a/rustc-1.89.0-src.tar.xz b/rustc-1.89.0-src.tar.xz
new file mode 100644
index 0000000..67e486c
--- /dev/null
+++ b/rustc-1.89.0-src.tar.xz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b9d55610d8270e06c44f459d1e2b7918a5e673809c592abed9b9c600e33d95a
+size 267487572
diff --git a/rustc-1.89.0-src.tar.xz.asc b/rustc-1.89.0-src.tar.xz.asc
new file mode 100644
index 0000000..69a18ea
--- /dev/null
+++ b/rustc-1.89.0-src.tar.xz.asc
@@ -0,0 +1,16 @@
+-----BEGIN PGP SIGNATURE-----
+
+wsFcBAABCgAQBQJolIKUCRCFq5bm+hvl/gAACcwP/RMAApfQhwjuIxzxAFLRs0m2
+Al+GRyYsCEU0xDeylPNEu3v8q4H6iyPL4sZhZGQ/TGOG6jtLNu6cL6FM+rl0zqgQ
+PUleBB7p+ksaFO6zxSJd9VlLbe8ExpGvmLsPrpWeCHLbkHiYBV8iCabel/fq0GqN
+SPevw6RZSsYVaed+lx9xGhjW4TVM67E0OLCvuWWM6VQZdY14VkhqvIyC+TFh3b3v
++H1obinUgqp7U3zQUR9w1jQ8/2M8kE7q+ER1RrgFJaog64XxHIaavDjgFepEmWRV
+8bbaS4ds3UAEq1SR62riTuna+7jx8KYuceAd1HXj4XG98jSHgU8VPR85way/kX7e
+M4XR7rLvIFwmL99zl4qGyw4HDXhslVjgwHKMIRMY2gVjfmrrUz/uj5+hsk7jqgn6
+dLKPTyBt9394sFEsSMj/nVbAbJt4REGtav0lir2c7si0fFcDklDTU8vpZ0YnHDYz
+D4zU740d64FbokTcRIlwZ1N63TxC/4R44Q+NWIYsP3SGbkRaTk9z484Sdfqa9n93
+7rkb+Pu3Ft6Re2nkgI4rHKeqycYAtDep7oRKjM6jmuo+bDbw4dWf97xB0+prJfzE
+eG6ntMEi0mPhPRCUVpbKftLZKdy1Ti2f9++QNjzSPlbp1ZrtzODlmPoXBZUmcuCB
+dXuwHP1NxyIppvQXrP68
+=gpjR
+-----END PGP SIGNATURE-----
-- 
Gitee