commit 7c0419450b5e5dce63b75014782c5b97a1f94746 Author: overweight <5324761+overweight@user.noreply.gitee.com> Date: Mon Sep 30 11:02:54 2019 -0400 Package init diff --git a/lua-5.2.2-configure-linux.patch b/lua-5.2.2-configure-linux.patch new file mode 100644 index 0000000..735386a --- /dev/null +++ b/lua-5.2.2-configure-linux.patch @@ -0,0 +1,22 @@ +diff -up lua-5.2.2/configure.ac.linux lua-5.2.2/configure.ac +--- lua-5.2.2/configure.ac.linux 2013-05-10 15:42:27.269437631 -0400 ++++ lua-5.2.2/configure.ac 2013-05-10 15:43:23.530435620 -0400 +@@ -50,6 +50,7 @@ AC_SUBST(READLINE_LIBS) + case "$host" in + *-mingw*) use_os=win32 ;; + *-darwin*) use_os=macosx ;; ++ *-linux*) use_os=linux ;; + *) use_os=posix ;; + esac + +@@ -62,6 +63,10 @@ if test "x$use_os" == "xwin32"; then + elif test "x$use_os" == "xmacosx"; then + POSIX_DEFS="#define LUA_USE_POSIX" + LUA_DL_DEFS="#define LUA_DL_DYLD" ++elif test "x$use_os" == "xlinux"; then ++ POSIX_DEFS="#define LUA_USE_LINUX" ++ LUA_DL_DEFS="#define LUA_DL_DLOPEN" ++ LUA_LIBS="$LUA_LIBS -ldl" + elif test "x$use_os" == "xposix"; then + POSIX_DEFS="#define LUA_USE_POSIX" + LUA_DL_DEFS="#define LUA_DL_DLOPEN" diff --git a/lua-5.3.0-autotoolize.patch b/lua-5.3.0-autotoolize.patch new file mode 100644 index 0000000..3e4723a --- /dev/null +++ b/lua-5.3.0-autotoolize.patch @@ -0,0 +1,192 @@ +diff -up lua-5.3.0/configure.ac.autoxxx lua-5.3.0/configure.ac +--- lua-5.3.0/configure.ac.autoxxx 2015-01-15 10:20:03.826889574 -0500 ++++ lua-5.3.0/configure.ac 2015-01-15 10:20:03.826889574 -0500 +@@ -0,0 +1,69 @@ ++AC_PREREQ(2.59) ++AC_INIT([lua], [5.3.0], [https://bugzilla.redhat.com/], [lua-at], [http://www.lua.org]) ++AC_SUBST([MAJOR_VERSION], [5.3]) ++ ++AC_CONFIG_HEADERS([config.h]) ++AC_CONFIG_SRCDIR([src/lapi.c]) ++ ++AM_INIT_AUTOMAKE([1.9 foreign]) ++ ++AC_PROG_CC ++AC_PROG_LIBTOOL ++ ++AC_ARG_WITH( ++ [readline], ++ [AC_HELP_STRING([--with-readline], [Use readline for interpreter input [default=yes]])], ++ [use_readline=$withval], ++ [use_readline=yes] ++) ++ ++LUA_LIBS="-lm" ++ ++# Check for readline ++READLINE_DEFS="#undef LUA_USE_READLINE" ++if test "x$use_readline" == "xyes"; then ++ AC_CHECK_LIB([readline], [readline], [:], [use_readline=no], [-lncurses]) ++ AC_CHECK_HEADERS([readline/readline.h readline/history.h], [], [use_readline=no]) ++ if test "x$use_readline" == "xno"; then ++ AC_MSG_WARN([readline headers could not be found, disabling readline support]) ++ else ++ READLINE_DEFS="#define LUA_USE_READLINE" ++ READLINE_LIBS="-lreadline -lncurses" ++ fi ++fi ++AC_SUBST(READLINE_DEFS) ++AC_SUBST(READLINE_LIBS) ++ ++case "$host" in ++ *-mingw*) use_os=win32 ;; ++ *-darwin*) use_os=macosx ;; ++ *) use_os=posix ;; ++esac ++ ++POSIX_DEFS="#undef LUA_USE_POSIX" ++LUA_DL_DEFS="#undef LUA_USE_DLOPEN" ++LUA_BUILD_AS_DLL_DEFS="#undef LUA_BUILD_AS_DLL" ++ ++if test "x$use_os" == "xwin32"; then ++ LUA_BUILD_AS_DLL_DEFS="#define LUA_BUILD_AS_DLL" ++elif test "x$use_os" == "xmacosx"; then ++ POSIX_DEFS="#define LUA_USE_POSIX" ++ LUA_DL_DEFS="#define LUA_DL_DYLD" ++elif test "x$use_os" == "xposix"; then ++ POSIX_DEFS="#define LUA_USE_POSIX" ++ LUA_DL_DEFS="#define LUA_DL_DLOPEN" ++ LUA_LIBS="$LUA_LIBS -ldl" ++fi ++AC_SUBST(POSIX_DEFS) ++AC_SUBST(LUA_DL_DEFS) ++AC_SUBST(LUA_BUILD_AS_DLL_DEFS) ++ ++AC_SUBST(LUA_LIBS) ++ ++AC_CONFIG_FILES([Makefile ++ src/Makefile ++ src/lua.pc ++ src/luaconf.h.template ++ doc/Makefile ++]) ++AC_OUTPUT +diff -up lua-5.3.0/doc/Makefile.am.autoxxx lua-5.3.0/doc/Makefile.am +--- lua-5.3.0/doc/Makefile.am.autoxxx 2015-01-15 10:20:03.826889574 -0500 ++++ lua-5.3.0/doc/Makefile.am 2015-01-15 10:20:03.826889574 -0500 +@@ -0,0 +1,4 @@ ++man1_MANS = lua.1 luac.1 ++ ++EXTRA_DIST = \ ++ contents.html logo.gif lua.1 luac.1 lua.css manual.css manual.html osi-certified-72x60.png readme.html +diff -up lua-5.3.0/Makefile.am.autoxxx lua-5.3.0/Makefile.am +--- lua-5.3.0/Makefile.am.autoxxx 2015-01-15 10:20:03.826889574 -0500 ++++ lua-5.3.0/Makefile.am 2015-01-15 10:20:03.826889574 -0500 +@@ -0,0 +1,3 @@ ++SUBDIRS = src doc ++ ++EXTRA_DIST = README +diff -up lua-5.3.0/src/.gitignore.autoxxx lua-5.3.0/src/.gitignore +--- lua-5.3.0/src/.gitignore.autoxxx 2015-01-15 10:20:03.826889574 -0500 ++++ lua-5.3.0/src/.gitignore 2015-01-15 10:20:03.826889574 -0500 +@@ -0,0 +1,5 @@ ++lua ++lua.pc ++luac ++luaconf.h ++luaconf.h.template +diff -up lua-5.3.0/src/luaconf.h.template.in.autoxxx lua-5.3.0/src/luaconf.h.template.in +--- lua-5.3.0/src/luaconf.h.template.in.autoxxx 2015-01-15 10:20:03.828889562 -0500 ++++ lua-5.3.0/src/luaconf.h.template.in 2015-01-15 10:22:37.420027778 -0500 +@@ -11,6 +11,11 @@ + #include + #include + ++@POSIX_DEFS@ ++@LUA_DL_DEFS@ ++@LUA_BUILD_AS_DLL_DEFS@ ++@READLINE_DEFS@ ++ + + /* + ** =================================================================== +@@ -175,9 +180,9 @@ + + #else /* }{ */ + +-#define LUA_ROOT "/usr/local/" +-#define LUA_LDIR LUA_ROOT "share/lua/" LUA_VDIR "/" +-#define LUA_CDIR LUA_ROOT "lib/lua/" LUA_VDIR "/" ++#define LUA_ROOT "@prefix@/" ++#define LUA_LDIR "@pkgdatadir@/lua/" LUA_VDIR "/" ++#define LUA_CDIR "@libdir@/lua/" LUA_VDIR "/" + #define LUA_PATH_DEFAULT \ + LUA_LDIR"?.lua;" LUA_LDIR"?/init.lua;" \ + LUA_CDIR"?.lua;" LUA_CDIR"?/init.lua;" \ +diff -up lua-5.3.0/src/lua.pc.in.autoxxx lua-5.3.0/src/lua.pc.in +--- lua-5.3.0/src/lua.pc.in.autoxxx 2015-01-15 10:20:03.827889568 -0500 ++++ lua-5.3.0/src/lua.pc.in 2015-01-15 10:20:03.827889568 -0500 +@@ -0,0 +1,13 @@ ++V= @MAJOR_VERSION@ ++R= @VERSION@ ++prefix= @prefix@ ++exec_prefix=${prefix} ++libdir= @libdir@ ++includedir=${prefix}/include ++ ++Name: Lua ++Description: An Extensible Extension Language ++Version: ${R} ++Requires: ++Libs: -llua @LUA_LIBS@ ++Cflags: -I${includedir} +diff -up lua-5.3.0/src/Makefile.am.autoxxx lua-5.3.0/src/Makefile.am +--- lua-5.3.0/src/Makefile.am.autoxxx 2015-01-15 10:20:03.826889574 -0500 ++++ lua-5.3.0/src/Makefile.am 2015-01-15 10:20:03.826889574 -0500 +@@ -0,0 +1,46 @@ ++AM_CFLAGS = -Wall ++ ++include_HEADERS = lua.h lualib.h lauxlib.h lua.hpp ++ ++nodist_include_HEADERS = luaconf.h ++ ++lib_LTLIBRARIES = liblua.la ++liblua_la_LDFLAGS = -release @MAJOR_VERSION@ ++liblua_la_SOURCES = \ ++ lapi.c lauxlib.c lbaselib.c lbitlib.c lcode.c lcorolib.c lctype.c ldblib.c \ ++ ldebug.c ldo.c ldump.c lfunc.c lgc.c linit.c liolib.c llex.c lmathlib.c lmem.c \ ++ loadlib.c lobject.c lopcodes.c loslib.c lparser.c lstate.c lstring.c lstrlib.c \ ++ ltable.c ltablib.c ltm.c lundump.c lutf8lib.c lvm.c lzio.c \ ++ lapi.h lcode.h lctype.h ldebug.h ldo.h lfunc.h lgc.h llex.h llimits.h \ ++ lmem.h lobject.h lopcodes.h lparser.h lstate.h lstring.h ltable.h ltm.h \ ++ lundump.h lvm.h lzio.h ++ ++pkgconfigdir = $(libdir)/pkgconfig ++pkgconfig_DATA = lua.pc ++ ++bin_PROGRAMS = lua luac ++ ++lua_SOURCES = lua.c ++lua_LDADD = liblua.la @LUA_LIBS@ @READLINE_LIBS@ ++lua_DEPENDENCIES = liblua.la ++ ++luac_SOURCES = luac.c ++# Statically link liblua against luac since luac uses symbols not exported in liblua ++luac_LDADD = .libs/liblua.a @LUA_LIBS@ ++luac_DEPENDENCIES = liblua.la ++ ++EXTRA_DIST = luaconf.h.template ++BUILT_SOURCES = luaconf.h ++CLEANFILES = luaconf.h luaconf.h.template ++ ++readline_defs = @READLINE_DEFS@ ++ ++edit = sed \ ++ -e 's,%prefix%,$(prefix),g' \ ++ -e 's,%lua_datadir%,$(datadir),g' \ ++ -e 's,%lua_libdir%,$(libdir),g' ++ ++luaconf.h : luaconf.h.template ++ rm -f $@ $@.tmp ++ $(edit) $< >$@.tmp ++ mv $@.tmp $@ diff --git a/lua-5.3.0-configure-compat-module.patch b/lua-5.3.0-configure-compat-module.patch new file mode 100644 index 0000000..bd5d41d --- /dev/null +++ b/lua-5.3.0-configure-compat-module.patch @@ -0,0 +1,35 @@ +diff -up lua-5.2.2/configure.ac.compat-module lua-5.2.2/configure.ac +--- lua-5.2.2/configure.ac.compat-module 2013-05-10 10:16:05.344137597 -0400 ++++ lua-5.2.2/configure.ac 2013-05-10 10:16:05.357137596 -0400 +@@ -11,6 +11,20 @@ AC_PROG_CC + AC_PROG_LIBTOOL + + AC_ARG_WITH( ++ [compat-module], ++ [AC_HELP_STRING([--with-compat-module], [Enable LUA_COMPAT_MODULE functions [default=no]])], ++ [use_compat_module=$withval], ++ [use_compat_module=no] ++) ++ ++COMPAT_DEFS="#undef LUA_COMPAT_ALL" ++if test "x$use_compat_module" == "xyes"; then ++ COMPAT_DEFS="#define LUA_COMPAT_5_1 ++#define LUA_COMPAT_5_2" ++fi ++AC_SUBST(COMPAT_DEFS) ++ ++AC_ARG_WITH( + [readline], + [AC_HELP_STRING([--with-readline], [Use readline for interpreter input [default=yes]])], + [use_readline=$withval], +diff -up lua-5.2.2/src/luaconf.h.template.in.compat-module lua-5.2.2/src/luaconf.h.template.in +--- lua-5.2.2/src/luaconf.h.template.in.compat-module 2013-05-10 10:25:42.586116963 -0400 ++++ lua-5.2.2/src/luaconf.h.template.in 2013-05-10 10:26:29.957115269 -0400 +@@ -15,6 +15,7 @@ + @LUA_DL_DEFS@ + @LUA_BUILD_AS_DLL_DEFS@ + @READLINE_DEFS@ ++@COMPAT_DEFS@ + + + /* diff --git a/lua-5.3.0-idsize.patch b/lua-5.3.0-idsize.patch new file mode 100644 index 0000000..16107fe --- /dev/null +++ b/lua-5.3.0-idsize.patch @@ -0,0 +1,12 @@ +diff -up lua-5.3.0/src/luaconf.h.template.in.idsize lua-5.3.0/src/luaconf.h.template.in +--- lua-5.3.0/src/luaconf.h.template.in.idsize 2015-01-15 10:23:20.515801344 -0500 ++++ lua-5.3.0/src/luaconf.h.template.in 2015-01-15 10:23:48.955651916 -0500 +@@ -693,7 +693,7 @@ + @@ of a function in debug information. + ** CHANGE it if you want a different size. + */ +-#define LUA_IDSIZE 60 ++#define LUA_IDSIZE 512 + + + /* diff --git a/lua-5.3.4-tests.tar.gz b/lua-5.3.4-tests.tar.gz new file mode 100644 index 0000000..ffb79b6 Binary files /dev/null and b/lua-5.3.4-tests.tar.gz differ diff --git a/lua-5.3.5.tar.gz b/lua-5.3.5.tar.gz new file mode 100644 index 0000000..90c0027 Binary files /dev/null and b/lua-5.3.5.tar.gz differ diff --git a/lua-CVE-2019-6706.patch b/lua-CVE-2019-6706.patch new file mode 100644 index 0000000..cce9c73 --- /dev/null +++ b/lua-CVE-2019-6706.patch @@ -0,0 +1,22 @@ +--- a/src/lapi.c 2017-12-06 13:35:12.000000000 -0500 ++++ b/src/lapi_1.c 2019-06-24 07:48:06.289000000 -0400 +@@ -1286,14 +1286,14 @@ LUA_API void *lua_upvalueid (lua_State * + + LUA_API void lua_upvaluejoin (lua_State *L, int fidx1, int n1, + int fidx2, int n2) { +- LClosure *f1; +- UpVal **up1 = getupvalref(L, fidx1, n1, &f1); ++ UpVal **up1 = getupvalref(L, fidx1, n1, NULL); /* the last parameter not needed */ + UpVal **up2 = getupvalref(L, fidx2, n2, NULL); ++ if (*up1 == *up2) return; /* Already joined */ ++ (*up2)->refcount++; ++ if (upisopen(*up2)) (*up2)->u.open.touched = 1; ++ luaC_upvalbarrier(L, *up2); + luaC_upvdeccount(L, *up1); + *up1 = *up2; +- (*up1)->refcount++; +- if (upisopen(*up1)) (*up1)->u.open.touched = 1; +- luaC_upvalbarrier(L, *up1); + } + + diff --git a/lua.spec b/lua.spec new file mode 100644 index 0000000..7abd263 --- /dev/null +++ b/lua.spec @@ -0,0 +1,136 @@ +%global major_version 5.3 +# test version is still 5.3.4 +%global test_version 5.3.4 +# Place rpm-macros into proper location. +%global macrosdir %(d=%{_rpmconfigdir}/macros.d; [ -d $d ] || d=%{_sysconfdir}/rpm; echo $d) + +Name: lua +Version: 5.3.5 +Release: 3 +Summary: A powerful, efficient, lightweight, embeddable scripting language +License: MIT +URL: http://www.lua.org/ +Source0: http://www.lua.org/ftp/lua-%{version}.tar.gz +Source1: http://www.lua.org/tests/lua-%{test_version}-tests.tar.gz +# Source2, Source100,Patch0~3 from https://koji.fedoraproject.org/koji/buildinfo?buildID=1113624 +# multilib +Source2: luaconf.h +# copied from doc/readme.html on 2019-09-11 +Source3: mit.txt +# rpm-macro +Source1000: macros.lua +Patch0: lua-5.3.0-autotoolize.patch +Patch1: lua-5.3.0-idsize.patch +Patch2: lua-5.2.2-configure-linux.patch +Patch3: lua-5.3.0-configure-compat-module.patch + +#Patch for cves +Patch6000: lua-CVE-2019-6706.patch + +BuildRequires: automake autoconf libtool readline-devel ncurses-devel + +Obsoletes: %{name}-libs < %{version}-%{release} +Provides: lua(abi) = %{major_version} + +%description +Lua is a powerful, efficient, lightweight, embeddable scripting language. +It supports procedural programming, object-oriented programming, +functional programming, data-driven programming, and data description. + +%package devel +Summary: Development files for %{name} +Requires: %{name}%{?_isa} = %{version}-%{release} +Requires: pkgconfig +Obsoletes: %{name}-static < %{version}-%{release} +Provides: %{name}-static = %{version}-%{release} + +%description devel +This package contains development files for %{name}. + +%package_help + +%prep +%setup -q -a 1 +cp %{SOURCE3} . +mv src/luaconf.h src/luaconf.h.template.in +%patch0 -p1 -E -z .autoxxx +%patch1 -p1 -z .idsize +%patch2 -p1 -z .configure-linux +%patch3 -p1 -z .configure-compat-all +# Put proper version in configure.ac, patch0 hardcodes 5.3.0 +sed -i 's|5.3.0|%{version}|g' configure.ac +autoreconf -ifv + +%patch6000 -p1 + +%build +%configure --with-readline --with-compat-module +%disable_rpath +# Autotools give me a headache sometimes. +sed -i 's|@pkgdatadir@|%{_datadir}|g' src/luaconf.h.template + +# hack so that only /usr/bin/lua gets linked with readline as it is the +# only one which needs this and otherwise we get License troubles +%make_build LIBS="-lm -ldl" +# only /usr/bin/lua links with readline now #luac_LDADD="liblua.la -lm -ldl" + +%install +%make_install +rm $RPM_BUILD_ROOT%{_libdir}/*.la +mkdir -p %{buildroot}/%{_libdir}/lua/%{major_version} +mkdir -p %{buildroot}/%{_datadir}/lua/%{major_version} + +# Rename luaconf.h to luaconf-.h to avoid file conflicts on +# multilib systems and install luaconf.h wrapper +mv %{buildroot}%{_includedir}/luaconf.h %{buildroot}%{_includedir}/luaconf-%{_arch}.h +install -p -m 644 %{SOURCE2} %{buildroot}%{_includedir}/luaconf.h + +# Install rpm-macro +install -Dpm 0644 %{SOURCE1000} $RPM_BUILD_ROOT/%{macrosdir}/macros.lua + +%check +cd ./lua-%{test_version}-tests/ + +# Removing tests that fail under mock/koji +sed -i.orig -e ' + /db.lua/d; + /errors.lua/d; + ' all.lua +LD_LIBRARY_PATH=$RPM_BUILD_ROOT/%{_libdir} $RPM_BUILD_ROOT/%{_bindir}/lua -e"_U=true" all.lua + +%pre + +%preun + +%post + +%postun + +%files +%defattr(-,root,root) +%license mit.txt +%{_bindir}/lua +%{_bindir}/luac +%dir %{_libdir}/lua +%dir %{_libdir}/lua/%{major_version} +%dir %{_datadir}/lua +%dir %{_datadir}/lua/%{major_version} +%{_libdir}/liblua-%{major_version}.so +%{_libdir}/liblua.so + +%files devel +%defattr(-,root,root) +%{_includedir}/l*.h +%{_includedir}/l*.hpp +%{_libdir}/pkgconfig/*.pc +%{_libdir}/*.a +%{macrosdir}/macros.lua + +%files help +%defattr(-,root,root) +%doc README doc/*.html doc/*.css doc/*.gif doc/*.png +%{_mandir}/man1/lua*.1* + +%changelog +* Tue Sep 10 2019 openEuler Buildteam - 5.3.5-3 +- Package init diff --git a/luaconf.h b/luaconf.h new file mode 100644 index 0000000..2b10184 --- /dev/null +++ b/luaconf.h @@ -0,0 +1,61 @@ +/* + * This luaconf.h is a wrapper include file for the original luaconf.h, + * which has been renamed to luaconf-.h. There are conflicts for the + * original luaconf.h on multilib systems, which result from arch-specific + * configuration options. Please do not use the arch-specific file directly. + * + * Copyright (C) 2015 Tom Callaway + */ + +/** + * \file luaconf.h + */ + +#ifdef luaconf_wrapper_h +#error "luaconf_wrapper_h should not be defined!" +#endif +#define luaconf_wrapper_h + +#if defined(__i386__) +#include "luaconf-i386.h" +#elif defined(__ia64__) +#include "luaconf-ia64.h" +#elif defined(__powerpc64__) +# if __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ +#include "luaconf-ppc64.h" +# else +#include "luaconf-ppc64le.h" +# endif +#elif defined(__powerpc__) +#include "luaconf-ppc.h" +#elif defined(__s390x__) +#include "luaconf-s390x.h" +#elif defined(__s390__) +#include "luaconf-s390.h" +#elif defined(__x86_64__) +#include "luaconf-x86_64.h" +#elif defined(__arm__) +#include "luaconf-arm.h" +#elif defined(__alpha__) +#include "luaconf-alpha.h" +#elif defined(__sparc__) && defined (__arch64__) +#include "luaconf-sparc64.h" +#elif defined(__sparc__) +#include "luaconf-sparc.h" +#elif defined(__aarch64__) +#include "luaconf-aarch64.h" +#elif defined(__mips64) && defined(__MIPSEL__) +#include "luaconf-mips64el.h" +#elif defined(__mips64) +#include "luaconf-mips64.h" +#elif defined(__mips) && defined(__MIPSEL__) +#include "luaconf-mipsel.h" +#elif defined(__mips) +#include "luaconf-mips.h" +#elif defined(__riscv) +#include "luaconf-riscv64.h" +#else +#error "The lua-devel package is not usable with the architecture." +#endif + +#undef luaconf_wrapper_h diff --git a/macros.lua b/macros.lua new file mode 100644 index 0000000..9d9ab28 --- /dev/null +++ b/macros.lua @@ -0,0 +1,8 @@ +%lua_version %{lua: print(string.sub(_VERSION, 5))} + +%lua_libdir %{_libdir}/lua/%{lua_version} +%lua_pkgdir %{_datadir}/lua/%{lua_version} + +%lua_requires \ +Requires: lua(abi) = %{lua_version} \ +%{nil} diff --git a/mit.txt b/mit.txt new file mode 100644 index 0000000..e55d04d --- /dev/null +++ b/mit.txt @@ -0,0 +1,19 @@ +Copyright (c) 1994-2017 Lua.org, PUC-Rio. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +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.