diff options
author | wiz <wiz@pkgsrc.org> | 2018-09-21 14:27:37 +0000 |
---|---|---|
committer | wiz <wiz@pkgsrc.org> | 2018-09-21 14:27:37 +0000 |
commit | d89b055554a0f68ab145f4cc654a180949dcc9f9 (patch) | |
tree | 81edca79b5f4f6e8013343747641bccaa17bb4d5 /news | |
parent | f710299e1a0b20f5aaa90bdccc60aa55edd3c766 (diff) | |
download | pkgsrc-d89b055554a0f68ab145f4cc654a180949dcc9f9.tar.gz |
slrn: update to 1.0.3a.
Update provided by Michael Bäuerle via wip.
Version 1.0.3 release notes
===========================
Version 1.0.3 is primarily a bug-fix release. See changes.txt for
details.
Support for SSLv3 has been disabled since it is to POODLE attacks.
On 32 bit systems, support has been added for files larger than 2GB.
Support added for both 32 and 64 bit mingw and cygwin compilers.
Version 1.0.2 release notes
===========================
Version 1.0.2 is primarily a bug-fix release. See changes.txt for
details.
Note: slang version 2.2.3 or later is required. Version 2.3.0 is
the current version.
The intrinsic function get_header_flags was modified to return the
full set of flags when called with an optional argument. Symbolic
constants for the corresponding flags were added to the interpreter
interface.
The value for query_read_group_cutoff was increased to 1000.
Support for building slrnpull on win32 systems was added.
Diffstat (limited to 'news')
-rw-r--r-- | news/slrn/Makefile | 16 | ||||
-rw-r--r-- | news/slrn/distinfo | 21 | ||||
-rw-r--r-- | news/slrn/options.mk | 16 | ||||
-rw-r--r-- | news/slrn/patches/patch-changes.txt | 29 | ||||
-rw-r--r-- | news/slrn/patches/patch-doc_manual.txt | 32 | ||||
-rw-r--r-- | news/slrn/patches/patch-doc_slrn.rc | 28 | ||||
-rw-r--r-- | news/slrn/patches/patch-po_Makefile.in.in (renamed from news/slrn/patches/patch-af) | 4 | ||||
-rw-r--r-- | news/slrn/patches/patch-src_art.c | 60 | ||||
-rw-r--r-- | news/slrn/patches/patch-src_misc.c | 15 | ||||
-rw-r--r-- | news/slrn/patches/patch-src_misc.h | 14 | ||||
-rw-r--r-- | news/slrn/patches/patch-src_post.c | 66 | ||||
-rw-r--r-- | news/slrn/patches/patch-src_slrnfeat.hin | 2 | ||||
-rw-r--r-- | news/slrn/patches/patch-src_startup.c | 17 | ||||
-rw-r--r-- | news/slrn/patches/patch-src_version.c | 18 |
14 files changed, 318 insertions, 20 deletions
diff --git a/news/slrn/Makefile b/news/slrn/Makefile index 989983ca0fc..8a676143522 100644 --- a/news/slrn/Makefile +++ b/news/slrn/Makefile @@ -1,21 +1,20 @@ -# $NetBSD: Makefile,v 1.62 2018/03/22 08:14:52 adam Exp $ +# $NetBSD: Makefile,v 1.63 2018/09/21 14:27:37 wiz Exp $ -DISTNAME= slrn-1.0.1 -PKGREVISION= 2 +DISTNAME= slrn-1.0.3a CATEGORIES= news -MASTER_SITES= ${MASTER_SITE_SOURCEFORGE:=slrn/} +MASTER_SITES= http://jedsoft.org/releases/slrn/ +EXTRACT_SUFX= .tar.bz2 MAINTAINER= pkgsrc-users@NetBSD.org HOMEPAGE= http://slrn.sourceforge.net/ COMMENT= Highly customizable threaded newsreader LICENSE= gnu-gpl-v2 -# gcc: error: art.o: No such file or directory -# gcc: error: art_misc.o: No such file or directory -# gcc: error: art_sort.o: No such file or directory - +EXTRACT_USING= bsdtar MAKE_JOBS_SAFE= no +WRKSRC= ${WRKDIR}/slrn-1.0.3 + USE_PKGLOCALEDIR= yes GNU_CONFIGURE= yes CONFIGURE_ARGS+= --disable-inews --with-slrnpull --enable-spool \ @@ -28,6 +27,7 @@ CONFIGURE_ARGS+= --disable-inews --with-slrnpull --enable-spool \ LDFLAGS.SunOS+= -lsocket -lnsl +BUILDLINK_API_DEPENDS.libslang2+= libslang2>=2.2.3 .include "../../devel/libslang2/buildlink3.mk" .include "../../devel/gettext-lib/buildlink3.mk" .include "../../mk/bsd.pkg.mk" diff --git a/news/slrn/distinfo b/news/slrn/distinfo index e9ad553c8b2..1053eb2439f 100644 --- a/news/slrn/distinfo +++ b/news/slrn/distinfo @@ -1,8 +1,17 @@ -$NetBSD: distinfo,v 1.17 2015/11/02 23:49:47 agc Exp $ +$NetBSD: distinfo,v 1.18 2018/09/21 14:27:37 wiz Exp $ -SHA1 (slrn-1.0.1.tar.gz) = 9ad41ec3894d2b6b1ae8f158e994a8f138540baa -RMD160 (slrn-1.0.1.tar.gz) = 4a1aa5b3a209e8aac50df0e5557eabfe22b13622 -SHA512 (slrn-1.0.1.tar.gz) = fd2eecb7a82c078b401a8cf8c0e54166d508418f4064c3b074a33dcf2aa1c7a38ce324fee108c5d14e63a385fb6e45b82477f24f9a359870160d12ecb39440b5 -Size (slrn-1.0.1.tar.gz) = 1529545 bytes -SHA1 (patch-af) = 7b9507c68cefa913ebeb0e44c4ca0ad70956a3bd +SHA1 (slrn-1.0.3a.tar.bz2) = 898d09685f5fe159f23829cd21e15308f5dce822 +RMD160 (slrn-1.0.3a.tar.bz2) = dd5f5df5d508b8e0c5b136093f24121af31d3432 +SHA512 (slrn-1.0.3a.tar.bz2) = 11cef2dfe41f441af15acc22fb675cf607e932f0dd6d4a998e51ecda05c9a50d7abf10a3e693ffc857ad77e09634f460404e4d5b289169e7bbffdaf5d6d565a3 +Size (slrn-1.0.3a.tar.bz2) = 997138 bytes +SHA1 (patch-changes.txt) = 185a9b2f918f15b1b66f492412883d77e57bab40 +SHA1 (patch-doc_manual.txt) = 216f8696b44b59c56a83655a868116932fe76e1d +SHA1 (patch-doc_slrn.rc) = b2a3cf7c21f291c9b75f27596ae31e268a8275e8 +SHA1 (patch-po_Makefile.in.in) = 2b91ae3934b3b2b52a264129af08078ac622ce6a +SHA1 (patch-src_art.c) = 70e4408827d3c67010ccb5b515c8d037f3f3b6b8 +SHA1 (patch-src_misc.c) = db64dad237e7eb348e32b772e1546e8b5440593c +SHA1 (patch-src_misc.h) = a65145ecf87e7a9380940963aaeb81c35b9cb3b5 +SHA1 (patch-src_post.c) = e2f16323b2b0119e8d76779619f774dc0df663af SHA1 (patch-src_slrnfeat.hin) = a115a2f7de61acd5c296fb3696a3cb97226ea121 +SHA1 (patch-src_startup.c) = bab29e395d2710acb7f9db4911873b5c8073aff8 +SHA1 (patch-src_version.c) = d622ec61fbd1c8db2a124bae63f68251a7885327 diff --git a/news/slrn/options.mk b/news/slrn/options.mk index 7d4489e872b..b34b46e6df3 100644 --- a/news/slrn/options.mk +++ b/news/slrn/options.mk @@ -1,12 +1,22 @@ -# $NetBSD: options.mk,v 1.2 2014/08/23 09:34:48 obache Exp $ +# $NetBSD: options.mk,v 1.3 2018/09/21 14:27:37 wiz Exp $ PKG_OPTIONS_VAR= PKG_OPTIONS.slrn -PKG_SUPPORTED_OPTIONS= ssl uulib -PKG_SUGGESTED_OPTIONS= ssl +PKG_SUPPORTED_OPTIONS= canlock ssl uulib +PKG_SUGGESTED_OPTIONS= canlock ssl uulib .include "../../mk/bsd.options.mk" ### +### canlock support +### +.if !empty(PKG_OPTIONS:Mcanlock) +. include "../../news/libcanlock/buildlink3.mk" +CONFIGURE_ARGS+= --with-canlock=${BUILDLINK_PREFIX.libcanlock} +.else +CONFIGURE_ARGS+= --without-canlock +.endif + +### ### SSL support ### .if !empty(PKG_OPTIONS:Mssl) diff --git a/news/slrn/patches/patch-changes.txt b/news/slrn/patches/patch-changes.txt new file mode 100644 index 00000000000..86fe12cdd40 --- /dev/null +++ b/news/slrn/patches/patch-changes.txt @@ -0,0 +1,29 @@ +$NetBSD: patch-changes.txt,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Changelog updated. + +--- changes.txt.orig 2016-10-23 22:34:16.000000000 +0000 ++++ changes.txt +@@ -1,4 +1,12 @@ + -*- mode: text; mode: fold -*- ++ ++Changes since 1.0.3 ++1. Cancel-Locks now using API version 3 of the canlock library (--with-canlock). ++ The hash algorithm can be configured with the new variable "canlock_algo". ++ (Michael Baeuerle) ++ ++{{{ Previous Versions ++ + Changes since 1.0.2 + 1. src/parse2822.c: A quoted-string in the display portion of an + address was not being marked as allowing mime-encoded text. +@@ -30,9 +38,6 @@ Changes since 1.0.2 + 15. Updates for mingw and cygwin 32 and 64 bit systems. + 16. src/mime.c: rfc1522_encode_word: max_nbytes was not being properly + limit checked. +- +-{{{ Previous Versions +- + Changes since 1.0.1 + 1. src/misc.c: slrn_verror needed va_copy when writing to the log file. + 2. src/post.c: Move the cursor to the end of the line when querying diff --git a/news/slrn/patches/patch-doc_manual.txt b/news/slrn/patches/patch-doc_manual.txt new file mode 100644 index 00000000000..2de763dacc5 --- /dev/null +++ b/news/slrn/patches/patch-doc_manual.txt @@ -0,0 +1,32 @@ +$NetBSD: patch-doc_manual.txt,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Added documentation for new config option "canlock_algo". + +--- doc/manual.txt.orig 2016-10-23 22:34:16.000000000 +0000 ++++ doc/manual.txt +@@ -63,6 +63,7 @@ + 6.5 beep + 6.6 broken_xref + 6.7 cansecret_file ++ 6.7.1 canlock_algo + 6.8 cc_followup + 6.9 cc_post_string + 6.10 charset +@@ -1652,6 +1653,17 @@ + canlock) and that cancel locks only have an effect if the server + supports them. + ++ 6.7.1. canlock_algo ++ ++ Type: string ++ Default: "SHA256" ++ ++ If slrn is configured to put cancel-locks into the articles you post, ++ then this variable is used to select the hash algorithm for <scheme> ++ and HMAC (used as recommended in Section 4 of RFC 8315). ++ ++ The default value is the mandatory hash algorithm defined by RFC 8315. ++ + 6.8. cc_followup + + Type: integer diff --git a/news/slrn/patches/patch-doc_slrn.rc b/news/slrn/patches/patch-doc_slrn.rc new file mode 100644 index 00000000000..a9790a92f4b --- /dev/null +++ b/news/slrn/patches/patch-doc_slrn.rc @@ -0,0 +1,28 @@ +$NetBSD: patch-doc_slrn.rc,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Example rc file extended with Cancel-Lock related options. + +--- doc/slrn.rc.orig 2016-10-23 22:34:16.000000000 +0000 ++++ doc/slrn.rc +@@ -540,3 +540,21 @@ setkey readline trim "<Esc>/" % Trim w + setkey readline quoted_insert "^Q" % Quoted insert + setkey readline complete "<Tab>" % Complete filename + setkey readline cycle " " % Cycle among filenames ++ ++% ++%% Cancel-Lock related ++% ++ ++% The Message-ID is required to calculate Cancel-Locks. One option is to enable ++% "generate_message_id" option above. "posting_host" can be set if your machine ++% has no FQDN. ++%posting_host "domain.example" % Domain under your control ++ ++% File containing the secret. This file can be shared with other newsreaders ++% that use the recommended algorithm from Section 4 of RFC 8315. ++%set cansecret_file "/home/user/.cancelsecret" ++ ++% Hash algorithm to use for <scheme> and HMAC according to RFC 8315. ++% Supported values: "SHA1", "SHA256", "SHA512". ++% If this option is not specified, "SHA256" is used as default. ++%set canlock_algo "SHA256" diff --git a/news/slrn/patches/patch-af b/news/slrn/patches/patch-po_Makefile.in.in index 2aba5fa768a..e924d2211a2 100644 --- a/news/slrn/patches/patch-af +++ b/news/slrn/patches/patch-po_Makefile.in.in @@ -1,10 +1,10 @@ -$NetBSD: patch-af,v 1.2 2014/08/23 09:34:48 obache Exp $ +$NetBSD: patch-po_Makefile.in.in,v 1.1 2018/09/21 14:27:37 wiz Exp $ Directly use INSTALL_DATA as ${mkdir_p}. --- po/Makefile.in.in.orig 2008-02-11 19:04:23.000000000 +0100 +++ po/Makefile.in.in -@@ -46,7 +46,7 @@ INSTALL_DATA = @INSTALL_DATA@ +@@ -47,7 +47,7 @@ INSTALL_DATA = @INSTALL_DATA@ # versions, $(mkinstalldirs) and $(install_sh) are unused. #mkinstalldirs = $(SHELL) @install_sh@ -d #install_sh = $(SHELL) @install_sh@ diff --git a/news/slrn/patches/patch-src_art.c b/news/slrn/patches/patch-src_art.c new file mode 100644 index 00000000000..a3e977b5b18 --- /dev/null +++ b/news/slrn/patches/patch-src_art.c @@ -0,0 +1,60 @@ +$NetBSD: patch-src_art.c,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Switched <c-key> element generation to libcanlock API V3. + +--- src/art.c.orig 2016-10-23 22:34:16.000000000 +0000 ++++ src/art.c +@@ -74,7 +74,7 @@ + #include "decode.h" + + #if SLRN_HAS_CANLOCK +-# include <canlock.h> ++# include <libcanlock-3/canlock.h> + #endif + + #if SLRN_HAS_GROUPLENS +@@ -3660,6 +3660,7 @@ static char* gen_cancel_key (char* msgid + char *buf, *cankey; + unsigned int filelen; + char canfile[SLRN_MAX_PATH_LEN]; ++ cl_hash_version algo; + + if (0 == *Slrn_User_Info.cancelsecret) + return NULL; +@@ -3686,14 +3687,30 @@ static char* gen_cancel_key (char* msgid + } + (void) fseek (cansecret, 0, SEEK_SET); + (void) fread (buf, filelen, 1, cansecret); ++ (void) fclose (cansecret); + +-# if 0 +- cankey = md5_key (buf, filelen, msgid, strlen(msgid)); +-# else /* by default we use SHA-1 */ +- cankey = sha_key ((unsigned char *) buf, filelen, (unsigned char *)msgid, strlen(msgid)); +-# endif ++ /* Fixme: This check is used twice, should be moved to a central location */ ++ if (0 == slrn_case_strcmp (Slrn_User_Info.canlock_algo, "SHA1")) ++ { ++ algo = CL_SHA1; ++ } ++ else if (0 == slrn_case_strcmp (Slrn_User_Info.canlock_algo, "SHA256")) ++ { ++ algo = CL_SHA256; ++ } ++ else if (0 == slrn_case_strcmp (Slrn_User_Info.canlock_algo, "SHA512")) ++ { ++ algo = CL_SHA512; ++ } ++ else ++ { ++ slrn_error (_("Cancel-Lock algorithm not supported: %s"), Slrn_User_Info.canlock_algo); ++ return NULL; ++ } ++ cankey = cl_get_key (algo, (unsigned char *) buf, filelen, (unsigned char *)msgid, strlen(msgid)); ++ /* Try to overwrite secret in memory */ ++ cl_clear_secret((void *) buf, filelen, filelen+1); + +- fclose (cansecret); + slrn_free (buf); + return cankey; + } diff --git a/news/slrn/patches/patch-src_misc.c b/news/slrn/patches/patch-src_misc.c new file mode 100644 index 00000000000..dad15dd6fab --- /dev/null +++ b/news/slrn/patches/patch-src_misc.c @@ -0,0 +1,15 @@ +$NetBSD: patch-src_misc.c,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Added default value for new config option "canlock_algo". + +--- src/misc.c.orig 2016-10-23 22:34:16.000000000 +0000 ++++ src/misc.c +@@ -2828,6 +2828,8 @@ void slrn_get_user_info (void) /*{{{*/ + + #if SLRN_HAS_CANLOCK + Slrn_User_Info.cancelsecret = slrn_safe_strmalloc (""); ++ /* SHA256 ist the mandatory algorithm defined by RFC 8315 */ ++ Slrn_User_Info.canlock_algo = slrn_safe_strmalloc ("SHA256"); + #endif + #ifdef SLRN_SENDMAIL_COMMAND + Slrn_SendMail_Command = slrn_safe_strmalloc (SLRN_SENDMAIL_COMMAND); diff --git a/news/slrn/patches/patch-src_misc.h b/news/slrn/patches/patch-src_misc.h new file mode 100644 index 00000000000..12262c5db13 --- /dev/null +++ b/news/slrn/patches/patch-src_misc.h @@ -0,0 +1,14 @@ +$NetBSD: patch-src_misc.h,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Added config structure element for Cancel-Lock hash algorithm. + +--- src/misc.h.orig 2016-10-23 22:34:16.000000000 +0000 ++++ src/misc.h +@@ -80,6 +80,7 @@ typedef struct + char *signature; + #if SLRN_HAS_CANLOCK + char *cancelsecret; ++ char *canlock_algo; + #endif + char *posting_host; /* FQDN or NULL */ + char *login_name; diff --git a/news/slrn/patches/patch-src_post.c b/news/slrn/patches/patch-src_post.c new file mode 100644 index 00000000000..29eb742259f --- /dev/null +++ b/news/slrn/patches/patch-src_post.c @@ -0,0 +1,66 @@ +$NetBSD: patch-src_post.c,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Switched <c-lock> element generation to libcanlock API V3. + +--- src/post.c.orig 2016-10-23 22:34:16.000000000 +0000 ++++ src/post.c +@@ -50,7 +50,7 @@ + #endif + + #if SLRN_HAS_CANLOCK +-# include <canlock.h> ++# include <libcanlock-3/canlock.h> + #endif + + #include "slrn.h" +@@ -821,7 +821,7 @@ static int prepare_header (VFILE *vp, un + + if ((NULL == (tmp = slrn_gen_date_header ())) + || (NULL == slrn_append_to_header (a, tmp, 1)) +- || (NULL == (tmp = slrn_strdup_printf("User-Agent: slrn/%s (%s)", Slrn_Version_String, system_os_name))) ++ || (NULL == (tmp = slrn_strdup_printf("User-Agent: slrn/%s (Patched for libcanlock3) (%s)", Slrn_Version_String, system_os_name))) + || (NULL == slrn_append_to_header (a, tmp, 1)) + || (NULL == slrn_append_to_header (a, NULL,0))) /* separator */ + { +@@ -1297,6 +1297,7 @@ static char *gen_cancel_lock (char *msgi + char *buf, *canlock; + unsigned int filelen; + char canfile[SLRN_MAX_PATH_LEN]; ++ cl_hash_version algo; + + cansecret = slrn_open_home_file (file, "r", canfile, SLRN_MAX_PATH_LEN, 0); + if (cansecret == NULL) +@@ -1323,11 +1324,28 @@ static char *gen_cancel_lock (char *msgi + (void) fread (buf, filelen, 1, cansecret); + (void) fclose(cansecret); + +-# if 0 +- canlock = md5_lock(buf, filelen, msgid, strlen(msgid)); +-# else /* by default we use SHA-1 */ +- canlock = sha_lock ((unsigned char *) buf, filelen, (unsigned char *)msgid, strlen(msgid)); +-# endif ++ /* Fixme: This check is used twice, should be moved to a central location */ ++ if (0 == slrn_case_strcmp (Slrn_User_Info.canlock_algo, "SHA1")) ++ { ++ algo = CL_SHA1; ++ } ++ else if (0 == slrn_case_strcmp (Slrn_User_Info.canlock_algo, "SHA256")) ++ { ++ algo = CL_SHA256; ++ } ++ else if (0 == slrn_case_strcmp (Slrn_User_Info.canlock_algo, "SHA512")) ++ { ++ algo = CL_SHA512; ++ } ++ else ++ { ++ slrn_error (_("Cancel-Lock algorithm not supported: %s"), Slrn_User_Info.canlock_algo); ++ return NULL; ++ } ++ canlock = cl_get_lock (algo, (unsigned char *) buf, filelen, (unsigned char *)msgid, strlen(msgid)); ++ /* Try to overwrite secret in memory */ ++ cl_clear_secret((void *) buf, filelen, filelen+1); ++ + slrn_free (buf); + return canlock; + } diff --git a/news/slrn/patches/patch-src_slrnfeat.hin b/news/slrn/patches/patch-src_slrnfeat.hin index 3dceb450928..f108c2d442f 100644 --- a/news/slrn/patches/patch-src_slrnfeat.hin +++ b/news/slrn/patches/patch-src_slrnfeat.hin @@ -1,4 +1,4 @@ -$NetBSD: patch-src_slrnfeat.hin,v 1.2 2014/08/23 09:34:48 obache Exp $ +$NetBSD: patch-src_slrnfeat.hin,v 1.3 2018/09/21 14:27:37 wiz Exp $ Fix compiled-in default path to sendmail; it should be /usr/sbin/sendmail on essentially all even halfway modern systems. diff --git a/news/slrn/patches/patch-src_startup.c b/news/slrn/patches/patch-src_startup.c new file mode 100644 index 00000000000..cfba0e44094 --- /dev/null +++ b/news/slrn/patches/patch-src_startup.c @@ -0,0 +1,17 @@ +$NetBSD: patch-src_startup.c,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Added variable for Cancel-Lock hash algorithm. + +--- src/startup.c.orig 2016-10-23 22:34:16.000000000 +0000 ++++ src/startup.c +@@ -731,8 +731,10 @@ Slrn_Str_Var_Type Slrn_Str_Variables [] + #endif + #if SLRN_HAS_CANLOCK + {"cansecret_file", &Slrn_User_Info.cancelsecret, NULL}, ++ {"canlock_algo", &Slrn_User_Info.canlock_algo, NULL}, + #else + {"cansecret_file", NULL, NULL}, ++ {"canlock_algo", NULL, NULL}, + #endif + {"art_help_line", &Slrn_Art_Help_Line, NULL}, + {"art_status_line", &Slrn_Art_Status_Line, NULL}, diff --git a/news/slrn/patches/patch-src_version.c b/news/slrn/patches/patch-src_version.c new file mode 100644 index 00000000000..4535bc46efc --- /dev/null +++ b/news/slrn/patches/patch-src_version.c @@ -0,0 +1,18 @@ +$NetBSD: patch-src_version.c,v 1.1 2018/09/21 14:27:37 wiz Exp $ + +Added notes that this is a modified version. + +--- src/version.c.orig 2016-10-23 22:34:16.000000000 +0000 ++++ src/version.c +@@ -132,6 +132,11 @@ void slrn_show_version (FILE *fp) /*{{{* + fprintf (fp, "slrn %s\n", Slrn_Version_String); + if (*Slrn_Version_String == 'p') + fprintf (fp, _("\t* Note: This version is a developer preview.\n")); ++ ++ /* To be removed if patch is accepted upstream */ ++ fprintf (fp, _("\t* Note: This is a modified version! (do not bother the author with questions)\n")); ++ fprintf (fp, _("\t* Patched to support libcanlock3 (see documentation)\n")); ++ + fprintf (fp, _("S-Lang Library Version: %s\n"), SLang_Version_String); + if (SLANG_VERSION != SLang_Version) + { |